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.
Files changed (173) hide show
  1. package/README.md +38 -10
  2. package/dist/bin/primitive.js +8 -0
  3. package/dist/bin/primitive.js.map +1 -1
  4. package/dist/src/commands/apps.js +54 -2
  5. package/dist/src/commands/apps.js.map +1 -1
  6. package/dist/src/commands/auth.js +16 -6
  7. package/dist/src/commands/auth.js.map +1 -1
  8. package/dist/src/commands/blob-buckets.js +84 -7
  9. package/dist/src/commands/blob-buckets.js.map +1 -1
  10. package/dist/src/commands/catalog.js +3 -3
  11. package/dist/src/commands/catalog.js.map +1 -1
  12. package/dist/src/commands/collections.js +12 -9
  13. package/dist/src/commands/collections.js.map +1 -1
  14. package/dist/src/commands/databases.js +220 -82
  15. package/dist/src/commands/databases.js.map +1 -1
  16. package/dist/src/commands/documents.js +77 -0
  17. package/dist/src/commands/documents.js.map +1 -1
  18. package/dist/src/commands/group-type-configs.js +1 -9
  19. package/dist/src/commands/group-type-configs.js.map +1 -1
  20. package/dist/src/commands/groups.js +12 -6
  21. package/dist/src/commands/groups.js.map +1 -1
  22. package/dist/src/commands/guides.d.ts +161 -0
  23. package/dist/src/commands/guides.js +502 -84
  24. package/dist/src/commands/guides.js.map +1 -1
  25. package/dist/src/commands/integrations.js +2 -2
  26. package/dist/src/commands/integrations.js.map +1 -1
  27. package/dist/src/commands/metadata.d.ts +2 -0
  28. package/dist/src/commands/metadata.js +344 -0
  29. package/dist/src/commands/metadata.js.map +1 -0
  30. package/dist/src/commands/prompts.js +2 -2
  31. package/dist/src/commands/prompts.js.map +1 -1
  32. package/dist/src/commands/rule-sets.d.ts +1 -0
  33. package/dist/src/commands/rule-sets.js +25 -3
  34. package/dist/src/commands/rule-sets.js.map +1 -1
  35. package/dist/src/commands/scripts.d.ts +2 -0
  36. package/dist/src/commands/scripts.js +667 -0
  37. package/dist/src/commands/scripts.js.map +1 -0
  38. package/dist/src/commands/settings.d.ts +15 -0
  39. package/dist/src/commands/settings.js +102 -0
  40. package/dist/src/commands/settings.js.map +1 -0
  41. package/dist/src/commands/sync-app-settings.d.ts +105 -0
  42. package/dist/src/commands/sync-app-settings.js +339 -0
  43. package/dist/src/commands/sync-app-settings.js.map +1 -0
  44. package/dist/src/commands/sync.d.ts +204 -9
  45. package/dist/src/commands/sync.js +1706 -371
  46. package/dist/src/commands/sync.js.map +1 -1
  47. package/dist/src/commands/vars.d.ts +8 -0
  48. package/dist/src/commands/vars.js +110 -0
  49. package/dist/src/commands/vars.js.map +1 -0
  50. package/dist/src/commands/webhooks.js +17 -3
  51. package/dist/src/commands/webhooks.js.map +1 -1
  52. package/dist/src/commands/workflows.d.ts +30 -0
  53. package/dist/src/commands/workflows.js +667 -59
  54. package/dist/src/commands/workflows.js.map +1 -1
  55. package/dist/src/lib/api-client.d.ts +122 -18
  56. package/dist/src/lib/api-client.js +131 -2
  57. package/dist/src/lib/api-client.js.map +1 -1
  58. package/dist/src/lib/app-settings-descriptor.d.ts +108 -0
  59. package/dist/src/lib/app-settings-descriptor.js +250 -0
  60. package/dist/src/lib/app-settings-descriptor.js.map +1 -0
  61. package/dist/src/lib/batch.d.ts +26 -0
  62. package/dist/src/lib/batch.js +32 -0
  63. package/dist/src/lib/batch.js.map +1 -0
  64. package/dist/src/lib/block-layout.d.ts +160 -0
  65. package/dist/src/lib/block-layout.js +451 -0
  66. package/dist/src/lib/block-layout.js.map +1 -0
  67. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +76 -0
  68. package/dist/src/lib/codegen-shared/generatedFiles.js +144 -0
  69. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  70. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
  71. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
  72. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  73. package/dist/src/lib/config-toml.d.ts +10 -0
  74. package/dist/src/lib/config-toml.js +42 -0
  75. package/dist/src/lib/config-toml.js.map +1 -0
  76. package/dist/src/lib/config.d.ts +16 -0
  77. package/dist/src/lib/config.js +41 -0
  78. package/dist/src/lib/config.js.map +1 -1
  79. package/dist/src/lib/constants.d.ts +9 -0
  80. package/dist/src/lib/constants.js +9 -0
  81. package/dist/src/lib/constants.js.map +1 -1
  82. package/dist/src/lib/csv.d.ts +1 -2
  83. package/dist/src/lib/csv.js +3 -8
  84. package/dist/src/lib/csv.js.map +1 -1
  85. package/dist/src/lib/db-codegen/dbGenerator.d.ts +21 -65
  86. package/dist/src/lib/db-codegen/dbGenerator.js +117 -321
  87. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -1
  88. package/dist/src/lib/db-codegen/dbNaming.d.ts +37 -0
  89. package/dist/src/lib/db-codegen/dbNaming.js +70 -0
  90. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -1
  91. package/dist/src/lib/db-codegen/dbTemplates.d.ts +165 -5
  92. package/dist/src/lib/db-codegen/dbTemplates.js +292 -16
  93. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
  94. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +7 -3
  95. package/dist/src/lib/db-codegen/dbTsTypes.js +23 -1
  96. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -1
  97. package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
  98. package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
  99. package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
  100. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +101 -0
  101. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +200 -0
  102. package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
  103. package/dist/src/lib/generated-allowlist.js +43 -0
  104. package/dist/src/lib/generated-allowlist.js.map +1 -1
  105. package/dist/src/lib/init-config.js +2 -2
  106. package/dist/src/lib/init-config.js.map +1 -1
  107. package/dist/src/lib/output.d.ts +25 -5
  108. package/dist/src/lib/output.js +32 -4
  109. package/dist/src/lib/output.js.map +1 -1
  110. package/dist/src/lib/query-operators.d.ts +43 -0
  111. package/dist/src/lib/query-operators.js +80 -0
  112. package/dist/src/lib/query-operators.js.map +1 -0
  113. package/dist/src/lib/swift-codegen/dbGenerator.d.ts +68 -0
  114. package/dist/src/lib/swift-codegen/dbGenerator.js +380 -0
  115. package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
  116. package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
  117. package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
  118. package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
  119. package/dist/src/lib/swift-codegen/generator.d.ts +84 -0
  120. package/dist/src/lib/swift-codegen/generator.js +178 -0
  121. package/dist/src/lib/swift-codegen/generator.js.map +1 -0
  122. package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
  123. package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
  124. package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
  125. package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
  126. package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
  127. package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
  128. package/dist/src/lib/sync-resource-types.d.ts +225 -0
  129. package/dist/src/lib/sync-resource-types.js +394 -0
  130. package/dist/src/lib/sync-resource-types.js.map +1 -0
  131. package/dist/src/lib/toml-database-config.d.ts +10 -19
  132. package/dist/src/lib/toml-database-config.js +28 -59
  133. package/dist/src/lib/toml-database-config.js.map +1 -1
  134. package/dist/src/lib/toml-metadata-config.d.ts +147 -0
  135. package/dist/src/lib/toml-metadata-config.js +463 -0
  136. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  137. package/dist/src/lib/toml-native-form.d.ts +46 -0
  138. package/dist/src/lib/toml-native-form.js +78 -0
  139. package/dist/src/lib/toml-native-form.js.map +1 -0
  140. package/dist/src/lib/toml-params-validator.d.ts +34 -0
  141. package/dist/src/lib/toml-params-validator.js +118 -3
  142. package/dist/src/lib/toml-params-validator.js.map +1 -1
  143. package/dist/src/lib/workflow-apply.d.ts +86 -0
  144. package/dist/src/lib/workflow-apply.js +127 -0
  145. package/dist/src/lib/workflow-apply.js.map +1 -0
  146. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  147. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  148. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  149. package/dist/src/lib/workflow-codegen/generator.d.ts +87 -0
  150. package/dist/src/lib/workflow-codegen/generator.js +290 -0
  151. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  152. package/dist/src/lib/workflow-codegen/invokerIR.d.ts +85 -0
  153. package/dist/src/lib/workflow-codegen/invokerIR.js +71 -0
  154. package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
  155. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  156. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  157. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  158. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +64 -0
  159. package/dist/src/lib/workflow-codegen/schemaToTs.js +282 -0
  160. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  161. package/dist/src/lib/workflow-fragments.js +3 -3
  162. package/dist/src/lib/workflow-fragments.js.map +1 -1
  163. package/dist/src/lib/workflow-payload.d.ts +68 -0
  164. package/dist/src/lib/workflow-payload.js +150 -0
  165. package/dist/src/lib/workflow-payload.js.map +1 -0
  166. package/dist/src/lib/workflow-toml-validator.d.ts +1 -1
  167. package/dist/src/lib/workflow-toml-validator.js +37 -1
  168. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  169. package/dist/src/types/index.d.ts +11 -0
  170. package/dist/src/validators.d.ts +4 -3
  171. package/dist/src/validators.js +6 -5
  172. package/dist/src/validators.js.map +1 -1
  173. 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
