primitive-admin 1.0.52 → 1.0.54

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 (141) hide show
  1. package/README.md +38 -10
  2. package/dist/bin/primitive.js +6 -0
  3. package/dist/bin/primitive.js.map +1 -1
  4. package/dist/src/commands/auth.js +16 -6
  5. package/dist/src/commands/auth.js.map +1 -1
  6. package/dist/src/commands/blob-buckets.js +84 -7
  7. package/dist/src/commands/blob-buckets.js.map +1 -1
  8. package/dist/src/commands/catalog.js +3 -3
  9. package/dist/src/commands/catalog.js.map +1 -1
  10. package/dist/src/commands/collections.js +12 -9
  11. package/dist/src/commands/collections.js.map +1 -1
  12. package/dist/src/commands/database-types.js +11 -1
  13. package/dist/src/commands/database-types.js.map +1 -1
  14. package/dist/src/commands/databases.js +197 -74
  15. package/dist/src/commands/databases.js.map +1 -1
  16. package/dist/src/commands/group-type-configs.js +1 -9
  17. package/dist/src/commands/group-type-configs.js.map +1 -1
  18. package/dist/src/commands/groups.js +12 -6
  19. package/dist/src/commands/groups.js.map +1 -1
  20. package/dist/src/commands/guides.d.ts +161 -0
  21. package/dist/src/commands/guides.js +502 -84
  22. package/dist/src/commands/guides.js.map +1 -1
  23. package/dist/src/commands/init.js +77 -45
  24. package/dist/src/commands/init.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/sync.d.ts +212 -16
  39. package/dist/src/commands/sync.js +1688 -287
  40. package/dist/src/commands/sync.js.map +1 -1
  41. package/dist/src/commands/vars.d.ts +8 -0
  42. package/dist/src/commands/vars.js +110 -0
  43. package/dist/src/commands/vars.js.map +1 -0
  44. package/dist/src/commands/webhooks.js +17 -3
  45. package/dist/src/commands/webhooks.js.map +1 -1
  46. package/dist/src/commands/workflows.d.ts +30 -0
  47. package/dist/src/commands/workflows.js +651 -52
  48. package/dist/src/commands/workflows.js.map +1 -1
  49. package/dist/src/lib/api-client.d.ts +123 -19
  50. package/dist/src/lib/api-client.js +128 -4
  51. package/dist/src/lib/api-client.js.map +1 -1
  52. package/dist/src/lib/batch.d.ts +26 -0
  53. package/dist/src/lib/batch.js +32 -0
  54. package/dist/src/lib/batch.js.map +1 -0
  55. package/dist/src/lib/block-layout.d.ts +160 -0
  56. package/dist/src/lib/block-layout.js +451 -0
  57. package/dist/src/lib/block-layout.js.map +1 -0
  58. package/dist/src/lib/codegen-shared/generatedFiles.d.ts +61 -0
  59. package/dist/src/lib/codegen-shared/generatedFiles.js +127 -0
  60. package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
  61. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
  62. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
  63. package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
  64. package/dist/src/lib/config-toml.d.ts +10 -0
  65. package/dist/src/lib/config-toml.js +42 -0
  66. package/dist/src/lib/config-toml.js.map +1 -0
  67. package/dist/src/lib/config.d.ts +16 -0
  68. package/dist/src/lib/config.js +41 -0
  69. package/dist/src/lib/config.js.map +1 -1
  70. package/dist/src/lib/constants.d.ts +9 -0
  71. package/dist/src/lib/constants.js +9 -0
  72. package/dist/src/lib/constants.js.map +1 -1
  73. package/dist/src/lib/csv.d.ts +1 -2
  74. package/dist/src/lib/csv.js +3 -8
  75. package/dist/src/lib/csv.js.map +1 -1
  76. package/dist/src/lib/db-codegen/dbGenerator.d.ts +35 -7
  77. package/dist/src/lib/db-codegen/dbGenerator.js +384 -125
  78. package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -1
  79. package/dist/src/lib/db-codegen/dbNaming.d.ts +29 -0
  80. package/dist/src/lib/db-codegen/dbNaming.js +58 -0
  81. package/dist/src/lib/db-codegen/dbNaming.js.map +1 -1
  82. package/dist/src/lib/db-codegen/dbTemplates.d.ts +114 -5
  83. package/dist/src/lib/db-codegen/dbTemplates.js +163 -16
  84. package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
  85. package/dist/src/lib/db-codegen/dbTsTypes.d.ts +7 -3
  86. package/dist/src/lib/db-codegen/dbTsTypes.js +23 -1
  87. package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -1
  88. package/dist/src/lib/generated-allowlist.js +52 -0
  89. package/dist/src/lib/generated-allowlist.js.map +1 -1
  90. package/dist/src/lib/init-config.d.ts +13 -0
  91. package/dist/src/lib/init-config.js +21 -2
  92. package/dist/src/lib/init-config.js.map +1 -1
  93. package/dist/src/lib/output.d.ts +42 -5
  94. package/dist/src/lib/output.js +70 -4
  95. package/dist/src/lib/output.js.map +1 -1
  96. package/dist/src/lib/query-operators.d.ts +43 -0
  97. package/dist/src/lib/query-operators.js +80 -0
  98. package/dist/src/lib/query-operators.js.map +1 -0
  99. package/dist/src/lib/template.d.ts +9 -5
  100. package/dist/src/lib/template.js +58 -45
  101. package/dist/src/lib/template.js.map +1 -1
  102. package/dist/src/lib/toml-database-config.d.ts +10 -19
  103. package/dist/src/lib/toml-database-config.js +28 -59
  104. package/dist/src/lib/toml-database-config.js.map +1 -1
  105. package/dist/src/lib/toml-metadata-config.d.ts +147 -0
  106. package/dist/src/lib/toml-metadata-config.js +463 -0
  107. package/dist/src/lib/toml-metadata-config.js.map +1 -0
  108. package/dist/src/lib/toml-native-form.d.ts +46 -0
  109. package/dist/src/lib/toml-native-form.js +78 -0
  110. package/dist/src/lib/toml-native-form.js.map +1 -0
  111. package/dist/src/lib/toml-params-validator.d.ts +34 -0
  112. package/dist/src/lib/toml-params-validator.js +118 -3
  113. package/dist/src/lib/toml-params-validator.js.map +1 -1
  114. package/dist/src/lib/workflow-apply.d.ts +86 -0
  115. package/dist/src/lib/workflow-apply.js +127 -0
  116. package/dist/src/lib/workflow-apply.js.map +1 -0
  117. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
  118. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
  119. package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
  120. package/dist/src/lib/workflow-codegen/generator.d.ts +74 -0
  121. package/dist/src/lib/workflow-codegen/generator.js +215 -0
  122. package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
  123. package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
  124. package/dist/src/lib/workflow-codegen/naming.js +81 -0
  125. package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
  126. package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +64 -0
  127. package/dist/src/lib/workflow-codegen/schemaToTs.js +282 -0
  128. package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
  129. package/dist/src/lib/workflow-fragments.js +3 -3
  130. package/dist/src/lib/workflow-fragments.js.map +1 -1
  131. package/dist/src/lib/workflow-payload.d.ts +68 -0
  132. package/dist/src/lib/workflow-payload.js +150 -0
  133. package/dist/src/lib/workflow-payload.js.map +1 -0
  134. package/dist/src/lib/workflow-toml-validator.d.ts +1 -1
  135. package/dist/src/lib/workflow-toml-validator.js +37 -1
  136. package/dist/src/lib/workflow-toml-validator.js.map +1 -1
  137. package/dist/src/types/index.d.ts +11 -0
  138. package/dist/src/validators.d.ts +4 -3
  139. package/dist/src/validators.js +6 -5
  140. package/dist/src/validators.js.map +1 -1
  141. package/package.json +5 -3
