ultimabase 0.0.0-stage → 0.1.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/CHANGELOG.md +7 -0
- package/README.md +4 -2
- package/dist/access.d.ts +62 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +258 -0
- package/dist/adapter-errors.d.ts +43 -0
- package/dist/adapter-errors.d.ts.map +1 -0
- package/dist/adapter-errors.js +72 -0
- package/dist/adapter-json.d.ts +20 -0
- package/dist/adapter-json.d.ts.map +1 -0
- package/dist/adapter-json.js +2 -0
- package/dist/adapter-migrations.d.ts +90 -0
- package/dist/adapter-migrations.d.ts.map +1 -0
- package/dist/adapter-migrations.js +1 -0
- package/dist/adapter.d.ts +333 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +5 -0
- package/dist/aggregate.d.ts +31 -0
- package/dist/aggregate.d.ts.map +1 -0
- package/dist/aggregate.js +99 -0
- package/dist/app-internals.d.ts +10 -0
- package/dist/app-internals.d.ts.map +1 -0
- package/dist/app-internals.js +12 -0
- package/dist/app-options.d.ts +22 -0
- package/dist/app-options.d.ts.map +1 -0
- package/dist/app-options.js +3 -0
- package/dist/cascade.d.ts +47 -0
- package/dist/cascade.d.ts.map +1 -0
- package/dist/cascade.js +209 -0
- package/dist/cli-config.d.ts +6 -0
- package/dist/cli-config.d.ts.map +1 -0
- package/dist/cli-config.js +45 -0
- package/dist/cli-deploy.d.ts +14 -0
- package/dist/cli-deploy.d.ts.map +1 -0
- package/dist/cli-deploy.js +193 -0
- package/dist/cli-main.d.ts +16 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +151 -0
- package/dist/cli-migrate.d.ts +20 -0
- package/dist/cli-migrate.d.ts.map +1 -0
- package/dist/cli-migrate.js +105 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/complete.d.ts +13 -0
- package/dist/complete.d.ts.map +1 -0
- package/dist/complete.js +60 -0
- package/dist/console-logger.d.ts +3 -0
- package/dist/console-logger.d.ts.map +1 -0
- package/dist/console-logger.js +62 -0
- package/dist/create-many.d.ts +7 -0
- package/dist/create-many.d.ts.map +1 -0
- package/dist/create-many.js +88 -0
- package/dist/decimal.d.ts +23 -0
- package/dist/decimal.d.ts.map +1 -0
- package/dist/decimal.js +50 -0
- package/dist/define-app.d.ts +59 -0
- package/dist/define-app.d.ts.map +1 -0
- package/dist/define-app.js +5 -0
- package/dist/define-enum.d.ts +6 -0
- package/dist/define-enum.d.ts.map +1 -0
- package/dist/define-enum.js +18 -0
- package/dist/define-function.d.ts +25 -0
- package/dist/define-function.d.ts.map +1 -0
- package/dist/define-function.js +111 -0
- package/dist/define-model.d.ts +48 -0
- package/dist/define-model.d.ts.map +1 -0
- package/dist/define-model.js +85 -0
- package/dist/definition.d.ts +179 -0
- package/dist/definition.d.ts.map +1 -0
- package/dist/definition.js +165 -0
- package/dist/delete-many.d.ts +13 -0
- package/dist/delete-many.d.ts.map +1 -0
- package/dist/delete-many.js +58 -0
- package/dist/engine.d.ts +16 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +174 -0
- package/dist/errors.d.ts +50 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +43 -0
- package/dist/exact.d.ts +20 -0
- package/dist/exact.d.ts.map +1 -0
- package/dist/exact.js +1 -0
- package/dist/feed.d.ts +6 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/feed.js +33 -0
- package/dist/field-codec.d.ts +11 -0
- package/dist/field-codec.d.ts.map +1 -0
- package/dist/field-codec.js +48 -0
- package/dist/field-rules.d.ts +57 -0
- package/dist/field-rules.d.ts.map +1 -0
- package/dist/field-rules.js +1 -0
- package/dist/field-type.d.ts +51 -0
- package/dist/field-type.d.ts.map +1 -0
- package/dist/field-type.js +106 -0
- package/dist/fields.d.ts +295 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +1 -0
- package/dist/function.d.ts +126 -0
- package/dist/function.d.ts.map +1 -0
- package/dist/function.js +1 -0
- package/dist/functions.d.ts +18 -0
- package/dist/functions.d.ts.map +1 -0
- package/dist/functions.js +99 -0
- package/dist/group-by.d.ts +10 -0
- package/dist/group-by.d.ts.map +1 -0
- package/dist/group-by.js +145 -0
- package/dist/group-having.d.ts +8 -0
- package/dist/group-having.d.ts.map +1 -0
- package/dist/group-having.js +97 -0
- package/dist/hooks.d.ts +41 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +149 -0
- package/dist/hosts.d.ts +3 -0
- package/dist/hosts.d.ts.map +1 -0
- package/dist/hosts.js +8 -0
- package/dist/identify.d.ts +15 -0
- package/dist/identify.d.ts.map +1 -0
- package/dist/identify.js +71 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/internal.d.ts +28 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +39 -0
- package/dist/lifecycle.d.ts +21 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +149 -0
- package/dist/list-update.d.ts +12 -0
- package/dist/list-update.d.ts.map +1 -0
- package/dist/list-update.js +52 -0
- package/dist/live.d.ts +37 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +139 -0
- package/dist/manifest.d.ts +11 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +60 -0
- package/dist/memory-aggregate.d.ts +7 -0
- package/dist/memory-aggregate.d.ts.map +1 -0
- package/dist/memory-aggregate.js +107 -0
- package/dist/memory-conditions.d.ts +8 -0
- package/dist/memory-conditions.d.ts.map +1 -0
- package/dist/memory-conditions.js +82 -0
- package/dist/memory-draft.d.ts +34 -0
- package/dist/memory-draft.d.ts.map +1 -0
- package/dist/memory-draft.js +255 -0
- package/dist/memory-json.d.ts +6 -0
- package/dist/memory-json.d.ts.map +1 -0
- package/dist/memory-json.js +86 -0
- package/dist/memory-read.d.ts +45 -0
- package/dist/memory-read.d.ts.map +1 -0
- package/dist/memory-read.js +244 -0
- package/dist/memory-search.d.ts +16 -0
- package/dist/memory-search.d.ts.map +1 -0
- package/dist/memory-search.js +110 -0
- package/dist/memory-values.d.ts +23 -0
- package/dist/memory-values.d.ts.map +1 -0
- package/dist/memory-values.js +82 -0
- package/dist/memory.d.ts +4 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +157 -0
- package/dist/migrate.d.ts +22 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +131 -0
- package/dist/model.d.ts +239 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +1 -0
- package/dist/nested-write.d.ts +64 -0
- package/dist/nested-write.d.ts.map +1 -0
- package/dist/nested-write.js +274 -0
- package/dist/number-update.d.ts +18 -0
- package/dist/number-update.d.ts.map +1 -0
- package/dist/number-update.js +96 -0
- package/dist/plugin-app.d.ts +48 -0
- package/dist/plugin-app.d.ts.map +1 -0
- package/dist/plugin-app.js +230 -0
- package/dist/plugin-code.d.ts +17 -0
- package/dist/plugin-code.d.ts.map +1 -0
- package/dist/plugin-code.js +125 -0
- package/dist/plugin-use.d.ts +22 -0
- package/dist/plugin-use.d.ts.map +1 -0
- package/dist/plugin-use.js +161 -0
- package/dist/plugin.d.ts +357 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +17 -0
- package/dist/query-aggregate.d.ts +82 -0
- package/dist/query-aggregate.d.ts.map +1 -0
- package/dist/query-aggregate.js +1 -0
- package/dist/query-args.d.ts +41 -0
- package/dist/query-args.d.ts.map +1 -0
- package/dist/query-args.js +263 -0
- package/dist/query-bulk.d.ts +35 -0
- package/dist/query-bulk.d.ts.map +1 -0
- package/dist/query-bulk.js +1 -0
- package/dist/query-conditions.d.ts +9 -0
- package/dist/query-conditions.d.ts.map +1 -0
- package/dist/query-conditions.js +46 -0
- package/dist/query-context.d.ts +32 -0
- package/dist/query-context.d.ts.map +1 -0
- package/dist/query-context.js +55 -0
- package/dist/query-filter.d.ts +46 -0
- package/dist/query-filter.d.ts.map +1 -0
- package/dist/query-filter.js +1 -0
- package/dist/query-group.d.ts +82 -0
- package/dist/query-group.d.ts.map +1 -0
- package/dist/query-group.js +1 -0
- package/dist/query-json.d.ts +9 -0
- package/dist/query-json.d.ts.map +1 -0
- package/dist/query-json.js +66 -0
- package/dist/query-order.d.ts +15 -0
- package/dist/query-order.d.ts.map +1 -0
- package/dist/query-order.js +115 -0
- package/dist/query-project.d.ts +15 -0
- package/dist/query-project.d.ts.map +1 -0
- package/dist/query-project.js +45 -0
- package/dist/query-search.d.ts +24 -0
- package/dist/query-search.d.ts.map +1 -0
- package/dist/query-search.js +2 -0
- package/dist/query-values.d.ts +28 -0
- package/dist/query-values.d.ts.map +1 -0
- package/dist/query-values.js +91 -0
- package/dist/query-where.d.ts +46 -0
- package/dist/query-where.d.ts.map +1 -0
- package/dist/query-where.js +200 -0
- package/dist/query-write.d.ts +14 -0
- package/dist/query-write.d.ts.map +1 -0
- package/dist/query-write.js +260 -0
- package/dist/query.d.ts +254 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +1 -0
- package/dist/record.d.ts +257 -0
- package/dist/record.d.ts.map +1 -0
- package/dist/record.js +1 -0
- package/dist/recorder.d.ts +32 -0
- package/dist/recorder.d.ts.map +1 -0
- package/dist/recorder.js +152 -0
- package/dist/relation-write.d.ts +41 -0
- package/dist/relation-write.d.ts.map +1 -0
- package/dist/relation-write.js +112 -0
- package/dist/relations.d.ts +42 -0
- package/dist/relations.d.ts.map +1 -0
- package/dist/relations.js +119 -0
- package/dist/rules.d.ts +97 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +71 -0
- package/dist/running.d.ts +29 -0
- package/dist/running.d.ts.map +1 -0
- package/dist/running.js +39 -0
- package/dist/schema-indexes.d.ts +11 -0
- package/dist/schema-indexes.d.ts.map +1 -0
- package/dist/schema-indexes.js +59 -0
- package/dist/schema-virtuals.d.ts +19 -0
- package/dist/schema-virtuals.d.ts.map +1 -0
- package/dist/schema-virtuals.js +100 -0
- package/dist/schema.d.ts +35 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +267 -0
- package/dist/scope.d.ts +46 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +82 -0
- package/dist/scratch.d.ts +14 -0
- package/dist/scratch.d.ts.map +1 -0
- package/dist/scratch.js +10 -0
- package/dist/serve.d.ts +2 -0
- package/dist/serve.d.ts.map +1 -0
- package/dist/serve.js +4 -0
- package/dist/symbols.d.ts +10 -0
- package/dist/symbols.d.ts.map +1 -0
- package/dist/symbols.js +1 -0
- package/dist/transaction.d.ts +28 -0
- package/dist/transaction.d.ts.map +1 -0
- package/dist/transaction.js +156 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/update-many.d.ts +7 -0
- package/dist/update-many.d.ts.map +1 -0
- package/dist/update-many.js +182 -0
- package/dist/uuid.d.ts +7 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +48 -0
- package/dist/validation.d.ts +24 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +72 -0
- package/dist/virtual-read.d.ts +9 -0
- package/dist/virtual-read.d.ts.map +1 -0
- package/dist/virtual-read.js +145 -0
- package/dist/virtual.d.ts +142 -0
- package/dist/virtual.d.ts.map +1 -0
- package/dist/virtual.js +1 -0
- package/dist/write-context.d.ts +46 -0
- package/dist/write-context.d.ts.map +1 -0
- package/dist/write-context.js +102 -0
- package/dist/write-data.d.ts +26 -0
- package/dist/write-data.d.ts.map +1 -0
- package/dist/write-data.js +144 -0
- package/dist/write-plan.d.ts +107 -0
- package/dist/write-plan.d.ts.map +1 -0
- package/dist/write-plan.js +170 -0
- package/dist/write-target.d.ts +17 -0
- package/dist/write-target.d.ts.map +1 -0
- package/dist/write-target.js +59 -0
- package/dist/writes.d.ts +23 -0
- package/dist/writes.d.ts.map +1 -0
- package/dist/writes.js +246 -0
- package/dist/writing.d.ts +10 -0
- package/dist/writing.d.ts.map +1 -0
- package/dist/writing.js +66 -0
- package/package.json +42 -3
- package/src/access.ts +329 -0
- package/src/adapter-errors.ts +89 -0
- package/src/adapter-json.ts +21 -0
- package/src/adapter-migrations.ts +98 -0
- package/src/adapter.ts +363 -0
- package/src/aggregate.ts +136 -0
- package/src/app-internals.ts +26 -0
- package/src/app-options.ts +24 -0
- package/src/cascade.ts +297 -0
- package/src/cli-config.ts +45 -0
- package/src/cli-deploy.ts +235 -0
- package/src/cli-main.ts +165 -0
- package/src/cli-migrate.ts +143 -0
- package/src/cli.ts +5 -0
- package/src/complete.ts +73 -0
- package/src/console-logger.ts +87 -0
- package/src/create-many.ts +126 -0
- package/src/decimal.ts +74 -0
- package/src/define-app.ts +108 -0
- package/src/define-enum.ts +26 -0
- package/src/define-function.ts +188 -0
- package/src/define-model.ts +220 -0
- package/src/definition.ts +352 -0
- package/src/delete-many.ts +76 -0
- package/src/engine.ts +281 -0
- package/src/errors.ts +97 -0
- package/src/exact.ts +49 -0
- package/src/feed.ts +39 -0
- package/src/field-codec.ts +72 -0
- package/src/field-rules.ts +77 -0
- package/src/field-type.ts +219 -0
- package/src/fields.ts +383 -0
- package/src/function.ts +143 -0
- package/src/functions.ts +154 -0
- package/src/group-by.ts +186 -0
- package/src/group-having.ts +143 -0
- package/src/hooks.ts +215 -0
- package/src/hosts.ts +11 -0
- package/src/identify.ts +95 -0
- package/src/index.ts +125 -0
- package/src/internal.ts +68 -0
- package/src/lifecycle.ts +214 -0
- package/src/list-update.ts +71 -0
- package/src/live.ts +199 -0
- package/src/manifest.ts +71 -0
- package/src/memory-aggregate.ts +162 -0
- package/src/memory-conditions.ts +88 -0
- package/src/memory-draft.ts +319 -0
- package/src/memory-json.ts +91 -0
- package/src/memory-read.ts +311 -0
- package/src/memory-search.ts +149 -0
- package/src/memory-values.ts +106 -0
- package/src/memory.ts +173 -0
- package/src/migrate.ts +152 -0
- package/src/model.ts +312 -0
- package/src/nested-write.ts +390 -0
- package/src/number-update.ts +142 -0
- package/src/plugin-app.ts +308 -0
- package/src/plugin-code.ts +158 -0
- package/src/plugin-use.ts +217 -0
- package/src/plugin.ts +400 -0
- package/src/query-aggregate.ts +96 -0
- package/src/query-args.ts +375 -0
- package/src/query-bulk.ts +53 -0
- package/src/query-conditions.ts +53 -0
- package/src/query-context.ts +104 -0
- package/src/query-filter.ts +54 -0
- package/src/query-group.ts +137 -0
- package/src/query-json.ts +90 -0
- package/src/query-order.ts +158 -0
- package/src/query-project.ts +73 -0
- package/src/query-search.ts +31 -0
- package/src/query-values.ts +131 -0
- package/src/query-where.ts +318 -0
- package/src/query-write.ts +360 -0
- package/src/query.ts +400 -0
- package/src/record.ts +379 -0
- package/src/recorder.ts +212 -0
- package/src/relation-write.ts +176 -0
- package/src/relations.ts +165 -0
- package/src/rules.ts +188 -0
- package/src/running.ts +62 -0
- package/src/schema-indexes.ts +88 -0
- package/src/schema-virtuals.ts +134 -0
- package/src/schema.ts +367 -0
- package/src/scope.ts +123 -0
- package/src/scratch.ts +28 -0
- package/src/serve.ts +5 -0
- package/src/symbols.ts +11 -0
- package/src/transaction.ts +211 -0
- package/src/types.ts +79 -0
- package/src/update-many.ts +268 -0
- package/src/uuid.ts +51 -0
- package/src/validation.ts +107 -0
- package/src/virtual-read.ts +198 -0
- package/src/virtual.ts +187 -0
- package/src/write-context.ts +170 -0
- package/src/write-data.ts +188 -0
- package/src/write-plan.ts +273 -0
- package/src/write-target.ts +92 -0
- package/src/writes.ts +361 -0
- package/src/writing.ts +93 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
import type { JsonCondition } from './adapter-json.ts';
|
|
2
|
+
import type { Migrations } from './adapter-migrations.ts';
|
|
3
|
+
import type { Logger } from './app-options.ts';
|
|
4
|
+
export type { Migration, Migrations, Run, Statement, Stored, } from './adapter-migrations.ts';
|
|
5
|
+
export { CheckFailed, MigrationFailed, OutOfRange, RelationViolation, UniqueViolation, } from './adapter-errors.ts';
|
|
6
|
+
export type ScalarType = 'string' | 'number' | 'decimal' | 'boolean' | 'dateTime' | 'date' | 'json' | 'enum';
|
|
7
|
+
export type SchemaField = {
|
|
8
|
+
readonly kind: 'scalar';
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly type: ScalarType;
|
|
11
|
+
/** An `enum`'s values. */
|
|
12
|
+
readonly values?: readonly string[];
|
|
13
|
+
/**
|
|
14
|
+
* A list of `type`, a string, a number or an enum value: never
|
|
15
|
+
* `null`, `[]` when empty (D-120, D-127).
|
|
16
|
+
*/
|
|
17
|
+
readonly list: boolean;
|
|
18
|
+
/** A `number` of whole numbers from -2^31 to 2^31 - 1 (D-132). */
|
|
19
|
+
readonly integer?: true;
|
|
20
|
+
/**
|
|
21
|
+
* A `decimal`'s digits, `scale` of them after the point; its values
|
|
22
|
+
* are strings at that scale (D-145).
|
|
23
|
+
*/
|
|
24
|
+
readonly precision?: number;
|
|
25
|
+
readonly scale?: number;
|
|
26
|
+
readonly optional: boolean;
|
|
27
|
+
readonly unique: boolean;
|
|
28
|
+
/** A `string` in its model's document, which `_search` matches (D-148). */
|
|
29
|
+
readonly search?: true;
|
|
30
|
+
readonly dbName?: string;
|
|
31
|
+
/** Its default when it is a value, not a function (D-105). */
|
|
32
|
+
readonly default?: unknown;
|
|
33
|
+
} | {
|
|
34
|
+
readonly kind: 'one';
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly target: string;
|
|
37
|
+
/** The target's field on the other side (D-37). */
|
|
38
|
+
readonly inverse: string;
|
|
39
|
+
/** Whether this side stores the key, one per pair (D-37). */
|
|
40
|
+
readonly stored: boolean;
|
|
41
|
+
/** One-to-one: the stored key is unique. */
|
|
42
|
+
readonly unique: boolean;
|
|
43
|
+
readonly optional: boolean;
|
|
44
|
+
readonly onDelete: 'cascade' | 'restrict' | 'setNull';
|
|
45
|
+
readonly dbName?: string;
|
|
46
|
+
} | {
|
|
47
|
+
readonly kind: 'many';
|
|
48
|
+
readonly name: string;
|
|
49
|
+
readonly target: string;
|
|
50
|
+
readonly inverse: string;
|
|
51
|
+
/** Facing a `many`: a join holding the two keys only (D-64). */
|
|
52
|
+
readonly join: boolean;
|
|
53
|
+
/** Its reads see the rows a filter keeps; it takes no `set` (D-151). */
|
|
54
|
+
readonly filtered?: true;
|
|
55
|
+
/**
|
|
56
|
+
* A view: read-only, on the link of the `many` it names, with that
|
|
57
|
+
* relation's `inverse` and `join` (D-151).
|
|
58
|
+
*/
|
|
59
|
+
readonly from?: string;
|
|
60
|
+
};
|
|
61
|
+
export type SchemaModel = {
|
|
62
|
+
readonly name: string;
|
|
63
|
+
readonly dbName?: string;
|
|
64
|
+
/** `id`, `createdAt` and `updatedAt` are implicit (D-22). */
|
|
65
|
+
readonly fields: readonly SchemaField[];
|
|
66
|
+
readonly indexes: readonly {
|
|
67
|
+
readonly fields: readonly string[];
|
|
68
|
+
readonly unique: boolean;
|
|
69
|
+
/** Serves `contains` and `mode: 'insensitive'` (D-141). */
|
|
70
|
+
readonly contains: boolean;
|
|
71
|
+
}[];
|
|
72
|
+
};
|
|
73
|
+
export type Schema = {
|
|
74
|
+
readonly models: readonly SchemaModel[];
|
|
75
|
+
};
|
|
76
|
+
/** A normalized condition on one field: no shorthand, no `undefined`. */
|
|
77
|
+
export type Condition = JsonCondition & {
|
|
78
|
+
readonly equals?: unknown;
|
|
79
|
+
readonly not?: unknown;
|
|
80
|
+
readonly in?: readonly unknown[];
|
|
81
|
+
readonly notIn?: readonly unknown[];
|
|
82
|
+
readonly lt?: unknown;
|
|
83
|
+
readonly lte?: unknown;
|
|
84
|
+
readonly gt?: unknown;
|
|
85
|
+
readonly gte?: unknown;
|
|
86
|
+
readonly contains?: string;
|
|
87
|
+
readonly startsWith?: string;
|
|
88
|
+
readonly endsWith?: string;
|
|
89
|
+
/** The string operators ignore case (D-140). */
|
|
90
|
+
readonly mode?: 'insensitive';
|
|
91
|
+
/** A list holds this element (D-120, D-127). */
|
|
92
|
+
readonly has?: unknown;
|
|
93
|
+
/** A list holds one of these elements (D-120, D-127). */
|
|
94
|
+
readonly hasSome?: readonly unknown[];
|
|
95
|
+
/** A list holds each of these elements (D-149). */
|
|
96
|
+
readonly hasEvery?: readonly unknown[];
|
|
97
|
+
/** A list is empty, or not (D-149). */
|
|
98
|
+
readonly isEmpty?: boolean;
|
|
99
|
+
readonly is?: Filter | null;
|
|
100
|
+
readonly isNot?: Filter | null;
|
|
101
|
+
readonly some?: Filter;
|
|
102
|
+
readonly every?: Filter;
|
|
103
|
+
readonly none?: Filter;
|
|
104
|
+
/**
|
|
105
|
+
* A stored `one` key names a row that the delete at this index of the
|
|
106
|
+
* write's changes removed, a change before this one (D-102).
|
|
107
|
+
*/
|
|
108
|
+
readonly removedBy?: number;
|
|
109
|
+
/**
|
|
110
|
+
* Under the key `_search`: the row's searched fields match this text, in
|
|
111
|
+
* PostgreSQL's `websearch_to_tsquery` syntax (D-148).
|
|
112
|
+
*/
|
|
113
|
+
readonly search?: string;
|
|
114
|
+
};
|
|
115
|
+
/** A normalized `where`: `AND`, `OR` and `NOT` are lists (D-73). */
|
|
116
|
+
export interface Filter {
|
|
117
|
+
readonly AND?: readonly Filter[];
|
|
118
|
+
readonly OR?: readonly Filter[];
|
|
119
|
+
readonly NOT?: readonly Filter[];
|
|
120
|
+
readonly [field: string]: Condition | readonly Filter[] | undefined;
|
|
121
|
+
}
|
|
122
|
+
/** A `one` relation a sort key goes through, to the rows `where` selects. */
|
|
123
|
+
export type Step = {
|
|
124
|
+
readonly relation: string;
|
|
125
|
+
readonly where?: Filter;
|
|
126
|
+
};
|
|
127
|
+
export type Order = {
|
|
128
|
+
/** A field of the row, or of the row `through` reaches. */
|
|
129
|
+
readonly field: string;
|
|
130
|
+
readonly direction: 'asc' | 'desc';
|
|
131
|
+
/** Where `null` sorts: by default last ascending, first descending (D-149). */
|
|
132
|
+
readonly nulls?: 'first' | 'last';
|
|
133
|
+
/** The `one` relations followed first; an absent row sorts as `null` (D-134). */
|
|
134
|
+
readonly through?: readonly Step[];
|
|
135
|
+
/** `field` is a `many` relation: its rows this filter selects are counted (D-134). */
|
|
136
|
+
readonly count?: Filter;
|
|
137
|
+
/** `field` is `_relevance`: how well the row matches this text (D-148). */
|
|
138
|
+
readonly relevance?: string;
|
|
139
|
+
};
|
|
140
|
+
export type Sort = Pick<Order, 'direction' | 'nulls'>;
|
|
141
|
+
/** A relation to read with its rows; a `one` relation reads `where` only. */
|
|
142
|
+
export type Nested = {
|
|
143
|
+
readonly where?: Filter;
|
|
144
|
+
/** Always ends with `id`, so the order is total. */
|
|
145
|
+
readonly orderBy?: readonly Order[];
|
|
146
|
+
/** A unique target the page starts at, as Prisma's `cursor`. */
|
|
147
|
+
readonly cursor?: Filter;
|
|
148
|
+
readonly skip?: number;
|
|
149
|
+
/** Negative: the rows before the cursor, or the last ones. */
|
|
150
|
+
readonly take?: number;
|
|
151
|
+
/**
|
|
152
|
+
* The system and scalar fields the rows return, `id` always; absent, every
|
|
153
|
+
* field and each `one` key (D-136).
|
|
154
|
+
*/
|
|
155
|
+
readonly fields?: readonly string[];
|
|
156
|
+
readonly include?: {
|
|
157
|
+
readonly [field: string]: Nested;
|
|
158
|
+
};
|
|
159
|
+
/** `many` relations to count in the row's `_count`, by filter (D-134). */
|
|
160
|
+
readonly count?: {
|
|
161
|
+
readonly [field: string]: Filter;
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
export type Read = Nested & {
|
|
165
|
+
readonly model: string;
|
|
166
|
+
/** Locks the root rows, in `id` order, until the transaction ends (D-99, D-133). */
|
|
167
|
+
readonly lock?: boolean;
|
|
168
|
+
/**
|
|
169
|
+
* Keeps, of the rows with the same keys, the first in `orderBy`'s order,
|
|
170
|
+
* before `skip` and `take` (D-147).
|
|
171
|
+
*/
|
|
172
|
+
readonly distinct?: readonly GroupKey[];
|
|
173
|
+
};
|
|
174
|
+
export type CountRead = {
|
|
175
|
+
readonly model: string;
|
|
176
|
+
readonly where?: Filter;
|
|
177
|
+
};
|
|
178
|
+
/** One aggregate: `count` without a field counts the rows (D-143). */
|
|
179
|
+
export type Aggregate = {
|
|
180
|
+
readonly operation: 'count' | 'sum' | 'avg' | 'min' | 'max';
|
|
181
|
+
/** A scalar field, neither a list nor `json`. */
|
|
182
|
+
readonly field?: string;
|
|
183
|
+
};
|
|
184
|
+
/** A group's key: a field, or the `id` of the row `through` reaches (D-146). */
|
|
185
|
+
export type GroupKey = {
|
|
186
|
+
readonly field: string;
|
|
187
|
+
readonly through?: readonly Step[];
|
|
188
|
+
};
|
|
189
|
+
/**
|
|
190
|
+
* Aggregates of the rows `where` selects, one value each, in order: a count
|
|
191
|
+
* is a number, the others `null` without a value (D-143). With `by`, of each
|
|
192
|
+
* group of rows with the same keys; an absent row gives `null` (D-146).
|
|
193
|
+
*/
|
|
194
|
+
export type AggregateRead = CountRead & {
|
|
195
|
+
readonly aggregates: readonly Aggregate[];
|
|
196
|
+
readonly by?: readonly GroupKey[];
|
|
197
|
+
/** A position, `orderBy`'s `at` or a `having` key (D-149): keys, then aggregates. */
|
|
198
|
+
readonly having?: Filter;
|
|
199
|
+
readonly orderBy?: readonly ({
|
|
200
|
+
readonly at: number;
|
|
201
|
+
} & Sort)[];
|
|
202
|
+
readonly skip?: number;
|
|
203
|
+
readonly take?: number;
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* A stored row: system and scalar fields, and each `one` relation as its key
|
|
207
|
+
* `{ id } | null`, or the included row. An included `many` is a list of rows.
|
|
208
|
+
*/
|
|
209
|
+
export type Row = {
|
|
210
|
+
readonly id: string;
|
|
211
|
+
readonly [field: string]: unknown;
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* A number update computed on each row the write changes, `null` counting
|
|
215
|
+
* as 0; an integer's division truncates toward zero (D-132).
|
|
216
|
+
*/
|
|
217
|
+
export type Arithmetic = {
|
|
218
|
+
readonly operation: 'increment' | 'decrement' | 'multiply' | 'divide';
|
|
219
|
+
readonly by: number;
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* A list update computed on each row the write changes (D-149): `push`
|
|
223
|
+
* appends, `pushUnique` appends each element the list lacks, once, and
|
|
224
|
+
* `remove` drops every occurrence.
|
|
225
|
+
*/
|
|
226
|
+
export type ListUpdate = {
|
|
227
|
+
readonly operation: 'push' | 'pushUnique' | 'remove';
|
|
228
|
+
readonly elements: readonly unknown[];
|
|
229
|
+
};
|
|
230
|
+
/** In a change, a stored `one` key is the target's id or `null`. */
|
|
231
|
+
export type Change = {
|
|
232
|
+
readonly kind: 'insert';
|
|
233
|
+
readonly model: string;
|
|
234
|
+
readonly row: Row;
|
|
235
|
+
} | {
|
|
236
|
+
readonly kind: 'update';
|
|
237
|
+
readonly model: string;
|
|
238
|
+
readonly where: Filter;
|
|
239
|
+
readonly set: {
|
|
240
|
+
readonly [field: string]: unknown;
|
|
241
|
+
};
|
|
242
|
+
readonly compute?: {
|
|
243
|
+
readonly [field: string]: Arithmetic | ListUpdate;
|
|
244
|
+
};
|
|
245
|
+
} | {
|
|
246
|
+
readonly kind: 'delete';
|
|
247
|
+
readonly model: string;
|
|
248
|
+
readonly where: Filter;
|
|
249
|
+
} | {
|
|
250
|
+
readonly kind: 'link' | 'unlink';
|
|
251
|
+
readonly model: string;
|
|
252
|
+
/** A `many` relation facing a `many`. */
|
|
253
|
+
readonly field: string;
|
|
254
|
+
readonly id: string;
|
|
255
|
+
readonly targets: readonly string[];
|
|
256
|
+
};
|
|
257
|
+
/** A count of rows a write needs before it changes anything (D-99). */
|
|
258
|
+
export type Check = {
|
|
259
|
+
readonly model: string;
|
|
260
|
+
readonly where: Filter;
|
|
261
|
+
readonly count: number;
|
|
262
|
+
/** Locks the rows it counts until the transaction ends, as `Read.lock` (D-99). */
|
|
263
|
+
readonly lock?: boolean;
|
|
264
|
+
};
|
|
265
|
+
/**
|
|
266
|
+
* One whole write: its checks first, which write nothing when one fails,
|
|
267
|
+
* then its changes, then `read`, in the same write. With `before`, the read
|
|
268
|
+
* selects among the rows of its model that the write's delete removed, as
|
|
269
|
+
* they were (D-102, D-104); when the write deletes none of them, among the
|
|
270
|
+
* rows its first update of that model changed, as it left them (D-133).
|
|
271
|
+
*/
|
|
272
|
+
export type Write = {
|
|
273
|
+
readonly checks?: readonly Check[];
|
|
274
|
+
readonly changes: readonly Change[];
|
|
275
|
+
readonly read?: Read;
|
|
276
|
+
readonly before?: boolean;
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* What a committed write changed (D-154): `ids` is absent when they were
|
|
280
|
+
* more than `feedIds`, `fields` when they were every field or longer than
|
|
281
|
+
* `feedFields`. A delete's links go with its rows, unlisted. How changes
|
|
282
|
+
* group into entries and calls is the adapter's.
|
|
283
|
+
*/
|
|
284
|
+
export type Changed = {
|
|
285
|
+
readonly kind: 'insert' | 'update' | 'delete';
|
|
286
|
+
readonly model: string;
|
|
287
|
+
readonly ids?: readonly string[];
|
|
288
|
+
/** The fields an update set, `updatedAt` included. */
|
|
289
|
+
readonly fields?: readonly string[];
|
|
290
|
+
} | {
|
|
291
|
+
readonly kind: 'link' | 'unlink';
|
|
292
|
+
readonly model: string;
|
|
293
|
+
/** A `many` relation facing a `many`. */
|
|
294
|
+
readonly field: string;
|
|
295
|
+
/** The model's id, then the target's. */
|
|
296
|
+
readonly pairs?: readonly (readonly [string, string])[];
|
|
297
|
+
};
|
|
298
|
+
/** The most ids or pairs a change lists (D-154). */
|
|
299
|
+
export declare const feedIds = 1000;
|
|
300
|
+
/** The longest list of fields, as JSON, an update lists (D-154). */
|
|
301
|
+
export declare const feedFields = 1500;
|
|
302
|
+
/** Where an adapter sends the changes each commit makes, on any server. */
|
|
303
|
+
export type Feed = {
|
|
304
|
+
readonly changed: (changes: readonly Changed[]) => void;
|
|
305
|
+
/** Changes may have been lost, as when a listener reconnects. */
|
|
306
|
+
readonly missed: () => void;
|
|
307
|
+
};
|
|
308
|
+
export interface Transaction {
|
|
309
|
+
find(read: Read): Promise<Row[]>;
|
|
310
|
+
count(read: CountRead): Promise<number>;
|
|
311
|
+
/**
|
|
312
|
+
* One list per group: its keys' values, then its aggregates'; without
|
|
313
|
+
* `by`, one list, even without rows (D-146).
|
|
314
|
+
*/
|
|
315
|
+
aggregate(read: AggregateRead): Promise<unknown[][]>;
|
|
316
|
+
write(write: Write): Promise<Row[]>;
|
|
317
|
+
commit(): Promise<void>;
|
|
318
|
+
rollback(): Promise<void>;
|
|
319
|
+
}
|
|
320
|
+
/** A storage adapter: its own slot, not a plugin (D-02, D-73). */
|
|
321
|
+
export interface Adapter extends Omit<Transaction, 'commit' | 'rollback'> {
|
|
322
|
+
/**
|
|
323
|
+
* Connects; the kernel then syncs or checks the tables (D-105). `logger`
|
|
324
|
+
* is the kernel's, for what the adapter reports (D-140). With `feed`, each
|
|
325
|
+
* commit's changes reach it, this server's and the others' (D-154).
|
|
326
|
+
*/
|
|
327
|
+
start(schema: Schema, logger: Logger, feed?: Feed): Promise<void>;
|
|
328
|
+
stop(): Promise<void>;
|
|
329
|
+
begin(): Promise<Transaction>;
|
|
330
|
+
/** None for a database that starts empty every time, as `memory()`. */
|
|
331
|
+
readonly migrations?: Migrations;
|
|
332
|
+
}
|
|
333
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { CheckFailed, MigrationFailed, OutOfRange, RelationViolation, UniqueViolation, } from './adapter-errors.js';
|
|
2
|
+
/** The most ids or pairs a change lists (D-154). */
|
|
3
|
+
export const feedIds = 1000;
|
|
4
|
+
/** The longest list of fields, as JSON, an update lists (D-154). */
|
|
5
|
+
export const feedFields = 1500;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Aggregate } from './adapter.ts';
|
|
2
|
+
import type { Context } from './query-context.ts';
|
|
3
|
+
import type { ModelInfo } from './schema.ts';
|
|
4
|
+
import type { Store } from './transaction.ts';
|
|
5
|
+
declare const operations: {
|
|
6
|
+
readonly _count: 'count';
|
|
7
|
+
readonly _sum: 'sum';
|
|
8
|
+
readonly _avg: 'avg';
|
|
9
|
+
readonly _min: 'min';
|
|
10
|
+
readonly _max: 'max';
|
|
11
|
+
};
|
|
12
|
+
export type Key = keyof typeof operations;
|
|
13
|
+
export declare const keys: readonly Key[];
|
|
14
|
+
/** The field's type, which fails on a field an aggregate cannot take. */
|
|
15
|
+
export declare function typeOf(model: ModelInfo, field: string, path: string, verb?: string): string;
|
|
16
|
+
export type Asked = {
|
|
17
|
+
readonly key: Key;
|
|
18
|
+
readonly field: string | undefined;
|
|
19
|
+
};
|
|
20
|
+
/** Aggregate `key` of `field`, checked; `_all` counts the rows. */
|
|
21
|
+
export declare function checked({ model, scope }: Context, key: Key, field: string, path: string): Asked;
|
|
22
|
+
/** The aggregates the arguments ask for, in the order of `keys`. */
|
|
23
|
+
export declare const wanted: (context: Context, found: ReadonlyMap<string, unknown>) => readonly Asked[];
|
|
24
|
+
export declare const toAggregate: ({ key, field }: Asked) => Aggregate;
|
|
25
|
+
/** The aggregates' values under the keys the arguments ask for. */
|
|
26
|
+
export declare function shaped(found: ReadonlyMap<string, unknown>, list: readonly Asked[], values: readonly unknown[]): {
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
};
|
|
29
|
+
export declare function aggregate(context: Context, store: Store, args: unknown): Promise<unknown>;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=aggregate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAGjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAE7C,QAAA,MAAM,UAAU;aACf,MAAM,EAAE,OAAO;aACf,IAAI,EAAE,KAAK;aACX,IAAI,EAAE,KAAK;aACX,IAAI,EAAE,KAAK;aACX,IAAI,EAAE,KAAK;CACF,CAAA;AACV,MAAM,MAAM,GAAG,GAAG,MAAM,OAAO,UAAU,CAAA;AACzC,eAAO,MAAM,IAAI,EAAE,SAAS,GAAG,EAA+C,CAAA;AAU9E,yEAAyE;AACzE,wBAAgB,MAAM,CACrB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,IAAI,SAAe,GACjB,MAAM,CAcR;AAED,MAAM,MAAM,KAAK,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAE7E,mEAAmE;AACnE,wBAAgB,OAAO,CACtB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EACzB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACV,KAAK,CAYP;AAcD,oEAAoE;AACpE,eAAO,MAAM,MAAM,YACT,OAAO,SACT,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,KACjC,SAAS,KAAK,EAGf,CAAA;AAEF,eAAO,MAAM,WAAW,mBAAoB,KAAK,KAAG,SAGlD,CAAA;AAEF,mEAAmE;AACnE,wBAAgB,MAAM,CACrB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,IAAI,EAAE,SAAS,KAAK,EAAE,EACtB,MAAM,EAAE,SAAS,OAAO,EAAE,GACxB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAe5B;AAED,wBAAsB,SAAS,CAC9B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,GACX,OAAO,CAAC,OAAO,CAAC,CAWlB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { InvalidQuery } from './errors.js';
|
|
2
|
+
import { filtered, given } from './query-context.js';
|
|
3
|
+
import { entries, systemFields, unknownKey } from './query-where.js';
|
|
4
|
+
const operations = {
|
|
5
|
+
_count: 'count',
|
|
6
|
+
_sum: 'sum',
|
|
7
|
+
_avg: 'avg',
|
|
8
|
+
_min: 'min',
|
|
9
|
+
_max: 'max',
|
|
10
|
+
};
|
|
11
|
+
export const keys = ['_count', '_sum', '_avg', '_min', '_max'];
|
|
12
|
+
/** The types each aggregate takes; `_count` takes every scalar. */
|
|
13
|
+
const takes = {
|
|
14
|
+
_sum: ['number', 'decimal'],
|
|
15
|
+
_avg: ['number', 'decimal'],
|
|
16
|
+
_min: ['number', 'decimal', 'string', 'enum', 'dateTime', 'date'],
|
|
17
|
+
_max: ['number', 'decimal', 'string', 'enum', 'dateTime', 'date'],
|
|
18
|
+
};
|
|
19
|
+
/** The field's type, which fails on a field an aggregate cannot take. */
|
|
20
|
+
export function typeOf(model, field, path, verb = 'aggregated') {
|
|
21
|
+
const refuse = (kind) => {
|
|
22
|
+
throw new InvalidQuery(path, `${path} is ${kind}, which cannot be ${verb}.`);
|
|
23
|
+
};
|
|
24
|
+
const known = model.fields.get(field);
|
|
25
|
+
if (known === undefined) {
|
|
26
|
+
if (!systemFields.includes(field))
|
|
27
|
+
throw unknownKey(path, model.name);
|
|
28
|
+
return field === 'id' ? 'string' : 'dateTime';
|
|
29
|
+
}
|
|
30
|
+
if (known.kind !== 'scalar')
|
|
31
|
+
return refuse('a relation');
|
|
32
|
+
if (known.list)
|
|
33
|
+
return refuse('a list');
|
|
34
|
+
if (known.type === 'json')
|
|
35
|
+
return refuse('json');
|
|
36
|
+
if (known.codec !== undefined)
|
|
37
|
+
return refuse('a plugin field');
|
|
38
|
+
return known.type;
|
|
39
|
+
}
|
|
40
|
+
/** Aggregate `key` of `field`, checked; `_all` counts the rows. */
|
|
41
|
+
export function checked({ model, scope }, key, field, path) {
|
|
42
|
+
if (key === '_count' && field === '_all')
|
|
43
|
+
return { key, field: undefined };
|
|
44
|
+
const type = typeOf(model, field, path);
|
|
45
|
+
const types = takes[key];
|
|
46
|
+
if (types !== undefined && !types.includes(type)) {
|
|
47
|
+
throw new InvalidQuery(path, `${path} is a ${type} field; ${key} takes ${types.join(', ')} fields.`);
|
|
48
|
+
}
|
|
49
|
+
scope.check(model, field, path, 'aggregates');
|
|
50
|
+
return { key, field };
|
|
51
|
+
}
|
|
52
|
+
/** The aggregates `key` asks for, each checked. */
|
|
53
|
+
function asked(context, key, value) {
|
|
54
|
+
if (key === '_count' && value === true)
|
|
55
|
+
return [{ key, field: undefined }];
|
|
56
|
+
return entries(value, key).map(([field, flag]) => {
|
|
57
|
+
const path = `${key}.${field}`;
|
|
58
|
+
if (flag !== true) {
|
|
59
|
+
throw new InvalidQuery(path, `${path} must be true.`);
|
|
60
|
+
}
|
|
61
|
+
return checked(context, key, field, path);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** The aggregates the arguments ask for, in the order of `keys`. */
|
|
65
|
+
export const wanted = (context, found) => keys.flatMap((key) => found.has(key) ? asked(context, key, found.get(key)) : []);
|
|
66
|
+
export const toAggregate = ({ key, field }) => ({
|
|
67
|
+
operation: operations[key],
|
|
68
|
+
...(field !== undefined && { field }),
|
|
69
|
+
});
|
|
70
|
+
/** The aggregates' values under the keys the arguments ask for. */
|
|
71
|
+
export function shaped(found, list, values) {
|
|
72
|
+
const result = {};
|
|
73
|
+
for (const [index, { key, field }] of list.entries()) {
|
|
74
|
+
const value = values[index];
|
|
75
|
+
if (key === '_count' && found.get(key) === true) {
|
|
76
|
+
result[key] = value;
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const fields = result[key] ?? {};
|
|
80
|
+
result[key] = { ...fields, [field ?? '_all']: value };
|
|
81
|
+
}
|
|
82
|
+
for (const key of keys) {
|
|
83
|
+
if (found.has(key))
|
|
84
|
+
result[key] ??= {};
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
export async function aggregate(context, store, args) {
|
|
89
|
+
const { model } = context;
|
|
90
|
+
const found = given(args, model.name, ['where', ...keys], []);
|
|
91
|
+
const list = wanted(context, found);
|
|
92
|
+
const where = await filtered(context, found, 'read');
|
|
93
|
+
const [values = []] = await store.aggregate({
|
|
94
|
+
model: model.name,
|
|
95
|
+
...(where && { where }),
|
|
96
|
+
aggregates: list.map(toAggregate),
|
|
97
|
+
});
|
|
98
|
+
return shaped(found, list, values);
|
|
99
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Lifecycle, LifecycleOptions } from './lifecycle.ts';
|
|
2
|
+
export type Internals = {
|
|
3
|
+
readonly options: LifecycleOptions;
|
|
4
|
+
readonly app: Lifecycle;
|
|
5
|
+
};
|
|
6
|
+
/** Remembers the options `defineApp` built `app` from. */
|
|
7
|
+
export declare function remember<T extends Lifecycle>(app: T, options: LifecycleOptions): T;
|
|
8
|
+
/** What `defineApp` kept of a value it returned, or `undefined`. */
|
|
9
|
+
export declare function internalsOf(value: unknown): Internals | undefined;
|
|
10
|
+
//# sourceMappingURL=app-internals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-internals.d.ts","sourceRoot":"","sources":["../src/app-internals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjE,MAAM,MAAM,SAAS,GAAG;IACvB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAA;CACvB,CAAA;AAID,0DAA0D;AAC1D,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAC3C,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,gBAAgB,GACvB,CAAC,CAGH;AAED,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAIjE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const internals = new WeakMap();
|
|
2
|
+
/** Remembers the options `defineApp` built `app` from. */
|
|
3
|
+
export function remember(app, options) {
|
|
4
|
+
internals.set(app, { options, app });
|
|
5
|
+
return app;
|
|
6
|
+
}
|
|
7
|
+
/** What `defineApp` kept of a value it returned, or `undefined`. */
|
|
8
|
+
export function internalsOf(value) {
|
|
9
|
+
return typeof value === 'object' && value !== null
|
|
10
|
+
? internals.get(value)
|
|
11
|
+
: undefined;
|
|
12
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
type LogFunction = {
|
|
2
|
+
(message: string): void;
|
|
3
|
+
(bindings: object, message?: string): void;
|
|
4
|
+
};
|
|
5
|
+
/** Pino's interface (D-58); without one, the kernel writes JSON lines. */
|
|
6
|
+
export interface Logger {
|
|
7
|
+
readonly info: LogFunction;
|
|
8
|
+
readonly warn: LogFunction;
|
|
9
|
+
readonly error: LogFunction;
|
|
10
|
+
child(bindings: object): Logger;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Refused in production unless written `{ key, production: true }`, with 32
|
|
14
|
+
* characters at least (D-49).
|
|
15
|
+
* `undefined` leaves it off, so an unset environment variable passes as is.
|
|
16
|
+
*/
|
|
17
|
+
export type MasterKey = string | undefined | {
|
|
18
|
+
readonly key: string | undefined;
|
|
19
|
+
readonly production: true;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=app-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-options.d.ts","sourceRoot":"","sources":["../src/app-options.ts"],"names":[],"mappings":"AAGA,KAAK,WAAW,GAAG;IAClB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1C,CAAA;AACD,0EAA0E;AAC1E,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;CAC/B;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAClB,MAAM,GACN,SAAS,GACT;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAA;CAAE,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Change, Filter, Row } from './adapter.ts';
|
|
2
|
+
import type { Models } from './query-where.ts';
|
|
3
|
+
import type { ModelInfo } from './schema.ts';
|
|
4
|
+
import type { Checked, Reads } from './write-plan.ts';
|
|
5
|
+
/** A row the delete removes, or redirects (D-89). */
|
|
6
|
+
export type Doomed = {
|
|
7
|
+
readonly model: ModelInfo;
|
|
8
|
+
readonly row: Row;
|
|
9
|
+
readonly redirected: boolean;
|
|
10
|
+
};
|
|
11
|
+
/** Rows of `model` whose key `field` the delete empties. */
|
|
12
|
+
export type Nulled = {
|
|
13
|
+
readonly model: ModelInfo;
|
|
14
|
+
readonly field: string;
|
|
15
|
+
readonly rows: readonly Row[];
|
|
16
|
+
};
|
|
17
|
+
export type Cascade = {
|
|
18
|
+
/** The deepest first, the rows the caller deletes last. */
|
|
19
|
+
readonly deleted: readonly Doomed[];
|
|
20
|
+
readonly nulled: readonly Nulled[];
|
|
21
|
+
};
|
|
22
|
+
/** A row's key the cascade leaves: the write empties it itself (D-138). */
|
|
23
|
+
export type Except = {
|
|
24
|
+
readonly model: string;
|
|
25
|
+
readonly field: string;
|
|
26
|
+
readonly id: string;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Loads every row deleting `deleting` reaches, level by level, as stored: no
|
|
30
|
+
* `beforeFind`, no access rules (D-54, D-90). Fails with
|
|
31
|
+
* `RELATION_RESTRICTED` when a row the delete leaves references a deleted one.
|
|
32
|
+
* A redirected row stays: it cascades nothing (D-89, D-90).
|
|
33
|
+
*/
|
|
34
|
+
export declare function cascadeOf(models: Models, model: ModelInfo, deleting: readonly Row[], store: Reads, except?: Except): Promise<Cascade>;
|
|
35
|
+
/**
|
|
36
|
+
* The changes and checks of a delete whose reach runs no code, so no row is
|
|
37
|
+
* loaded (D-102): the root goes by `where`, each level by the rows the level
|
|
38
|
+
* above removed, and `setNull` empties the keys naming them. `undefined` when
|
|
39
|
+
* a reached model has delete hooks or a redirect, a `setNull` one update
|
|
40
|
+
* hooks, a cascade comes back to a model it left, or a model is both deleted
|
|
41
|
+
* and emptied, or emptied twice.
|
|
42
|
+
*/
|
|
43
|
+
export declare function cascadeWhere(models: Models, model: ModelInfo, where: Filter): {
|
|
44
|
+
readonly changes: Change[];
|
|
45
|
+
readonly checks: Checked[];
|
|
46
|
+
} | undefined;
|
|
47
|
+
//# sourceMappingURL=cascade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade.d.ts","sourceRoot":"","sources":["../src/cascade.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAGvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAGrD,qDAAqD;AACrD,MAAM,MAAM,MAAM,GAAG;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;CAC5B,CAAA;AAED,4DAA4D;AAC5D,MAAM,MAAM,MAAM,GAAG;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAClC,CAAA;AAID,2EAA2E;AAC3E,MAAM,MAAM,MAAM,GAAG;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACnB,CAAA;AAqBD;;;;;GAKG;AACH,wBAAsB,SAAS,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,SAAS,GAAG,EAAE,EACxB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CA+ElB;AAcD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,GACX;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG,SAAS,CAwHxE"}
|