primitive-admin 1.0.53 → 1.0.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -10
- package/dist/bin/primitive.js +8 -0
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/apps.js +54 -2
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.js +16 -6
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +84 -7
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/catalog.js +3 -3
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collections.js +12 -9
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/databases.js +220 -82
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +77 -0
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/group-type-configs.js +1 -9
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/groups.js +12 -6
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +161 -0
- package/dist/src/commands/guides.js +502 -84
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/integrations.js +2 -2
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +344 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.js +2 -2
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +1 -0
- package/dist/src/commands/rule-sets.js +25 -3
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +2 -0
- package/dist/src/commands/scripts.js +667 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/settings.d.ts +15 -0
- package/dist/src/commands/settings.js +102 -0
- package/dist/src/commands/settings.js.map +1 -0
- package/dist/src/commands/sync-app-settings.d.ts +105 -0
- package/dist/src/commands/sync-app-settings.js +339 -0
- package/dist/src/commands/sync-app-settings.js.map +1 -0
- package/dist/src/commands/sync.d.ts +204 -9
- package/dist/src/commands/sync.js +1706 -371
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +110 -0
- package/dist/src/commands/vars.js.map +1 -0
- package/dist/src/commands/webhooks.js +17 -3
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +30 -0
- package/dist/src/commands/workflows.js +667 -59
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +122 -18
- package/dist/src/lib/api-client.js +131 -2
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +108 -0
- package/dist/src/lib/app-settings-descriptor.js +250 -0
- package/dist/src/lib/app-settings-descriptor.js.map +1 -0
- package/dist/src/lib/batch.d.ts +26 -0
- package/dist/src/lib/batch.js +32 -0
- package/dist/src/lib/batch.js.map +1 -0
- package/dist/src/lib/block-layout.d.ts +160 -0
- package/dist/src/lib/block-layout.js +451 -0
- package/dist/src/lib/block-layout.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +76 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js +144 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +68 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- package/dist/src/lib/config-toml.d.ts +10 -0
- package/dist/src/lib/config-toml.js +42 -0
- package/dist/src/lib/config-toml.js.map +1 -0
- package/dist/src/lib/config.d.ts +16 -0
- package/dist/src/lib/config.js +41 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/constants.d.ts +9 -0
- package/dist/src/lib/constants.js +9 -0
- package/dist/src/lib/constants.js.map +1 -1
- package/dist/src/lib/csv.d.ts +1 -2
- package/dist/src/lib/csv.js +3 -8
- package/dist/src/lib/csv.js.map +1 -1
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +21 -65
- package/dist/src/lib/db-codegen/dbGenerator.js +117 -321
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/db-codegen/dbNaming.d.ts +37 -0
- package/dist/src/lib/db-codegen/dbNaming.js +70 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +165 -5
- package/dist/src/lib/db-codegen/dbTemplates.js +292 -16
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +7 -3
- package/dist/src/lib/db-codegen/dbTsTypes.js +23 -1
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js +517 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +101 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +200 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
- package/dist/src/lib/generated-allowlist.js +43 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/init-config.js +2 -2
- package/dist/src/lib/init-config.js.map +1 -1
- package/dist/src/lib/output.d.ts +25 -5
- package/dist/src/lib/output.js +32 -4
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/query-operators.d.ts +43 -0
- package/dist/src/lib/query-operators.js +80 -0
- package/dist/src/lib/query-operators.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +68 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +380 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +84 -0
- package/dist/src/lib/swift-codegen/generator.js +178 -0
- package/dist/src/lib/swift-codegen/generator.js.map +1 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
- package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +225 -0
- package/dist/src/lib/sync-resource-types.js +394 -0
- package/dist/src/lib/sync-resource-types.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +10 -19
- package/dist/src/lib/toml-database-config.js +28 -59
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +147 -0
- package/dist/src/lib/toml-metadata-config.js +463 -0
- package/dist/src/lib/toml-metadata-config.js.map +1 -0
- package/dist/src/lib/toml-native-form.d.ts +46 -0
- package/dist/src/lib/toml-native-form.js +78 -0
- package/dist/src/lib/toml-native-form.js.map +1 -0
- package/dist/src/lib/toml-params-validator.d.ts +34 -0
- package/dist/src/lib/toml-params-validator.js +118 -3
- package/dist/src/lib/toml-params-validator.js.map +1 -1
- package/dist/src/lib/workflow-apply.d.ts +86 -0
- package/dist/src/lib/workflow-apply.js +127 -0
- package/dist/src/lib/workflow-apply.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +87 -0
- package/dist/src/lib/workflow-codegen/generator.js +290 -0
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +85 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +71 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
- package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
- package/dist/src/lib/workflow-codegen/naming.js +81 -0
- package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +64 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js +282 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
- package/dist/src/lib/workflow-fragments.js +3 -3
- package/dist/src/lib/workflow-fragments.js.map +1 -1
- package/dist/src/lib/workflow-payload.d.ts +68 -0
- package/dist/src/lib/workflow-payload.js +150 -0
- package/dist/src/lib/workflow-payload.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +1 -1
- package/dist/src/lib/workflow-toml-validator.js +37 -1
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +11 -0
- package/dist/src/validators.d.ts +4 -3
- package/dist/src/validators.js +6 -5
- package/dist/src/validators.js.map +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constant for the query operators an operation `filter` may use,
|
|
3
|
+
* plus a helper to find operator keys that aren't in the supported set.
|
|
4
|
+
*
|
|
5
|
+
* Background (issue #1255): a database-operation `filter` uses Mongo-style
|
|
6
|
+
* operators (`$gte`, `$in`, ...). A typo like `$gt` → `$gte` or an invented
|
|
7
|
+
* `$foo` silently passes `sync push` (the server only validates `filter` is
|
|
8
|
+
* an object) and then throws `InvalidOperatorError` at *query execution*.
|
|
9
|
+
* The CLI can warn about unknown operators at push time so the author fixes
|
|
10
|
+
* it before it reaches runtime.
|
|
11
|
+
*
|
|
12
|
+
* The set mirrors the runtime translator
|
|
13
|
+
* (`packages/js-bao/src/query/JsonQueryTranslator.ts`): field operators
|
|
14
|
+
* (`translateFieldCondition` / substring ops) plus the two logical
|
|
15
|
+
* combinators special-cased in `translateFilter` (`$and` / `$or`).
|
|
16
|
+
*
|
|
17
|
+
* `$not` is intentionally NOT included — it is not a runtime operator; the
|
|
18
|
+
* translator only special-cases `$and` / `$or`, so `$not` would throw at
|
|
19
|
+
* execution just like any other unknown operator (codex review, #1255).
|
|
20
|
+
*
|
|
21
|
+
* This is deliberately a single source of truth so the validator and any
|
|
22
|
+
* future emitter/detector agree on what "known" means.
|
|
23
|
+
*/
|
|
24
|
+
/** Field-level comparison / membership / string operators. */
|
|
25
|
+
export const FIELD_QUERY_OPERATORS = [
|
|
26
|
+
"$eq",
|
|
27
|
+
"$ne",
|
|
28
|
+
"$gt",
|
|
29
|
+
"$gte",
|
|
30
|
+
"$lt",
|
|
31
|
+
"$lte",
|
|
32
|
+
"$in",
|
|
33
|
+
"$nin",
|
|
34
|
+
"$exists",
|
|
35
|
+
"$contains",
|
|
36
|
+
"$startsWith",
|
|
37
|
+
"$endsWith",
|
|
38
|
+
"$containsText",
|
|
39
|
+
];
|
|
40
|
+
/** Logical combinators (arrays of sub-filters). */
|
|
41
|
+
export const LOGICAL_QUERY_OPERATORS = ["$and", "$or"];
|
|
42
|
+
/**
|
|
43
|
+
* Every operator the runtime query translator accepts. Any `$`-prefixed
|
|
44
|
+
* *key* inside a filter that is not in this set is unknown.
|
|
45
|
+
*/
|
|
46
|
+
export const SUPPORTED_QUERY_OPERATORS = new Set([
|
|
47
|
+
...FIELD_QUERY_OPERATORS,
|
|
48
|
+
...LOGICAL_QUERY_OPERATORS,
|
|
49
|
+
]);
|
|
50
|
+
/**
|
|
51
|
+
* Recursively collect the distinct `$`-prefixed *keys* used in a filter (or
|
|
52
|
+
* any nested value) that are not in {@link SUPPORTED_QUERY_OPERATORS}.
|
|
53
|
+
*
|
|
54
|
+
* Only object *keys* are considered operators — matching the runtime
|
|
55
|
+
* convention (`walk-operation.ts`: `$`-prefixed keys are operators). String
|
|
56
|
+
* *values* like `$params.activeSince` are substitution references, never
|
|
57
|
+
* operators, so they are never flagged. `$and` / `$or` values are arrays of
|
|
58
|
+
* sub-filter objects and are walked recursively.
|
|
59
|
+
*/
|
|
60
|
+
export function collectUnknownOperators(value) {
|
|
61
|
+
const unknown = new Set();
|
|
62
|
+
walk(value, unknown);
|
|
63
|
+
return [...unknown];
|
|
64
|
+
}
|
|
65
|
+
function walk(value, unknown) {
|
|
66
|
+
if (Array.isArray(value)) {
|
|
67
|
+
for (const item of value)
|
|
68
|
+
walk(item, unknown);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (value !== null && typeof value === "object") {
|
|
72
|
+
for (const [key, child] of Object.entries(value)) {
|
|
73
|
+
if (key.startsWith("$") && !SUPPORTED_QUERY_OPERATORS.has(key)) {
|
|
74
|
+
unknown.add(key);
|
|
75
|
+
}
|
|
76
|
+
walk(child, unknown);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=query-operators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-operators.js","sourceRoot":"","sources":["../../../src/lib/query-operators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,8DAA8D;AAC9D,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,SAAS;IACT,WAAW;IACX,aAAa;IACb,WAAW;IACX,eAAe;CAChB,CAAC;AAEF,mDAAmD;AACnD,MAAM,CAAC,MAAM,uBAAuB,GAAsB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAE1E;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAwB,IAAI,GAAG,CAAC;IACpE,GAAG,qBAAqB;IACxB,GAAG,uBAAuB;CAC3B,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAU;IAChD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,IAAI,CAAC,KAAU,EAAE,OAAoB;IAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `databases codegen --lang swift` orchestrator (issue #1547, Phase 4).
|
|
3
|
+
*
|
|
4
|
+
* The Swift counterpart of `db-codegen/dbGenerator.ts`. Reads the SAME synced
|
|
5
|
+
* `database-types/*.toml` and emits ONE `<type>.generated.swift` per database
|
|
6
|
+
* type. Each file carries the type's record structs (read shape), per-op params
|
|
7
|
+
* structs (write shape), per-op result typealiases, and a typed `<Type>Ops`
|
|
8
|
+
* factory over the additive generic `executeOperation` overload on
|
|
9
|
+
* `DatabasesAPI` (the only published SDK surface for this generator).
|
|
10
|
+
*
|
|
11
|
+
* Design decisions realized (issue #1547):
|
|
12
|
+
* - Operation + record metadata (which ops exist, their params, their result
|
|
13
|
+
* descriptor, and per-model fields) is read from the SHARED `describeDbType`
|
|
14
|
+
* IR — the SAME source the TS renderer (`db-codegen/dbGenerator.ts`) reads.
|
|
15
|
+
* The Swift renderer reconstructs none of it (binding item 5), so the two
|
|
16
|
+
* clients can never disagree on a type's surface.
|
|
17
|
+
* - The generic result envelopes (`DBQueryResult<T>`, `DBMutationResult`, …)
|
|
18
|
+
* live in the JsBaoClient SDK, NOT emitted per file — a Swift package
|
|
19
|
+
* compiles all generated files into one module, so a per-file copy would
|
|
20
|
+
* collide. Generated files reference the SDK envelopes (mirrors how Phase 3
|
|
21
|
+
* put the workflow result envelopes in the SDK).
|
|
22
|
+
* - Swift has no analog of TS `Pick<M, …>` / `Partial<M>`, so a query op with
|
|
23
|
+
* a `pick`/`partial` projection types its rows as the open `JSONValue`
|
|
24
|
+
* rather than a narrowed record (the same Fork-4 "no clean analog →
|
|
25
|
+
* JSONValue" fallback the emitter uses for un-descended schema nodes). A
|
|
26
|
+
* `full` projection over a known record types as `DBQueryResult<Record>`.
|
|
27
|
+
* - Disk lifecycle (write / `--check` / orphan cleanup) delegates to the
|
|
28
|
+
* shared `writeOrCheckGeneratedFiles`, scoped by an ownership BANNER
|
|
29
|
+
* distinct from both the workflow Swift banner and the model codegen's, so
|
|
30
|
+
* a shared Swift output dir stays safe.
|
|
31
|
+
*/
|
|
32
|
+
import { type WriteOrCheckResult } from "../codegen-shared/generatedFiles.js";
|
|
33
|
+
import { type DbCodegenInput } from "../db-codegen/dbTypeIR.js";
|
|
34
|
+
/**
|
|
35
|
+
* Banner prefix stamped on every CLI-emitted database `.generated.swift` file.
|
|
36
|
+
* Distinct from both the workflow Swift banner (`// AUTO-GENERATED FROM
|
|
37
|
+
* workflows/`) and the model codegen's (`// Generated by swift-bao-codegen`),
|
|
38
|
+
* so none of the three generators' stale-sweeps ever deletes another's files
|
|
39
|
+
* when they share an output dir.
|
|
40
|
+
*/
|
|
41
|
+
export declare const DB_SWIFT_BANNER_PREFIX = "// AUTO-GENERATED FROM database-types/";
|
|
42
|
+
export interface GenerateDbSwiftTypesOptions {
|
|
43
|
+
inputs: DbCodegenInput[];
|
|
44
|
+
/** Directory where the `<type>.generated.swift` files are written. */
|
|
45
|
+
outputDir: string;
|
|
46
|
+
/** `--check`: compare against disk, do not write. */
|
|
47
|
+
check?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Set when the run was filtered to a single database type. `inputs` is then a
|
|
50
|
+
* PARTIAL view, so orphan cleanup / stale detection is scoped to the filtered
|
|
51
|
+
* file. Mirrors the TS generator's `singleType`.
|
|
52
|
+
*/
|
|
53
|
+
singleType?: boolean;
|
|
54
|
+
}
|
|
55
|
+
/** Swift record struct type name for a model (shared naming + Swift sanitize). */
|
|
56
|
+
export declare function dbRecordSwiftTypeName(modelName: string, className: string | undefined): string;
|
|
57
|
+
/**
|
|
58
|
+
* Render the full `<type>.generated.swift` content for one database-type TOML.
|
|
59
|
+
* Pure — exported so tests can assert on the string directly. Throws on a Swift
|
|
60
|
+
* record type-name collision between two models (mirrors the TS collision guard).
|
|
61
|
+
*/
|
|
62
|
+
export declare function renderDbTypeSwiftFile(input: DbCodegenInput): string;
|
|
63
|
+
/**
|
|
64
|
+
* Run Swift database codegen end-to-end. One `<type>.generated.swift` per
|
|
65
|
+
* database type; delegates the disk lifecycle to the shared writer/checker with
|
|
66
|
+
* banner-scoped ownership so a shared Swift output dir stays safe.
|
|
67
|
+
*/
|
|
68
|
+
export declare function generateDbSwiftTypes(options: GenerateDbSwiftTypesOptions): Promise<WriteOrCheckResult>;
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `databases codegen --lang swift` orchestrator (issue #1547, Phase 4).
|
|
3
|
+
*
|
|
4
|
+
* The Swift counterpart of `db-codegen/dbGenerator.ts`. Reads the SAME synced
|
|
5
|
+
* `database-types/*.toml` and emits ONE `<type>.generated.swift` per database
|
|
6
|
+
* type. Each file carries the type's record structs (read shape), per-op params
|
|
7
|
+
* structs (write shape), per-op result typealiases, and a typed `<Type>Ops`
|
|
8
|
+
* factory over the additive generic `executeOperation` overload on
|
|
9
|
+
* `DatabasesAPI` (the only published SDK surface for this generator).
|
|
10
|
+
*
|
|
11
|
+
* Design decisions realized (issue #1547):
|
|
12
|
+
* - Operation + record metadata (which ops exist, their params, their result
|
|
13
|
+
* descriptor, and per-model fields) is read from the SHARED `describeDbType`
|
|
14
|
+
* IR — the SAME source the TS renderer (`db-codegen/dbGenerator.ts`) reads.
|
|
15
|
+
* The Swift renderer reconstructs none of it (binding item 5), so the two
|
|
16
|
+
* clients can never disagree on a type's surface.
|
|
17
|
+
* - The generic result envelopes (`DBQueryResult<T>`, `DBMutationResult`, …)
|
|
18
|
+
* live in the JsBaoClient SDK, NOT emitted per file — a Swift package
|
|
19
|
+
* compiles all generated files into one module, so a per-file copy would
|
|
20
|
+
* collide. Generated files reference the SDK envelopes (mirrors how Phase 3
|
|
21
|
+
* put the workflow result envelopes in the SDK).
|
|
22
|
+
* - Swift has no analog of TS `Pick<M, …>` / `Partial<M>`, so a query op with
|
|
23
|
+
* a `pick`/`partial` projection types its rows as the open `JSONValue`
|
|
24
|
+
* rather than a narrowed record (the same Fork-4 "no clean analog →
|
|
25
|
+
* JSONValue" fallback the emitter uses for un-descended schema nodes). A
|
|
26
|
+
* `full` projection over a known record types as `DBQueryResult<Record>`.
|
|
27
|
+
* - Disk lifecycle (write / `--check` / orphan cleanup) delegates to the
|
|
28
|
+
* shared `writeOrCheckGeneratedFiles`, scoped by an ownership BANNER
|
|
29
|
+
* distinct from both the workflow Swift banner and the model codegen's, so
|
|
30
|
+
* a shared Swift output dir stays safe.
|
|
31
|
+
*/
|
|
32
|
+
import * as path from "path";
|
|
33
|
+
import { writeOrCheckGeneratedFiles, } from "../codegen-shared/generatedFiles.js";
|
|
34
|
+
import { describeDbType, } from "../db-codegen/dbTypeIR.js";
|
|
35
|
+
import { resolveRecordInterfaceName, opParamsInterfaceName, opResultAliasName, } from "../db-codegen/dbNaming.js";
|
|
36
|
+
import { GENERATED_SWIFT_FILE_SUFFIX } from "./generator.js";
|
|
37
|
+
import { structTypeName, enumTypeName, enumCaseNames, swiftPropertyName, unescapeIdentifier, } from "./swiftNaming.js";
|
|
38
|
+
import { swiftTypeForDbFieldType, swiftTypeForDbParamType, } from "./dbSwiftTypes.js";
|
|
39
|
+
/**
|
|
40
|
+
* Banner prefix stamped on every CLI-emitted database `.generated.swift` file.
|
|
41
|
+
* Distinct from both the workflow Swift banner (`// AUTO-GENERATED FROM
|
|
42
|
+
* workflows/`) and the model codegen's (`// Generated by swift-bao-codegen`),
|
|
43
|
+
* so none of the three generators' stale-sweeps ever deletes another's files
|
|
44
|
+
* when they share an output dir.
|
|
45
|
+
*/
|
|
46
|
+
export const DB_SWIFT_BANNER_PREFIX = "// AUTO-GENERATED FROM database-types/";
|
|
47
|
+
/** Swift module the generated types + factory import. */
|
|
48
|
+
const CLIENT_MODULE = "JsBaoClient";
|
|
49
|
+
const INDENT = " ";
|
|
50
|
+
const CONFORMANCES = "Codable, Equatable, Sendable";
|
|
51
|
+
/** A Swift string literal (runtime call passes the op name verbatim). */
|
|
52
|
+
function swiftStringLiteral(s) {
|
|
53
|
+
const escaped = s
|
|
54
|
+
.replace(/\\/g, "\\\\")
|
|
55
|
+
.replace(/"/g, '\\"')
|
|
56
|
+
.replace(/\n/g, "\\n")
|
|
57
|
+
.replace(/\r/g, "\\r")
|
|
58
|
+
.replace(/\t/g, "\\t");
|
|
59
|
+
return `"${escaped}"`;
|
|
60
|
+
}
|
|
61
|
+
/** Swift record struct type name for a model (shared naming + Swift sanitize). */
|
|
62
|
+
export function dbRecordSwiftTypeName(modelName, className) {
|
|
63
|
+
return structTypeName(resolveRecordInterfaceName(modelName, className));
|
|
64
|
+
}
|
|
65
|
+
/** `<Op>Params` Swift struct name (shared PascalCase + Swift sanitize). */
|
|
66
|
+
function dbParamsSwiftTypeName(opName) {
|
|
67
|
+
return structTypeName(opParamsInterfaceName(opName));
|
|
68
|
+
}
|
|
69
|
+
/** `<Op>Result` Swift typealias name. */
|
|
70
|
+
function dbResultSwiftTypeName(opName) {
|
|
71
|
+
return structTypeName(opResultAliasName(opName));
|
|
72
|
+
}
|
|
73
|
+
/** `<Type>Ops` Swift struct name (e.g. `securities-ref` → `SecuritiesRefOps`). */
|
|
74
|
+
function dbOpsStructName(databaseType) {
|
|
75
|
+
return `${structTypeName(databaseType)}Ops`;
|
|
76
|
+
}
|
|
77
|
+
/** camelCase `<type>Ops` free-function factory name, keyword-escaped. */
|
|
78
|
+
function dbOpsFactoryName(databaseType) {
|
|
79
|
+
const base = structTypeName(databaseType);
|
|
80
|
+
const camel = base.charAt(0).toLowerCase() + base.slice(1) + "Ops";
|
|
81
|
+
// A leading `_` (digit-safe struct name) stays; a camelCased factory name is
|
|
82
|
+
// a legal `func` identifier and never a reserved word once suffixed `Ops`.
|
|
83
|
+
return camel;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Render a nested `String`-raw enum for a field/param declaring `enum = [...]`.
|
|
87
|
+
* Matches the JSON-Schema emitter's + model codegen's nested-enum shape.
|
|
88
|
+
*/
|
|
89
|
+
function renderStringEnum(typeName, values, indent) {
|
|
90
|
+
const pad = INDENT.repeat(indent);
|
|
91
|
+
const inner = INDENT.repeat(indent + 1);
|
|
92
|
+
const cases = enumCaseNames(values);
|
|
93
|
+
const lines = [
|
|
94
|
+
`${pad}public enum ${typeName}: String, Codable, CaseIterable, Sendable {`,
|
|
95
|
+
];
|
|
96
|
+
for (const c of cases)
|
|
97
|
+
lines.push(`${inner}case ${c.name} = ${swiftStringLiteral(c.raw)}`);
|
|
98
|
+
lines.push(`${pad}}`);
|
|
99
|
+
return lines.join("\n");
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Render a Swift `struct` from resolved members + nested-enum declarations. A
|
|
103
|
+
* public memberwise initializer is always emitted (the synthesized one is not
|
|
104
|
+
* public across module boundaries); `CodingKeys` only when a wire key isn't a
|
|
105
|
+
* legal/idiomatic Swift identifier. No custom Codable is needed — DB records /
|
|
106
|
+
* params have no oneOf / open-object / required-nullable cases.
|
|
107
|
+
*/
|
|
108
|
+
function renderStruct(typeName, members, nestedEnumDecls) {
|
|
109
|
+
const b = INDENT;
|
|
110
|
+
const needsCodingKeys = members.some((m) => unescapeIdentifier(m.swiftName) !== m.wireKey);
|
|
111
|
+
const out = [`public struct ${typeName}: ${CONFORMANCES} {`];
|
|
112
|
+
for (const decl of nestedEnumDecls)
|
|
113
|
+
out.push(decl);
|
|
114
|
+
if (nestedEnumDecls.length > 0)
|
|
115
|
+
out.push("");
|
|
116
|
+
for (const m of members) {
|
|
117
|
+
out.push(`${b}public var ${m.swiftName}: ${m.type}${m.optional ? "?" : ""}`);
|
|
118
|
+
}
|
|
119
|
+
if (members.length > 0)
|
|
120
|
+
out.push("");
|
|
121
|
+
// Public memberwise initializer.
|
|
122
|
+
if (members.length === 0) {
|
|
123
|
+
out.push(`${b}public init() {}`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
out.push(`${b}public init(`);
|
|
127
|
+
members.forEach((m, i) => {
|
|
128
|
+
const type = `${m.type}${m.optional ? "?" : ""}`;
|
|
129
|
+
const def = m.optional ? " = nil" : "";
|
|
130
|
+
out.push(`${b}${b}${m.swiftName}: ${type}${def}${i < members.length - 1 ? "," : ""}`);
|
|
131
|
+
});
|
|
132
|
+
out.push(`${b}) {`);
|
|
133
|
+
for (const m of members)
|
|
134
|
+
out.push(`${b}${b}self.${m.swiftName} = ${m.swiftName}`);
|
|
135
|
+
out.push(`${b}}`);
|
|
136
|
+
}
|
|
137
|
+
if (needsCodingKeys) {
|
|
138
|
+
out.push("");
|
|
139
|
+
out.push(`${b}public enum CodingKeys: String, CodingKey {`);
|
|
140
|
+
for (const m of members) {
|
|
141
|
+
const bare = unescapeIdentifier(m.swiftName);
|
|
142
|
+
const rhs = bare !== m.wireKey ? ` = ${swiftStringLiteral(m.wireKey)}` : "";
|
|
143
|
+
out.push(`${b}${b}case ${m.swiftName}${rhs}`);
|
|
144
|
+
}
|
|
145
|
+
out.push(`${b}}`);
|
|
146
|
+
}
|
|
147
|
+
out.push(`}`);
|
|
148
|
+
return out.join("\n");
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Render one record model. Empty (no declared fields and no stamped fields) →
|
|
152
|
+
* an open typealias (`[String: JSONValue]`), mirroring the TS empty-record
|
|
153
|
+
* `Record<string, unknown>` — a Database-DO record is schemaless, so the empty
|
|
154
|
+
* shape stays open.
|
|
155
|
+
*/
|
|
156
|
+
function renderRecordStruct(typeName, fields, stampedFields) {
|
|
157
|
+
const members = [];
|
|
158
|
+
const nestedEnums = [];
|
|
159
|
+
const declared = new Set();
|
|
160
|
+
for (const f of fields) {
|
|
161
|
+
declared.add(f.name);
|
|
162
|
+
let type;
|
|
163
|
+
if (f.type === "string" && Array.isArray(f.enum) && f.enum.length > 0) {
|
|
164
|
+
const enumName = enumTypeName(f.name);
|
|
165
|
+
nestedEnums.push(renderStringEnum(enumName, f.enum, 1));
|
|
166
|
+
type = enumName;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
type = swiftTypeForDbFieldType(f.type);
|
|
170
|
+
}
|
|
171
|
+
members.push({
|
|
172
|
+
wireKey: f.name,
|
|
173
|
+
swiftName: swiftPropertyName(f.name),
|
|
174
|
+
type,
|
|
175
|
+
optional: !f.required,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
// Server-stamped fields → optional String props if not already declared.
|
|
179
|
+
for (const stamped of stampedFields) {
|
|
180
|
+
if (declared.has(stamped))
|
|
181
|
+
continue;
|
|
182
|
+
declared.add(stamped);
|
|
183
|
+
members.push({
|
|
184
|
+
wireKey: stamped,
|
|
185
|
+
swiftName: swiftPropertyName(stamped),
|
|
186
|
+
type: "String",
|
|
187
|
+
optional: true,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
if (members.length === 0) {
|
|
191
|
+
return `public typealias ${typeName} = [String: JSONValue]`;
|
|
192
|
+
}
|
|
193
|
+
return renderStruct(typeName, members, nestedEnums);
|
|
194
|
+
}
|
|
195
|
+
/** Render one op-params struct (write shape). */
|
|
196
|
+
function renderParamsStruct(typeName, op) {
|
|
197
|
+
const members = [];
|
|
198
|
+
const nestedEnums = [];
|
|
199
|
+
for (const p of op.params) {
|
|
200
|
+
let type;
|
|
201
|
+
if (p.type === "string" && Array.isArray(p.enum) && p.enum.length > 0) {
|
|
202
|
+
const enumName = enumTypeName(p.name);
|
|
203
|
+
nestedEnums.push(renderStringEnum(enumName, p.enum, 1));
|
|
204
|
+
type = swiftTypeForDbParamType(p.type, enumName, p.items);
|
|
205
|
+
}
|
|
206
|
+
else if (p.type === "array" &&
|
|
207
|
+
p.items === "string" &&
|
|
208
|
+
Array.isArray(p.enum) &&
|
|
209
|
+
p.enum.length > 0) {
|
|
210
|
+
const enumName = enumTypeName(p.name);
|
|
211
|
+
nestedEnums.push(renderStringEnum(enumName, p.enum, 1));
|
|
212
|
+
type = swiftTypeForDbParamType(p.type, enumName, p.items);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
type = swiftTypeForDbParamType(p.type, undefined, p.items);
|
|
216
|
+
}
|
|
217
|
+
members.push({
|
|
218
|
+
wireKey: p.name,
|
|
219
|
+
swiftName: swiftPropertyName(p.name),
|
|
220
|
+
type,
|
|
221
|
+
optional: !p.required,
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
// A no-param op still gets an empty struct so the factory can construct `()`.
|
|
225
|
+
return renderStruct(typeName, members, nestedEnums);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Swift `DBQueryResult<…>` element for a query op / returning pipeline step.
|
|
229
|
+
* A known record with a `full` projection → `DBQueryResult<Record>`. A
|
|
230
|
+
* `pick`/`partial` projection has no Swift Pick/Partial analog → open rows
|
|
231
|
+
* (`DBQueryResult<JSONValue>`); a null record likewise.
|
|
232
|
+
*/
|
|
233
|
+
function queryResultSwift(recordTypeName, projection) {
|
|
234
|
+
if (recordTypeName === null)
|
|
235
|
+
return "DBQueryResult<JSONValue>";
|
|
236
|
+
const kind = projection?.kind ?? "full";
|
|
237
|
+
return kind === "full"
|
|
238
|
+
? `DBQueryResult<${recordTypeName}>`
|
|
239
|
+
: "DBQueryResult<JSONValue>";
|
|
240
|
+
}
|
|
241
|
+
/** Resolve the Swift result type expression for an op. */
|
|
242
|
+
function resultSwiftType(op, recordTypeByModel) {
|
|
243
|
+
const recordFor = (model) => model ? recordTypeByModel[model] ?? null : null;
|
|
244
|
+
switch (op.opType) {
|
|
245
|
+
case "query":
|
|
246
|
+
return queryResultSwift(recordFor(op.resultModelName), op.projection);
|
|
247
|
+
case "mutation":
|
|
248
|
+
return "DBMutationResult";
|
|
249
|
+
case "count":
|
|
250
|
+
return "DBCountResult";
|
|
251
|
+
case "aggregate":
|
|
252
|
+
return "DBAggregateResult";
|
|
253
|
+
case "applyToQuery":
|
|
254
|
+
return "DBApplyToQueryResult";
|
|
255
|
+
case "pipeline": {
|
|
256
|
+
const d = op.pipelineReturn ?? { kind: "opaque" };
|
|
257
|
+
switch (d.kind) {
|
|
258
|
+
case "query":
|
|
259
|
+
return queryResultSwift(recordFor(d.modelName), d.projection);
|
|
260
|
+
case "count":
|
|
261
|
+
return "DBCountResult";
|
|
262
|
+
case "aggregate":
|
|
263
|
+
return "DBAggregateResult";
|
|
264
|
+
case "opaque":
|
|
265
|
+
default:
|
|
266
|
+
return "DBPipelineResult";
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
default:
|
|
270
|
+
// Unknown op type → the opaque JSONValue (parity with the TS `unknown`).
|
|
271
|
+
return "JSONValue";
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Render the typed `<Type>Ops` factory: a struct with one `async throws`
|
|
276
|
+
* method per op, each binding `<Op>Params` in and `<Op>Result` out over the
|
|
277
|
+
* generic `DatabasesAPI.executeOperation` overload, plus a free-function
|
|
278
|
+
* factory. Returns "" for a type with no operations.
|
|
279
|
+
*/
|
|
280
|
+
function renderOpsFactory(databaseType, ops) {
|
|
281
|
+
if (ops.length === 0)
|
|
282
|
+
return "";
|
|
283
|
+
const structName = dbOpsStructName(databaseType);
|
|
284
|
+
const factoryName = dbOpsFactoryName(databaseType);
|
|
285
|
+
const b = INDENT;
|
|
286
|
+
const lines = [
|
|
287
|
+
`/// Typed accessor for \`${databaseType}\` operations. Obtain one with`,
|
|
288
|
+
`/// \`${factoryName}(client, databaseId:)\`.`,
|
|
289
|
+
`public struct ${structName}: Sendable {`,
|
|
290
|
+
`${b}public let client: JsBaoClient`,
|
|
291
|
+
`${b}public let databaseId: String`,
|
|
292
|
+
``,
|
|
293
|
+
`${b}public init(client: JsBaoClient, databaseId: String) {`,
|
|
294
|
+
`${b}${b}self.client = client`,
|
|
295
|
+
`${b}${b}self.databaseId = databaseId`,
|
|
296
|
+
`${b}}`,
|
|
297
|
+
];
|
|
298
|
+
for (const op of ops) {
|
|
299
|
+
const method = swiftPropertyName(op.opName);
|
|
300
|
+
const paramsType = dbParamsSwiftTypeName(op.opName);
|
|
301
|
+
const resultType = dbResultSwiftTypeName(op.opName);
|
|
302
|
+
const nameLiteral = swiftStringLiteral(op.opName);
|
|
303
|
+
// With params: `method(_ params:, options…)`. Without: options only, and
|
|
304
|
+
// the empty params struct is constructed for the call.
|
|
305
|
+
const paramLine = op.hasParams ? `${b}${b}_ params: ${paramsType},` : null;
|
|
306
|
+
const paramsArg = op.hasParams ? "params" : `${paramsType}()`;
|
|
307
|
+
lines.push(``, `${b}/// Execute the \`${op.opName}\` operation.`, `${b}public func ${method}(`);
|
|
308
|
+
if (paramLine)
|
|
309
|
+
lines.push(paramLine);
|
|
310
|
+
lines.push(`${b}${b}limit: Int? = nil,`, `${b}${b}cursor: String? = nil,`, `${b}${b}direction: SortDirection? = nil,`, `${b}${b}timing: Bool? = nil`, `${b}) async throws -> ${resultType} {`, `${b}${b}try await client.databases.executeOperation(`, `${b}${b}${b}databaseId: databaseId,`, `${b}${b}${b}name: ${nameLiteral},`, `${b}${b}${b}params: ${paramsArg},`, `${b}${b}${b}limit: limit,`, `${b}${b}${b}cursor: cursor,`, `${b}${b}${b}direction: direction,`, `${b}${b}${b}timing: timing`, `${b}${b})`, `${b}}`);
|
|
311
|
+
}
|
|
312
|
+
lines.push(`}`, ``);
|
|
313
|
+
lines.push(`/// Typed operations factory for the \`${databaseType}\` database type.`, `public func ${factoryName}(_ client: JsBaoClient, databaseId: String) -> ${structName} {`, `${b}${structName}(client: client, databaseId: databaseId)`, `}`);
|
|
314
|
+
return lines.join("\n");
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Render the full `<type>.generated.swift` content for one database-type TOML.
|
|
318
|
+
* Pure — exported so tests can assert on the string directly. Throws on a Swift
|
|
319
|
+
* record type-name collision between two models (mirrors the TS collision guard).
|
|
320
|
+
*/
|
|
321
|
+
export function renderDbTypeSwiftFile(input) {
|
|
322
|
+
const ir = describeDbType(input);
|
|
323
|
+
// model → Swift record type name, with a collision guard.
|
|
324
|
+
const recordTypeByModel = {};
|
|
325
|
+
const seen = new Map(); // typeName → modelName
|
|
326
|
+
for (const rec of ir.records) {
|
|
327
|
+
const typeName = dbRecordSwiftTypeName(rec.modelName, rec.className);
|
|
328
|
+
const prior = seen.get(typeName);
|
|
329
|
+
if (prior !== undefined && prior !== rec.modelName) {
|
|
330
|
+
throw new Error(`swift db codegen: record type-name collision — models "${prior}" and ` +
|
|
331
|
+
`"${rec.modelName}" both produce Swift type "${typeName}". Add a ` +
|
|
332
|
+
`class_name override to one of them.`);
|
|
333
|
+
}
|
|
334
|
+
seen.set(typeName, rec.modelName);
|
|
335
|
+
recordTypeByModel[rec.modelName] = typeName;
|
|
336
|
+
}
|
|
337
|
+
const banner = [
|
|
338
|
+
`// AUTO-GENERATED FROM database-types/${ir.databaseType}.toml — DO NOT EDIT.`,
|
|
339
|
+
"// Run `primitive databases codegen --lang swift` to regenerate.",
|
|
340
|
+
`// fingerprint: ${ir.fingerprint}`,
|
|
341
|
+
].join("\n");
|
|
342
|
+
const imports = ["import Foundation", `import ${CLIENT_MODULE}`].join("\n");
|
|
343
|
+
const blocks = [banner, imports];
|
|
344
|
+
// Record structs, sorted by Swift type name for deterministic output.
|
|
345
|
+
const sortedRecords = [...ir.records].sort((a, b) => recordTypeByModel[a.modelName].localeCompare(recordTypeByModel[b.modelName]));
|
|
346
|
+
for (const rec of sortedRecords) {
|
|
347
|
+
blocks.push(renderRecordStruct(recordTypeByModel[rec.modelName], rec.fields, ir.stampedFields));
|
|
348
|
+
}
|
|
349
|
+
// Per-op params structs + result aliases (ops already sorted by op name).
|
|
350
|
+
for (const op of ir.ops) {
|
|
351
|
+
blocks.push(renderParamsStruct(dbParamsSwiftTypeName(op.opName), op));
|
|
352
|
+
blocks.push(`public typealias ${dbResultSwiftTypeName(op.opName)} = ${resultSwiftType(op, recordTypeByModel)}`);
|
|
353
|
+
}
|
|
354
|
+
const factory = renderOpsFactory(ir.databaseType, ir.ops);
|
|
355
|
+
if (factory)
|
|
356
|
+
blocks.push(factory);
|
|
357
|
+
return blocks.join("\n\n") + "\n";
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Run Swift database codegen end-to-end. One `<type>.generated.swift` per
|
|
361
|
+
* database type; delegates the disk lifecycle to the shared writer/checker with
|
|
362
|
+
* banner-scoped ownership so a shared Swift output dir stays safe.
|
|
363
|
+
*/
|
|
364
|
+
export async function generateDbSwiftTypes(options) {
|
|
365
|
+
const outAbs = path.resolve(options.outputDir);
|
|
366
|
+
const filesToWrite = new Map();
|
|
367
|
+
for (const input of options.inputs) {
|
|
368
|
+
const filePath = path.join(outAbs, `${input.databaseType}${GENERATED_SWIFT_FILE_SUFFIX}`);
|
|
369
|
+
filesToWrite.set(filePath, renderDbTypeSwiftFile(input));
|
|
370
|
+
}
|
|
371
|
+
return await writeOrCheckGeneratedFiles({
|
|
372
|
+
outputDir: outAbs,
|
|
373
|
+
filesToWrite,
|
|
374
|
+
check: options.check,
|
|
375
|
+
fullOwnership: options.singleType !== true,
|
|
376
|
+
generatedSuffix: GENERATED_SWIFT_FILE_SUFFIX,
|
|
377
|
+
ownershipBanner: DB_SWIFT_BANNER_PREFIX,
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=dbGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbGenerator.js","sourceRoot":"","sources":["../../../../src/lib/swift-codegen/dbGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map database-type TOML field/param types → Swift `Codable` types for the
|
|
3
|
+
* `databases codegen --lang swift` generator (issue #1547, Phase 4).
|
|
4
|
+
*
|
|
5
|
+
* The Swift counterpart of `db-codegen/dbTsTypes.ts`. Same vocabulary, same
|
|
6
|
+
* fallbacks — only the emitted syntax differs:
|
|
7
|
+
* - record fields: `string|id|date → String`, `number → Double`,
|
|
8
|
+
* `boolean → Bool`, `stringset → [String]` (a StringSet serializes to a
|
|
9
|
+
* string array on the wire).
|
|
10
|
+
* - op params: `string → String`, `number → Double`, `integer → Int`
|
|
11
|
+
* (Fork 4 — Swift distinguishes integer from number), `boolean → Bool`,
|
|
12
|
+
* `object → [String: JSONValue]` (the Swift analog of the TS
|
|
13
|
+
* `Record<string, unknown>`), `array → [Element]`.
|
|
14
|
+
*
|
|
15
|
+
* A string `enum` on a field/param has no clean scalar analog, so — exactly
|
|
16
|
+
* like the JSON-Schema emitter's nested `String` enums — the RENDERER emits a
|
|
17
|
+
* nested `enum … : String, …` and passes its type name in here; this module
|
|
18
|
+
* only handles the scalar/array base mapping. An unrecognized type falls back
|
|
19
|
+
* to `JSONValue` (the Swift analog of TS `unknown`), never a throw, so one
|
|
20
|
+
* unrecognized field doesn't block codegen for the whole file.
|
|
21
|
+
*/
|
|
22
|
+
/** Swift base type for a record field type (enum handled by the renderer). */
|
|
23
|
+
export declare function swiftTypeForDbFieldType(fieldType: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Swift type for a record field, honoring an optional nested-enum type name
|
|
26
|
+
* (#843). When `enumTypeName` is set the field declared a non-empty string
|
|
27
|
+
* `enum` and the renderer emitted a nested `String` enum of that name;
|
|
28
|
+
* otherwise fall back to the base mapping.
|
|
29
|
+
*/
|
|
30
|
+
export declare function swiftTypeForDbField(fieldType: string, enumTypeName?: string): string;
|
|
31
|
+
/** Swift base type for an op-param scalar type (array/enum handled below). */
|
|
32
|
+
export declare function swiftTypeForDbParamScalar(paramType: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Swift type for an op param, honoring an optional nested-enum type name (#861)
|
|
35
|
+
* and an `array` element type (#1488). Mirrors `dbTsTypes.tsTypeForDbParamType`.
|
|
36
|
+
* - array param: `[Element]`, where `items` is the scalar element type (a
|
|
37
|
+
* string-element array with an enum renders `[EnumName]`); a missing/
|
|
38
|
+
* unresolved element renders `[JSONValue]`.
|
|
39
|
+
* - string param with an enum: the nested-enum type name.
|
|
40
|
+
* - otherwise the base scalar mapping.
|
|
41
|
+
*/
|
|
42
|
+
export declare function swiftTypeForDbParamType(paramType: string, enumTypeName?: string, items?: string): string;
|