@zudojs/database 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/dist/cache/cache.memory.d.ts +0 -1
- package/dist/cache/cache.memory.js +0 -1
- package/dist/cache/index.d.ts +0 -1
- package/dist/cache/index.js +0 -1
- package/dist/database/database.core.d.ts +0 -1
- package/dist/database/database.core.js +0 -1
- package/dist/database/index.d.ts +0 -1
- package/dist/database/index.js +0 -1
- package/dist/databaseClient/databaseClient.core.d.ts +0 -1
- package/dist/databaseClient/databaseClient.core.js +0 -1
- package/dist/databaseClient/databaseClient.errors.d.ts +19 -2
- package/dist/databaseClient/databaseClient.errors.js +8 -1
- package/dist/databaseClient/databaseClient.logger.d.ts +0 -1
- package/dist/databaseClient/databaseClient.logger.js +0 -1
- package/dist/databaseClient/databaseClient.type.d.ts +0 -1
- package/dist/databaseClient/databaseClient.type.js +0 -1
- package/dist/databaseClient/index.d.ts +1 -2
- package/dist/databaseClient/index.js +1 -2
- package/dist/databaseConnection/databaseConnection.manager.d.ts +0 -1
- package/dist/databaseConnection/databaseConnection.manager.js +0 -1
- package/dist/databaseConnection/index.d.ts +0 -1
- package/dist/databaseConnection/index.js +0 -1
- package/dist/databaseType/databaseType.type.d.ts +6 -5
- package/dist/databaseType/databaseType.type.js +0 -1
- package/dist/databaseType/index.d.ts +0 -1
- package/dist/databaseType/index.js +0 -1
- package/dist/health/health.check.d.ts +0 -1
- package/dist/health/health.check.js +0 -1
- package/dist/health/index.d.ts +0 -1
- package/dist/health/index.js +0 -1
- package/dist/index.d.ts +3 -4
- package/dist/index.js +2 -3
- package/dist/locks/index.d.ts +0 -1
- package/dist/locks/index.js +0 -1
- package/dist/locks/locks.core.d.ts +0 -1
- package/dist/locks/locks.core.js +0 -1
- package/dist/migration/index.d.ts +0 -1
- package/dist/migration/index.js +0 -1
- package/dist/migration/migration.dialect.d.ts +0 -1
- package/dist/migration/migration.dialect.js +0 -1
- package/dist/migration/migration.helpers.d.ts +0 -1
- package/dist/migration/migration.helpers.js +4 -1
- package/dist/migration/migration.runner.d.ts +12 -1
- package/dist/migration/migration.runner.js +69 -17
- package/dist/migration/migration.types.d.ts +12 -1
- package/dist/migration/migration.types.js +0 -1
- package/dist/pagination/index.d.ts +1 -1
- package/dist/pagination/index.js +1 -1
- package/dist/pagination/pagination.core.d.ts +0 -1
- package/dist/pagination/pagination.core.js +0 -1
- package/dist/pagination/pagination.cursorError.d.ts +0 -1
- package/dist/pagination/pagination.cursorError.js +0 -1
- package/dist/pagination/pagination.keyset.d.ts +12 -1
- package/dist/pagination/pagination.keyset.js +15 -3
- package/dist/pagination/pagination.keysetDirection.d.ts +0 -1
- package/dist/pagination/pagination.keysetDirection.js +0 -1
- package/dist/pagination/pagination.keysetValue.d.ts +37 -0
- package/dist/pagination/pagination.keysetValue.js +55 -0
- package/dist/queryBuilder/index.d.ts +0 -1
- package/dist/queryBuilder/index.js +0 -1
- package/dist/queryBuilder/queryBuilder.core.d.ts +0 -1
- package/dist/queryBuilder/queryBuilder.core.js +0 -1
- package/dist/queryBuilder/queryBuilder.factory.d.ts +0 -1
- package/dist/queryBuilder/queryBuilder.factory.js +0 -1
- package/dist/queryBuilder/queryBuilder.filter.d.ts +0 -1
- package/dist/queryBuilder/queryBuilder.filter.js +0 -1
- package/dist/queryBuilder/queryBuilder.prisma.d.ts +0 -1
- package/dist/queryBuilder/queryBuilder.prisma.js +0 -1
- package/dist/queryBuilder/queryBuilder.type.d.ts +0 -1
- package/dist/queryBuilder/queryBuilder.type.js +0 -1
- package/dist/relations/index.d.ts +0 -1
- package/dist/relations/index.js +0 -1
- package/dist/relations/relations.definition.d.ts +0 -1
- package/dist/relations/relations.definition.js +0 -1
- package/dist/repository/index.d.ts +1 -2
- package/dist/repository/index.js +0 -1
- package/dist/repository/repository.base.d.ts +27 -1
- package/dist/repository/repository.base.js +13 -2
- package/dist/repository/repository.delegate.d.ts +0 -1
- package/dist/repository/repository.delegate.js +0 -1
- package/dist/repository/repository.errors.d.ts +3 -1
- package/dist/repository/repository.errors.js +17 -2
- package/dist/seed/index.d.ts +0 -1
- package/dist/seed/index.js +0 -1
- package/dist/seed/seed.runner.d.ts +0 -1
- package/dist/seed/seed.runner.js +0 -1
- package/dist/transaction/index.d.ts +0 -1
- package/dist/transaction/index.js +0 -1
- package/dist/transaction/transaction.backoff.d.ts +0 -1
- package/dist/transaction/transaction.backoff.js +0 -1
- package/dist/transaction/transaction.core.d.ts +16 -3
- package/dist/transaction/transaction.core.js +8 -2
- package/dist/unitOfWork/index.d.ts +0 -1
- package/dist/unitOfWork/index.js +0 -1
- package/dist/unitOfWork/unitOfWork.core.d.ts +0 -1
- package/dist/unitOfWork/unitOfWork.core.js +0 -1
- package/package.json +4 -4
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DatabaseError, DatabaseOperation, ErrorCode, } from "@zudojs/errors";
|
|
2
|
-
import { isDatabaseErrorLike } from "../databaseClient/databaseClient.errors.js";
|
|
2
|
+
import { getPrismaCodeMapping, isDatabaseErrorLike, } from "../databaseClient/databaseClient.errors.js";
|
|
3
3
|
const PRISMA_CODE_PATTERN = /^P\d{4}$/;
|
|
4
4
|
/**
|
|
5
5
|
* Determines whether a value looks like a Prisma known request error.
|
|
@@ -53,6 +53,9 @@ export function toDatabaseOperation(operation) {
|
|
|
53
53
|
* - `P2034` serialization failure → `ERR_DATABASE_TRANSACTION` / 409 (retryable)
|
|
54
54
|
* - `P2024` pool timeout → `ERR_DATABASE_TIMEOUT` / 503
|
|
55
55
|
* - `P1xxx` connection failures → `ERR_DATABASE_CONNECTION` / 503
|
|
56
|
+
* - every other code `normalizeDatabaseError` knows (`P2000` value too
|
|
57
|
+
* long / 400, `P2004` constraint / 409, `P2011` null / 400, `P2014`,
|
|
58
|
+
* `P2015`, `P2018`, `P2028`) → the same status, code and exposure
|
|
56
59
|
*
|
|
57
60
|
* Existing `DatabaseError`s are returned unchanged.
|
|
58
61
|
*/
|
|
@@ -139,6 +142,16 @@ export function mapRepositoryError(error, context) {
|
|
|
139
142
|
statusCode: 503,
|
|
140
143
|
});
|
|
141
144
|
}
|
|
145
|
+
const mapping = getPrismaCodeMapping(error.code);
|
|
146
|
+
if (mapping !== undefined) {
|
|
147
|
+
return new DatabaseError(`${context.model} ${context.operation} failed: ${lowerFirst(mapping.message)}`, {
|
|
148
|
+
...options,
|
|
149
|
+
code: mapping.code,
|
|
150
|
+
statusCode: mapping.statusCode,
|
|
151
|
+
expose: mapping.expose,
|
|
152
|
+
metadata: { ...metadata, kind: mapping.kind },
|
|
153
|
+
});
|
|
154
|
+
}
|
|
142
155
|
return new DatabaseError(`${context.model} ${context.operation} failed.`, {
|
|
143
156
|
...options,
|
|
144
157
|
code: ErrorCode.DATABASE_QUERY,
|
|
@@ -222,6 +235,9 @@ function toMetadataValue(value) {
|
|
|
222
235
|
}
|
|
223
236
|
return String(value);
|
|
224
237
|
}
|
|
238
|
+
function lowerFirst(value) {
|
|
239
|
+
return value.length === 0 ? value : value[0].toLowerCase() + value.slice(1);
|
|
240
|
+
}
|
|
225
241
|
function extractTarget(meta) {
|
|
226
242
|
const target = meta?.["target"];
|
|
227
243
|
if (typeof target === "string") {
|
|
@@ -232,4 +248,3 @@ function extractTarget(meta) {
|
|
|
232
248
|
}
|
|
233
249
|
return undefined;
|
|
234
250
|
}
|
|
235
|
-
//# sourceMappingURL=repository.errors.js.map
|
package/dist/seed/index.d.ts
CHANGED
|
@@ -4,4 +4,3 @@
|
|
|
4
4
|
* Database seed runner with execution tracking (PostgreSQL).
|
|
5
5
|
*/
|
|
6
6
|
export { SeedRunner, createSeedRunner, normalizeSeeds, validateSeed, DEFAULT_SEED_TABLE, DEFAULT_SEED_LOCK, type Seed, type SeedRecord, type SeedResult, type SeedStatus, type SeedRunnerOptions, } from "./seed.runner.js";
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/seed/index.js
CHANGED
|
@@ -160,4 +160,3 @@ export declare function normalizeSeeds<TTransaction extends DatabaseTransactionC
|
|
|
160
160
|
* Validates one seed definition.
|
|
161
161
|
*/
|
|
162
162
|
export declare function validateSeed<TTransaction extends DatabaseTransactionContext = DatabaseTransactionContext>(seed: Seed<TTransaction>): void;
|
|
163
|
-
//# sourceMappingURL=seed.runner.d.ts.map
|
package/dist/seed/seed.runner.js
CHANGED
|
@@ -4,4 +4,3 @@
|
|
|
4
4
|
* Managed transaction execution with retry support.
|
|
5
5
|
*/
|
|
6
6
|
export { TransactionManager, createTransactionManager, withTransaction, withTransactionRetry, createTransactionContext, createTransactionId, getTransactionContextFromError, isTransactionActive, isTransactionCommitted, isTransactionFailed, type TransactionStatus, type TransactionContext, type TransactionOutcome, type TransactionRetryOptions, type ManagedTransactionOptions, } from "./transaction.core.js";
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -4,4 +4,3 @@
|
|
|
4
4
|
* Managed transaction execution with retry support.
|
|
5
5
|
*/
|
|
6
6
|
export { TransactionManager, createTransactionManager, withTransaction, withTransactionRetry, createTransactionContext, createTransactionId, getTransactionContextFromError, isTransactionActive, isTransactionCommitted, isTransactionFailed, } from "./transaction.core.js";
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -5,7 +5,14 @@ import type { TransactionIsolationLevel, TransactionOptions } from "../databaseT
|
|
|
5
5
|
*/
|
|
6
6
|
export type TransactionStatus = "idle" | "active" | "committed" | "rolled-back" | "failed";
|
|
7
7
|
/**
|
|
8
|
-
* Runtime transaction information
|
|
8
|
+
* Runtime transaction information: the immutable status record
|
|
9
|
+
* `TransactionManager.run` reports in its `TransactionOutcome` and attaches
|
|
10
|
+
* to failures (see `getTransactionContextFromError`).
|
|
11
|
+
*
|
|
12
|
+
* Not the `TransactionContext` of `@zudojs/transactions`, which is the
|
|
13
|
+
* AsyncLocalStorage store its manager propagates transactions through.
|
|
14
|
+
* The two packages share the name but not the concept; import from the
|
|
15
|
+
* package whose manager you use.
|
|
9
16
|
*/
|
|
10
17
|
export interface TransactionContext {
|
|
11
18
|
readonly transactionId: string;
|
|
@@ -117,7 +124,14 @@ export declare function withTransaction<TResult, TTransaction extends DatabaseTr
|
|
|
117
124
|
*/
|
|
118
125
|
export declare function withTransactionRetry<TResult, TTransaction extends DatabaseTransactionContext = DatabaseTransactionContext>(client: DatabaseClient<TTransaction>, callback: (transaction: TTransaction, context: TransactionContext) => Promise<TResult>, options?: TransactionRetryOptions): Promise<TResult>;
|
|
119
126
|
/**
|
|
120
|
-
* Creates an immutable transaction
|
|
127
|
+
* Creates an immutable transaction status record (see
|
|
128
|
+
* {@link TransactionContext}), as `TransactionManager.run` does for every
|
|
129
|
+
* transaction it opens.
|
|
130
|
+
*
|
|
131
|
+
* Unrelated to `createTransactionContext` from `@zudojs/transactions`,
|
|
132
|
+
* which creates the AsyncLocalStorage propagation store that package's
|
|
133
|
+
* manager runs callbacks in. This one holds no transaction and propagates
|
|
134
|
+
* nothing; it is data for logging and error reporting.
|
|
121
135
|
*/
|
|
122
136
|
export declare function createTransactionContext(options?: ManagedTransactionOptions): TransactionContext;
|
|
123
137
|
/**
|
|
@@ -137,4 +151,3 @@ export declare function isTransactionCommitted(context: TransactionContext): boo
|
|
|
137
151
|
* Determines whether a transaction failed.
|
|
138
152
|
*/
|
|
139
153
|
export declare function isTransactionFailed(context: TransactionContext): boolean;
|
|
140
|
-
//# sourceMappingURL=transaction.core.d.ts.map
|
|
@@ -123,7 +123,14 @@ export async function withTransactionRetry(client, callback, options = {}) {
|
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
125
|
/**
|
|
126
|
-
* Creates an immutable transaction
|
|
126
|
+
* Creates an immutable transaction status record (see
|
|
127
|
+
* {@link TransactionContext}), as `TransactionManager.run` does for every
|
|
128
|
+
* transaction it opens.
|
|
129
|
+
*
|
|
130
|
+
* Unrelated to `createTransactionContext` from `@zudojs/transactions`,
|
|
131
|
+
* which creates the AsyncLocalStorage propagation store that package's
|
|
132
|
+
* manager runs callbacks in. This one holds no transaction and propagates
|
|
133
|
+
* nothing; it is data for logging and error reporting.
|
|
127
134
|
*/
|
|
128
135
|
export function createTransactionContext(options = {}) {
|
|
129
136
|
return Object.freeze({
|
|
@@ -204,4 +211,3 @@ function sleep(milliseconds) {
|
|
|
204
211
|
setTimeout(resolve, milliseconds);
|
|
205
212
|
});
|
|
206
213
|
}
|
|
207
|
-
//# sourceMappingURL=transaction.core.js.map
|
package/dist/unitOfWork/index.js
CHANGED
|
@@ -43,4 +43,3 @@ export declare function createUnitOfWork<TTransaction extends DatabaseTransactio
|
|
|
43
43
|
* Executes a callback as a single database transaction.
|
|
44
44
|
*/
|
|
45
45
|
export declare function executeUnitOfWork<TResult, TTransaction extends DatabaseTransactionContext = DatabaseTransactionContext>(client: DatabaseClient<TTransaction>, callback: TransactionCallback<TTransaction, TResult>, options?: TransactionOptions): Promise<TResult>;
|
|
46
|
-
//# sourceMappingURL=unitOfWork.core.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zudojs/database",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Database abstraction layer with clients, repositories, transactions, and query building for Zudojs applications.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"!dist/.tsbuildinfo"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@zudojs/errors": "1.
|
|
45
|
-
"@zudojs/logger": "1.
|
|
46
|
-
"@zudojs/types": "1.
|
|
44
|
+
"@zudojs/errors": "1.4.0",
|
|
45
|
+
"@zudojs/logger": "1.5.0",
|
|
46
|
+
"@zudojs/types": "1.3.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
49
|
"@prisma/client": ">=7.0.0 <8"
|