primitive-admin 1.0.45 → 1.0.46
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/dist/src/commands/databases.js +134 -0
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/sync.js +254 -12
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/workflows.js +12 -0
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.js +33 -0
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
- package/dist/src/lib/db-codegen/dbGenerator.js +255 -0
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/db-codegen/dbNaming.js +104 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +138 -0
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js +61 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
- package/dist/src/lib/toml-database-config.js +182 -1
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/workflow-toml-validator.js +16 -1
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identifier-naming helpers for the `databases codegen` generator (issue #814).
|
|
3
|
+
*
|
|
4
|
+
* Record interfaces mirror codegen-v2's class-name resolution
|
|
5
|
+
* (`packages/js-bao/src/cli/v2/pluralization.ts`): honor a `class_name`
|
|
6
|
+
* override, else singularize a snake_case plural to PascalCase. The
|
|
7
|
+
* singularization algorithm below is a faithful copy of codegen-v2's
|
|
8
|
+
* `singularizeToPascalCase`; it is inlined rather than imported because the
|
|
9
|
+
* CLI builds standalone (`tsc -p cli/tsconfig.json`, `rootDir: "."`) and
|
|
10
|
+
* cannot reach into the vendored `packages/js-bao/src` tree.
|
|
11
|
+
*
|
|
12
|
+
* It DIVERGES in the fallback: codegen-v2 THROWS when a model name doesn't
|
|
13
|
+
* look like a recognizable plural (ORM models are expected to be plural).
|
|
14
|
+
* Database-type model names are author-curated and frequently already
|
|
15
|
+
* singular / PascalCase (e.g. `[models.User]`), so we PascalCase the name
|
|
16
|
+
* verbatim rather than failing the whole run.
|
|
17
|
+
*
|
|
18
|
+
* Op interfaces/aliases derive from the operation name (PascalCase) +
|
|
19
|
+
* `Params` / `Result` suffix (e.g. `saveAccount` → `SaveAccountParams`,
|
|
20
|
+
* `SaveAccountResult`).
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the record-interface name for a model. Honors a `class_name`
|
|
24
|
+
* override, then tries plural→singular Pascal, then falls back to a verbatim
|
|
25
|
+
* PascalCase of the model name (no throw).
|
|
26
|
+
*/
|
|
27
|
+
export function resolveRecordInterfaceName(modelName, classNameOverride) {
|
|
28
|
+
if (classNameOverride && classNameOverride.length > 0) {
|
|
29
|
+
return classNameOverride;
|
|
30
|
+
}
|
|
31
|
+
const singular = singularizeToPascalCase(modelName);
|
|
32
|
+
if (singular !== null)
|
|
33
|
+
return singular;
|
|
34
|
+
// Fallback: PascalCase the model name as-is (handles already-singular and
|
|
35
|
+
// already-PascalCase names like `User`, `Account`).
|
|
36
|
+
return pascalCase(modelName);
|
|
37
|
+
}
|
|
38
|
+
/** `saveAccount` → `SaveAccountParams`. */
|
|
39
|
+
export function opParamsInterfaceName(opName) {
|
|
40
|
+
return `${pascalCase(opName)}Params`;
|
|
41
|
+
}
|
|
42
|
+
/** `saveAccount` → `SaveAccountResult`. */
|
|
43
|
+
export function opResultAliasName(opName) {
|
|
44
|
+
return `${pascalCase(opName)}Result`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Convert a snake_case plural model name (`user_prefs`, `categories`) into a
|
|
48
|
+
* PascalCase singular interface name (`UserPref`, `Category`). Returns null
|
|
49
|
+
* if no suffix rule matches the input. Faithful copy of codegen-v2's
|
|
50
|
+
* `singularizeToPascalCase`.
|
|
51
|
+
*/
|
|
52
|
+
export function singularizeToPascalCase(snakePlural) {
|
|
53
|
+
if (!snakePlural || snakePlural.length === 0)
|
|
54
|
+
return null;
|
|
55
|
+
const parts = snakePlural.split("_");
|
|
56
|
+
if (parts.some((p) => p.length === 0))
|
|
57
|
+
return null;
|
|
58
|
+
const last = parts[parts.length - 1];
|
|
59
|
+
const singularizedLast = singularizeWord(last);
|
|
60
|
+
if (singularizedLast === null)
|
|
61
|
+
return null;
|
|
62
|
+
parts[parts.length - 1] = singularizedLast;
|
|
63
|
+
return parts.map(pascalSegment).join("");
|
|
64
|
+
}
|
|
65
|
+
/** Singularize a single plural word via simple suffix rules; null if none. */
|
|
66
|
+
function singularizeWord(word) {
|
|
67
|
+
if (!word)
|
|
68
|
+
return null;
|
|
69
|
+
if (!word.endsWith("s"))
|
|
70
|
+
return null;
|
|
71
|
+
if (word.endsWith("ies") && word.length > 3)
|
|
72
|
+
return word.slice(0, -3) + "y";
|
|
73
|
+
if (word.endsWith("xes") && word.length > 3)
|
|
74
|
+
return word.slice(0, -2);
|
|
75
|
+
if (word.endsWith("ses") && word.length > 3)
|
|
76
|
+
return word.slice(0, -2);
|
|
77
|
+
if (word.endsWith("shes") && word.length > 4)
|
|
78
|
+
return word.slice(0, -2);
|
|
79
|
+
if (word.endsWith("ches") && word.length > 4)
|
|
80
|
+
return word.slice(0, -2);
|
|
81
|
+
if (word.endsWith("s") && word.length > 1)
|
|
82
|
+
return word.slice(0, -1);
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
function pascalSegment(segment) {
|
|
86
|
+
if (!segment)
|
|
87
|
+
return segment;
|
|
88
|
+
return segment.charAt(0).toUpperCase() + segment.slice(1);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* PascalCase an identifier: splits on non-alphanumeric separators
|
|
92
|
+
* (`_`, `-`, spaces) and capitalizes each segment, preserving any existing
|
|
93
|
+
* internal casing (`saveAccount` → `SaveAccount`, `save_account` →
|
|
94
|
+
* `SaveAccount`).
|
|
95
|
+
*/
|
|
96
|
+
export function pascalCase(name) {
|
|
97
|
+
const segments = name.split(/[^A-Za-z0-9]+/).filter((s) => s.length > 0);
|
|
98
|
+
if (segments.length === 0)
|
|
99
|
+
return name;
|
|
100
|
+
return segments
|
|
101
|
+
.map((seg) => seg.charAt(0).toUpperCase() + seg.slice(1))
|
|
102
|
+
.join("");
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=dbNaming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbNaming.js","sourceRoot":"","sources":["../../../../src/lib/db-codegen/dbNaming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure string templates for the `databases codegen` generator (issue #814).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the codegen-v2 template style
|
|
5
|
+
* (`packages/js-bao/src/cli/v2/templates.ts`): total functions (no I/O, no
|
|
6
|
+
* hidden state), an auto-generated banner + fingerprint header, and
|
|
7
|
+
* deterministic ordering so `--check` can compare byte-for-byte.
|
|
8
|
+
*
|
|
9
|
+
* Diverges from codegen-v2 in two ways:
|
|
10
|
+
* 1. Database-DO records are schemaless documents, NOT `BaseModel` ORM
|
|
11
|
+
* classes — so we emit plain `export interface` types with no class
|
|
12
|
+
* shell, no barrel registration, and `import type` only.
|
|
13
|
+
* 2. We add an OPERATIONS half codegen-v2 has no analog for: per-op
|
|
14
|
+
* input-params interfaces + per-op result aliases keyed off `op.type`.
|
|
15
|
+
*/
|
|
16
|
+
import { tsTypeForDbFieldType, tsTypeForDbParamType } from "./dbTsTypes.js";
|
|
17
|
+
const HEADER_BANNER = "// AUTO-GENERATED FROM database-types TOML — DO NOT EDIT.";
|
|
18
|
+
const REGEN_INSTRUCTION = "// Run `primitive databases codegen <database-type>` to regenerate.";
|
|
19
|
+
/** The shared generic result aliases, keyed off `op.type`. */
|
|
20
|
+
export const RESULT_ALIASES_BLOCK = `// Generic per-op result shapes, keyed off the operation type. The op
|
|
21
|
+
// return contract is NOT stored in the TOML — these mirror the runtime
|
|
22
|
+
// result shapes produced by the database-operations controller.
|
|
23
|
+
|
|
24
|
+
/** \`query\` ops return a page of records. */
|
|
25
|
+
export interface QueryResult<T = Record<string, any>> {
|
|
26
|
+
data: T[];
|
|
27
|
+
hasMore?: boolean;
|
|
28
|
+
nextCursor?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** \`mutation\` ops return per-step results. */
|
|
32
|
+
export interface MutationResult {
|
|
33
|
+
results: any[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** \`count\` ops return a single count. */
|
|
37
|
+
export interface CountResult {
|
|
38
|
+
count: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** \`aggregate\` ops return a single result object. */
|
|
42
|
+
export interface AggregateResult {
|
|
43
|
+
result: Record<string, any>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** \`applyToQuery\` ops return match/affect/fail counts. */
|
|
47
|
+
export interface ApplyToQueryResult {
|
|
48
|
+
matched: number;
|
|
49
|
+
affected: number;
|
|
50
|
+
failed: number;
|
|
51
|
+
sample?: any[];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** \`pipeline\` ops return per-step results keyed by step name. */
|
|
55
|
+
export interface PipelineResult {
|
|
56
|
+
steps: Record<string, any>;
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
59
|
+
/**
|
|
60
|
+
* Render the header (banner + regen hint + fingerprint).
|
|
61
|
+
*/
|
|
62
|
+
export function renderHeader(fingerprint) {
|
|
63
|
+
return [
|
|
64
|
+
HEADER_BANNER,
|
|
65
|
+
REGEN_INSTRUCTION,
|
|
66
|
+
`// fingerprint: ${fingerprint}`,
|
|
67
|
+
].join("\n");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Render a single record interface (read shape). Stamped fields
|
|
71
|
+
* (`createdAt`, `modifiedAt`, `ownerId`, …) are appended as OPTIONAL props
|
|
72
|
+
* if not already present in `fields`.
|
|
73
|
+
*/
|
|
74
|
+
export function renderRecordInterface(input) {
|
|
75
|
+
const { interfaceName, fields, stampedFields } = input;
|
|
76
|
+
const lines = [];
|
|
77
|
+
lines.push(`export interface ${interfaceName} {`);
|
|
78
|
+
const declared = new Set();
|
|
79
|
+
for (const f of fields) {
|
|
80
|
+
declared.add(f.name);
|
|
81
|
+
const optional = f.required ? "" : "?";
|
|
82
|
+
lines.push(` ${f.name}${optional}: ${tsTypeForDbFieldType(f.type)};`);
|
|
83
|
+
}
|
|
84
|
+
// Server-stamped fields appear on the read interface as optional —
|
|
85
|
+
// the runtime populates them, but a freshly-built object may not have
|
|
86
|
+
// them yet, so claiming them as required would be a type lie.
|
|
87
|
+
for (const stamped of stampedFields) {
|
|
88
|
+
if (declared.has(stamped))
|
|
89
|
+
continue;
|
|
90
|
+
declared.add(stamped);
|
|
91
|
+
lines.push(` ${stamped}?: string;`);
|
|
92
|
+
}
|
|
93
|
+
lines.push(`}`);
|
|
94
|
+
return lines.join("\n");
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Render a single op-input-params interface (write shape). `required: true`
|
|
98
|
+
* params are non-optional; others are optional. `object` params render as
|
|
99
|
+
* `Record<string, any>`.
|
|
100
|
+
*/
|
|
101
|
+
export function renderOpParamsInterface(input) {
|
|
102
|
+
const { interfaceName, params } = input;
|
|
103
|
+
const lines = [];
|
|
104
|
+
lines.push(`export interface ${interfaceName} {`);
|
|
105
|
+
for (const p of params) {
|
|
106
|
+
const optional = p.required ? "" : "?";
|
|
107
|
+
lines.push(` ${p.name}${optional}: ${tsTypeForDbParamType(p.type)};`);
|
|
108
|
+
}
|
|
109
|
+
lines.push(`}`);
|
|
110
|
+
return lines.join("\n");
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Render a per-op result alias keyed off `op.type`.
|
|
114
|
+
*/
|
|
115
|
+
export function renderOpResultAlias(input) {
|
|
116
|
+
const { aliasName, opType, recordInterfaceName } = input;
|
|
117
|
+
switch (opType) {
|
|
118
|
+
case "query": {
|
|
119
|
+
const generic = recordInterfaceName ?? "Record<string, any>";
|
|
120
|
+
return `export type ${aliasName} = QueryResult<${generic}>;`;
|
|
121
|
+
}
|
|
122
|
+
case "mutation":
|
|
123
|
+
return `export type ${aliasName} = MutationResult;`;
|
|
124
|
+
case "count":
|
|
125
|
+
return `export type ${aliasName} = CountResult;`;
|
|
126
|
+
case "aggregate":
|
|
127
|
+
return `export type ${aliasName} = AggregateResult;`;
|
|
128
|
+
case "applyToQuery":
|
|
129
|
+
return `export type ${aliasName} = ApplyToQueryResult;`;
|
|
130
|
+
case "pipeline":
|
|
131
|
+
return `export type ${aliasName} = PipelineResult;`;
|
|
132
|
+
default:
|
|
133
|
+
// Unknown op type — emit a permissive alias rather than throwing,
|
|
134
|
+
// so one stray op doesn't block codegen for the whole file.
|
|
135
|
+
return `export type ${aliasName} = unknown;`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=dbTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbTemplates.js","sourceRoot":"","sources":["../../../../src/lib/db-codegen/dbTemplates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map database-type TOML field/param types → TypeScript types for the
|
|
3
|
+
* `databases codegen` generator (issue #814).
|
|
4
|
+
*
|
|
5
|
+
* The record-interface half reuses the SAME `FieldType` vocabulary that
|
|
6
|
+
* powers the document-model codegen-v2 generator
|
|
7
|
+
* (`packages/js-bao/src/cli/v2/tsTypes.ts`): the database-type
|
|
8
|
+
* `[models.<m>.fields.<f>]` blocks round-trip through the same
|
|
9
|
+
* `loadSchemaFromTomlString` loader, so the field→TS mapping is identical
|
|
10
|
+
* (`string|id|date → string`, `number → number`, `boolean → boolean`,
|
|
11
|
+
* `stringset → StringSet`).
|
|
12
|
+
*
|
|
13
|
+
* The op-params half maps the operation `params.{type}` vocabulary
|
|
14
|
+
* (`string|number|boolean|object`, validated server-side in
|
|
15
|
+
* `database-type-operations-controller.ts`). `object` has no field-type
|
|
16
|
+
* analog and carries no nested schema, so it renders as `Record<string, any>`.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Returns the TS type expression for a record field type. Unknown types
|
|
20
|
+
* fall back to `unknown` rather than throwing: the database-type TOML is
|
|
21
|
+
* author-curated and may legitimately carry a field type the CLI's vendored
|
|
22
|
+
* vocabulary predates, and a hard throw would block codegen for the whole
|
|
23
|
+
* file over one unrecognized field.
|
|
24
|
+
*/
|
|
25
|
+
export function tsTypeForDbFieldType(fieldType) {
|
|
26
|
+
switch (fieldType) {
|
|
27
|
+
case "string":
|
|
28
|
+
case "id":
|
|
29
|
+
case "date":
|
|
30
|
+
return "string";
|
|
31
|
+
case "number":
|
|
32
|
+
return "number";
|
|
33
|
+
case "boolean":
|
|
34
|
+
return "boolean";
|
|
35
|
+
case "stringset":
|
|
36
|
+
// StringSet serializes to a string array on the wire.
|
|
37
|
+
return "string[]";
|
|
38
|
+
default:
|
|
39
|
+
return "unknown";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns the TS type expression for an op param type. `object` has no
|
|
44
|
+
* declared nested shape, so it renders as `Record<string, any>`. Unknown
|
|
45
|
+
* types fall back to `unknown`.
|
|
46
|
+
*/
|
|
47
|
+
export function tsTypeForDbParamType(paramType) {
|
|
48
|
+
switch (paramType) {
|
|
49
|
+
case "string":
|
|
50
|
+
return "string";
|
|
51
|
+
case "number":
|
|
52
|
+
return "number";
|
|
53
|
+
case "boolean":
|
|
54
|
+
return "boolean";
|
|
55
|
+
case "object":
|
|
56
|
+
return "Record<string, any>";
|
|
57
|
+
default:
|
|
58
|
+
return "unknown";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=dbTsTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbTsTypes.js","sourceRoot":"","sources":["../../../../src/lib/db-codegen/dbTsTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAoBH;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW;YACd,sDAAsD;YACtD,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,qBAAqB,CAAC;QAC/B;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
|
@@ -237,6 +237,12 @@ export function buildDatabaseTypeTomlData(typeConfig, operations, ruleSetIdToNam
|
|
|
237
237
|
if (typeConfig.autoPopulatedFields) {
|
|
238
238
|
data.type.autoPopulatedFields = typeConfig.autoPopulatedFields;
|
|
239
239
|
}
|
|
240
|
+
// timestamps (issue #748) — emitted as an inline table under `[type]`. The
|
|
241
|
+
// server returns the parsed `{ create?, update?, models? }` object, which
|
|
242
|
+
// serializes 1:1 so a pull → push cycle is idempotent.
|
|
243
|
+
if (typeConfig.timestamps) {
|
|
244
|
+
data.type.timestamps = typeConfig.timestamps;
|
|
245
|
+
}
|
|
240
246
|
if (typeConfig.triggers) {
|
|
241
247
|
data.triggers = typeConfig.triggers;
|
|
242
248
|
}
|
|
@@ -256,8 +262,17 @@ export function buildDatabaseTypeTomlData(typeConfig, operations, ruleSetIdToNam
|
|
|
256
262
|
// crash the serializer — fall through without the models block.
|
|
257
263
|
}
|
|
258
264
|
}
|
|
259
|
-
|
|
265
|
+
// Subscriptions (issue #803) — emitted as `[[subscriptions]]` array-of-
|
|
266
|
+
// tables, independent of operations. Built before the operations-only
|
|
267
|
+
// early return so a type with subscriptions but no operations still emits
|
|
268
|
+
// them.
|
|
269
|
+
const subscriptionRows = buildSubscriptionRows(options.subscriptions, log);
|
|
270
|
+
if (operations.length === 0) {
|
|
271
|
+
if (subscriptionRows.length > 0) {
|
|
272
|
+
data.subscriptions = subscriptionRows;
|
|
273
|
+
}
|
|
260
274
|
return data;
|
|
275
|
+
}
|
|
261
276
|
data.operations = operations.map((op) => {
|
|
262
277
|
const opRow = {
|
|
263
278
|
name: op.name,
|
|
@@ -320,8 +335,71 @@ export function buildDatabaseTypeTomlData(typeConfig, operations, ruleSetIdToNam
|
|
|
320
335
|
}
|
|
321
336
|
return opRow;
|
|
322
337
|
});
|
|
338
|
+
if (subscriptionRows.length > 0) {
|
|
339
|
+
data.subscriptions = subscriptionRows;
|
|
340
|
+
}
|
|
323
341
|
return data;
|
|
324
342
|
}
|
|
343
|
+
/**
|
|
344
|
+
* Build the `[[subscriptions]]` rows for a database-type TOML file from the
|
|
345
|
+
* server's sanitized subscription list (issue #803).
|
|
346
|
+
*
|
|
347
|
+
* Emits the canonical TOML key order and uses the wire key `access` (we read
|
|
348
|
+
* both `access` and `accessRule` on parse, but always emit `access` so a
|
|
349
|
+
* pull → push round-trip is stable). `select` / `emit` are plain string
|
|
350
|
+
* arrays; `params` is an inline object. Falls back to a JSON string for any
|
|
351
|
+
* field that TOML can't represent natively (mirrors operations'
|
|
352
|
+
* `definition` / `params` fallback), so an exotic `params` shape never
|
|
353
|
+
* breaks serialization.
|
|
354
|
+
*/
|
|
355
|
+
function buildSubscriptionRows(subscriptions, log) {
|
|
356
|
+
if (!Array.isArray(subscriptions) || subscriptions.length === 0)
|
|
357
|
+
return [];
|
|
358
|
+
return subscriptions.map((sub) => {
|
|
359
|
+
const row = {
|
|
360
|
+
subscriptionKey: sub.subscriptionKey,
|
|
361
|
+
displayName: sub.displayName,
|
|
362
|
+
modelName: sub.modelName,
|
|
363
|
+
};
|
|
364
|
+
if (sub.description != null && sub.description !== "") {
|
|
365
|
+
row.description = sub.description;
|
|
366
|
+
}
|
|
367
|
+
if (sub.filter != null) {
|
|
368
|
+
row.filter = sub.filter;
|
|
369
|
+
}
|
|
370
|
+
if (sub.access != null) {
|
|
371
|
+
row.access = sub.access;
|
|
372
|
+
}
|
|
373
|
+
// `select` / `emit`: server sanitizes to arrays (or null). Emit when a
|
|
374
|
+
// non-empty array is present.
|
|
375
|
+
if (Array.isArray(sub.select) && sub.select.length > 0) {
|
|
376
|
+
row.select = sub.select;
|
|
377
|
+
}
|
|
378
|
+
if (Array.isArray(sub.emit) && sub.emit.length > 0) {
|
|
379
|
+
row.emit = sub.emit;
|
|
380
|
+
}
|
|
381
|
+
// `params`: server sanitizes to an object (or {}). Emit when non-empty.
|
|
382
|
+
if (sub.params &&
|
|
383
|
+
typeof sub.params === "object" &&
|
|
384
|
+
!Array.isArray(sub.params) &&
|
|
385
|
+
Object.keys(sub.params).length > 0) {
|
|
386
|
+
const reason = canEmitNative(sub.params);
|
|
387
|
+
if (reason) {
|
|
388
|
+
log(`Subscription '${sub.subscriptionKey}': cannot emit \`params\` as native TOML (${reason}); falling back to JSON string.`);
|
|
389
|
+
row.params = JSON.stringify(sub.params);
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
row.params = sub.params;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
// `status`: only emit when not the default "active" so round-tripped
|
|
396
|
+
// files stay clean.
|
|
397
|
+
if (sub.status && sub.status !== "active") {
|
|
398
|
+
row.status = sub.status;
|
|
399
|
+
}
|
|
400
|
+
return row;
|
|
401
|
+
});
|
|
402
|
+
}
|
|
325
403
|
function safeParseJson(s) {
|
|
326
404
|
try {
|
|
327
405
|
return JSON.parse(s);
|
|
@@ -330,6 +408,109 @@ function safeParseJson(s) {
|
|
|
330
408
|
return s;
|
|
331
409
|
}
|
|
332
410
|
}
|
|
411
|
+
/**
|
|
412
|
+
* Thrown when a `[[subscriptions]]` block declares both `accessRule` and
|
|
413
|
+
* `access` with different values. We never silently drop the field
|
|
414
|
+
* (issue #803 maintainer decision): prefer `access` when they agree, error
|
|
415
|
+
* when they conflict so the operator fixes the source of truth.
|
|
416
|
+
*/
|
|
417
|
+
export class SubscriptionAccessKeyConflictError extends Error {
|
|
418
|
+
subscriptionKey;
|
|
419
|
+
constructor(subscriptionKey) {
|
|
420
|
+
super(`Subscription ${subscriptionKey ? `'${subscriptionKey}' ` : ""}declares both \`access\` and \`accessRule\` with different values. ` +
|
|
421
|
+
`Use one (prefer \`access\`, the wire/server key) or make them identical.`);
|
|
422
|
+
this.subscriptionKey = subscriptionKey;
|
|
423
|
+
this.name = "SubscriptionAccessKeyConflictError";
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Resolve the subscription `access` CEL expression from a TOML row.
|
|
428
|
+
*
|
|
429
|
+
* The server's wire key is `access`; the issue author (and the guides) used
|
|
430
|
+
* `accessRule`. We accept both: prefer `access` when present, fall back to
|
|
431
|
+
* `accessRule`, and never silently drop the field. If both are present with
|
|
432
|
+
* different values, throw so the conflict is surfaced rather than guessed.
|
|
433
|
+
*/
|
|
434
|
+
export function resolveSubscriptionAccess(sub) {
|
|
435
|
+
const hasAccess = sub.access !== undefined && sub.access !== null;
|
|
436
|
+
const hasAccessRule = sub.accessRule !== undefined && sub.accessRule !== null;
|
|
437
|
+
if (hasAccess && hasAccessRule && sub.access !== sub.accessRule) {
|
|
438
|
+
throw new SubscriptionAccessKeyConflictError(sub.subscriptionKey);
|
|
439
|
+
}
|
|
440
|
+
if (hasAccess)
|
|
441
|
+
return sub.access;
|
|
442
|
+
if (hasAccessRule)
|
|
443
|
+
return sub.accessRule;
|
|
444
|
+
return undefined;
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Normalize a `[[subscriptions]]` TOML row into the server's wire shape.
|
|
448
|
+
*
|
|
449
|
+
* Mirrors `normalizeOperationFromToml`. Maps the `accessRule`→`access`
|
|
450
|
+
* alias (issue #803), and passes `select` / `emit` / `params` through in
|
|
451
|
+
* native form — the server stores them as JSON strings and re-parses on
|
|
452
|
+
* read (`sanitizeSubscription`), so the parse → push → pull round-trip is
|
|
453
|
+
* symmetric with operations' `definition` / `params`.
|
|
454
|
+
*
|
|
455
|
+
* `filter` stays required server-side; we forward whatever is present (or
|
|
456
|
+
* undefined) and let the controller's clean named 400 surface.
|
|
457
|
+
*/
|
|
458
|
+
export function normalizeSubscriptionFromToml(sub) {
|
|
459
|
+
const normalized = {
|
|
460
|
+
subscriptionKey: sub.subscriptionKey,
|
|
461
|
+
displayName: sub.displayName,
|
|
462
|
+
modelName: sub.modelName,
|
|
463
|
+
filter: sub.filter,
|
|
464
|
+
access: resolveSubscriptionAccess(sub),
|
|
465
|
+
};
|
|
466
|
+
// Optional fields are *always* assigned (explicit `null` when absent),
|
|
467
|
+
// mirroring how `normalizeOperationFromToml` always assigns `params`
|
|
468
|
+
// (`= null` when absent). This is load-bearing for the update path: when an
|
|
469
|
+
// operator deletes one of these lines from a `[[subscriptions]]` block and
|
|
470
|
+
// re-pushes, the explicit `null` survives `JSON.stringify` in the PUT body
|
|
471
|
+
// (only `undefined` keys are dropped), passes the controller's
|
|
472
|
+
// `if (body.X !== undefined)` guard, and clears the prior server value.
|
|
473
|
+
// Leaving these `undefined` would silently retain the old server value and
|
|
474
|
+
// re-emit the just-deleted field on the next pull (a spurious diff, and for
|
|
475
|
+
// `select` a tighter-than-intended projection left live).
|
|
476
|
+
normalized.description =
|
|
477
|
+
sub.description !== undefined ? sub.description : null;
|
|
478
|
+
if (sub.status !== undefined) {
|
|
479
|
+
normalized.status = sub.status;
|
|
480
|
+
}
|
|
481
|
+
// `select` / `emit` are plain string arrays in native TOML form. The
|
|
482
|
+
// server validates and JSON-stringifies them; we forward as-is (or `null`
|
|
483
|
+
// to clear a removed line).
|
|
484
|
+
normalized.select = sub.select !== undefined ? sub.select : null;
|
|
485
|
+
normalized.emit = sub.emit !== undefined ? sub.emit : null;
|
|
486
|
+
// `params` accepts either native object form
|
|
487
|
+
// (`{ projectId = { type = "string" } }`) or the array-of-tables form
|
|
488
|
+
// (`[[subscriptions.params]]` rows with a `name` key). Convert array form
|
|
489
|
+
// back to the object the server expects, mirroring operations' params.
|
|
490
|
+
// Always assign (`null` when absent) so a removed `params` clears.
|
|
491
|
+
if (sub.params != null) {
|
|
492
|
+
if (Array.isArray(sub.params)) {
|
|
493
|
+
const obj = {};
|
|
494
|
+
for (const row of sub.params) {
|
|
495
|
+
if (!row || typeof row !== "object" || !row.name)
|
|
496
|
+
continue;
|
|
497
|
+
const { name, ...rest } = row;
|
|
498
|
+
obj[name] = rest;
|
|
499
|
+
}
|
|
500
|
+
normalized.params = obj;
|
|
501
|
+
}
|
|
502
|
+
else if (typeof sub.params === "object") {
|
|
503
|
+
normalized.params = sub.params;
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
normalized.params = null;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
normalized.params = null;
|
|
511
|
+
}
|
|
512
|
+
return normalized;
|
|
513
|
+
}
|
|
333
514
|
/**
|
|
334
515
|
* After parsing TOML, normalize the `definition` and `params` of each
|
|
335
516
|
* operation row into the JS objects the server expects. Handles both
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toml-database-config.js","sourceRoot":"","sources":["../../../src/lib/toml-database-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toml-database-config.js","sourceRoot":"","sources":["../../../src/lib/toml-database-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,7 @@ const ALLOWLISTED_FIELDS = new Set([
|
|
|
66
66
|
"bucketId",
|
|
67
67
|
"bucketKey",
|
|
68
68
|
"cacheTtlSeconds",
|
|
69
|
+
"cases", // switch: array of { when, output } (#802)
|
|
69
70
|
"configId",
|
|
70
71
|
"content",
|
|
71
72
|
"contentBase64",
|
|
@@ -74,6 +75,7 @@ const ALLOWLISTED_FIELDS = new Set([
|
|
|
74
75
|
"cursor",
|
|
75
76
|
"cursorField",
|
|
76
77
|
"databaseId",
|
|
78
|
+
"default", // switch: { output } fallback branch (#802)
|
|
77
79
|
"direction",
|
|
78
80
|
"dryRun",
|
|
79
81
|
"durationMs",
|
|
@@ -235,11 +237,24 @@ function validateStepObject(step, stepIndex, parentStepId, errors) {
|
|
|
235
237
|
// Heuristic: when `step[step.id]` is a non-array table, this is
|
|
236
238
|
// (effectively always) the misnest pattern. Scalars are fine (the
|
|
237
239
|
// user really did mean to set the scalar field).
|
|
240
|
+
//
|
|
241
|
+
// Codex finding (PR #819, 2026-05-21): the heuristic over-fires for the
|
|
242
|
+
// `switch` step kind. A switch legitimately named `id = "default"` has a
|
|
243
|
+
// real `[steps.default]` fallback that parses as a non-array table at
|
|
244
|
+
// `step.default` — structurally identical to the misnest shape, but it's
|
|
245
|
+
// the field's *valid* form. (Likewise `id = "cases"`.) For these ids the
|
|
246
|
+
// footgun and the legitimate declaration are indistinguishable, so the
|
|
247
|
+
// heuristic must defer to the allowlist. Carve-out scope is narrow on
|
|
248
|
+
// purpose: only `kind === "switch"` with key `cases`/`default`. Every
|
|
249
|
+
// other (kind, id) collision — e.g. `id = "query"` on a database step —
|
|
250
|
+
// is still treated as the footgun, preserving finding 1's safety net.
|
|
251
|
+
const isSwitchFallbackField = step.kind === "switch" && (key === "cases" || key === "default");
|
|
238
252
|
const isSelfIdMisnest = stepId !== null &&
|
|
239
253
|
key === stepId &&
|
|
240
254
|
value !== null &&
|
|
241
255
|
typeof value === "object" &&
|
|
242
|
-
!Array.isArray(value)
|
|
256
|
+
!Array.isArray(value) &&
|
|
257
|
+
!isSwitchFallbackField;
|
|
243
258
|
if (!isSelfIdMisnest && ALLOWLISTED_FIELDS.has(key))
|
|
244
259
|
continue;
|
|
245
260
|
// Two failure modes are common enough to call out specifically in
|