- * Reuses the codegen-v2 machinery:
10
- * - `loadSchemaFromTomlString` (the shared `[models.*]` parser) for record
11
- * interfaces — the database-type `[models.*]` blocks round-trip through
12
- * the same loader and the same `FieldType` vocabulary.
13
- * - The banner + fingerprint header pattern and stale-output cleanup.
14
- *
15
- * Adds the OPERATIONS half (op-params interfaces + per-op result aliases)
16
- * that codegen-v2 has no analog for. Op return contracts are NOT stored in
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
- export interface DbCodegenInput {
20
- /** Database type name (drives the output filename). */
21
- databaseType: string;
22
- /** Path to the source `database-types/<type>.toml` file. */
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
- export interface DbCheckMismatch {
57
- filePath: string;
58
- reason: "missing" | "differs" | "stale";
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
- * Per-model result of {@link inferRequiredRecordFields}. Shaped as an object
67
- * (rather than a bare `Set`) so it can grow additional inferred metadata later
68
- * without changing the call-site contract — e.g. future alignment with #845's
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
- * Reuses the codegen-v2 machinery:
10
- * - `loadSchemaFromTomlString` (the shared `[models.*]` parser) for record
11
- * interfaces — the database-type `[models.*]` blocks round-trip through
12
- * the same loader and the same `FieldType` vocabulary.
13
- * - The banner + fingerprint header pattern and stale-output cleanup.
14
- *
15
- * Adds the OPERATIONS half (op-params interfaces + per-op result aliases)
16
- * that codegen-v2 has no analog for. Op return contracts are NOT stored in
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 { promises as fsp } from "fs";
21
- import * as TOML from "@iarna/toml";
22
- import { loadSchemaFromTomlString } from "js-bao";
23
- import { parseDatabaseTypeToml } from "../../commands/sync.js";
24
- import { fingerprintToml } from "./dbFingerprint.js";
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 { tomlContent } = input;
34
- const fingerprint = fingerprintToml(tomlContent);
35
- // Parse the raw TOML once for the [type] / [[operations]] data, and route
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 schema of schemas) {
56
- const ifaceName = resolveRecordInterfaceName(schema.name, schema.options?.className);
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 !== schema.name) {
61
+ if (prior !== undefined && prior !== rec.modelName) {
59
62
  throw new Error(`Record-interface name collision: models "${prior}" and ` +
60
- `"${schema.name}" both produce interface "${ifaceName}". Add a ` +
63
+ `"${rec.modelName}" both produce interface "${ifaceName}". Add a ` +
61
64
  `class_name override to one of them.`);
62
65
  }
63
- seenInterfaceNames.set(ifaceName, schema.name);
64
- recordInterfaceByModel[schema.name] = ifaceName;
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 sortedSchemas = [...schemas].sort((a, b) => recordInterfaceByModel[a.name].localeCompare(recordInterfaceByModel[b.name]));
71
- for (const schema of sortedSchemas) {
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[schema.name],
86
- modelName: schema.name,
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
- const sortedOps = [...operations]
93
- .filter((op) => op && typeof op.name === "string")
94
- .sort((a, b) => a.name.localeCompare(b.name));
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.name),
99
- opName: op.name,
100
- params,
87
+ interfaceName: opParamsInterfaceName(op.opName),
88
+ opName: op.opName,
89
+ params: op.params,
101
90
  }));
102
- const recordInterfaceName = op.type === "query" && op.modelName
103
- ? recordInterfaceByModel[op.modelName] ?? null
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.name),
107
- opName: op.name,
108
- opType: op.type,
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
- * Collect the server-stamped field names from the parsed [type] config:
117
- * timestamps (`create`/`update` field names) + auto-populated field names
118
- * (the keys of the `autoPopulatedFields` map). These appear on the READ
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
- if (options.check === true) {
270
- return await runCheck(outAbs, filesToWrite, options.singleType === true);
271
- }
272
- await fsp.mkdir(outAbs, { recursive: true });
273
- const deletedFiles = await cleanupGeneratedOutputs(outAbs, filesToWrite, options.singleType === true);
274
- const writtenFiles = [];
275
- for (const [filePath, content] of filesToWrite) {
276
- await fsp.writeFile(filePath, content, "utf-8");
277
- writtenFiles.push(filePath);
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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"}