TypeScript clients for databases that prevent SQL Injection
MIT License
Bot releases are hidden (Show)
You can pass multiple keys to cachedFn.cache.delete(...keys)
now for both dedupeAsync
and dedupeSync
. If the underlying cache/map accepts a ...
spread parameter, the array of keys will be passed directly to the undelrying map. Otherwise .delete
will be called multiple times on the underlying map. (#319)
A new method has been added for cachedFn.cache.deletePrefix(prefix)
for both dedupeAsync
and dedupeSync
. (#319)
If the map used as the cache
is a MultiKeyMap
, deletePrefix
takes any sub-path for the key. e.g. MultiKeyMap<[string, number, string]>
would result in a deletePrefix
function that accepts [string] | [string, number]
as the key.
If the map used as the cache
has a deletePrefix
method, the prefix is passed directly to that method.
If the keys are serialized to a string, deletePrefix
accepts a string and will delete keys where the serialized value matches that string.
Published by ForbesLindesay 8 months ago
.delete
it will no longer generate a DELETE_MULIPLE
event for replication. (#319)Published by ForbesLindesay 8 months ago
Published by ForbesLindesay 8 months ago
Added Cache.deletePrefix(prefix)
. This lets you delete all keys with a given prefix from the cache. deletePrefix
will throw an error if any of the keys are not serialized to a string. They can either already be strings, or you can use mapKey
to convert them into strings if you want to use this method. (#317)
Using this method with replication enabled will result in this new type of replication event:
interface ReplicationDeletePrefixEvent {
readonly kind: 'DELETE_PREFIX';
readonly name: string;
readonly prefix: string;
}
You can now pass multiple keys to Cache.delete(...keys)
to more efficiently delete multiple keys in a single call. (#317)
Passing multiple keys with replication enabled will result in this new type of replication event:
interface ReplicationDeleteMultipleEvent {
readonly kind: 'DELETE_MULTIPLE';
readonly name: string;
readonly keys: unknown[];
}
Published by ForbesLindesay 9 months ago
Published by ForbesLindesay 9 months ago
Published by ForbesLindesay 9 months ago
Published by ForbesLindesay 9 months ago
SHOW server_version
to detect Postgres version. Hopefully allowing pg-migrations to be used with other database systems as long as they have a compatible wire-protocol. (#279)Published by ForbesLindesay 9 months ago
Published by ForbesLindesay about 1 year ago
cuid
dependency (#308)Published by ForbesLindesay about 1 year ago
crypto.randomUUID()
instead of cuid()
(#308)Published by ForbesLindesay over 1 year ago
Published by ForbesLindesay over 1 year ago
@databases/mysql
dependency to 6.0.0
(#297)Published by ForbesLindesay over 1 year ago
NULL
will no longer be parsed to NaN
when using "number"
for tinyIntMode
(#297)
NULL
will no longer be parsed to false
when using "boolean"
for tinyIntMode
(#297)
NULL
will no longer be parsed to NaN
when using "number"
for bigIntMode
(#297)
NULL
will no longer error when using "bigint"
for bigIntMode
(#297)
NULL
will no longer error when using "date-object"
for dateMode
(#297)
Published by ForbesLindesay over 1 year ago
Published by ForbesLindesay over 1 year ago
Sub-queries that were guaranteed to be false
could result in attempting to execute SQL that was not syntactically valid. (#288)
For example, given the function:
async function getUsersThatCreatedPhotos(photoIds: DbPhoto["id"][]) {
return await users(db)
.find({id: photos.key(`created_by_id`, {id: anyOf(photoIds)})})
.all()
}
Calling:
getUsersThatCreatedPhotos([])
should return a Promise for an empty array, without actually needing to query the database, but instead it attempted to run a database query that was not valid SQL.
Published by ForbesLindesay over 1 year ago
.cjs
extension (#287)Published by ForbesLindesay over 1 year ago
.cjs
extension (#287)Published by ForbesLindesay over 1 year ago
Initial Release
Published by ForbesLindesay almost 2 years ago