turbine-orm 0.81.0 → 0.90.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 +26 -25
- package/dist/checkout.d.ts +27 -2
- package/dist/checkout.js +75 -4
- package/dist/cjs/checkout.d.ts +27 -2
- package/dist/cjs/checkout.js +76 -3
- package/dist/cjs/cli/code-first-tags.d.ts +62 -0
- package/dist/cjs/cli/code-first-tags.js +124 -0
- package/dist/cjs/cli/compile-query.js +9 -0
- package/dist/cjs/cli/config.d.ts +35 -6
- package/dist/cjs/cli/config.js +17 -1
- package/dist/cjs/cli/destructive.d.ts +7 -4
- package/dist/cjs/cli/destructive.js +224 -20
- package/dist/cjs/cli/error-catalog.js +36 -0
- package/dist/cjs/cli/error-text.d.ts +15 -0
- package/dist/cjs/cli/error-text.js +40 -0
- package/dist/cjs/cli/index.d.ts +62 -4
- package/dist/cjs/cli/index.js +568 -108
- package/dist/cjs/cli/local-server-guard.d.ts +53 -0
- package/dist/cjs/cli/local-server-guard.js +119 -0
- package/dist/cjs/cli/local-server-output.d.ts +41 -0
- package/dist/cjs/cli/local-server-output.js +103 -0
- package/dist/cjs/cli/mcp.d.ts +8 -0
- package/dist/cjs/cli/mcp.js +121 -32
- package/dist/cjs/cli/migrate.d.ts +113 -5
- package/dist/cjs/cli/migrate.js +270 -21
- package/dist/cjs/cli/observe.d.ts +6 -1
- package/dist/cjs/cli/observe.js +85 -55
- package/dist/cjs/cli/pii-predicate-guard.d.ts +43 -23
- package/dist/cjs/cli/pii-predicate-guard.js +98 -37
- package/dist/cjs/cli/prisma-resolve.js +17 -13
- package/dist/cjs/cli/prisma-schema.js +12 -4
- package/dist/cjs/cli/studio-ui.generated.js +1 -1
- package/dist/cjs/cli/studio.d.ts +14 -2
- package/dist/cjs/cli/studio.js +244 -69
- package/dist/cjs/cli/ui.d.ts +1 -1
- package/dist/cjs/client.d.ts +558 -85
- package/dist/cjs/client.js +1270 -395
- package/dist/cjs/connection-guard.d.ts +13 -0
- package/dist/cjs/connection-guard.js +28 -0
- package/dist/cjs/connection-url.d.ts +51 -16
- package/dist/cjs/connection-url.js +67 -34
- package/dist/cjs/diagnostics.d.ts +81 -0
- package/dist/cjs/diagnostics.js +147 -0
- package/dist/cjs/dialect.d.ts +449 -20
- package/dist/cjs/dialect.js +117 -76
- package/dist/cjs/engine-config.d.ts +7 -6
- package/dist/cjs/errors.d.ts +126 -6
- package/dist/cjs/errors.js +256 -13
- package/dist/cjs/generate.d.ts +57 -7
- package/dist/cjs/generate.js +635 -279
- package/dist/cjs/global-filters-config.d.ts +59 -0
- package/dist/cjs/global-filters-config.js +367 -0
- package/dist/cjs/index.d.ts +9 -4
- package/dist/cjs/index.js +10 -2
- package/dist/cjs/introspect.d.ts +31 -6
- package/dist/cjs/introspect.js +108 -50
- package/dist/cjs/log-codes.d.ts +12 -0
- package/dist/cjs/log-codes.js +77 -0
- package/dist/cjs/logger.d.ts +87 -0
- package/dist/cjs/logger.js +98 -0
- package/dist/cjs/mssql.d.ts +8 -5
- package/dist/cjs/mssql.js +352 -65
- package/dist/cjs/mysql.d.ts +3 -5
- package/dist/cjs/mysql.js +420 -70
- package/dist/cjs/nested-write.d.ts +3 -0
- package/dist/cjs/nested-write.js +179 -114
- package/dist/cjs/pipeline-submittable.d.ts +12 -0
- package/dist/cjs/pipeline-submittable.js +118 -44
- package/dist/cjs/pipeline.js +21 -26
- package/dist/cjs/powdb-introspect.d.ts +5 -2
- package/dist/cjs/powdb-introspect.js +20 -15
- package/dist/cjs/powdb-shared.d.ts +36 -5
- package/dist/cjs/powdb-shared.js +67 -8
- package/dist/cjs/powdb.d.ts +4 -0
- package/dist/cjs/powdb.js +183 -51
- package/dist/cjs/powql.d.ts +394 -51
- package/dist/cjs/powql.js +1829 -284
- package/dist/cjs/prisma-compat.d.ts +23 -15
- package/dist/cjs/prisma-compat.js +507 -372
- package/dist/cjs/query/aggregates.d.ts +17 -1
- package/dist/cjs/query/aggregates.js +261 -29
- package/dist/cjs/query/batched-loader.d.ts +25 -6
- package/dist/cjs/query/batched-loader.js +103 -20
- package/dist/cjs/query/builder.d.ts +325 -184
- package/dist/cjs/query/builder.js +1452 -490
- package/dist/cjs/query/column-ref.d.ts +61 -0
- package/dist/cjs/query/column-ref.js +73 -0
- package/dist/cjs/query/compound-unique.d.ts +21 -0
- package/dist/cjs/query/compound-unique.js +98 -18
- package/dist/cjs/query/deferred.d.ts +53 -16
- package/dist/cjs/query/expr.d.ts +217 -0
- package/dist/cjs/query/expr.js +859 -0
- package/dist/cjs/query/filters.d.ts +155 -53
- package/dist/cjs/query/filters.js +613 -76
- package/dist/cjs/query/index.d.ts +2 -0
- package/dist/cjs/query/index.js +7 -1
- package/dist/cjs/query/json-value.d.ts +43 -0
- package/dist/cjs/query/json-value.js +59 -0
- package/dist/cjs/query/normalize-args.d.ts +87 -0
- package/dist/cjs/query/normalize-args.js +527 -0
- package/dist/cjs/query/option-surface.d.ts +16 -4
- package/dist/cjs/query/option-surface.js +57 -14
- package/dist/cjs/query/relation-names.d.ts +14 -0
- package/dist/cjs/query/relation-names.js +77 -18
- package/dist/cjs/query/relations.d.ts +30 -3
- package/dist/cjs/query/relations.js +219 -63
- package/dist/cjs/query/row-lock.d.ts +49 -0
- package/dist/cjs/query/row-lock.js +138 -0
- package/dist/cjs/query/sql-comment.d.ts +161 -0
- package/dist/cjs/query/sql-comment.js +381 -0
- package/dist/cjs/query/stream-idle.d.ts +132 -0
- package/dist/cjs/query/stream-idle.js +212 -0
- package/dist/cjs/query/table-client.d.ts +101 -0
- package/dist/cjs/query/table-client.js +74 -0
- package/dist/cjs/query/types.d.ts +677 -298
- package/dist/cjs/query/utils.d.ts +105 -6
- package/dist/cjs/query/utils.js +426 -19
- package/dist/cjs/query/warn-registry.d.ts +18 -0
- package/dist/cjs/query/warn-registry.js +18 -0
- package/dist/cjs/query/where-compile.d.ts +138 -14
- package/dist/cjs/query/where-compile.js +513 -29
- package/dist/cjs/query/where.d.ts +159 -59
- package/dist/cjs/query/where.js +716 -246
- package/dist/cjs/query/writes.d.ts +112 -50
- package/dist/cjs/query/writes.js +1498 -200
- package/dist/cjs/query-events.d.ts +4 -2
- package/dist/cjs/query-events.js +3 -1
- package/dist/cjs/realtime.d.ts +7 -3
- package/dist/cjs/realtime.js +13 -2
- package/dist/cjs/schema-builder.d.ts +55 -4
- package/dist/cjs/schema-builder.js +382 -18
- package/dist/cjs/schema-metadata.d.ts +21 -1
- package/dist/cjs/schema-metadata.js +29 -7
- package/dist/cjs/schema-sql.d.ts +75 -5
- package/dist/cjs/schema-sql.js +497 -45
- package/dist/cjs/schema.d.ts +26 -5
- package/dist/cjs/schema.js +110 -13
- package/dist/cjs/sql-placeholders.d.ts +56 -0
- package/dist/cjs/sql-placeholders.js +204 -0
- package/dist/cjs/sqlite.d.ts +75 -20
- package/dist/cjs/sqlite.js +593 -95
- package/dist/cjs/supplied-pool-types.d.ts +48 -0
- package/dist/cjs/supplied-pool-types.js +256 -0
- package/dist/cjs/transaction-control.d.ts +51 -0
- package/dist/cjs/transaction-control.js +316 -0
- package/dist/cjs/transaction-state.d.ts +342 -0
- package/dist/cjs/transaction-state.js +707 -0
- package/dist/cjs/typed-sql.d.ts +37 -3
- package/dist/cjs/typed-sql.js +102 -8
- package/dist/cli/code-first-tags.d.ts +62 -0
- package/dist/cli/code-first-tags.js +120 -0
- package/dist/cli/compile-query.js +9 -0
- package/dist/cli/config.d.ts +35 -6
- package/dist/cli/config.js +16 -1
- package/dist/cli/destructive.d.ts +7 -4
- package/dist/cli/destructive.js +224 -20
- package/dist/cli/error-catalog.js +36 -0
- package/dist/cli/error-text.d.ts +15 -0
- package/dist/cli/error-text.js +37 -0
- package/dist/cli/index.d.ts +62 -4
- package/dist/cli/index.js +569 -112
- package/dist/cli/local-server-guard.d.ts +53 -0
- package/dist/cli/local-server-guard.js +113 -0
- package/dist/cli/local-server-output.d.ts +41 -0
- package/dist/cli/local-server-output.js +98 -0
- package/dist/cli/mcp.d.ts +8 -0
- package/dist/cli/mcp.js +121 -34
- package/dist/cli/migrate.d.ts +113 -5
- package/dist/cli/migrate.js +261 -21
- package/dist/cli/observe.d.ts +6 -1
- package/dist/cli/observe.js +84 -54
- package/dist/cli/pii-predicate-guard.d.ts +43 -23
- package/dist/cli/pii-predicate-guard.js +100 -35
- package/dist/cli/prisma-resolve.js +15 -11
- package/dist/cli/prisma-schema.js +12 -4
- package/dist/cli/studio-ui.generated.js +1 -1
- package/dist/cli/studio.d.ts +14 -2
- package/dist/cli/studio.js +246 -71
- package/dist/cli/ui.d.ts +1 -1
- package/dist/client.d.ts +558 -85
- package/dist/client.js +1275 -400
- package/dist/connection-guard.d.ts +13 -0
- package/dist/connection-guard.js +27 -0
- package/dist/connection-url.d.ts +51 -16
- package/dist/connection-url.js +63 -34
- package/dist/diagnostics.d.ts +81 -0
- package/dist/diagnostics.js +144 -0
- package/dist/dialect.d.ts +449 -20
- package/dist/dialect.js +115 -43
- package/dist/engine-config.d.ts +7 -6
- package/dist/errors.d.ts +126 -6
- package/dist/errors.js +252 -12
- package/dist/generate.d.ts +57 -7
- package/dist/generate.js +635 -281
- package/dist/global-filters-config.d.ts +59 -0
- package/dist/global-filters-config.js +361 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.js +4 -2
- package/dist/introspect.d.ts +31 -6
- package/dist/introspect.js +106 -50
- package/dist/log-codes.d.ts +12 -0
- package/dist/log-codes.js +74 -0
- package/dist/logger.d.ts +87 -0
- package/dist/logger.js +93 -0
- package/dist/mssql.d.ts +8 -5
- package/dist/mssql.js +354 -67
- package/dist/mysql.d.ts +3 -5
- package/dist/mysql.js +423 -73
- package/dist/nested-write.d.ts +3 -0
- package/dist/nested-write.js +177 -112
- package/dist/pipeline-submittable.d.ts +12 -0
- package/dist/pipeline-submittable.js +117 -44
- package/dist/pipeline.js +21 -26
- package/dist/powdb-introspect.d.ts +5 -2
- package/dist/powdb-introspect.js +21 -16
- package/dist/powdb-shared.d.ts +36 -5
- package/dist/powdb-shared.js +65 -8
- package/dist/powdb.d.ts +4 -0
- package/dist/powdb.js +183 -51
- package/dist/powql.d.ts +394 -51
- package/dist/powql.js +1836 -291
- package/dist/prisma-compat.d.ts +23 -15
- package/dist/prisma-compat.js +508 -373
- package/dist/query/aggregates.d.ts +17 -1
- package/dist/query/aggregates.js +263 -32
- package/dist/query/batched-loader.d.ts +25 -6
- package/dist/query/batched-loader.js +101 -21
- package/dist/query/builder.d.ts +325 -184
- package/dist/query/builder.js +1458 -495
- package/dist/query/column-ref.d.ts +61 -0
- package/dist/query/column-ref.js +66 -0
- package/dist/query/compound-unique.d.ts +21 -0
- package/dist/query/compound-unique.js +97 -19
- package/dist/query/deferred.d.ts +53 -16
- package/dist/query/expr.d.ts +217 -0
- package/dist/query/expr.js +848 -0
- package/dist/query/filters.d.ts +155 -53
- package/dist/query/filters.js +597 -72
- package/dist/query/index.d.ts +2 -0
- package/dist/query/index.js +4 -0
- package/dist/query/json-value.d.ts +43 -0
- package/dist/query/json-value.js +54 -0
- package/dist/query/normalize-args.d.ts +87 -0
- package/dist/query/normalize-args.js +517 -0
- package/dist/query/option-surface.d.ts +16 -4
- package/dist/query/option-surface.js +56 -13
- package/dist/query/relation-names.d.ts +14 -0
- package/dist/query/relation-names.js +77 -19
- package/dist/query/relations.d.ts +30 -3
- package/dist/query/relations.js +220 -67
- package/dist/query/row-lock.d.ts +49 -0
- package/dist/query/row-lock.js +131 -0
- package/dist/query/sql-comment.d.ts +161 -0
- package/dist/query/sql-comment.js +374 -0
- package/dist/query/stream-idle.d.ts +132 -0
- package/dist/query/stream-idle.js +203 -0
- package/dist/query/table-client.d.ts +101 -0
- package/dist/query/table-client.js +70 -0
- package/dist/query/types.d.ts +677 -298
- package/dist/query/utils.d.ts +105 -6
- package/dist/query/utils.js +414 -18
- package/dist/query/warn-registry.d.ts +18 -0
- package/dist/query/warn-registry.js +18 -0
- package/dist/query/where-compile.d.ts +138 -14
- package/dist/query/where-compile.js +508 -31
- package/dist/query/where.d.ts +159 -59
- package/dist/query/where.js +711 -248
- package/dist/query/writes.d.ts +112 -50
- package/dist/query/writes.js +1496 -202
- package/dist/query-events.d.ts +4 -2
- package/dist/query-events.js +3 -1
- package/dist/realtime.d.ts +7 -3
- package/dist/realtime.js +13 -2
- package/dist/schema-builder.d.ts +55 -4
- package/dist/schema-builder.js +381 -18
- package/dist/schema-metadata.d.ts +21 -1
- package/dist/schema-metadata.js +28 -7
- package/dist/schema-sql.d.ts +75 -5
- package/dist/schema-sql.js +494 -44
- package/dist/schema.d.ts +26 -5
- package/dist/schema.js +109 -13
- package/dist/sql-placeholders.d.ts +56 -0
- package/dist/sql-placeholders.js +200 -0
- package/dist/sqlite.d.ts +75 -20
- package/dist/sqlite.js +597 -99
- package/dist/supplied-pool-types.d.ts +48 -0
- package/dist/supplied-pool-types.js +247 -0
- package/dist/transaction-control.d.ts +51 -0
- package/dist/transaction-control.js +311 -0
- package/dist/transaction-state.d.ts +342 -0
- package/dist/transaction-state.js +696 -0
- package/dist/typed-sql.d.ts +37 -3
- package/dist/typed-sql.js +100 -8
- package/package.json +7 -4
- package/skills/turbine-orm/SKILL.md +56 -6
|
@@ -53,14 +53,15 @@
|
|
|
53
53
|
* @module
|
|
54
54
|
*/
|
|
55
55
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
56
|
-
exports.ALL_OPTION_TABLES = exports.GROUP_BY_OPTIONS = exports.AGGREGATE_OPTIONS = exports.COUNT_OPTIONS = exports.UPSERT_OPTIONS = exports.DELETE_MANY_OPTIONS = exports.DELETE_OPTIONS = exports.UPDATE_MANY_OPTIONS = exports.UPDATE_OPTIONS = exports.CREATE_MANY_OPTIONS = exports.CREATE_OPTIONS = exports.FIND_MANY_STREAM_OPTIONS = exports.FIND_MANY_OPTIONS = exports.FIND_UNIQUE_OPTIONS = void 0;
|
|
56
|
+
exports.REFUSED_OPTION_KEYS = exports.ALL_OPTION_TABLES = exports.GROUP_BY_OPTIONS = exports.AGGREGATE_OPTIONS = exports.COUNT_OPTIONS = exports.UPSERT_OPTIONS = exports.DELETE_MANY_OPTIONS = exports.DELETE_OPTIONS = exports.UPDATE_MANY_OPTIONS = exports.UPDATE_OPTIONS = exports.CREATE_MANY_OPTIONS = exports.CREATE_OPTIONS = exports.FIND_MANY_STREAM_OPTIONS = exports.FIND_MANY_OPTIONS = exports.FIND_UNIQUE_OPTIONS = void 0;
|
|
57
57
|
exports.applyNativeOptions = applyNativeOptions;
|
|
58
58
|
exports.optionKeysOfKind = optionKeysOfKind;
|
|
59
59
|
exports.warnUnknownQueryOptions = warnUnknownQueryOptions;
|
|
60
60
|
// Runtime imports, and the only ones in this file: the unknown-key warning at
|
|
61
|
-
// the bottom needs the once-per-process registry and the name
|
|
62
|
-
// are leaves that do not import this module, so the type-only
|
|
63
|
-
// everything above is unaffected.
|
|
61
|
+
// the bottom needs the logger, the once-per-process registry and the name
|
|
62
|
+
// suggester. All are leaves that do not import this module, so the type-only
|
|
63
|
+
// shape of everything above is unaffected.
|
|
64
|
+
const logger_js_1 = require("../logger.js");
|
|
64
65
|
const utils_js_1 = require("./utils.js");
|
|
65
66
|
const warn_registry_js_1 = require("./warn-registry.js");
|
|
66
67
|
exports.FIND_UNIQUE_OPTIONS = {
|
|
@@ -84,6 +85,9 @@ exports.FIND_UNIQUE_OPTIONS = {
|
|
|
84
85
|
// schema's naming space, so THE ONE RULE puts it here rather than in the
|
|
85
86
|
// hand-translated set.
|
|
86
87
|
jsonEncoding: 'native',
|
|
88
|
+
// A lock mode and a wait flag: no schema name in the value, so compat
|
|
89
|
+
// forwards it unchanged.
|
|
90
|
+
lock: 'native',
|
|
87
91
|
};
|
|
88
92
|
exports.FIND_MANY_OPTIONS = {
|
|
89
93
|
where: 'prisma',
|
|
@@ -111,12 +115,17 @@ exports.FIND_MANY_OPTIONS = {
|
|
|
111
115
|
forceCustomPlan: 'native',
|
|
112
116
|
// See FIND_UNIQUE_OPTIONS: an encoding name carries no schema name.
|
|
113
117
|
jsonEncoding: 'native',
|
|
118
|
+
lock: 'native',
|
|
114
119
|
};
|
|
120
|
+
// Streams take findMany's surface minus `lock` (a cursor cannot hold its rows
|
|
121
|
+
// locked across fetches), so the spread drops it by name.
|
|
122
|
+
const { lock: _streamsTakeNoLock, ...FIND_MANY_STREAM_BASE } = exports.FIND_MANY_OPTIONS;
|
|
115
123
|
exports.FIND_MANY_STREAM_OPTIONS = {
|
|
116
|
-
...
|
|
117
|
-
// No streaming delegate exists on the compat surface, so
|
|
118
|
-
//
|
|
124
|
+
...FIND_MANY_STREAM_BASE,
|
|
125
|
+
// No streaming delegate exists on the compat surface, so these are not known
|
|
126
|
+
// keys there and passing one is reported rather than quietly ignored.
|
|
119
127
|
batchSize: 'internal',
|
|
128
|
+
idleTimeoutMs: 'internal',
|
|
120
129
|
};
|
|
121
130
|
exports.CREATE_OPTIONS = {
|
|
122
131
|
data: 'prisma',
|
|
@@ -128,7 +137,13 @@ exports.CREATE_OPTIONS = {
|
|
|
128
137
|
exports.CREATE_MANY_OPTIONS = {
|
|
129
138
|
data: 'prisma',
|
|
130
139
|
skipDuplicates: 'prisma',
|
|
140
|
+
// Field names (the target, the update columns, the projection), and compat's
|
|
141
|
+
// createMany does not expose them, so they are not known keys there.
|
|
142
|
+
onConflict: 'internal',
|
|
143
|
+
select: 'internal',
|
|
144
|
+
omit: 'internal',
|
|
131
145
|
timeout: 'native',
|
|
146
|
+
skipGlobalFilters: 'native',
|
|
132
147
|
};
|
|
133
148
|
exports.UPDATE_OPTIONS = {
|
|
134
149
|
where: 'prisma',
|
|
@@ -188,6 +203,8 @@ exports.AGGREGATE_OPTIONS = {
|
|
|
188
203
|
_avg: 'prisma',
|
|
189
204
|
_min: 'prisma',
|
|
190
205
|
_max: 'prisma',
|
|
206
|
+
// Field names in the keys, and Prisma has no percentile aggregate.
|
|
207
|
+
_percentile: 'internal',
|
|
191
208
|
timeout: 'native',
|
|
192
209
|
skipGlobalFilters: 'native',
|
|
193
210
|
includePii: 'native',
|
|
@@ -203,6 +220,7 @@ exports.GROUP_BY_OPTIONS = {
|
|
|
203
220
|
_avg: 'prisma',
|
|
204
221
|
_min: 'prisma',
|
|
205
222
|
_max: 'prisma',
|
|
223
|
+
_percentile: 'internal',
|
|
206
224
|
// `{ columns, orderBy }`, both in FIELD-NAME space. See THE ONE RULE.
|
|
207
225
|
distinctOn: 'prisma',
|
|
208
226
|
limit: 'nativeAlias',
|
|
@@ -284,7 +302,25 @@ const PRISMA_SPELLING = {
|
|
|
284
302
|
include: 'with',
|
|
285
303
|
};
|
|
286
304
|
/**
|
|
287
|
-
*
|
|
305
|
+
* Keys an operation does not declare but REFUSES by name with its own error
|
|
306
|
+
* (E003 naming the key and the alternative), rather than ignoring. Warning
|
|
307
|
+
* "it is ignored" about one of these would contradict the error that follows,
|
|
308
|
+
* so the warning skips them. Every entry must have a refusal behind it;
|
|
309
|
+
* `src/test/fix-where-option-warnings.test.ts` checks that each one throws.
|
|
310
|
+
*/
|
|
311
|
+
exports.REFUSED_OPTION_KEYS = {
|
|
312
|
+
// A bounded batch is not what these statements do (assertNoBulkWritePaging).
|
|
313
|
+
updateMany: new Set(['limit', 'take', 'offset', 'skip', 'optimisticLock']),
|
|
314
|
+
deleteMany: new Set(['limit', 'take', 'offset', 'skip', 'optimisticLock']),
|
|
315
|
+
// `optimisticLock` is an `update` option (assertNoOptimisticLock).
|
|
316
|
+
upsert: new Set(['optimisticLock']),
|
|
317
|
+
delete: new Set(['optimisticLock']),
|
|
318
|
+
// A streaming cursor cannot hold its rows locked across fetches.
|
|
319
|
+
findManyStream: new Set(['lock']),
|
|
320
|
+
findManyStreamBatches: new Set(['lock']),
|
|
321
|
+
};
|
|
322
|
+
/**
|
|
323
|
+
* Advice for a key that is not part of the operation's option
|
|
288
324
|
* surface, and is therefore doing nothing.
|
|
289
325
|
*
|
|
290
326
|
* The motivating case is `include`. It is Prisma's word for `with`, it is what
|
|
@@ -301,17 +337,21 @@ const PRISMA_SPELLING = {
|
|
|
301
337
|
* working query start throwing. A warning costs a correct program nothing and
|
|
302
338
|
* tells an incorrect one exactly what happened.
|
|
303
339
|
*
|
|
304
|
-
*
|
|
305
|
-
*
|
|
340
|
+
* Advice: emitted only when the client's `diagnostics.advice` is on. The
|
|
341
|
+
* caller passes its advice logger, or `null` when advice is off, so this
|
|
342
|
+
* module never reads the environment. Once per `table.operation.key` per
|
|
343
|
+
* process, and total: the whole body is wrapped, because a diagnostic must
|
|
344
|
+
* never be the reason a query fails.
|
|
306
345
|
*/
|
|
307
|
-
function warnUnknownQueryOptions(table, operation, args) {
|
|
308
|
-
if (
|
|
346
|
+
function warnUnknownQueryOptions(table, operation, args, advice) {
|
|
347
|
+
if (!advice)
|
|
309
348
|
return;
|
|
310
349
|
if (args === null || typeof args !== 'object' || Array.isArray(args))
|
|
311
350
|
return;
|
|
312
351
|
const known = OPERATION_TABLE[operation];
|
|
313
352
|
if (!known)
|
|
314
353
|
return;
|
|
354
|
+
const refused = exports.REFUSED_OPTION_KEYS[operation];
|
|
315
355
|
try {
|
|
316
356
|
for (const key of Object.keys(args)) {
|
|
317
357
|
// `{ ...maybeOptions }` routinely materializes keys with no value.
|
|
@@ -320,13 +360,16 @@ function warnUnknownQueryOptions(table, operation, args) {
|
|
|
320
360
|
continue;
|
|
321
361
|
if (Object.hasOwn(known, key))
|
|
322
362
|
continue;
|
|
363
|
+
// Refused with its own error, which is the diagnostic; not ignored.
|
|
364
|
+
if (refused?.has(key))
|
|
365
|
+
continue;
|
|
323
366
|
if (!(0, warn_registry_js_1.shouldWarnOnce)(warn_registry_js_1.WARN_NS.unknownQueryOption, `${table}.${operation}.${key}`))
|
|
324
367
|
continue;
|
|
325
368
|
const prismaSpelling = PRISMA_SPELLING[key];
|
|
326
369
|
const suggestion = prismaSpelling ?? (0, utils_js_1.suggestKey)(key, Object.keys(known));
|
|
327
370
|
const because = prismaSpelling ? ` Turbine spells this "${prismaSpelling}".` : '';
|
|
328
|
-
|
|
329
|
-
(!prismaSpelling && suggestion ? ` Did you mean "${suggestion}"?` : ''));
|
|
371
|
+
(0, logger_js_1.logTo)(advice, 'warn', `unknown option "${key}" in ${table}.${operation}(), it is ignored.${because}` +
|
|
372
|
+
(!prismaSpelling && suggestion ? ` Did you mean "${suggestion}"?` : ''), { code: 'unknown-query-option', table, operation, key });
|
|
330
373
|
}
|
|
331
374
|
}
|
|
332
375
|
catch {
|
|
@@ -68,3 +68,17 @@ export declare function normalizeWithClause(schema: SchemaMetadata, table: strin
|
|
|
68
68
|
* byte-identical.
|
|
69
69
|
*/
|
|
70
70
|
export declare function applyStableRelationOrderTo(schema: SchemaMetadata, withClause: WithClause, table: string, depth?: number): WithClause;
|
|
71
|
+
/**
|
|
72
|
+
* Fold Prisma's `take` / `skip` into `limit` / `offset` inside every `with`
|
|
73
|
+
* level, by the same rule {@link normalizePagination} applies at the top level
|
|
74
|
+
* (both spellings of one bound with different values throw). Runs once, before
|
|
75
|
+
* any walker reads the tree, so the fingerprint, the join build, the batched
|
|
76
|
+
* loader and the row parser all see `limit` / `offset` and never the aliases.
|
|
77
|
+
*
|
|
78
|
+
* A per-relation `offset` on a to-one relation is refused: the relation is a
|
|
79
|
+
* single row or `null`, so there is nothing to skip past, and silently
|
|
80
|
+
* returning the row anyway would ignore what the caller wrote.
|
|
81
|
+
*
|
|
82
|
+
* Returns the input by reference when nothing changed.
|
|
83
|
+
*/
|
|
84
|
+
export declare function normalizeWithPagination(schema: SchemaMetadata, table: string, withClause: WithClause | undefined, depth?: number): WithClause | undefined;
|
|
@@ -45,6 +45,8 @@
|
|
|
45
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
46
|
exports.normalizeWithClause = normalizeWithClause;
|
|
47
47
|
exports.applyStableRelationOrderTo = applyStableRelationOrderTo;
|
|
48
|
+
exports.normalizeWithPagination = normalizeWithPagination;
|
|
49
|
+
const errors_js_1 = require("../errors.js");
|
|
48
50
|
const filters_js_1 = require("./filters.js");
|
|
49
51
|
const utils_js_1 = require("./utils.js");
|
|
50
52
|
/** Depth cap mirroring the builder's own, so a cyclic `with` cannot spin here. */
|
|
@@ -61,27 +63,36 @@ function normalizeWithClause(schema, table, withClause, depth = 0) {
|
|
|
61
63
|
const meta = schema.tables[table];
|
|
62
64
|
if (!meta)
|
|
63
65
|
return withClause;
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
// The copy is allocated only once something changes (the common call
|
|
67
|
+
// spells every relation the declared way and allocates nothing); the keys
|
|
68
|
+
// before that point are copied in order, so the result is the same object
|
|
69
|
+
// the eager version built.
|
|
70
|
+
let out;
|
|
71
|
+
const source = withClause;
|
|
72
|
+
const keys = Object.keys(source);
|
|
73
|
+
for (let i = 0; i < keys.length; i++) {
|
|
74
|
+
const key = keys[i];
|
|
75
|
+
const spec = source[key];
|
|
76
|
+
let name = key;
|
|
77
|
+
let nextSpec;
|
|
67
78
|
if (key === '_count') {
|
|
68
|
-
|
|
69
|
-
if (nextCount !== spec)
|
|
70
|
-
changed = true;
|
|
71
|
-
out[key] = nextCount;
|
|
72
|
-
continue;
|
|
79
|
+
nextSpec = normalizeCount(meta, spec);
|
|
73
80
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if (nextSpec !== spec)
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
else {
|
|
82
|
+
const resolved = (0, utils_js_1.resolveRelation)(meta.relations, key);
|
|
83
|
+
// Unknown key: keep it verbatim and let the builder raise E005 by name.
|
|
84
|
+
name = resolved?.name ?? key;
|
|
85
|
+
nextSpec = resolved ? normalizeSpec(schema, resolved.def.to, spec, depth) : spec;
|
|
86
|
+
}
|
|
87
|
+
if (out === undefined && (name !== key || nextSpec !== spec)) {
|
|
88
|
+
out = {};
|
|
89
|
+
for (let j = 0; j < i; j++)
|
|
90
|
+
out[keys[j]] = source[keys[j]];
|
|
91
|
+
}
|
|
92
|
+
if (out !== undefined)
|
|
93
|
+
out[name] = nextSpec;
|
|
83
94
|
}
|
|
84
|
-
return
|
|
95
|
+
return out ?? withClause;
|
|
85
96
|
}
|
|
86
97
|
/** A relation's `with` options, normalizing its nested `with` against the TARGET table. */
|
|
87
98
|
function normalizeSpec(schema, target, spec, depth) {
|
|
@@ -178,3 +189,51 @@ function applyStableRelationOrderTo(schema, withClause, table, depth = 0) {
|
|
|
178
189
|
}
|
|
179
190
|
return out ?? withClause;
|
|
180
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Fold Prisma's `take` / `skip` into `limit` / `offset` inside every `with`
|
|
194
|
+
* level, by the same rule {@link normalizePagination} applies at the top level
|
|
195
|
+
* (both spellings of one bound with different values throw). Runs once, before
|
|
196
|
+
* any walker reads the tree, so the fingerprint, the join build, the batched
|
|
197
|
+
* loader and the row parser all see `limit` / `offset` and never the aliases.
|
|
198
|
+
*
|
|
199
|
+
* A per-relation `offset` on a to-one relation is refused: the relation is a
|
|
200
|
+
* single row or `null`, so there is nothing to skip past, and silently
|
|
201
|
+
* returning the row anyway would ignore what the caller wrote.
|
|
202
|
+
*
|
|
203
|
+
* Returns the input by reference when nothing changed.
|
|
204
|
+
*/
|
|
205
|
+
function normalizeWithPagination(schema, table, withClause, depth = 0) {
|
|
206
|
+
if (!withClause || typeof withClause !== 'object' || depth > MAX_DEPTH)
|
|
207
|
+
return withClause;
|
|
208
|
+
const meta = schema.tables[table];
|
|
209
|
+
if (!meta)
|
|
210
|
+
return withClause;
|
|
211
|
+
let out;
|
|
212
|
+
// Object.keys, not Object.entries: no [key, value] pair allocated per key.
|
|
213
|
+
const keys = Object.keys(withClause);
|
|
214
|
+
for (let i = 0; i < keys.length; i++) {
|
|
215
|
+
const key = keys[i];
|
|
216
|
+
const spec = withClause[key];
|
|
217
|
+
if (key === '_count' || spec === null || typeof spec !== 'object')
|
|
218
|
+
continue;
|
|
219
|
+
const rel = (0, utils_js_1.resolveRelation)(meta.relations, key);
|
|
220
|
+
if (!rel)
|
|
221
|
+
continue; // unknown relation: the builder raises E005 by name
|
|
222
|
+
const folded = (0, utils_js_1.normalizePagination)(spec);
|
|
223
|
+
const offset = folded.offset;
|
|
224
|
+
if (offset !== undefined && (rel.def.type === 'belongsTo' || rel.def.type === 'hasOne')) {
|
|
225
|
+
throw new errors_js_1.ValidationError(`\`offset\` (or \`skip\`) on the to-one relation "${rel.name}" of "${table}" has nothing to skip: ` +
|
|
226
|
+
'a to-one relation is a single row or null. Remove it, or page the relation from its own table.');
|
|
227
|
+
}
|
|
228
|
+
const nested = folded.with;
|
|
229
|
+
const nextNested = nested ? normalizeWithPagination(schema, rel.def.to, nested, depth + 1) : nested;
|
|
230
|
+
let next = folded;
|
|
231
|
+
if (nextNested !== nested)
|
|
232
|
+
next = { ...folded, with: nextNested };
|
|
233
|
+
if (next !== spec) {
|
|
234
|
+
out ??= { ...withClause };
|
|
235
|
+
out[key] = next;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return out ?? withClause;
|
|
239
|
+
}
|
|
@@ -33,6 +33,14 @@ export interface RelationShape {
|
|
|
33
33
|
nested: Record<string, RelationShape>;
|
|
34
34
|
cardinality: 'many' | 'one';
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* The E003 text for a PII-tagged column named in `select` without
|
|
38
|
+
* `includePii: UNSAFE`. Shared by every projection path through
|
|
39
|
+
* {@link resolveProjection}, so a top-level read, a `with` relation (join,
|
|
40
|
+
* batched, flatten and positional alike) and a single-row write refuse in the
|
|
41
|
+
* same words. The write path is named because it cannot pass the opt-in at all.
|
|
42
|
+
*/
|
|
43
|
+
export declare function piiSelectRefusedMessage(table: string, field: string): string;
|
|
36
44
|
/**
|
|
37
45
|
* Resolve `select` / `omit` into a list of snake_case column names, for the
|
|
38
46
|
* query's own table and for a relation target alike. `null` means "no
|
|
@@ -76,6 +84,11 @@ export declare function resolveColumns(qi: BuilderCtx, select?: Record<string, b
|
|
|
76
84
|
* is a shared authority rather than a guard repeated per walker.
|
|
77
85
|
*/
|
|
78
86
|
export declare function relationOptions(spec: true | WithOptions): WithOptions;
|
|
87
|
+
/**
|
|
88
|
+
* A to-many relation's `offset` (`skip` is folded into it at the args seam by
|
|
89
|
+
* `normalizeWithPagination`, which also refuses it on a to-one relation).
|
|
90
|
+
*/
|
|
91
|
+
export declare function relationOffset(opts: WithOptions): unknown;
|
|
79
92
|
/**
|
|
80
93
|
* Produce a fingerprint for a `with` clause tree. Recursion mirrors
|
|
81
94
|
* buildSelectWithRelations / buildRelationSubquery.
|
|
@@ -116,9 +129,9 @@ export declare function buildOrderBy(qi: BuilderCtx, orderBy: OrderByClause, par
|
|
|
116
129
|
export declare function isRelationOrderByValue(_qi: BuilderCtx, value: unknown): boolean;
|
|
117
130
|
/**
|
|
118
131
|
* Render the ` NULLS FIRST` / ` NULLS LAST` suffix for a column ordering.
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
* {@link UnsupportedFeatureError} (E017) instead of broken SQL.
|
|
132
|
+
* On an engine without the `NULLS FIRST/LAST` grammar (`nullsOrderingClause`:
|
|
133
|
+
* PostgreSQL and SQLite have it) a caller asking for explicit nulls placement
|
|
134
|
+
* gets a clear {@link UnsupportedFeatureError} (E017) instead of broken SQL.
|
|
122
135
|
*/
|
|
123
136
|
export declare function nullsSuffix(qi: BuilderCtx, nulls: 'first' | 'last' | undefined): string;
|
|
124
137
|
/**
|
|
@@ -171,6 +184,20 @@ export declare function buildRelationOrderBy(qi: BuilderCtx, relName: string, va
|
|
|
171
184
|
table: string;
|
|
172
185
|
parentRef: string;
|
|
173
186
|
}, lateralSink?: string[]): string;
|
|
187
|
+
/**
|
|
188
|
+
* Param-collect mirror of a TO-ONE relation orderBy entry, done by running
|
|
189
|
+
* {@link buildRelationOrderBy} and discarding its SQL. The build pushes the
|
|
190
|
+
* target's global filter once per ordered column and, for a chained
|
|
191
|
+
* `{ author: { org: { name } } }` ordering, once more per hop table, in hop
|
|
192
|
+
* order. A hand-written mirror that pushed one filter per column bound too few
|
|
193
|
+
* params (and in the wrong order) as soon as a hop table had a filter, so this
|
|
194
|
+
* mirror is the build itself and cannot drift from it.
|
|
195
|
+
*/
|
|
196
|
+
export declare function collectToOneRelationOrderParams(qi: BuilderCtx, relName: string, value: Record<string, unknown>, params: unknown[], ctx?: {
|
|
197
|
+
meta: TableMetadata;
|
|
198
|
+
table: string;
|
|
199
|
+
parentRef: string;
|
|
200
|
+
}): void;
|
|
174
201
|
/**
|
|
175
202
|
* Validate a {@link RelationPickOrderBy} entry's scope and shape. Shared by
|
|
176
203
|
* the SQL-build path ({@link buildRelationPickOrderBy}) and the cache-hit
|