primitive-admin 1.1.0-alpha.61 → 1.1.0-alpha.63
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 +34 -27
- package/assets/skill/skills/primitive-platform/SKILL.md +59 -21
- package/dist/bin/primitive.js +10 -10
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/apps.js +40 -41
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +7 -7
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/collection-type-configs.js +7 -7
- package/dist/src/commands/collection-type-configs.js.map +1 -1
- package/dist/src/commands/collections.js +47 -8
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/config.d.ts +23 -12
- package/dist/src/commands/config.js +80 -45
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/cron-triggers.js +6 -6
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-type-configs.d.ts +2 -0
- package/dist/src/commands/database-type-configs.js +171 -0
- package/dist/src/commands/database-type-configs.js.map +1 -0
- package/dist/src/commands/database-types.js +313 -13
- package/dist/src/commands/database-types.js.map +1 -1
- package/dist/src/commands/databases.js +35 -25
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.js +138 -11
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.js +8 -8
- package/dist/src/commands/email-templates.js.map +1 -1
- package/dist/src/commands/group-type-configs.js +7 -7
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/init.js +1 -1
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +12 -197
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/llm.js +6 -9
- package/dist/src/commands/llm.js.map +1 -1
- package/dist/src/commands/metadata-category-configs.d.ts +12 -0
- package/dist/src/commands/metadata-category-configs.js +112 -0
- package/dist/src/commands/metadata-category-configs.js.map +1 -0
- package/dist/src/commands/metadata.js +4 -129
- package/dist/src/commands/metadata.js.map +1 -1
- package/dist/src/commands/prompts.js +24 -282
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.js +8 -8
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.js +16 -201
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/settings.d.ts +9 -12
- package/dist/src/commands/settings.js +79 -31
- package/dist/src/commands/settings.js.map +1 -1
- package/dist/src/commands/sync-app-settings.d.ts +24 -19
- package/dist/src/commands/sync-app-settings.js +48 -52
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +1003 -53
- package/dist/src/commands/sync.js +4080 -882
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/vars.js +4 -4
- package/dist/src/commands/vars.js.map +1 -1
- package/dist/src/commands/webhooks.js +6 -6
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +22 -0
- package/dist/src/commands/workflows.js +142 -446
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/access-rule-display.d.ts +21 -0
- package/dist/src/lib/access-rule-display.js +34 -0
- package/dist/src/lib/access-rule-display.js.map +1 -0
- package/dist/src/lib/api-client.d.ts +75 -37
- package/dist/src/lib/api-client.js +113 -59
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +6 -2
- package/dist/src/lib/codegen-shared/generatedFiles.js +9 -2
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +6 -6
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +8 -8
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
- package/dist/src/lib/config-object-descriptor.d.ts +24 -5
- package/dist/src/lib/config-object-descriptor.js +58 -10
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/config-payload.d.ts +1 -1
- package/dist/src/lib/config-payload.js +1 -1
- package/dist/src/lib/config-surface.d.ts +8 -8
- package/dist/src/lib/config-surface.js +10 -10
- package/dist/src/lib/config-surface.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.js +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +1 -1
- package/dist/src/lib/generated-allowlist.js +11 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +14 -14
- package/dist/src/lib/generated-config-surfaces.js +63 -35
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/generated-template-lint.d.ts +16 -10
- package/dist/src/lib/generated-template-lint.js +59 -24
- package/dist/src/lib/generated-template-lint.js.map +1 -1
- package/dist/src/lib/google-client-secret-status.d.ts +1 -1
- package/dist/src/lib/google-client-secret-status.js +4 -4
- package/dist/src/lib/google-client-secret-status.js.map +1 -1
- package/dist/src/lib/migration-nag.d.ts +2 -2
- package/dist/src/lib/migration-nag.js +3 -3
- package/dist/src/lib/output.d.ts +1 -1
- package/dist/src/lib/output.js +1 -1
- package/dist/src/lib/platform-owned.d.ts +5 -5
- package/dist/src/lib/platform-owned.js +6 -6
- package/dist/src/lib/platform-owned.js.map +1 -1
- package/dist/src/lib/query-operators.d.ts +1 -1
- package/dist/src/lib/query-operators.js +1 -1
- package/dist/src/lib/signing-secret-status.d.ts +2 -2
- package/dist/src/lib/signing-secret-status.js +2 -2
- package/dist/src/lib/snapshots.d.ts +2 -2
- package/dist/src/lib/snapshots.js +2 -2
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +15 -2
- package/dist/src/lib/swift-codegen/dbGenerator.js +250 -18
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/generator.js +5 -4
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +7 -3
- package/dist/src/lib/swift-codegen/siblingSymbols.js +4 -1
- package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -1
- package/dist/src/lib/sync-dir-selector.d.ts +21 -0
- package/dist/src/lib/sync-dir-selector.js +30 -0
- package/dist/src/lib/sync-dir-selector.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +39 -0
- package/dist/src/lib/sync-paths.js +70 -2
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +122 -31
- package/dist/src/lib/sync-resource-types.js +177 -42
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/sync-selectors.d.ts +4 -4
- package/dist/src/lib/sync-selectors.js +4 -4
- package/dist/src/lib/toml-database-config.d.ts +4 -4
- package/dist/src/lib/toml-database-config.js +3 -3
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/toml-metadata-config.d.ts +4 -4
- package/dist/src/lib/toml-metadata-config.js +4 -4
- package/dist/src/lib/toml-native-form.d.ts +1 -1
- package/dist/src/lib/toml-native-form.js +1 -1
- package/dist/src/lib/toml-params-validator.d.ts +1 -1
- package/dist/src/lib/toml-params-validator.js +1 -1
- package/dist/src/lib/version-check.js +1 -1
- package/dist/src/lib/version-check.js.map +1 -1
- package/dist/src/lib/workflow-apply.d.ts +69 -10
- package/dist/src/lib/workflow-apply.js +99 -24
- package/dist/src/lib/workflow-apply.js.map +1 -1
- package/dist/src/lib/workflow-codegen/generator.js +1 -1
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
- package/dist/src/lib/workflow-config-apply.d.ts +1 -1
- package/dist/src/lib/workflow-config-apply.js +1 -1
- package/dist/src/lib/workflow-config-sidecar.d.ts +1 -1
- package/dist/src/lib/workflow-config-sidecar.js +1 -1
- package/dist/src/lib/workflow-config-sidecar.js.map +1 -1
- package/dist/src/lib/workflow-defaults.d.ts +30 -0
- package/dist/src/lib/workflow-defaults.js +41 -0
- package/dist/src/lib/workflow-defaults.js.map +1 -0
- package/dist/src/lib/workflow-include-preserve.d.ts +12 -7
- package/dist/src/lib/workflow-include-preserve.js +139 -6
- package/dist/src/lib/workflow-include-preserve.js.map +1 -1
- package/dist/src/lib/workflow-payload.d.ts +26 -14
- package/dist/src/lib/workflow-payload.js +61 -45
- package/dist/src/lib/workflow-payload.js.map +1 -1
- package/dist/src/lib/workflow-toml-validator.d.ts +19 -16
- package/dist/src/lib/workflow-toml-validator.js +19 -16
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +15 -0
- package/dist/src/validators.d.ts +7 -7
- package/dist/src/validators.js +6 -6
- package/package.json +1 -3
- package/dist/src/lib/generated-workflow-model-fields.d.ts +0 -20
- package/dist/src/lib/generated-workflow-model-fields.js +0 -53
- package/dist/src/lib/generated-workflow-model-fields.js.map +0 -1
- package/dist/src/lib/workflow-field-descriptor.d.ts +0 -91
- package/dist/src/lib/workflow-field-descriptor.js +0 -153
- package/dist/src/lib/workflow-field-descriptor.js.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ApiClient } from "../lib/api-client.js";
|
|
2
2
|
import { getCurrentAppId } from "../lib/config.js";
|
|
3
|
-
import { error, info, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
|
|
3
|
+
import { success, error, info, keyValue, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
|
|
4
|
+
import { confirmPrompt } from "../lib/confirm-prompt.js";
|
|
4
5
|
function resolveAppId(appId, options) {
|
|
5
6
|
const resolved = appId || options.app || getCurrentAppId();
|
|
6
7
|
if (!resolved) {
|
|
@@ -17,19 +18,11 @@ export function registerDatabaseTypesCommands(program) {
|
|
|
17
18
|
Examples:
|
|
18
19
|
$ primitive database-types list
|
|
19
20
|
$ primitive database-types get <database-type>
|
|
20
|
-
$ primitive
|
|
21
|
-
$ primitive
|
|
21
|
+
$ primitive database-types create <database-type>
|
|
22
|
+
$ primitive database-types update <database-type> --rule-set-id <id>
|
|
23
|
+
$ primitive database-types delete <database-type>
|
|
22
24
|
$ primitive database-types operations list <database-type>
|
|
23
|
-
|
|
24
|
-
`);
|
|
25
|
-
// Server-side configuration is authored in TOML and applied with `sync push`
|
|
26
|
-
// (issue #2645) — this group no longer carries config-setting flags.
|
|
27
|
-
dbTypes.addHelpText("after", `
|
|
28
|
-
Configuration lives in database-types/<type>.toml:
|
|
29
|
-
$ primitive config fields database-type # the file's keys, types and defaults
|
|
30
|
-
$ primitive config new database-type <key> # scaffold one locally
|
|
31
|
-
$ primitive config set database-type/<key> <path>=<value>
|
|
32
|
-
$ primitive sync push --only database-type/<key>
|
|
25
|
+
$ primitive database-types operations create <database-type> <name> --type query --model Task --access true --definition '{"filter":{}}'
|
|
33
26
|
`);
|
|
34
27
|
// List type configs
|
|
35
28
|
dbTypes
|
|
@@ -92,10 +85,162 @@ Configuration lives in database-types/<type>.toml:
|
|
|
92
85
|
process.exit(1);
|
|
93
86
|
}
|
|
94
87
|
});
|
|
88
|
+
// Create type config
|
|
89
|
+
dbTypes
|
|
90
|
+
.command("create")
|
|
91
|
+
.description("Create a database type configuration")
|
|
92
|
+
.argument("<database-type>", "Database type name")
|
|
93
|
+
.option("--rule-set-id <id>", "Access rule set ID")
|
|
94
|
+
.option("--triggers <json>", "Trigger definitions as JSON string")
|
|
95
|
+
.option("--cel-context-access <cel>", "[deprecated] One CEL expression gating the database CEL context — it gates READ AND WRITE together, so anyone allowed to read can also update. Prefer a resource metadata category (separate readRule/writeRule). See docs.")
|
|
96
|
+
.option("--metadata-access <cel>", "[deprecated] Legacy alias for --cel-context-access (also gates read AND write); prefer a resource metadata category")
|
|
97
|
+
.option("--app <app-id>", "App ID")
|
|
98
|
+
.option("--json", "Output as JSON")
|
|
99
|
+
.action(async (databaseType, options) => {
|
|
100
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
101
|
+
const client = new ApiClient();
|
|
102
|
+
try {
|
|
103
|
+
const data = { databaseType };
|
|
104
|
+
if (options.ruleSetId)
|
|
105
|
+
data.ruleSetId = options.ruleSetId;
|
|
106
|
+
if (options.triggers) {
|
|
107
|
+
try {
|
|
108
|
+
data.triggers = JSON.parse(options.triggers);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
error("Invalid JSON in --triggers.");
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// `--cel-context-access` is the new name; `--metadata-access` remains
|
|
116
|
+
// supported. Both write to the same wire field (`metadataAccess`).
|
|
117
|
+
const accessExpr = options.celContextAccess ?? options.metadataAccess;
|
|
118
|
+
if (accessExpr)
|
|
119
|
+
data.metadataAccess = accessExpr;
|
|
120
|
+
const result = await client.createDatabaseTypeConfig(resolvedAppId, data);
|
|
121
|
+
if (options.json) {
|
|
122
|
+
json(result);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
success("Database type configuration created.");
|
|
126
|
+
keyValue("Database Type", result.databaseType);
|
|
127
|
+
if (result.ruleSetId)
|
|
128
|
+
keyValue("Rule Set ID", result.ruleSetId);
|
|
129
|
+
if (result.triggers)
|
|
130
|
+
keyValue("Triggers", "Yes");
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
error(err.message);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
// Update type config
|
|
138
|
+
dbTypes
|
|
139
|
+
.command("update")
|
|
140
|
+
.description("Update a database type configuration")
|
|
141
|
+
.argument("<database-type>", "Database type name")
|
|
142
|
+
.option("--rule-set-id <id>", "Access rule set ID (use 'none' to clear)")
|
|
143
|
+
.option("--triggers <json>", "Trigger definitions as JSON string (use 'none' to clear)")
|
|
144
|
+
.option("--cel-context-access <cel>", "[deprecated] One CEL expression gating the database CEL context read AND write (use 'none' to clear). Prefer a resource metadata category (separate readRule/writeRule).")
|
|
145
|
+
.option("--metadata-access <cel>", "[deprecated] Legacy alias for --cel-context-access (also gates read AND write; use 'none' to clear); prefer a resource metadata category")
|
|
146
|
+
.option("--app <app-id>", "App ID")
|
|
147
|
+
.option("--json", "Output as JSON")
|
|
148
|
+
.action(async (databaseType, options) => {
|
|
149
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
150
|
+
const client = new ApiClient();
|
|
151
|
+
const data = {};
|
|
152
|
+
if (options.ruleSetId !== undefined) {
|
|
153
|
+
data.ruleSetId = options.ruleSetId === "none" ? null : options.ruleSetId;
|
|
154
|
+
}
|
|
155
|
+
if (options.triggers !== undefined) {
|
|
156
|
+
if (options.triggers === "none") {
|
|
157
|
+
data.triggers = null;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
try {
|
|
161
|
+
data.triggers = JSON.parse(options.triggers);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
error("Invalid JSON in --triggers.");
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Honour either flag; --cel-context-access wins if both are given.
|
|
170
|
+
const accessArg = options.celContextAccess !== undefined
|
|
171
|
+
? options.celContextAccess
|
|
172
|
+
: options.metadataAccess;
|
|
173
|
+
if (accessArg !== undefined) {
|
|
174
|
+
data.metadataAccess = accessArg === "none" ? null : accessArg;
|
|
175
|
+
}
|
|
176
|
+
if (Object.keys(data).length === 0) {
|
|
177
|
+
error("Provide at least one of --rule-set-id, --triggers, --cel-context-access, or --metadata-access.");
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
const result = await client.updateDatabaseTypeConfig(resolvedAppId, databaseType, data);
|
|
182
|
+
if (options.json) {
|
|
183
|
+
json(result);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
success("Database type configuration updated.");
|
|
187
|
+
keyValue("Database Type", result.databaseType);
|
|
188
|
+
keyValue("Rule Set ID", result.ruleSetId || "—");
|
|
189
|
+
keyValue("Triggers", result.triggers ? "Yes" : "—");
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
error(err.message);
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
// Delete type config
|
|
197
|
+
dbTypes
|
|
198
|
+
.command("delete")
|
|
199
|
+
.description("Delete a database type configuration")
|
|
200
|
+
.argument("<database-type>", "Database type name")
|
|
201
|
+
.option("--app <app-id>", "App ID")
|
|
202
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
203
|
+
.option("--force", "Delete even if live database instances of this type still exist (orphans them)")
|
|
204
|
+
.action(async (databaseType, options) => {
|
|
205
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
206
|
+
// `-y/--yes` only skips the interactive confirm; it does NOT bypass the
|
|
207
|
+
// server's instance-orphaning guard. Only `--force` (→ ?force=true) does.
|
|
208
|
+
if (!options.yes) {
|
|
209
|
+
let confirm;
|
|
210
|
+
try {
|
|
211
|
+
confirm = await confirmPrompt(`Delete database type "${databaseType}"? This cannot be undone.`);
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
error(err.message);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
if (!confirm) {
|
|
218
|
+
info("Cancelled.");
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const client = new ApiClient();
|
|
223
|
+
try {
|
|
224
|
+
await client.deleteDatabaseTypeConfig(resolvedAppId, databaseType, {
|
|
225
|
+
force: Boolean(options.force),
|
|
226
|
+
});
|
|
227
|
+
success(`Database type "${databaseType}" deleted.`);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
error(err.message);
|
|
231
|
+
// The server refuses (409) when live instances exist and --force was
|
|
232
|
+
// not passed. Point the user at the escape hatch.
|
|
233
|
+
if (/instance/i.test(err.message) && !options.force) {
|
|
234
|
+
info("Delete the instances first (primitive databases delete <id>), or re-run with --force to delete the type anyway (this orphans the instances).");
|
|
235
|
+
}
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
95
239
|
// ---- Operations subcommand group ----
|
|
96
240
|
const operations = dbTypes
|
|
97
241
|
.command("operations")
|
|
98
242
|
.description("Manage operations (queries and mutations) for a database type");
|
|
243
|
+
// List operations
|
|
99
244
|
operations
|
|
100
245
|
.command("list")
|
|
101
246
|
.description("List operations for a database type")
|
|
@@ -167,5 +312,160 @@ Configuration lives in database-types/<type>.toml:
|
|
|
167
312
|
process.exit(1);
|
|
168
313
|
}
|
|
169
314
|
});
|
|
315
|
+
// Create operation
|
|
316
|
+
operations
|
|
317
|
+
.command("create")
|
|
318
|
+
.description("Create a new operation (query or mutation)")
|
|
319
|
+
.argument("<database-type>", "Database type name")
|
|
320
|
+
.argument("<name>", "Operation name")
|
|
321
|
+
.requiredOption("--type <type>", "Operation type: query, mutation, count, aggregate, or pipeline")
|
|
322
|
+
.requiredOption("--model <model-name>", "Model name")
|
|
323
|
+
.requiredOption("--access <cel>", "Access CEL expression")
|
|
324
|
+
.requiredOption("--definition <json>", "Definition as JSON string")
|
|
325
|
+
.option("--params <json>", "Parameters schema as JSON string")
|
|
326
|
+
.option("--app <app-id>", "App ID")
|
|
327
|
+
.option("--json", "Output as JSON")
|
|
328
|
+
.action(async (databaseType, name, options) => {
|
|
329
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
330
|
+
const client = new ApiClient();
|
|
331
|
+
let definition;
|
|
332
|
+
try {
|
|
333
|
+
definition = JSON.parse(options.definition);
|
|
334
|
+
}
|
|
335
|
+
catch {
|
|
336
|
+
error("Invalid JSON in --definition.");
|
|
337
|
+
process.exit(1);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
let params;
|
|
341
|
+
if (options.params) {
|
|
342
|
+
try {
|
|
343
|
+
params = JSON.parse(options.params);
|
|
344
|
+
}
|
|
345
|
+
catch {
|
|
346
|
+
error("Invalid JSON in --params.");
|
|
347
|
+
process.exit(1);
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
try {
|
|
352
|
+
const data = {
|
|
353
|
+
name,
|
|
354
|
+
type: options.type,
|
|
355
|
+
modelName: options.model,
|
|
356
|
+
access: options.access,
|
|
357
|
+
definition,
|
|
358
|
+
};
|
|
359
|
+
if (params)
|
|
360
|
+
data.params = params;
|
|
361
|
+
const result = await client.createDatabaseTypeOperation(resolvedAppId, databaseType, data);
|
|
362
|
+
if (options.json) {
|
|
363
|
+
json(result);
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
success("Operation created.");
|
|
367
|
+
keyValue("Name", result.name);
|
|
368
|
+
keyValue("Type", result.type);
|
|
369
|
+
keyValue("Model Name", result.modelName);
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
error(err.message);
|
|
373
|
+
process.exit(1);
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
// Update operation
|
|
377
|
+
operations
|
|
378
|
+
.command("update")
|
|
379
|
+
.description("Update an operation")
|
|
380
|
+
.argument("<database-type>", "Database type name")
|
|
381
|
+
.argument("<name>", "Operation name")
|
|
382
|
+
.option("--model <model-name>", "New model name")
|
|
383
|
+
.option("--access <cel>", "New access CEL expression")
|
|
384
|
+
.option("--definition <json>", "New definition as JSON string")
|
|
385
|
+
.option("--params <json>", "New parameters schema as JSON string")
|
|
386
|
+
.option("--app <app-id>", "App ID")
|
|
387
|
+
.option("--json", "Output as JSON")
|
|
388
|
+
.action(async (databaseType, name, options) => {
|
|
389
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
390
|
+
const client = new ApiClient();
|
|
391
|
+
const data = {};
|
|
392
|
+
if (options.model)
|
|
393
|
+
data.modelName = options.model;
|
|
394
|
+
if (options.access)
|
|
395
|
+
data.access = options.access;
|
|
396
|
+
if (options.definition) {
|
|
397
|
+
try {
|
|
398
|
+
data.definition = JSON.parse(options.definition);
|
|
399
|
+
}
|
|
400
|
+
catch {
|
|
401
|
+
error("Invalid JSON in --definition.");
|
|
402
|
+
process.exit(1);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
if (options.params) {
|
|
407
|
+
try {
|
|
408
|
+
data.params = JSON.parse(options.params);
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
error("Invalid JSON in --params.");
|
|
412
|
+
process.exit(1);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (Object.keys(data).length === 0) {
|
|
417
|
+
error("Provide at least one of --model, --access, --definition, or --params.");
|
|
418
|
+
process.exit(1);
|
|
419
|
+
}
|
|
420
|
+
try {
|
|
421
|
+
const result = await client.updateDatabaseTypeOperation(resolvedAppId, databaseType, name, data);
|
|
422
|
+
if (options.json) {
|
|
423
|
+
json(result);
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
success("Operation updated.");
|
|
427
|
+
keyValue("Name", result.name);
|
|
428
|
+
keyValue("Type", result.type);
|
|
429
|
+
keyValue("Model Name", result.modelName);
|
|
430
|
+
}
|
|
431
|
+
catch (err) {
|
|
432
|
+
error(err.message);
|
|
433
|
+
process.exit(1);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
// Delete operation
|
|
437
|
+
operations
|
|
438
|
+
.command("delete")
|
|
439
|
+
.description("Delete an operation")
|
|
440
|
+
.argument("<database-type>", "Database type name")
|
|
441
|
+
.argument("<name>", "Operation name")
|
|
442
|
+
.option("--app <app-id>", "App ID")
|
|
443
|
+
.option("-y, --yes", "Skip confirmation prompt")
|
|
444
|
+
.action(async (databaseType, name, options) => {
|
|
445
|
+
const resolvedAppId = resolveAppId(undefined, options);
|
|
446
|
+
if (!options.yes) {
|
|
447
|
+
let confirm;
|
|
448
|
+
try {
|
|
449
|
+
confirm = await confirmPrompt(`Delete operation "${name}" from type "${databaseType}"?`);
|
|
450
|
+
}
|
|
451
|
+
catch (err) {
|
|
452
|
+
error(err.message);
|
|
453
|
+
process.exit(1);
|
|
454
|
+
}
|
|
455
|
+
if (!confirm) {
|
|
456
|
+
info("Cancelled.");
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
const client = new ApiClient();
|
|
461
|
+
try {
|
|
462
|
+
await client.deleteDatabaseTypeOperation(resolvedAppId, databaseType, name);
|
|
463
|
+
success(`Operation "${name}" deleted.`);
|
|
464
|
+
}
|
|
465
|
+
catch (err) {
|
|
466
|
+
error(err.message);
|
|
467
|
+
process.exit(1);
|
|
468
|
+
}
|
|
469
|
+
});
|
|
170
470
|
}
|
|
171
471
|
//# sourceMappingURL=database-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-types.js","sourceRoot":"","sources":["../../../src/commands/database-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"database-types.js","sourceRoot":"","sources":["../../../src/commands/database-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { Option } from "commander";
|
|
1
2
|
import { readFileSync, writeFileSync, appendFileSync, mkdirSync, existsSync, readdirSync } from "fs";
|
|
2
3
|
import * as path from "path";
|
|
3
4
|
import { ApiClient } from "../lib/api-client.js";
|
|
4
5
|
import { getCurrentAppId } from "../lib/config.js";
|
|
5
6
|
import { resolveCodegenSourceDir } from "../lib/codegen-shared/resolveCodegenSourceDir.js";
|
|
7
|
+
import { resolveSyncDirOverride } from "../lib/sync-dir-selector.js";
|
|
6
8
|
import { parseCsv, applyColumnMap, buildRows } from "../lib/csv.js";
|
|
7
9
|
import { chunk, parseBatchSize } from "../lib/batch.js";
|
|
8
10
|
import { generateDbTypes, } from "../lib/db-codegen/dbGenerator.js";
|
|
@@ -219,9 +221,9 @@ Examples:
|
|
|
219
221
|
|
|
220
222
|
Note: this group manages database *instances*. Database *type* configurations
|
|
221
223
|
(schemas, rules, operations) are authored in TOML — see 'primitive config fields
|
|
222
|
-
database-type' and the 'database-
|
|
223
|
-
$ primitive database-
|
|
224
|
-
$ rm database-
|
|
224
|
+
database-type-config' and the 'database-type-configs' group for inspection:
|
|
225
|
+
$ primitive database-type-configs list
|
|
226
|
+
$ rm database-type-configs/<database-type>.toml && primitive config push --prune
|
|
225
227
|
`);
|
|
226
228
|
// List databases
|
|
227
229
|
databases
|
|
@@ -1908,13 +1910,17 @@ database-type' and the 'database-types' group for inspection:
|
|
|
1908
1910
|
.description("Manage the TOML schema attached to a database type");
|
|
1909
1911
|
schema
|
|
1910
1912
|
.command("generate")
|
|
1911
|
-
.description("Scaffold a starting TOML schema for <database-type> from existing operations + DO introspection, and insert it into the local database-
|
|
1913
|
+
.description("Scaffold a starting TOML schema for <database-type> from existing operations + DO introspection, and insert it into the local database-type-configs/<type>.toml file.")
|
|
1912
1914
|
.argument("<database-type>", "Database type name")
|
|
1913
1915
|
.option("--app <app-id>", "App ID")
|
|
1914
|
-
.option("--
|
|
1916
|
+
.option("--dir <path>", "Config directory (overrides the auto-resolved per-env path)")
|
|
1917
|
+
.addOption(new Option("--sync-dir <path>", "Deprecated alias of --dir").hideHelp())
|
|
1915
1918
|
.option("-f, --force", "Overwrite an existing [models.*] block in the local file")
|
|
1916
1919
|
.option("--json", "Output the generated TOML as JSON")
|
|
1917
1920
|
.action(async (databaseType, options) => {
|
|
1921
|
+
// Resolve the sync-dir override before the API call, so a caller who
|
|
1922
|
+
// passed both spellings hears about it without a network round trip.
|
|
1923
|
+
const configDir = resolveSyncDirOverride(options, "databases schema generate");
|
|
1918
1924
|
const resolvedAppId = resolveAppId(undefined, options);
|
|
1919
1925
|
const client = new ApiClient();
|
|
1920
1926
|
try {
|
|
@@ -1925,14 +1931,14 @@ database-type' and the 'database-types' group for inspection:
|
|
|
1925
1931
|
json({ schema: scaffoldedToml });
|
|
1926
1932
|
return;
|
|
1927
1933
|
}
|
|
1928
|
-
// 2. Locate the local `database-
|
|
1934
|
+
// 2. Locate the local `database-type-configs/<type>.toml` file. Per the
|
|
1929
1935
|
// plan-of-record CLI sync layout, the file lives at
|
|
1930
|
-
// `<
|
|
1931
|
-
// exact
|
|
1936
|
+
// `<config-dir>/database-type-configs/<type>.toml`. We don't need to know
|
|
1937
|
+
// the exact config dir for the happy path — just look for an existing
|
|
1932
1938
|
// file relative to the CWD's `.primitive/sync/` directory tree.
|
|
1933
1939
|
const candidateFiles = [];
|
|
1934
|
-
if (
|
|
1935
|
-
candidateFiles.push(path.join(
|
|
1940
|
+
if (configDir) {
|
|
1941
|
+
candidateFiles.push(path.join(configDir, "database-type-configs", `${databaseType}.toml`));
|
|
1936
1942
|
}
|
|
1937
1943
|
else {
|
|
1938
1944
|
// Search any env/appId subtree under .primitive/sync that matches.
|
|
@@ -1942,7 +1948,7 @@ database-type' and the 'database-types' group for inspection:
|
|
|
1942
1948
|
const envDir = path.join(root, env);
|
|
1943
1949
|
try {
|
|
1944
1950
|
for (const app of readdirSync(envDir)) {
|
|
1945
|
-
const candidate = path.join(envDir, app, "database-
|
|
1951
|
+
const candidate = path.join(envDir, app, "database-type-configs", `${databaseType}.toml`);
|
|
1946
1952
|
if (existsSync(candidate)) {
|
|
1947
1953
|
candidateFiles.push(candidate);
|
|
1948
1954
|
}
|
|
@@ -1957,7 +1963,7 @@ database-type' and the 'database-types' group for inspection:
|
|
|
1957
1963
|
if (candidateFiles.length === 0) {
|
|
1958
1964
|
// No local file found — print the scaffold to stdout and tell
|
|
1959
1965
|
// the user where to put it.
|
|
1960
|
-
info(`No local database-
|
|
1966
|
+
info(`No local database-type-configs/${databaseType}.toml found under .primitive/sync/. Generated TOML:`);
|
|
1961
1967
|
console.log("");
|
|
1962
1968
|
console.log(scaffoldedToml);
|
|
1963
1969
|
return;
|
|
@@ -1997,7 +2003,7 @@ database-type' and the 'database-types' group for inspection:
|
|
|
1997
2003
|
writeFileSync(targetPath, merged);
|
|
1998
2004
|
success(`Inserted schema into ${targetPath}`);
|
|
1999
2005
|
}
|
|
2000
|
-
info("Review the generated schema, fix types the generator guessed wrong, then run `primitive
|
|
2006
|
+
info("Review the generated schema, fix types the generator guessed wrong, then run `primitive config push` (or `primitive config push --dry-run`).");
|
|
2001
2007
|
}
|
|
2002
2008
|
catch (err) {
|
|
2003
2009
|
error(err.message);
|
|
@@ -2009,11 +2015,12 @@ database-type' and the 'database-types' group for inspection:
|
|
|
2009
2015
|
// ============================================
|
|
2010
2016
|
databases
|
|
2011
2017
|
.command("codegen")
|
|
2012
|
-
.description("Generate record + operation types from the local database-
|
|
2013
|
-
.argument("[database-type]", "Generate for a single database type (defaults to every database-
|
|
2018
|
+
.description("Generate record + operation types from the local database-type-configs/*.toml schema. TypeScript (default): a <type>.generated.ts per database type (record interfaces, per-op input-params interfaces, per-op result aliases, and a typed <type>Ops factory). Swift (--lang swift): a <type>.generated.swift per database type (record structs, per-op params structs, per-op result typealiases, and a typed <Type>Ops factory).\n\nFormatting: the emitted TypeScript is already formatted the way Prettier's DEFAULT config formats it, so a `codegen` -> `prettier --write` -> `codegen --check` pipeline stays green. If your project uses a NON-default Prettier config (a different printWidth, trailingComma, or quote style), Prettier will reformat the generated files and `--check` will then fail: add the generated directory to `.prettierignore` and commit the raw emission instead.")
|
|
2019
|
+
.argument("[database-type]", "Generate for a single database type (defaults to every database-type-configs/*.toml found)")
|
|
2014
2020
|
.option("--app <app-id>", "App ID")
|
|
2015
|
-
.option("--
|
|
2016
|
-
.
|
|
2021
|
+
.option("--dir <path>", "Config directory (overrides the auto-resolved per-env path)")
|
|
2022
|
+
.addOption(new Option("--sync-dir <path>", "Deprecated alias of --dir").hideHelp())
|
|
2023
|
+
.option("-o, --output <dir>", "Output directory for the generated files (defaults to <config-dir>/database-type-configs/generated/)")
|
|
2017
2024
|
.option("--lang <lang>", "Target language for the generated types: 'ts' (default) or 'swift'.", "ts")
|
|
2018
2025
|
.option("--check", "Exit non-zero if generated output is out of date (CI guard); does not write. Compares byte-for-byte, so the file on disk must match the emission exactly.")
|
|
2019
2026
|
.option("--json", "Output the result summary as JSON")
|
|
@@ -2026,14 +2033,17 @@ database-type' and the 'database-types' group for inspection:
|
|
|
2026
2033
|
error(`Unknown --lang "${options.lang}". Use "ts" or "swift".`);
|
|
2027
2034
|
process.exit(1);
|
|
2028
2035
|
}
|
|
2029
|
-
// 1. Resolve the single source database-
|
|
2036
|
+
// 1. Resolve the single source database-type-configs/ directory via the
|
|
2030
2037
|
// shared active-environment resolver (issue #1510). Honors
|
|
2031
|
-
// --
|
|
2038
|
+
// --dir / --app overrides and resolves the active env
|
|
2032
2039
|
// (--env → PRIMITIVE_ENV → defaultEnvironment → single-env) instead
|
|
2033
2040
|
// of silently merging types across every synced env.
|
|
2034
2041
|
const dbTypesSourceDir = resolveCodegenSourceDir({
|
|
2035
|
-
subdir: "database-
|
|
2036
|
-
options: {
|
|
2042
|
+
subdir: "database-type-configs",
|
|
2043
|
+
options: {
|
|
2044
|
+
app: options.app,
|
|
2045
|
+
syncDir: resolveSyncDirOverride(options, "databases codegen"),
|
|
2046
|
+
},
|
|
2037
2047
|
});
|
|
2038
2048
|
// 2. Collect the source .toml files (one per database type), filtered
|
|
2039
2049
|
// to a single type when an argument is given.
|
|
@@ -2053,8 +2063,8 @@ database-type' and the 'database-types' group for inspection:
|
|
|
2053
2063
|
}
|
|
2054
2064
|
if (inputs.length === 0) {
|
|
2055
2065
|
error(databaseType
|
|
2056
|
-
? `No database-
|
|
2057
|
-
: "No database-
|
|
2066
|
+
? `No database-type-configs/${databaseType}.toml found under .primitive/sync/.`
|
|
2067
|
+
: "No database-type-configs/*.toml files found to generate from.");
|
|
2058
2068
|
process.exit(1);
|
|
2059
2069
|
}
|
|
2060
2070
|
// 3. Resolve the output directory. Default: a `generated/` subdir of
|
|
@@ -2160,7 +2170,7 @@ async function exportSingleDatabase(client, appId, databaseId, outputDir, jsonOu
|
|
|
2160
2170
|
const dbMeta = await client.getDatabase(appId, databaseId);
|
|
2161
2171
|
// Warn about databaseType sync
|
|
2162
2172
|
if (dbMeta.databaseType) {
|
|
2163
|
-
warn(`This database uses type "${dbMeta.databaseType}". Make sure to \`primitive
|
|
2173
|
+
warn(`This database uses type "${dbMeta.databaseType}". Make sure to \`primitive config push\` the type config before importing into a new app.`);
|
|
2164
2174
|
}
|
|
2165
2175
|
// 2. Write metadata
|
|
2166
2176
|
const metadata = {
|
|
@@ -2253,7 +2263,7 @@ async function importSingleDatabase(client, appId, dbDir, options) {
|
|
|
2253
2263
|
}
|
|
2254
2264
|
// Check if database type exists — warn if not
|
|
2255
2265
|
if (metadata.databaseType) {
|
|
2256
|
-
warn(`Database uses type "${metadata.databaseType}". Ensure the type config exists in the target app (use \`primitive
|
|
2266
|
+
warn(`Database uses type "${metadata.databaseType}". Ensure the type config exists in the target app (use \`primitive config push\`).`);
|
|
2257
2267
|
}
|
|
2258
2268
|
// Check if database exists — use the original ID for overwrite scenarios
|
|
2259
2269
|
let targetDatabaseId = databaseId;
|