@@ -13,18 +13,30 @@
13
13
  * - The banner + fingerprint header pattern and stale-output cleanup.
14
14
  *
15
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`.
16
+ * that codegen-v2 has no analog for. A result alias is derived from `op.type`
17
+ * and, where the shape is derivable, the op's parsed `definition`: a query op's
18
+ * `projection` (#1439), a mutation op's step kinds (#1438), and a pipeline op's
19
+ * `return` step (#1437). This file resolves those into the small descriptors
20
+ * the templates consume; the templates stay pure string-emitters.
18
21
  */
19
22
  import * as path from "path";
20
- import { promises as fsp } from "fs";
21
- import * as TOML from "@iarna/toml";
23
+ import { parseConfigToml, stringifyConfigToml } from "../config-toml.js";
22
24
  import { loadSchemaFromTomlString } from "js-bao";
23
25
  import { parseDatabaseTypeToml } from "../../commands/sync.js";
26
+ import { writeOrCheckGeneratedFiles, } from "../codegen-shared/generatedFiles.js";
24
27
  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";
28
+ import { tsTypeForDbFieldType } from "./dbTsTypes.js";
29
+ import { resolveRecordInterfaceName, opParamsInterfaceName, opResultAliasName, opsFactoryName, opPropertyKey, } from "./dbNaming.js";
30
+ import { renderHeader, renderRecordInterface, renderOpParamsInterface, renderOpResultAlias, renderOpsFactory, RESULT_ALIASES_BLOCK, } from "./dbTemplates.js";
27
31
  const GENERATED_FILE_SUFFIX = ".generated.ts";
32
+ /**
33
+ * Op-param types that declare a scalar value (#1488). A param carrying one of
34
+ * these explicit declarations is validated by the runtime as that scalar, so
35
+ * array-element inference must not rewrite it to an array type in the generated
36
+ * interface. Keep in step with the runtime's scalar coercion list
37
+ * (`MODEL_PARAM_SCALAR_TYPES` in `database-operations-controller.ts`).
38
+ */
39
+ const SCALAR_PARAM_TYPES = new Set(["string", "number", "boolean", "integer"]);
28
40
  /**
29
41
  * Render the in-memory `.generated.ts` content for a single database-type
30
42
  * TOML. Exported so tests can assert on the rendered string directly.
@@ -35,11 +47,11 @@ export function renderDbTypeFile(input) {
35
47
  // Parse the raw TOML once for the [type] / [[operations]] data, and route
36
48
  // the [models.*] subtree through the shared js-bao loader (same path the
37
49
  // server uses to validate the schema).
38
- const tomlData = TOML.parse(tomlContent);
50
+ const tomlData = parseConfigToml(tomlContent);
39
51
  const { typeConfig, operations } = parseDatabaseTypeToml(tomlData);
40
52
  // 1. Record interfaces (read shape) from [models.*].
41
53
  const schemas = tomlData.models
42
- ? loadSchemaFromTomlString(TOML.stringify({ models: tomlData.models }), {
54
+ ? loadSchemaFromTomlString(stringifyConfigToml({ models: tomlData.models }), {
43
55
  strict: false,
44
56
  })
45
57
  : [];
@@ -51,6 +63,22 @@ export function renderDbTypeFile(input) {
51
63
  const inferredRequired = inferRequiredRecordFields(operations);
52
64
  // model name → resolved record interface name (used by query result aliases).
53
65
  const recordInterfaceByModel = {};
66
+ // model name → the field names that appear on its record interface (declared
67
+ // fields + server-stamped fields). Used to guard projection `Pick`
68
+ // against keys that are not members of the interface (#1439).
69
+ const recordFieldsByModel = new Map();
70
+ // model name → declared field name → field type. Feeds the `$in`/`$nin`
71
+ // array-param element-type inference (#1488) below.
72
+ const fieldTypesByModel = new Map();
73
+ for (const schema of schemas) {
74
+ const ftypes = new Map();
75
+ for (const [fname, fopts] of Object.entries(schema.fields)) {
76
+ const t = fopts?.type;
77
+ if (typeof t === "string")
78
+ ftypes.set(fname, t);
79
+ }
80
+ fieldTypesByModel.set(schema.name, ftypes);
81
+ }
54
82
  const seenInterfaceNames = new Map(); // interfaceName → modelName
55
83
  for (const schema of schemas) {
56
84
  const ifaceName = resolveRecordInterfaceName(schema.name, schema.options?.className);
@@ -62,6 +90,10 @@ export function renderDbTypeFile(input) {
62
90
  }
63
91
  seenInterfaceNames.set(ifaceName, schema.name);
64
92
  recordInterfaceByModel[schema.name] = ifaceName;
93
+ const memberNames = new Set(Object.keys(schema.fields));
94
+ for (const stamped of stampedFields)
95
+ memberNames.add(stamped);
96
+ recordFieldsByModel.set(schema.name, memberNames);
65
97
  }
66
98
  const blocks = [];
67
99
  blocks.push(renderHeader(fingerprint));
@@ -92,26 +124,166 @@ export function renderDbTypeFile(input) {
92
124
  const sortedOps = [...operations]
93
125
  .filter((op) => op && typeof op.name === "string")
94
126
  .sort((a, b) => a.name.localeCompare(b.name));
127
+ // Descriptors for the typed-ops factory (#1441), collected in the same
128
+ // name-sorted order so the factory's methods are deterministic.
129
+ const factoryOps = [];
95
130
  for (const op of sortedOps) {
96
- const params = paramsToFields(op.params);
131
+ const inferredArrays = inferArrayParamElementTypes(op, fieldTypesByModel);
132
+ const params = paramsToFields(op.params, inferredArrays);
97
133
  blocks.push(renderOpParamsInterface({
98
134
  interfaceName: opParamsInterfaceName(op.name),
99
135
  opName: op.name,
100
136
  params,
101
137
  }));
138
+ factoryOps.push({
139
+ propertyKey: opPropertyKey(op.name),
140
+ opName: op.name,
141
+ paramsInterfaceName: opParamsInterfaceName(op.name),
142
+ resultAliasName: opResultAliasName(op.name),
143
+ hasParams: params.length > 0,
144
+ });
102
145
  const recordInterfaceName = op.type === "query" && op.modelName
103
146
  ? recordInterfaceByModel[op.modelName] ?? null
104
147
  : null;
148
+ // Query ops: narrow the record type by the op's static projection (#1439).
149
+ const projection = op.type === "query"
150
+ ? classifyProjection(op.definition?.projection, (op.modelName && recordFieldsByModel.get(op.modelName)) ||
151
+ new Set())
152
+ : undefined;
153
+ // Pipeline ops: resolve the `return`-step result shape (#1437).
154
+ const pipelineReturn = op.type === "pipeline"
155
+ ? resolvePipelineReturn(op.definition, recordInterfaceByModel, recordFieldsByModel)
156
+ : undefined;
105
157
  blocks.push(renderOpResultAlias({
106
158
  aliasName: opResultAliasName(op.name),
107
159
  opName: op.name,
108
160
  opType: op.type,
109
161
  recordInterfaceName,
162
+ projection,
163
+ pipelineReturn,
164
+ }));
165
+ }
166
+ // Typed-ops factory (#1441): one method per op pairing `<Op>Params` in with
167
+ // `<Op>Result` out. Omitted entirely for a type with no operations.
168
+ if (factoryOps.length > 0) {
169
+ blocks.push(renderOpsFactory({
170
+ factoryName: opsFactoryName(input.databaseType),
171
+ databaseType: input.databaseType,
172
+ ops: factoryOps,
110
173
  }));
111
174
  }
112
175
  // Single trailing newline; blocks separated by a blank line.
113
176
  return blocks.join("\n\n") + "\n";
114
177
  }
178
+ /**
179
+ * Classify a query op's static `projection` into how it narrows the record type
180
+ * (#1439). Kept private to the generator: the returned `{ kind, fields }` shape
181
+ * is what the template needs, and the field-guard / `id`-folding / sorting live
182
+ * here so the template stays a pure string-emitter.
183
+ *
184
+ * `recordFieldNames` is the set of members on the record interface (declared +
185
+ * stamped). A projected key that is not a member (a nested `"a.b"` path, or a
186
+ * field absent from the schema) makes the whole projection fall back to
187
+ * `Partial<M>` rather than emit an invalid `Pick`. Reused for a pipeline
188
+ * op's returning `query` step (#1437).
189
+ *
190
+ * Rules (projection values are validated server-side to be `1` or `0`, mixing
191
+ * rejected — codegen runs pre-push, so it still guards):
192
+ * - absent / not an object / empty `{}` → `full` (whole record `M`).
193
+ * - all `1` (inclusion), keys all known → `pick` (with `id` folded in,
194
+ * since inclusion always retains
195
+ * `id` at runtime).
196
+ * - all `0` (exclusion), keys all known → `partial`. The DO runtime does
197
+ * not strip excluded fields yet, so
198
+ * an `Omit` would hide fields that
199
+ * are still returned (#1439/Codex-P2).
200
+ * - mixed / dynamic / non-`1|0` / unknown key → `partial` (honest fallback).
201
+ */
202
+ function classifyProjection(projection, recordFieldNames) {
203
+ if (!projection ||
204
+ typeof projection !== "object" ||
205
+ Array.isArray(projection)) {
206
+ return { kind: "full" };
207
+ }
208
+ const entries = Object.entries(projection);
209
+ if (entries.length === 0)
210
+ return { kind: "full" };
211
+ let allInclude = true;
212
+ let allExclude = true;
213
+ const included = [];
214
+ const excluded = [];
215
+ for (const [field, val] of entries) {
216
+ if (val === 1) {
217
+ included.push(field);
218
+ allExclude = false;
219
+ }
220
+ else if (val === 0) {
221
+ excluded.push(field);
222
+ allInclude = false;
223
+ }
224
+ else {
225
+ // A dynamic (`$params.x`) or otherwise non-`1|0` value — can't resolve
226
+ // statically. Fall back rather than emit garbage.
227
+ allInclude = false;
228
+ allExclude = false;
229
+ }
230
+ }
231
+ if (allInclude && included.length > 0) {
232
+ if (!included.every((f) => recordFieldNames.has(f)))
233
+ return { kind: "partial" };
234
+ // Inclusion always retains `id` at runtime (the DO unshifts it), so fold it
235
+ // into the union when the model has an `id` field.
236
+ const fields = new Set(included);
237
+ if (recordFieldNames.has("id"))
238
+ fields.add("id");
239
+ return { kind: "pick", fields: [...fields].sort() };
240
+ }
241
+ if (allExclude && excluded.length > 0) {
242
+ // Exclusion projection (e.g. `{ secret: 0 }`). The DO query runtime does
243
+ // NOT actually strip excluded fields today: `JsonQueryTranslator` selects
244
+ // `_data` for excludes and `_handleQuery` merges the full row via
245
+ // `_parseRow`, so the excluded field is still present in the response.
246
+ // Emitting `Omit<M, ...>` would hide fields that ARE returned and break
247
+ // existing TS callers after regeneration, so type these as `Partial<M>`
248
+ // until the runtime filters them (#1439 / Codex-P2).
249
+ return { kind: "partial" };
250
+ }
251
+ return { kind: "partial" };
252
+ }
253
+ /**
254
+ * Resolve a pipeline op's `return`-step result shape (#1437). The runtime
255
+ * flattens a returning pipeline to the returned step's shape, so codegen types
256
+ * it as that step's result. `return: "all"`, no `return`, or any step the
257
+ * generator can't resolve fall back to `opaque` → the generic `PipelineResult`.
258
+ * Never throws — one odd op must not break codegen for the whole file.
259
+ */
260
+ function resolvePipelineReturn(definition, recordInterfaceByModel, recordFieldsByModel) {
261
+ if (!definition || typeof definition !== "object")
262
+ return { kind: "opaque" };
263
+ const def = definition;
264
+ const ret = def.return ?? "all";
265
+ if (ret === "all" || typeof ret !== "string")
266
+ return { kind: "opaque" };
267
+ if (!Array.isArray(def.steps))
268
+ return { kind: "opaque" };
269
+ const step = def.steps.find((s) => s && typeof s === "object" && s.name === ret);
270
+ if (!step)
271
+ return { kind: "opaque" };
272
+ if (step.type === "query") {
273
+ const modelName = typeof step.modelName === "string" ? step.modelName : undefined;
274
+ const recordInterfaceName = modelName
275
+ ? recordInterfaceByModel[modelName] ?? null
276
+ : null;
277
+ const fieldNames = (modelName && recordFieldsByModel.get(modelName)) || new Set();
278
+ const projection = classifyProjection(step.projection, fieldNames);
279
+ return { kind: "query", recordInterfaceName, projection };
280
+ }
281
+ if (step.type === "count")
282
+ return { kind: "count" };
283
+ if (step.type === "aggregate")
284
+ return { kind: "aggregate" };
285
+ return { kind: "opaque" };
286
+ }
115
287
  /**
116
288
  * Collect the server-stamped field names from the parsed [type] config:
117
289
  * timestamps (`create`/`update` field names) + auto-populated field names
@@ -136,26 +308,203 @@ function collectStampedFields(typeConfig) {
136
308
  return [...new Set(names)];
137
309
  }
138
310
  /**
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.
311
+ * Convert the normalized op `params` map
312
+ * (`{ name: { type, required, enum?, items? } }`) into a sorted list of
313
+ * `ParamField`. Sorted by name for deterministic output. A string param's
314
+ * `enum` (#861) is carried through so the emitter can render a string-literal
315
+ * union.
316
+ *
317
+ * `inferredArrayElements` (#1488, Phase 1) maps a param bound to a `$in`/`$nin`
318
+ * filter operator to its inferred scalar element TS type (or the `"unknown"`
319
+ * sentinel → `unknown[]`). Inference only ever NARROWS a param the emitter
320
+ * would otherwise widen: an explicit `type = "array"` declaration (Phase 2)
321
+ * always wins, and a param absent from the map keeps its declared-type mapping.
143
322
  */
144
- function paramsToFields(params) {
323
+ function paramsToFields(params, inferredArrayElements) {
145
324
  if (!params || typeof params !== "object")
146
325
  return [];
147
326
  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
- }))
327
+ .map(([name, def]) => {
328
+ const rawType = def?.type;
329
+ const declaredType = rawType ?? "object";
330
+ const declaredItems = def?.items;
331
+ let type = declaredType;
332
+ let items = declaredItems;
333
+ // Apply inference only to untyped/`object` params the declaration is
334
+ // otherwise authoritative (behavior 8). A param explicitly declared as a
335
+ // scalar (`string`/`number`/`boolean`/`integer`) is validated by runtime
336
+ // `execute` against that scalar type; a param declared with a model type
337
+ // is treated as model-typed by the runtime `coerceParam`, which rejects
338
+ // arrays with "must be an object"; and an explicit `array` already has its
339
+ // element type. Rewriting any of those to an inferred array would emit a
340
+ // type the server is guaranteed to reject. Only untyped/`object` params
341
+ // (which the emitter would otherwise widen to `Record<string, unknown>`)
342
+ // are eligible. Since `declaredType = rawType ?? "object"`, `=== "object"`
343
+ // matches both a missing `type` and an explicit `object` declaration.
344
+ const inferred = inferredArrayElements?.get(name);
345
+ if (declaredType === "object" && inferred !== undefined) {
346
+ type = "array";
347
+ // The `"unknown"` sentinel means "array, element unresolved": leave
348
+ // `items` undefined so the emitter renders `unknown[]`.
349
+ items = inferred === "unknown" ? undefined : inferred;
350
+ }
351
+ return {
352
+ name,
353
+ type,
354
+ required: def?.required === true,
355
+ // Allowed-value set for a string param → string-literal union (#861).
356
+ // `normalizeOperationFromToml` preserves `enum` upstream via its
357
+ // `...rest` spread; carry it through here so it reaches the emitter.
358
+ enum: def?.enum,
359
+ items,
360
+ };
361
+ })
157
362
  .sort((a, b) => a.name.localeCompare(b.name));
158
363
  }
364
+ /**
365
+ * Infer the scalar element TS type for op params consumed by a `$in`/`$nin`
366
+ * filter operator (#1488, Phase 1). Codegen-only: a param compared with
367
+ * `$in`/`$nin` against a model field is definitionally an array, so the
368
+ * typed-ops factory (#1441) should emit `<elem>[]` rather than widening an
369
+ * untyped/object param to `Record<string, unknown>` (which `string[]` is not
370
+ * assignable to).
371
+ *
372
+ * Kept a small local helper next to {@link inferRequiredRecordFields} rather
373
+ * than a shared cross-runtime analysis pass (sponsor decision on #1488).
374
+ *
375
+ * Returns a map of param name → element TS type. The `"unknown"` sentinel means
376
+ * "emit `unknown[]`" — used when the compared field is missing from the model
377
+ * schema (or the op has no resolvable model), when the same param is bound to
378
+ * fields of differing element types, or when the param is also used as a scalar
379
+ * elsewhere (conservative widen, mirroring #845's disagreement rule / #1488
380
+ * Fork 4). A param absent from the map is not consumed by any array operator
381
+ * and keeps its declared-type mapping (inference never widens such a param).
382
+ */
383
+ export function inferArrayParamElementTypes(op, fieldTypesByModel) {
384
+ const result = new Map();
385
+ if (!op || typeof op !== "object")
386
+ return result;
387
+ const def = op.definition;
388
+ if (!def || typeof def !== "object")
389
+ return result;
390
+ // Element TS types seen for each param via `$in`/`$nin` (deduped). A param
391
+ // also seen as a scalar reference is widened to `unknown[]`.
392
+ const arrayElems = new Map();
393
+ const scalarRefs = new Set();
394
+ const addArrayElem = (param, elem) => {
395
+ let s = arrayElems.get(param);
396
+ if (!s) {
397
+ s = new Set();
398
+ arrayElems.set(param, s);
399
+ }
400
+ s.add(elem);
401
+ };
402
+ // A bare `$params.<name>` string → the param name, else null.
403
+ const paramRef = (v) => {
404
+ if (typeof v !== "string")
405
+ return null;
406
+ const m = v.match(/^\$params\.([A-Za-z0-9_]+)$/);
407
+ return m ? m[1] : null;
408
+ };
409
+ // Scalar element TS type for `field` of the current model, or `"unknown"`.
410
+ // A `stringset` field's ELEMENT is a string (#1488, e7) — do NOT reuse
411
+ // `tsTypeForDbFieldType`, which maps `stringset → string[]` and would emit
412
+ // `string[][]` for the param.
413
+ const elemTypeForField = (field, fields) => {
414
+ const ftype = fields?.get(field);
415
+ if (ftype === undefined)
416
+ return "unknown"; // missing field / no schema (e2)
417
+ if (ftype === "stringset")
418
+ return "string";
419
+ const ts = tsTypeForDbFieldType(ftype);
420
+ return ts === "string" || ts === "number" || ts === "boolean"
421
+ ? ts
422
+ : "unknown";
423
+ };
424
+ const modelFields = (name) => typeof name === "string" ? fieldTypesByModel.get(name) : undefined;
425
+ // Walk a filter object, resolving field conditions against `fields`.
426
+ const walkFilter = (filter, fields) => {
427
+ if (!filter || typeof filter !== "object" || Array.isArray(filter))
428
+ return;
429
+ for (const [key, value] of Object.entries(filter)) {
430
+ if (key === "$and" || key === "$or") {
431
+ if (Array.isArray(value)) {
432
+ for (const sub of value)
433
+ walkFilter(sub, fields);
434
+ }
435
+ continue;
436
+ }
437
+ // `$not` is a logical operator too, but (unlike `$and`/`$or`) it wraps a
438
+ // SINGLE nested condition object rather than an array — recurse into it so
439
+ // an `$in`/`$nin` inside a negated filter still infers its element type.
440
+ // Mirrors the operation grammar walker in
441
+ // `src/app-api/services/walk-operation.ts` (`walkFilterFields`), which
442
+ // treats `$and`/`$or`/`$not` as the recursing logical operators; the two
443
+ // walk the same op-definition filter grammar and must agree.
444
+ if (key === "$not") {
445
+ walkFilter(value, fields);
446
+ continue;
447
+ }
448
+ // Field condition: `key` is a field name; `value` is a scalar (shorthand
449
+ // equality) or an operator map (`{ $in: ..., $eq: ... }`).
450
+ if (value && typeof value === "object" && !Array.isArray(value)) {
451
+ for (const [operator, opVal] of Object.entries(value)) {
452
+ const p = paramRef(opVal);
453
+ if (!p)
454
+ continue;
455
+ if (operator === "$in" || operator === "$nin") {
456
+ addArrayElem(p, elemTypeForField(key, fields));
457
+ }
458
+ else {
459
+ // A scalar operator ($eq/$ne/$gt/…) binds a scalar param.
460
+ scalarRefs.add(p);
461
+ }
462
+ }
463
+ }
464
+ else {
465
+ const p = paramRef(value);
466
+ if (p)
467
+ scalarRefs.add(p);
468
+ }
469
+ }
470
+ };
471
+ // Top-level query filter.
472
+ walkFilter(def.filter, modelFields(op.modelName));
473
+ // `applyToQuery` ops hold their matching query under `definition.source`
474
+ // (`source.filter`), which resolves against the op's own model unless the
475
+ // source names a different one. Without this walk, an `$in`/`$nin` against an
476
+ // object/untyped param inside `source.filter` stays widened to
477
+ // `Record<string, unknown>` — the original array-param bug (#1488).
478
+ if (def.source && typeof def.source === "object") {
479
+ walkFilter(def.source.filter, modelFields(def.source.modelName ?? op.modelName));
480
+ }
481
+ // Mutation inner operations — each may carry its own filter + modelName.
482
+ if (Array.isArray(def.operations)) {
483
+ for (const inner of def.operations) {
484
+ if (inner && typeof inner === "object") {
485
+ walkFilter(inner.filter, modelFields(inner.modelName ?? op.modelName));
486
+ }
487
+ }
488
+ }
489
+ // Pipeline steps — each may carry its own filter + modelName.
490
+ if (Array.isArray(def.steps)) {
491
+ for (const step of def.steps) {
492
+ if (step && typeof step === "object") {
493
+ walkFilter(step.filter, modelFields(step.modelName ?? op.modelName));
494
+ }
495
+ }
496
+ }
497
+ for (const [param, elems] of arrayElems) {
498
+ if (scalarRefs.has(param) || elems.size !== 1) {
499
+ // Used as both array and scalar, or bound to differing element types.
500
+ result.set(param, "unknown");
501
+ }
502
+ else {
503
+ result.set(param, [...elems][0]);
504
+ }
505
+ }
506
+ return result;
507
+ }
159
508
  /**
160
509
  * Infer which record fields are always supplied at create time, by reading the
161
510
  * `save` operation params (issue #842).
@@ -257,7 +606,9 @@ export function inferRequiredRecordFields(operations) {
257
606
  return result;
258
607
  }
259
608
  /**
260
- * Run codegen end-to-end across one or more database-type TOML inputs.
609
+ * Run codegen end-to-end across one or more database-type TOML inputs. The
610
+ * disk lifecycle (write / `--check` / stale cleanup) is delegated to the
611
+ * shared `writeOrCheckGeneratedFiles` (shared with `workflows codegen`).
261
612
  */
262
613
  export async function generateDbTypes(options) {
263
614
  const outAbs = path.resolve(options.outputDir);
@@ -266,106 +617,14 @@ export async function generateDbTypes(options) {
266
617
  const filePath = path.join(outAbs, `${input.databaseType}${GENERATED_FILE_SUFFIX}`);
267
618
  filesToWrite.set(filePath, renderDbTypeFile(input));
268
619
  }
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
- }
620
+ return await writeOrCheckGeneratedFiles({
621
+ outputDir: outAbs,
622
+ filesToWrite,
623
+ check: options.check,
624
+ // A single-type filter run owns only a subset of the generated files, so
625
+ // orphan cleanup / stale detection must be scoped to the filtered file.
626
+ fullOwnership: options.singleType !== true,
627
+ generatedSuffix: GENERATED_FILE_SUFFIX,
628
+ });
370
629
  }
371
630
  //# 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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"}