primitive-admin 1.0.53 → 1.0.55
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 +38 -10
- package/dist/bin/primitive.js +8 -0
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/apps.js +54 -2
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.js +16 -6
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +84 -7
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/catalog.js +3 -3
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collections.js +12 -9
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/databases.js +220 -82
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +77 -0
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/group-type-configs.js +1 -9
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/groups.js +12 -6
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +161 -0
- package/dist/src/commands/guides.js +502 -84
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/integrations.js +2 -2
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +344 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.js +2 -2
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +1 -0
- package/dist/src/commands/rule-sets.js +25 -3
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +2 -0
- package/dist/src/commands/scripts.js +667 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/settings.d.ts +15 -0
- package/dist/src/commands/settings.js +102 -0
- package/dist/src/commands/settings.js.map +1 -0
- package/dist/src/commands/sync-app-settings.d.ts +105 -0
- package/dist/src/commands/sync-app-settings.js +339 -0
- package/dist/src/commands/sync-app-settings.js.map +1 -0
- package/dist/src/commands/sync.d.ts +204 -9
- package/dist/src/commands/sync.js +1706 -371
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +110 -0
- package/dist/src/commands/vars.js.map +1 -0
- package/dist/src/commands/webhooks.js +17 -3
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +30 -0
- package/dist/src/commands/workflows.js +667 -59
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +122 -18
- package/dist/src/lib/api-client.js +131 -2
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +108 -0
- package/dist/src/lib/app-settings-descriptor.js +250 -0
- package/dist/src/lib/app-settings-descriptor.js.map +1 -0
- package/dist/src/lib/batch.d.ts +26 -0
- package/dist/src/lib/batch.js +32 -0
- package/dist/src/lib/batch.js.map +1 -0
- package/dist/src/lib/block-layout.d.ts +160 -0
- package/dist/src/lib/block-layout.js +451 -0
- package/dist/src/lib/block-layout.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +76 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js +144 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- package/dist/src/lib/config-toml.d.ts +10 -0
- package/dist/src/lib/config-toml.js +42 -0
- package/dist/src/lib/config-toml.js.map +1 -0
- package/dist/src/lib/config.d.ts +16 -0
- package/dist/src/lib/config.js +41 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/constants.d.ts +9 -0
- package/dist/src/lib/constants.js +9 -0
- package/dist/src/lib/constants.js.map +1 -1
- package/dist/src/lib/csv.d.ts +1 -2
- package/dist/src/lib/csv.js +3 -8
- package/dist/src/lib/csv.js.map +1 -1
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +21 -65
- package/dist/src/lib/db-codegen/dbGenerator.js +117 -321
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/db-codegen/dbNaming.d.ts +37 -0
- package/dist/src/lib/db-codegen/dbNaming.js +70 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +165 -5
- package/dist/src/lib/db-codegen/dbTemplates.js +292 -16
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +7 -3
- package/dist/src/lib/db-codegen/dbTsTypes.js +23 -1
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +101 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +200 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
- package/dist/src/lib/generated-allowlist.js +43 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/init-config.js +2 -2
- package/dist/src/lib/init-config.js.map +1 -1
- package/dist/src/lib/output.d.ts +25 -5
- package/dist/src/lib/output.js +32 -4
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/query-operators.d.ts +43 -0
- package/dist/src/lib/query-operators.js +80 -0
- package/dist/src/lib/query-operators.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +68 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +380 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +84 -0
- package/dist/src/lib/swift-codegen/generator.js +178 -0
- package/dist/src/lib/swift-codegen/generator.js.map +1 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
- package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +225 -0
- package/dist/src/lib/sync-resource-types.js +394 -0
- package/dist/src/lib/sync-resource-types.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +10 -19
- package/dist/src/lib/toml-database-config.js +28 -59
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +147 -0
- package/dist/src/lib/toml-metadata-config.js +463 -0
- package/dist/src/lib/toml-metadata-config.js.map +1 -0
- package/dist/src/lib/toml-native-form.d.ts +46 -0
- package/dist/src/lib/toml-native-form.js +78 -0
- package/dist/src/lib/toml-native-form.js.map +1 -0
- package/dist/src/lib/toml-params-validator.d.ts +34 -0
- package/dist/src/lib/toml-params-validator.js +118 -3
- package/dist/src/lib/toml-params-validator.js.map +1 -1
- package/dist/src/lib/workflow-apply.d.ts +86 -0
- package/dist/src/lib/workflow-apply.js +127 -0
- package/dist/src/lib/workflow-apply.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +87 -0
- package/dist/src/lib/workflow-codegen/generator.js +290 -0
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +85 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +71 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
- package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
- package/dist/src/lib/workflow-codegen/naming.js +81 -0
- package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +64 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js +282 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
- package/dist/src/lib/workflow-fragments.js +3 -3
- package/dist/src/lib/workflow-fragments.js.map +1 -1
- package/dist/src/lib/workflow-payload.d.ts +68 -0
- package/dist/src/lib/workflow-payload.js +150 -0
- package/dist/src/lib/workflow-payload.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +1 -1
- package/dist/src/lib/workflow-toml-validator.js +37 -1
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +11 -0
- package/dist/src/validators.d.ts +4 -3
- package/dist/src/validators.js +6 -5
- package/dist/src/validators.js.map +1 -1
- package/package.json +7 -3
|
@@ -6,24 +6,19 @@
|
|
|
6
6
|
* then either (a) writes them, or (b) compares them against on-disk for
|
|
7
7
|
* `--check`. No commander dependency, no `process.exit`.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* the TOML, so result aliases are generic shapes keyed off `op.type`.
|
|
9
|
+
* The op/record RESOLUTION (parse, schema load, required-ness inference, op
|
|
10
|
+
* params, and per-op result descriptors) lives in the shared, naming-neutral
|
|
11
|
+
* `describeDbType` IR (`dbTypeIR.ts`) — the SAME source the Swift renderer
|
|
12
|
+
* (`swift-codegen/dbGenerator.ts`) consumes (issue #1547 binding 5). This file
|
|
13
|
+
* is now purely the TS *rendering* half: it applies TS identifier naming
|
|
14
|
+
* (`resolveRecordInterfaceName`, `opParamsInterfaceName`, …) to that IR and
|
|
15
|
+
* emits `*.generated.ts` via the pure `dbTemplates` string-emitters. The
|
|
16
|
+
* emitted bytes are unchanged from the former inline implementation.
|
|
18
17
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
tomlPath: string;
|
|
24
|
-
/** Raw TOML content (already read from disk). */
|
|
25
|
-
tomlContent: string;
|
|
26
|
-
}
|
|
18
|
+
import { type GeneratedFileMismatch } from "../codegen-shared/generatedFiles.js";
|
|
19
|
+
import { type DbCodegenInput } from "./dbTypeIR.js";
|
|
20
|
+
export type { DbCodegenInput } from "./dbTypeIR.js";
|
|
21
|
+
export { inferArrayParamElementTypes, inferRequiredRecordFields, type InferredRecordModelInfo, } from "./dbTypeIR.js";
|
|
27
22
|
export interface GenerateDbTypesOptions {
|
|
28
23
|
/** One entry per database-type TOML file to generate from. */
|
|
29
24
|
inputs: DbCodegenInput[];
|
|
@@ -53,59 +48,20 @@ export interface DbCodegenResult {
|
|
|
53
48
|
/** Only populated under `--check`: files whose on-disk content is out of date. */
|
|
54
49
|
mismatches: DbCheckMismatch[];
|
|
55
50
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
/**
|
|
52
|
+
* Re-exported from the shared generated-file module so existing importers keep
|
|
53
|
+
* a stable type. The write/`--check`/cleanup lifecycle now lives in
|
|
54
|
+
* `codegen-shared/generatedFiles.ts` (shared with `workflows codegen`).
|
|
55
|
+
*/
|
|
56
|
+
export type DbCheckMismatch = GeneratedFileMismatch;
|
|
60
57
|
/**
|
|
61
58
|
* Render the in-memory `.generated.ts` content for a single database-type
|
|
62
59
|
* TOML. Exported so tests can assert on the rendered string directly.
|
|
63
60
|
*/
|
|
64
61
|
export declare function renderDbTypeFile(input: DbCodegenInput): string;
|
|
65
62
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* server-side op-params analysis. For now it carries only the set of record
|
|
70
|
-
* fields the operation params prove are always supplied at create time.
|
|
71
|
-
*/
|
|
72
|
-
export interface InferredRecordModelInfo {
|
|
73
|
-
/** Record field names promoted to non-optional by op-params inference. */
|
|
74
|
-
fields: Set<string>;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Infer which record fields are always supplied at create time, by reading the
|
|
78
|
-
* `save` operation params (issue #842).
|
|
79
|
-
*
|
|
80
|
-
* A field is promoted to required for a model only if:
|
|
81
|
-
* - at least one `save` (create) op writes it from a bare `$params.X`
|
|
82
|
-
* binding, AND
|
|
83
|
-
* - EVERY `save` op that writes the field binds it to a param declared
|
|
84
|
-
* `required: true` (the "ALL writers agree" rule).
|
|
85
|
-
*
|
|
86
|
-
* Deliberately conservative:
|
|
87
|
-
* - `patch` (and every non-`save` inner op) is excluded — partial updates
|
|
88
|
-
* don't guarantee creation-time presence.
|
|
89
|
-
* - whole-object saves (`data = "$params.X"`, a string rather than a
|
|
90
|
-
* per-field map) carry no field-level mapping, so no field can be promoted
|
|
91
|
-
* from them (Q4 skip).
|
|
92
|
-
* - only an EXACT top-level bare `$params.X` value counts (the whole binding
|
|
93
|
-
* value must match `^\$params\.X$`, and `X` must be a declared top-level
|
|
94
|
-
* param). A literal, computed, partially-interpolated value, or a nested
|
|
95
|
-
* path (`$params.obj.sub`) never promotes a field — a nested sub-property
|
|
96
|
-
* may be absent even when the top-level object param is required. This is
|
|
97
|
-
* deliberately stricter than the CLI's lenient `collectParamRefs`
|
|
98
|
-
* first-segment rule, which is fine for its validation use but would
|
|
99
|
-
* wrongly promote nested bindings here.
|
|
100
|
-
* - inner ops are matched to the record model by the inner op's own
|
|
101
|
-
* `modelName` when present, falling back to the enclosing operation's
|
|
102
|
-
* `modelName`.
|
|
103
|
-
*
|
|
104
|
-
* Pure: no I/O, no mutation of the input. The caller OR's the result with the
|
|
105
|
-
* schema-level `required` flag, so inference only ever ADDS requiredness.
|
|
106
|
-
*/
|
|
107
|
-
export declare function inferRequiredRecordFields(operations: any[]): Map<string, InferredRecordModelInfo>;
|
|
108
|
-
/**
|
|
109
|
-
* Run codegen end-to-end across one or more database-type TOML inputs.
|
|
63
|
+
* Run codegen end-to-end across one or more database-type TOML inputs. The
|
|
64
|
+
* disk lifecycle (write / `--check` / stale cleanup) is delegated to the
|
|
65
|
+
* shared `writeOrCheckGeneratedFiles` (shared with `workflows codegen`).
|
|
110
66
|
*/
|
|
111
67
|
export declare function generateDbTypes(options: GenerateDbTypesOptions): Promise<DbCodegenResult>;
|
|
@@ -6,258 +6,146 @@
|
|
|
6
6
|
* then either (a) writes them, or (b) compares them against on-disk for
|
|
7
7
|
* `--check`. No commander dependency, no `process.exit`.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* the TOML, so result aliases are generic shapes keyed off `op.type`.
|
|
9
|
+
* The op/record RESOLUTION (parse, schema load, required-ness inference, op
|
|
10
|
+
* params, and per-op result descriptors) lives in the shared, naming-neutral
|
|
11
|
+
* `describeDbType` IR (`dbTypeIR.ts`) — the SAME source the Swift renderer
|
|
12
|
+
* (`swift-codegen/dbGenerator.ts`) consumes (issue #1547 binding 5). This file
|
|
13
|
+
* is now purely the TS *rendering* half: it applies TS identifier naming
|
|
14
|
+
* (`resolveRecordInterfaceName`, `opParamsInterfaceName`, …) to that IR and
|
|
15
|
+
* emits `*.generated.ts` via the pure `dbTemplates` string-emitters. The
|
|
16
|
+
* emitted bytes are unchanged from the former inline implementation.
|
|
18
17
|
*/
|
|
19
18
|
import * as path from "path";
|
|
20
|
-
import {
|
|
21
|
-
import
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
import { resolveRecordInterfaceName, opParamsInterfaceName, opResultAliasName } from "./dbNaming.js";
|
|
26
|
-
import { renderHeader, renderRecordInterface, renderOpParamsInterface, renderOpResultAlias, RESULT_ALIASES_BLOCK, } from "./dbTemplates.js";
|
|
19
|
+
import { writeOrCheckGeneratedFiles, } from "../codegen-shared/generatedFiles.js";
|
|
20
|
+
import { describeDbType, } from "./dbTypeIR.js";
|
|
21
|
+
import { resolveRecordInterfaceName, opParamsInterfaceName, opResultAliasName, opsFactoryName, subscriptionsFactoryName, objectPropertyKey, } from "./dbNaming.js";
|
|
22
|
+
import { renderHeader, renderRecordInterface, renderOpParamsInterface, renderOpResultAlias, renderFactories, RESULT_ALIASES_BLOCK, } from "./dbTemplates.js";
|
|
23
|
+
export { inferArrayParamElementTypes, inferRequiredRecordFields, } from "./dbTypeIR.js";
|
|
27
24
|
const GENERATED_FILE_SUFFIX = ".generated.ts";
|
|
25
|
+
/**
|
|
26
|
+
* Map the naming-neutral pipeline-return IR to the interface-named descriptor
|
|
27
|
+
* the TS `renderOpResultAlias` template consumes.
|
|
28
|
+
*/
|
|
29
|
+
function mapPipelineReturn(ir, recordInterfaceByModel) {
|
|
30
|
+
switch (ir.kind) {
|
|
31
|
+
case "query":
|
|
32
|
+
return {
|
|
33
|
+
kind: "query",
|
|
34
|
+
recordInterfaceName: ir.modelName
|
|
35
|
+
? recordInterfaceByModel[ir.modelName] ?? null
|
|
36
|
+
: null,
|
|
37
|
+
projection: ir.projection,
|
|
38
|
+
};
|
|
39
|
+
case "count":
|
|
40
|
+
return { kind: "count" };
|
|
41
|
+
case "aggregate":
|
|
42
|
+
return { kind: "aggregate" };
|
|
43
|
+
case "opaque":
|
|
44
|
+
default:
|
|
45
|
+
return { kind: "opaque" };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
28
48
|
/**
|
|
29
49
|
* Render the in-memory `.generated.ts` content for a single database-type
|
|
30
50
|
* TOML. Exported so tests can assert on the rendered string directly.
|
|
31
51
|
*/
|
|
32
52
|
export function renderDbTypeFile(input) {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
//
|
|
36
|
-
// the [models.*] subtree through the shared js-bao loader (same path the
|
|
37
|
-
// server uses to validate the schema).
|
|
38
|
-
const tomlData = TOML.parse(tomlContent);
|
|
39
|
-
const { typeConfig, operations } = parseDatabaseTypeToml(tomlData);
|
|
40
|
-
// 1. Record interfaces (read shape) from [models.*].
|
|
41
|
-
const schemas = tomlData.models
|
|
42
|
-
? loadSchemaFromTomlString(TOML.stringify({ models: tomlData.models }), {
|
|
43
|
-
strict: false,
|
|
44
|
-
})
|
|
45
|
-
: [];
|
|
46
|
-
const stampedFields = collectStampedFields(typeConfig);
|
|
47
|
-
// model name → set of record fields the operation params prove are always
|
|
48
|
-
// supplied at create time (every `save` op that sets the field binds it to a
|
|
49
|
-
// `required: true` param). OR'd with the schema-level `required` flag below;
|
|
50
|
-
// inference only ever ADDS requiredness, never removes it. (#842)
|
|
51
|
-
const inferredRequired = inferRequiredRecordFields(operations);
|
|
52
|
-
// model name → resolved record interface name (used by query result aliases).
|
|
53
|
+
const ir = describeDbType(input);
|
|
54
|
+
// model name → resolved record interface name (used by query result aliases),
|
|
55
|
+
// with the same collision guard the inline implementation had.
|
|
53
56
|
const recordInterfaceByModel = {};
|
|
54
57
|
const seenInterfaceNames = new Map(); // interfaceName → modelName
|
|
55
|
-
for (const
|
|
56
|
-
const ifaceName = resolveRecordInterfaceName(
|
|
58
|
+
for (const rec of ir.records) {
|
|
59
|
+
const ifaceName = resolveRecordInterfaceName(rec.modelName, rec.className);
|
|
57
60
|
const prior = seenInterfaceNames.get(ifaceName);
|
|
58
|
-
if (prior !== undefined && prior !==
|
|
61
|
+
if (prior !== undefined && prior !== rec.modelName) {
|
|
59
62
|
throw new Error(`Record-interface name collision: models "${prior}" and ` +
|
|
60
|
-
`"${
|
|
63
|
+
`"${rec.modelName}" both produce interface "${ifaceName}". Add a ` +
|
|
61
64
|
`class_name override to one of them.`);
|
|
62
65
|
}
|
|
63
|
-
seenInterfaceNames.set(ifaceName,
|
|
64
|
-
recordInterfaceByModel[
|
|
66
|
+
seenInterfaceNames.set(ifaceName, rec.modelName);
|
|
67
|
+
recordInterfaceByModel[rec.modelName] = ifaceName;
|
|
65
68
|
}
|
|
66
69
|
const blocks = [];
|
|
67
|
-
blocks.push(renderHeader(fingerprint));
|
|
70
|
+
blocks.push(renderHeader(ir.fingerprint));
|
|
68
71
|
blocks.push(RESULT_ALIASES_BLOCK.trimEnd());
|
|
69
72
|
// Record interfaces, sorted by interface name for deterministic output.
|
|
70
|
-
const
|
|
71
|
-
for (const
|
|
72
|
-
const inferredForModel = inferredRequired.get(schema.name)?.fields;
|
|
73
|
-
const fields = Object.entries(schema.fields).map(([name, opts]) => ({
|
|
74
|
-
name,
|
|
75
|
-
type: opts.type,
|
|
76
|
-
required: opts.required === true ||
|
|
77
|
-
(opts.autoAssign === true && name === "id") ||
|
|
78
|
-
inferredForModel?.has(name) === true,
|
|
79
|
-
// Allowed-value set for string fields → string-literal union (#843).
|
|
80
|
-
// Threaded through the shared loader's FieldOptions.enum; validated
|
|
81
|
-
// (non-empty, all-string, string-only) by parseFieldOptions upstream.
|
|
82
|
-
enum: opts.enum,
|
|
83
|
-
}));
|
|
73
|
+
const sortedRecords = [...ir.records].sort((a, b) => recordInterfaceByModel[a.modelName].localeCompare(recordInterfaceByModel[b.modelName]));
|
|
74
|
+
for (const rec of sortedRecords) {
|
|
84
75
|
blocks.push(renderRecordInterface({
|
|
85
|
-
interfaceName: recordInterfaceByModel[
|
|
86
|
-
modelName:
|
|
87
|
-
fields,
|
|
88
|
-
stampedFields,
|
|
76
|
+
interfaceName: recordInterfaceByModel[rec.modelName],
|
|
77
|
+
modelName: rec.modelName,
|
|
78
|
+
fields: rec.fields,
|
|
79
|
+
stampedFields: ir.stampedFields,
|
|
89
80
|
}));
|
|
90
81
|
}
|
|
91
|
-
// Operation interfaces + result aliases, sorted by op name.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
for (const op of sortedOps) {
|
|
96
|
-
const params = paramsToFields(op.params);
|
|
82
|
+
// Operation interfaces + result aliases, already sorted by op name in the IR.
|
|
83
|
+
// Descriptors for the typed-ops factory (#1441), collected in the same order.
|
|
84
|
+
const factoryOps = [];
|
|
85
|
+
for (const op of ir.ops) {
|
|
97
86
|
blocks.push(renderOpParamsInterface({
|
|
98
|
-
interfaceName: opParamsInterfaceName(op.
|
|
99
|
-
opName: op.
|
|
100
|
-
params,
|
|
87
|
+
interfaceName: opParamsInterfaceName(op.opName),
|
|
88
|
+
opName: op.opName,
|
|
89
|
+
params: op.params,
|
|
101
90
|
}));
|
|
102
|
-
|
|
103
|
-
|
|
91
|
+
factoryOps.push({
|
|
92
|
+
propertyKey: objectPropertyKey(op.opName),
|
|
93
|
+
opName: op.opName,
|
|
94
|
+
paramsInterfaceName: opParamsInterfaceName(op.opName),
|
|
95
|
+
resultAliasName: opResultAliasName(op.opName),
|
|
96
|
+
hasParams: op.hasParams,
|
|
97
|
+
});
|
|
98
|
+
const recordInterfaceName = op.resultModelName
|
|
99
|
+
? recordInterfaceByModel[op.resultModelName] ?? null
|
|
104
100
|
: null;
|
|
101
|
+
const pipelineReturn = op.pipelineReturn
|
|
102
|
+
? mapPipelineReturn(op.pipelineReturn, recordInterfaceByModel)
|
|
103
|
+
: undefined;
|
|
105
104
|
blocks.push(renderOpResultAlias({
|
|
106
|
-
aliasName: opResultAliasName(op.
|
|
107
|
-
opName: op.
|
|
108
|
-
opType: op.
|
|
105
|
+
aliasName: opResultAliasName(op.opName),
|
|
106
|
+
opName: op.opName,
|
|
107
|
+
opType: op.opType,
|
|
109
108
|
recordInterfaceName,
|
|
109
|
+
projection: op.projection,
|
|
110
|
+
pipelineReturn,
|
|
111
|
+
}));
|
|
112
|
+
}
|
|
113
|
+
// Typed-subscriptions descriptors (#1544 Phase 2): map each subscription's
|
|
114
|
+
// model to its record interface (or a `Pick` when it declares `select`). The
|
|
115
|
+
// IR already validated that every model resolves and every select field is a
|
|
116
|
+
// known member, so this mapping never fails.
|
|
117
|
+
const factorySubscriptions = ir.subscriptions.map((sub) => {
|
|
118
|
+
const interfaceName = recordInterfaceByModel[sub.modelName];
|
|
119
|
+
const eventType = sub.select && sub.select.length > 0
|
|
120
|
+
? `Pick<${interfaceName}, ${sub.select
|
|
121
|
+
.map((f) => JSON.stringify(f))
|
|
122
|
+
.join(" | ")}>`
|
|
123
|
+
: interfaceName;
|
|
124
|
+
return {
|
|
125
|
+
propertyKey: objectPropertyKey(sub.subscriptionKey),
|
|
126
|
+
subscriptionKey: sub.subscriptionKey,
|
|
127
|
+
eventType,
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
// Typed-ops factory (#1441) + typed-subscriptions factory (#1544 Phase 2),
|
|
131
|
+
// sharing one structural client interface. Omitted entirely for a type with
|
|
132
|
+
// neither ops nor subscriptions.
|
|
133
|
+
if (factoryOps.length > 0 || factorySubscriptions.length > 0) {
|
|
134
|
+
blocks.push(renderFactories({
|
|
135
|
+
databaseType: input.databaseType,
|
|
136
|
+
opsFactoryName: opsFactoryName(input.databaseType),
|
|
137
|
+
subscriptionsFactoryName: subscriptionsFactoryName(input.databaseType),
|
|
138
|
+
ops: factoryOps,
|
|
139
|
+
subscriptions: factorySubscriptions,
|
|
110
140
|
}));
|
|
111
141
|
}
|
|
112
142
|
// Single trailing newline; blocks separated by a blank line.
|
|
113
143
|
return blocks.join("\n\n") + "\n";
|
|
114
144
|
}
|
|
115
145
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* record interface as OPTIONAL props.
|
|
120
|
-
*/
|
|
121
|
-
function collectStampedFields(typeConfig) {
|
|
122
|
-
const names = [];
|
|
123
|
-
const ts = typeConfig?.timestamps;
|
|
124
|
-
if (ts && typeof ts === "object") {
|
|
125
|
-
if (typeof ts.create === "string")
|
|
126
|
-
names.push(ts.create);
|
|
127
|
-
if (typeof ts.update === "string")
|
|
128
|
-
names.push(ts.update);
|
|
129
|
-
}
|
|
130
|
-
const apf = typeConfig?.autoPopulatedFields;
|
|
131
|
-
if (apf && typeof apf === "object") {
|
|
132
|
-
for (const key of Object.keys(apf))
|
|
133
|
-
names.push(key);
|
|
134
|
-
}
|
|
135
|
-
// De-dup, preserve first-seen order.
|
|
136
|
-
return [...new Set(names)];
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Convert the normalized op `params` map (`{ name: { type, required, enum? } }`)
|
|
140
|
-
* into a sorted list of `ParamField`. Sorted by name for deterministic
|
|
141
|
-
* output. A string param's `enum` (#861) is carried through so the emitter can
|
|
142
|
-
* render a string-literal union.
|
|
143
|
-
*/
|
|
144
|
-
function paramsToFields(params) {
|
|
145
|
-
if (!params || typeof params !== "object")
|
|
146
|
-
return [];
|
|
147
|
-
return Object.entries(params)
|
|
148
|
-
.map(([name, def]) => ({
|
|
149
|
-
name,
|
|
150
|
-
type: def?.type ?? "object",
|
|
151
|
-
required: def?.required === true,
|
|
152
|
-
// Allowed-value set for a string param → string-literal union (#861).
|
|
153
|
-
// `normalizeOperationFromToml` preserves `enum` upstream via its `...rest`
|
|
154
|
-
// spread; carry it through here so it reaches `ParamField`/the emitter.
|
|
155
|
-
enum: def?.enum,
|
|
156
|
-
}))
|
|
157
|
-
.sort((a, b) => a.name.localeCompare(b.name));
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Infer which record fields are always supplied at create time, by reading the
|
|
161
|
-
* `save` operation params (issue #842).
|
|
162
|
-
*
|
|
163
|
-
* A field is promoted to required for a model only if:
|
|
164
|
-
* - at least one `save` (create) op writes it from a bare `$params.X`
|
|
165
|
-
* binding, AND
|
|
166
|
-
* - EVERY `save` op that writes the field binds it to a param declared
|
|
167
|
-
* `required: true` (the "ALL writers agree" rule).
|
|
168
|
-
*
|
|
169
|
-
* Deliberately conservative:
|
|
170
|
-
* - `patch` (and every non-`save` inner op) is excluded — partial updates
|
|
171
|
-
* don't guarantee creation-time presence.
|
|
172
|
-
* - whole-object saves (`data = "$params.X"`, a string rather than a
|
|
173
|
-
* per-field map) carry no field-level mapping, so no field can be promoted
|
|
174
|
-
* from them (Q4 skip).
|
|
175
|
-
* - only an EXACT top-level bare `$params.X` value counts (the whole binding
|
|
176
|
-
* value must match `^\$params\.X$`, and `X` must be a declared top-level
|
|
177
|
-
* param). A literal, computed, partially-interpolated value, or a nested
|
|
178
|
-
* path (`$params.obj.sub`) never promotes a field — a nested sub-property
|
|
179
|
-
* may be absent even when the top-level object param is required. This is
|
|
180
|
-
* deliberately stricter than the CLI's lenient `collectParamRefs`
|
|
181
|
-
* first-segment rule, which is fine for its validation use but would
|
|
182
|
-
* wrongly promote nested bindings here.
|
|
183
|
-
* - inner ops are matched to the record model by the inner op's own
|
|
184
|
-
* `modelName` when present, falling back to the enclosing operation's
|
|
185
|
-
* `modelName`.
|
|
186
|
-
*
|
|
187
|
-
* Pure: no I/O, no mutation of the input. The caller OR's the result with the
|
|
188
|
-
* schema-level `required` flag, so inference only ever ADDS requiredness.
|
|
189
|
-
*/
|
|
190
|
-
export function inferRequiredRecordFields(operations) {
|
|
191
|
-
// model → field → running verdict. `true` = every save op seen so far that
|
|
192
|
-
// sets the field bound it to a required param; `false` = at least one save op
|
|
193
|
-
// set it from an optional/absent param (sticky — never recovers).
|
|
194
|
-
const verdicts = new Map();
|
|
195
|
-
for (const op of operations ?? []) {
|
|
196
|
-
if (!op || op.type !== "mutation")
|
|
197
|
-
continue;
|
|
198
|
-
const innerOps = op.definition?.operations;
|
|
199
|
-
if (!Array.isArray(innerOps))
|
|
200
|
-
continue;
|
|
201
|
-
const params = op.params && typeof op.params === "object" ? op.params : {};
|
|
202
|
-
for (const inner of innerOps) {
|
|
203
|
-
if (!inner || inner.op !== "save")
|
|
204
|
-
continue;
|
|
205
|
-
// Whole-object save (`data` is a string $params ref) has no per-field
|
|
206
|
-
// map — skip (Q4).
|
|
207
|
-
const data = inner.data;
|
|
208
|
-
if (!data || typeof data !== "object" || Array.isArray(data))
|
|
209
|
-
continue;
|
|
210
|
-
const modelName = inner.modelName ?? op.modelName;
|
|
211
|
-
if (typeof modelName !== "string" || modelName === "")
|
|
212
|
-
continue;
|
|
213
|
-
let fieldVerdicts = verdicts.get(modelName);
|
|
214
|
-
if (!fieldVerdicts) {
|
|
215
|
-
fieldVerdicts = new Map();
|
|
216
|
-
verdicts.set(modelName, fieldVerdicts);
|
|
217
|
-
}
|
|
218
|
-
for (const [field, value] of Object.entries(data)) {
|
|
219
|
-
// Only an EXACT top-level bare binding (`$params.X`, no further `.sub`
|
|
220
|
-
// path) counts. `collectParamRefs` is intentionally lenient — it
|
|
221
|
-
// returns the FIRST dotted segment, so `$params.profile.name` yields
|
|
222
|
-
// `["profile"]` and would wrongly promote a field that actually reads
|
|
223
|
-
// a nested sub-property that may be absent. We match the whole value
|
|
224
|
-
// against `^\$params\.X$` here instead, leaving `collectParamRefs`
|
|
225
|
-
// untouched for its validation use. Partial interpolation
|
|
226
|
-
// (`prefix-$params.X`), literals, and nested paths all fail this match
|
|
227
|
-
// and therefore never promote a field.
|
|
228
|
-
const match = typeof value === "string"
|
|
229
|
-
? value.match(/^\$params\.([A-Za-z0-9_]+)$/)
|
|
230
|
-
: null;
|
|
231
|
-
if (!match) {
|
|
232
|
-
// Not an exact top-level bare param binding — this save op cannot
|
|
233
|
-
// prove the field required. Mark it not-required for this writer.
|
|
234
|
-
fieldVerdicts.set(field, false);
|
|
235
|
-
continue;
|
|
236
|
-
}
|
|
237
|
-
const paramName = match[1];
|
|
238
|
-
// The matched name must resolve to a declared top-level param.
|
|
239
|
-
const required = params[paramName]?.required === true;
|
|
240
|
-
const prior = fieldVerdicts.get(field);
|
|
241
|
-
// ALL-writers semantics: stays `true` only while every save writer
|
|
242
|
-
// agrees; one disagreeing writer flips it to `false` permanently.
|
|
243
|
-
fieldVerdicts.set(field, prior === false ? false : required);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
const result = new Map();
|
|
248
|
-
for (const [modelName, fieldVerdicts] of verdicts) {
|
|
249
|
-
const fields = new Set();
|
|
250
|
-
for (const [field, verdict] of fieldVerdicts) {
|
|
251
|
-
if (verdict)
|
|
252
|
-
fields.add(field);
|
|
253
|
-
}
|
|
254
|
-
if (fields.size > 0)
|
|
255
|
-
result.set(modelName, { fields });
|
|
256
|
-
}
|
|
257
|
-
return result;
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Run codegen end-to-end across one or more database-type TOML inputs.
|
|
146
|
+
* Run codegen end-to-end across one or more database-type TOML inputs. The
|
|
147
|
+
* disk lifecycle (write / `--check` / stale cleanup) is delegated to the
|
|
148
|
+
* shared `writeOrCheckGeneratedFiles` (shared with `workflows codegen`).
|
|
261
149
|
*/
|
|
262
150
|
export async function generateDbTypes(options) {
|
|
263
151
|
const outAbs = path.resolve(options.outputDir);
|
|
@@ -266,106 +154,14 @@ export async function generateDbTypes(options) {
|
|
|
266
154
|
const filePath = path.join(outAbs, `${input.databaseType}${GENERATED_FILE_SUFFIX}`);
|
|
267
155
|
filesToWrite.set(filePath, renderDbTypeFile(input));
|
|
268
156
|
}
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
writtenFiles.sort();
|
|
280
|
-
deletedFiles.sort();
|
|
281
|
-
return { writtenFiles, deletedFiles, mismatches: [] };
|
|
282
|
-
}
|
|
283
|
-
async function runCheck(outAbs, filesToWrite, singleType) {
|
|
284
|
-
const mismatches = [];
|
|
285
|
-
for (const [filePath, expected] of filesToWrite) {
|
|
286
|
-
let actual;
|
|
287
|
-
try {
|
|
288
|
-
actual = await fsp.readFile(filePath, "utf-8");
|
|
289
|
-
}
|
|
290
|
-
catch (err) {
|
|
291
|
-
if (err && err.code === "ENOENT") {
|
|
292
|
-
actual = null;
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
throw err;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
if (actual === null) {
|
|
299
|
-
mismatches.push({ filePath, reason: "missing" });
|
|
300
|
-
}
|
|
301
|
-
else if (actual !== expected) {
|
|
302
|
-
mismatches.push({ filePath, reason: "differs" });
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
// Stale on-disk generated files the generator wouldn't produce also count
|
|
306
|
-
// as a mismatch (so CI catches dropped database types). Skip this when the
|
|
307
|
-
// run was filtered to a single type: `filesToWrite` is then a partial set,
|
|
308
|
-
// so sibling types' files are not "stale" — they just weren't in scope.
|
|
309
|
-
if (!singleType && (await dirExists(outAbs))) {
|
|
310
|
-
const onDisk = await listOwnedGeneratedFiles(outAbs);
|
|
311
|
-
const expectedPaths = new Set(filesToWrite.keys());
|
|
312
|
-
for (const filePath of onDisk) {
|
|
313
|
-
if (!expectedPaths.has(filePath)) {
|
|
314
|
-
mismatches.push({ filePath, reason: "stale" });
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
return {
|
|
319
|
-
writtenFiles: [...filesToWrite.keys()].sort(),
|
|
320
|
-
deletedFiles: [],
|
|
321
|
-
mismatches,
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
async function cleanupGeneratedOutputs(outDir, filesToWrite, singleType) {
|
|
325
|
-
// A single-type filter run only owns its own file(s); the `filesToWrite`
|
|
326
|
-
// set does not represent the full set of generated files. Skip orphan
|
|
327
|
-
// cleanup so sibling types' `*.generated.ts` are not silently destroyed.
|
|
328
|
-
// Full cleanup only happens on the unfiltered "generate all" run.
|
|
329
|
-
if (singleType)
|
|
330
|
-
return [];
|
|
331
|
-
const onDisk = await listOwnedGeneratedFiles(outDir);
|
|
332
|
-
const expectedPaths = new Set(filesToWrite.keys());
|
|
333
|
-
const deleted = [];
|
|
334
|
-
for (const filePath of onDisk) {
|
|
335
|
-
if (!expectedPaths.has(filePath)) {
|
|
336
|
-
await fsp.unlink(filePath);
|
|
337
|
-
deleted.push(filePath);
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
return deleted;
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* List only the files in `outDir` that the generator owns: any file ending
|
|
344
|
-
* in `.generated.ts`. Hand-written files are never touched.
|
|
345
|
-
*/
|
|
346
|
-
async function listOwnedGeneratedFiles(outDir) {
|
|
347
|
-
if (!(await dirExists(outDir)))
|
|
348
|
-
return [];
|
|
349
|
-
const entries = await fsp.readdir(outDir, { withFileTypes: true });
|
|
350
|
-
const owned = [];
|
|
351
|
-
for (const entry of entries) {
|
|
352
|
-
if (!entry.isFile())
|
|
353
|
-
continue;
|
|
354
|
-
if (entry.name.endsWith(GENERATED_FILE_SUFFIX)) {
|
|
355
|
-
owned.push(path.join(outDir, entry.name));
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
return owned;
|
|
359
|
-
}
|
|
360
|
-
async function dirExists(dir) {
|
|
361
|
-
try {
|
|
362
|
-
const stat = await fsp.stat(dir);
|
|
363
|
-
return stat.isDirectory();
|
|
364
|
-
}
|
|
365
|
-
catch (err) {
|
|
366
|
-
if (err && err.code === "ENOENT")
|
|
367
|
-
return false;
|
|
368
|
-
throw err;
|
|
369
|
-
}
|
|
157
|
+
return await writeOrCheckGeneratedFiles({
|
|
158
|
+
outputDir: outAbs,
|
|
159
|
+
filesToWrite,
|
|
160
|
+
check: options.check,
|
|
161
|
+
// A single-type filter run owns only a subset of the generated files, so
|
|
162
|
+
// orphan cleanup / stale detection must be scoped to the filtered file.
|
|
163
|
+
fullOwnership: options.singleType !== true,
|
|
164
|
+
generatedSuffix: GENERATED_FILE_SUFFIX,
|
|
165
|
+
});
|
|
370
166
|
}
|
|
371
167
|
//# sourceMappingURL=dbGenerator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dbGenerator.js","sourceRoot":"","sources":["../../../../src/lib/db-codegen/dbGenerator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dbGenerator.js","sourceRoot":"","sources":["../../../../src/lib/db-codegen/dbGenerator.ts"],"names":[],"mappings":"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"}
|