primitive-admin 1.0.62 → 1.0.64
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 +132 -42
- package/assets/skill/skills/primitive-platform/SKILL.md +142 -661
- package/dist/bin/primitive.js +121 -41
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.js +37 -50
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.js +178 -9
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.js +17 -7
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth-sessions.d.ts +7 -0
- package/dist/src/commands/auth-sessions.js +144 -0
- package/dist/src/commands/auth-sessions.js.map +1 -0
- package/dist/src/commands/auth.js +76 -116
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.js +2 -1
- package/dist/src/commands/blob-buckets.js.map +1 -1
- package/dist/src/commands/catalog.js +26 -10
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.js +3 -10
- package/dist/src/commands/collection-type-configs.js.map +1 -1
- package/dist/src/commands/collections.js +736 -19
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/config.js +13 -27
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/connections.js +8 -9
- package/dist/src/commands/connections.js.map +1 -1
- package/dist/src/commands/cron-triggers.js +2 -1
- package/dist/src/commands/cron-triggers.js.map +1 -1
- package/dist/src/commands/database-type-configs.js +5 -12
- package/dist/src/commands/database-type-configs.js.map +1 -1
- package/dist/src/commands/databases.js +59 -72
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +58 -0
- package/dist/src/commands/documents.js +1623 -95
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.js +5 -4
- package/dist/src/commands/email-templates.js.map +1 -1
- package/dist/src/commands/env.d.ts +1 -1
- package/dist/src/commands/env.js +106 -44
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/feature-flags.js +2 -1
- package/dist/src/commands/feature-flags.js.map +1 -1
- package/dist/src/commands/functions.d.ts +20 -0
- package/dist/src/commands/functions.js +1630 -0
- package/dist/src/commands/functions.js.map +1 -0
- package/dist/src/commands/group-type-configs.js +2 -1
- package/dist/src/commands/group-type-configs.js.map +1 -1
- package/dist/src/commands/groups.js +30 -17
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.js +17 -11
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +24 -12
- package/dist/src/commands/init.js +198 -110
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +65 -26
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/locks.js +17 -2
- package/dist/src/commands/locks.js.map +1 -1
- package/dist/src/commands/metadata-category-configs.js +2 -1
- package/dist/src/commands/metadata-category-configs.js.map +1 -1
- package/dist/src/commands/metadata.js +8 -1
- package/dist/src/commands/metadata.js.map +1 -1
- package/dist/src/commands/prompts.js +106 -59
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.js +3 -10
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +10 -0
- package/dist/src/commands/scripts.js +159 -25
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/secrets.js +2 -1
- package/dist/src/commands/secrets.js.map +1 -1
- package/dist/src/commands/sessions.js +10 -9
- package/dist/src/commands/sessions.js.map +1 -1
- package/dist/src/commands/sync-app-settings.js +3 -5
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +391 -44
- package/dist/src/commands/sync.js +2622 -534
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.js +2 -1
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.js +19 -10
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.js +2 -1
- package/dist/src/commands/vars.js.map +1 -1
- package/dist/src/commands/waitlist.js +2 -1
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +29 -0
- package/dist/src/commands/webhooks.js +135 -64
- package/dist/src/commands/webhooks.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +1 -29
- package/dist/src/commands/workflows.js +113 -179
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/api-client.d.ts +628 -14
- package/dist/src/lib/api-client.js +776 -70
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +1 -1
- package/dist/src/lib/app-settings-descriptor.js +9 -1
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/block-selector.d.ts +58 -0
- package/dist/src/lib/block-selector.js +92 -0
- package/dist/src/lib/block-selector.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +24 -54
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +31 -153
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -1
- package/dist/src/lib/collection-export.d.ts +184 -0
- package/dist/src/lib/collection-export.js +252 -0
- package/dist/src/lib/collection-export.js.map +1 -0
- package/dist/src/lib/config-json-field.d.ts +28 -0
- package/dist/src/lib/config-json-field.js +56 -0
- package/dist/src/lib/config-json-field.js.map +1 -0
- package/dist/src/lib/config-object-descriptor.js +88 -6
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/config-payload.d.ts +8 -1
- package/dist/src/lib/config-payload.js +49 -4
- package/dist/src/lib/config-payload.js.map +1 -1
- package/dist/src/lib/config-surface.d.ts +12 -1
- package/dist/src/lib/config-surface.js +71 -3
- package/dist/src/lib/config-surface.js.map +1 -1
- package/dist/src/lib/config.d.ts +31 -13
- package/dist/src/lib/config.js +34 -70
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/credentials-store.d.ts +37 -22
- package/dist/src/lib/credentials-store.js +103 -97
- package/dist/src/lib/credentials-store.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTypeIR.js +8 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -1
- package/dist/src/lib/deprecation.d.ts +22 -0
- package/dist/src/lib/deprecation.js +43 -0
- package/dist/src/lib/deprecation.js.map +1 -0
- package/dist/src/lib/document-export-permissions.d.ts +30 -0
- package/dist/src/lib/document-export-permissions.js +54 -0
- package/dist/src/lib/document-export-permissions.js.map +1 -0
- package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
- package/dist/src/lib/document-ingest-artifact.js +505 -0
- package/dist/src/lib/document-ingest-artifact.js.map +1 -0
- package/dist/src/lib/document-ingest-input.d.ts +51 -0
- package/dist/src/lib/document-ingest-input.js +132 -0
- package/dist/src/lib/document-ingest-input.js.map +1 -0
- package/dist/src/lib/document-ingest-rows.d.ts +137 -0
- package/dist/src/lib/document-ingest-rows.js +181 -0
- package/dist/src/lib/document-ingest-rows.js.map +1 -0
- package/dist/src/lib/document-ingest.d.ts +101 -0
- package/dist/src/lib/document-ingest.js +384 -0
- package/dist/src/lib/document-ingest.js.map +1 -0
- package/dist/src/lib/env-resolver-core.d.ts +128 -17
- package/dist/src/lib/env-resolver-core.js +204 -22
- package/dist/src/lib/env-resolver-core.js.map +1 -1
- package/dist/src/lib/env-resolver.d.ts +18 -3
- package/dist/src/lib/env-resolver.js +23 -3
- package/dist/src/lib/env-resolver.js.map +1 -1
- package/dist/src/lib/function-bundle.d.ts +147 -0
- package/dist/src/lib/function-bundle.js +341 -0
- package/dist/src/lib/function-bundle.js.map +1 -0
- package/dist/src/lib/function-collect.d.ts +123 -0
- package/dist/src/lib/function-collect.js +610 -0
- package/dist/src/lib/function-collect.js.map +1 -0
- package/dist/src/lib/function-db-types.d.ts +202 -0
- package/dist/src/lib/function-db-types.js +870 -0
- package/dist/src/lib/function-db-types.js.map +1 -0
- package/dist/src/lib/function-document-types.d.ts +144 -0
- package/dist/src/lib/function-document-types.js +370 -0
- package/dist/src/lib/function-document-types.js.map +1 -0
- package/dist/src/lib/function-grants-preflight.d.ts +64 -0
- package/dist/src/lib/function-grants-preflight.js +105 -0
- package/dist/src/lib/function-grants-preflight.js.map +1 -0
- package/dist/src/lib/function-log-lines.d.ts +76 -0
- package/dist/src/lib/function-log-lines.js +160 -0
- package/dist/src/lib/function-log-lines.js.map +1 -0
- package/dist/src/lib/function-log-row.d.ts +29 -0
- package/dist/src/lib/function-log-row.js +73 -0
- package/dist/src/lib/function-log-row.js.map +1 -0
- package/dist/src/lib/function-log-tail.d.ts +132 -0
- package/dist/src/lib/function-log-tail.js +262 -0
- package/dist/src/lib/function-log-tail.js.map +1 -0
- package/dist/src/lib/function-run.d.ts +289 -0
- package/dist/src/lib/function-run.js +389 -0
- package/dist/src/lib/function-run.js.map +1 -0
- package/dist/src/lib/function-schema-codegen.d.ts +143 -0
- package/dist/src/lib/function-schema-codegen.js +420 -0
- package/dist/src/lib/function-schema-codegen.js.map +1 -0
- package/dist/src/lib/function-sync.d.ts +459 -0
- package/dist/src/lib/function-sync.js +1258 -0
- package/dist/src/lib/function-sync.js.map +1 -0
- package/dist/src/lib/function-trigger-listing.d.ts +27 -0
- package/dist/src/lib/function-trigger-listing.js +70 -0
- package/dist/src/lib/function-trigger-listing.js.map +1 -0
- package/dist/src/lib/function-typecheck.d.ts +86 -0
- package/dist/src/lib/function-typecheck.js +370 -0
- package/dist/src/lib/function-typecheck.js.map +1 -0
- package/dist/src/lib/function-versions.d.ts +122 -0
- package/dist/src/lib/function-versions.js +182 -0
- package/dist/src/lib/function-versions.js.map +1 -0
- package/dist/src/lib/generated-allowlist.js +4 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +2332 -78
- package/dist/src/lib/generated-config-surfaces.js +6979 -468
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/generated-sdk-types.d.ts +12 -0
- package/dist/src/lib/generated-sdk-types.js +13 -0
- package/dist/src/lib/generated-sdk-types.js.map +1 -0
- package/dist/src/lib/init-adopt.js +2 -2
- package/dist/src/lib/init-adopt.js.map +1 -1
- package/dist/src/lib/init-assets.js +3 -3
- package/dist/src/lib/init-client-platforms.d.ts +14 -0
- package/dist/src/lib/init-client-platforms.js +71 -0
- package/dist/src/lib/init-client-platforms.js.map +1 -0
- package/dist/src/lib/init-config.d.ts +1 -1
- package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
- package/dist/src/lib/init-email-redirect-uris.js +46 -0
- package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
- package/dist/src/lib/init-ios-links.d.ts +41 -0
- package/dist/src/lib/init-ios-links.js +67 -1
- package/dist/src/lib/init-ios-links.js.map +1 -1
- package/dist/src/lib/init-plan.d.ts +1 -1
- package/dist/src/lib/init-plan.js +1 -1
- package/dist/src/lib/init-xcode.d.ts +6 -5
- package/dist/src/lib/init-xcode.js +34 -10
- package/dist/src/lib/init-xcode.js.map +1 -1
- package/dist/src/lib/integration-selector.d.ts +42 -0
- package/dist/src/lib/integration-selector.js +46 -0
- package/dist/src/lib/integration-selector.js.map +1 -0
- package/dist/src/lib/ios-app-id.d.ts +34 -0
- package/dist/src/lib/ios-app-id.js +69 -0
- package/dist/src/lib/ios-app-id.js.map +1 -0
- package/dist/src/lib/list-options.d.ts +68 -0
- package/dist/src/lib/list-options.js +89 -0
- package/dist/src/lib/list-options.js.map +1 -0
- package/dist/src/lib/local-state.d.ts +1 -1
- package/dist/src/lib/local-state.js +1 -1
- package/dist/src/lib/local-test-cases.d.ts +63 -0
- package/dist/src/lib/local-test-cases.js +136 -0
- package/dist/src/lib/local-test-cases.js.map +1 -0
- package/dist/src/lib/log-inspection.d.ts +152 -5
- package/dist/src/lib/log-inspection.js +179 -2
- package/dist/src/lib/log-inspection.js.map +1 -1
- package/dist/src/lib/logout-admin-session.d.ts +33 -0
- package/dist/src/lib/logout-admin-session.js +70 -0
- package/dist/src/lib/logout-admin-session.js.map +1 -0
- package/dist/src/lib/output.d.ts +15 -0
- package/dist/src/lib/output.js +28 -0
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/paginate.d.ts +15 -0
- package/dist/src/lib/paginate.js +17 -0
- package/dist/src/lib/paginate.js.map +1 -1
- package/dist/src/lib/project-config.d.ts +46 -21
- package/dist/src/lib/project-config.js +74 -47
- package/dist/src/lib/project-config.js.map +1 -1
- package/dist/src/lib/prompt-cost-format.d.ts +11 -0
- package/dist/src/lib/prompt-cost-format.js +41 -0
- package/dist/src/lib/prompt-cost-format.js.map +1 -0
- package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
- package/dist/src/lib/prompt-schema-codegen.js +462 -0
- package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +9 -1
- package/dist/src/lib/refresh-admin-credentials.js +22 -2
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -1
- package/dist/src/lib/resolve-owner.d.ts +19 -0
- package/dist/src/lib/resolve-owner.js +20 -0
- package/dist/src/lib/resolve-owner.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +49 -3
- package/dist/src/lib/skill-installer.js +275 -100
- package/dist/src/lib/skill-installer.js.map +1 -1
- package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
- package/dist/src/lib/snapshot-audit-source.js +58 -0
- package/dist/src/lib/snapshot-audit-source.js.map +1 -0
- package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
- package/dist/src/lib/snapshot-audit-store.js +196 -0
- package/dist/src/lib/snapshot-audit-store.js.map +1 -0
- package/dist/src/lib/snapshot-audit.d.ts +207 -0
- package/dist/src/lib/snapshot-audit.js +431 -0
- package/dist/src/lib/snapshot-audit.js.map +1 -0
- package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
- package/dist/src/lib/snapshot-build-rows.js +87 -0
- package/dist/src/lib/snapshot-build-rows.js.map +1 -0
- package/dist/src/lib/snapshot-build.d.ts +50 -0
- package/dist/src/lib/snapshot-build.js +111 -0
- package/dist/src/lib/snapshot-build.js.map +1 -0
- package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
- package/dist/src/lib/snapshot-manifest-layout.js +70 -0
- package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +8 -9
- package/dist/src/lib/snapshots.js +20 -83
- package/dist/src/lib/snapshots.js.map +1 -1
- package/dist/src/lib/step-run-table.d.ts +43 -0
- package/dist/src/lib/step-run-table.js +129 -0
- package/dist/src/lib/step-run-table.js.map +1 -0
- package/dist/src/lib/storage-pending-retry.d.ts +26 -0
- package/dist/src/lib/storage-pending-retry.js +42 -0
- package/dist/src/lib/storage-pending-retry.js.map +1 -0
- package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
- package/dist/src/lib/swift-codegen/banners.js +25 -0
- package/dist/src/lib/swift-codegen/banners.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +19 -7
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +7 -1
- package/dist/src/lib/swift-codegen/generator.js +28 -11
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +15 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +21 -4
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -1
- package/dist/src/lib/sync-paths.d.ts +72 -55
- package/dist/src/lib/sync-paths.js +97 -100
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +23 -4
- package/dist/src/lib/sync-resource-types.js +106 -8
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/sync-selectors.d.ts +45 -2
- package/dist/src/lib/sync-selectors.js +66 -5
- package/dist/src/lib/sync-selectors.js.map +1 -1
- package/dist/src/lib/template.d.ts +2 -2
- package/dist/src/lib/template.js +2 -2
- package/dist/src/lib/test-case-file-names.d.ts +40 -0
- package/dist/src/lib/test-case-file-names.js +91 -0
- package/dist/src/lib/test-case-file-names.js.map +1 -0
- package/dist/src/lib/test-case-keys.d.ts +1 -1
- package/dist/src/lib/test-case-keys.js +1 -1
- package/dist/src/lib/test-case-variables.d.ts +14 -0
- package/dist/src/lib/test-case-variables.js +42 -0
- package/dist/src/lib/test-case-variables.js.map +1 -1
- package/dist/src/lib/toml-database-config.js +19 -2
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/web-url.d.ts +40 -0
- package/dist/src/lib/web-url.js +76 -0
- package/dist/src/lib/web-url.js.map +1 -0
- package/dist/src/lib/webhook-deliver.d.ts +209 -0
- package/dist/src/lib/webhook-deliver.js +519 -0
- package/dist/src/lib/webhook-deliver.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +1 -1
- package/dist/src/lib/workflow-codegen/generator.js +1 -1
- package/dist/src/lib/workflow-toml-validator.d.ts +17 -8
- package/dist/src/lib/workflow-toml-validator.js +25 -12
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/lib/workflow-usage.d.ts +196 -0
- package/dist/src/lib/workflow-usage.js +310 -0
- package/dist/src/lib/workflow-usage.js.map +1 -0
- package/dist/src/types/index.d.ts +12 -2
- package/package.json +5 -4
|
@@ -1,27 +1,23 @@
|
|
|
1
|
-
import { Option } from "commander";
|
|
2
1
|
import { readFileSync, writeFileSync, appendFileSync, mkdirSync, existsSync, readdirSync } from "fs";
|
|
3
2
|
import * as path from "path";
|
|
4
3
|
import { ApiClient } from "../lib/api-client.js";
|
|
5
|
-
import { getCurrentAppId } from "../lib/config.js";
|
|
4
|
+
import { getCurrentAppId, resolveAppId } from "../lib/config.js";
|
|
6
5
|
import { resolveCodegenSourceDir } from "../lib/codegen-shared/resolveCodegenSourceDir.js";
|
|
7
|
-
import {
|
|
6
|
+
import { resolveSyncDir } from "../lib/sync-paths.js";
|
|
8
7
|
import { parseCsv, applyColumnMap, buildRows } from "../lib/csv.js";
|
|
9
8
|
import { chunk, parseBatchSize } from "../lib/batch.js";
|
|
10
9
|
import { generateDbTypes, } from "../lib/db-codegen/dbGenerator.js";
|
|
11
10
|
import { generateDbSwiftTypes } from "../lib/swift-codegen/dbGenerator.js";
|
|
12
11
|
import { success, error, info, warn, keyValue, result as printResult, formatTable, formatId, formatDate, json, } from "../lib/output.js";
|
|
13
12
|
import { confirmPrompt } from "../lib/confirm-prompt.js";
|
|
13
|
+
import { deprecateCommandGroup, warnDeprecated, } from "../lib/deprecation.js";
|
|
14
|
+
/** Successor for the deprecated database CEL context commands and flags. */
|
|
15
|
+
const CEL_CONTEXT_SUCCESSOR = "resource metadata categories (`primitive metadata get|set database <database-id> <category>`; define categories with `primitive config push`)";
|
|
14
16
|
import { parseFilterOptions } from "../lib/record-filter.js";
|
|
15
17
|
import { parseDataOption } from "../lib/data-input.js";
|
|
16
18
|
import { ulid } from "ulid";
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (!resolved) {
|
|
20
|
-
error("No app specified. Use <app-id>, --app, or 'primitive use <app-id>' to set context.");
|
|
21
|
-
process.exit(1);
|
|
22
|
-
}
|
|
23
|
-
return resolved;
|
|
24
|
-
}
|
|
19
|
+
import { normalizeCliListEnvelope, wholeListEnvelope, } from "../lib/paginate.js";
|
|
20
|
+
import { pageCursorOption, pageLimitOption, parsePageLimit, printEmptyPage, printPageHint, } from "../lib/list-options.js";
|
|
25
21
|
/**
|
|
26
22
|
* Render the flat `{ success, id, appliedFields }` response that
|
|
27
23
|
* `records/save` and `records/patch` return — these endpoints answer with a
|
|
@@ -232,21 +228,26 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
232
228
|
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
233
229
|
.option("--app <app-id>", "App ID")
|
|
234
230
|
.option("--owner <user-id>", "Only list databases created by this user")
|
|
231
|
+
.addOption(pageLimitOption())
|
|
232
|
+
.addOption(pageCursorOption())
|
|
235
233
|
.option("--json", "Output as JSON")
|
|
236
234
|
.action(async (appId, options) => {
|
|
235
|
+
const limit = parsePageLimit(options.limit);
|
|
237
236
|
const resolvedAppId = resolveAppId(appId, options);
|
|
238
237
|
const client = new ApiClient();
|
|
239
238
|
try {
|
|
240
|
-
const
|
|
239
|
+
const page = normalizeCliListEnvelope(await client.listDatabases(resolvedAppId, {
|
|
241
240
|
owner: options.owner,
|
|
242
|
-
|
|
243
|
-
|
|
241
|
+
limit,
|
|
242
|
+
cursor: options.cursor,
|
|
243
|
+
}));
|
|
244
|
+
const list = page.items;
|
|
244
245
|
if (options.json) {
|
|
245
|
-
json(
|
|
246
|
+
json(page);
|
|
246
247
|
return;
|
|
247
248
|
}
|
|
248
249
|
if (list.length === 0) {
|
|
249
|
-
|
|
250
|
+
printEmptyPage(page, "databases");
|
|
250
251
|
return;
|
|
251
252
|
}
|
|
252
253
|
console.log(formatTable(list, [
|
|
@@ -268,6 +269,7 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
268
269
|
: []),
|
|
269
270
|
{ header: "CREATED", key: "createdAt", format: formatDate },
|
|
270
271
|
]));
|
|
272
|
+
printPageHint(page);
|
|
271
273
|
}
|
|
272
274
|
catch (err) {
|
|
273
275
|
error(err.message);
|
|
@@ -293,6 +295,9 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
293
295
|
// `--cel-context` is the new user-facing name; `--metadata` remains
|
|
294
296
|
// supported for backwards compatibility. When both are provided,
|
|
295
297
|
// --cel-context wins.
|
|
298
|
+
if (options.celContext !== undefined || options.metadata !== undefined) {
|
|
299
|
+
warnDeprecated(`primitive databases create ${options.celContext !== undefined ? "--cel-context" : "--metadata"}`, "--initial-metadata (resource metadata categories)", 1815);
|
|
300
|
+
}
|
|
296
301
|
const contextSource = options.celContext ?? options.metadata;
|
|
297
302
|
if (contextSource) {
|
|
298
303
|
try {
|
|
@@ -451,7 +456,7 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
451
456
|
const result = await client.listDatabasePermissions(resolvedAppId, databaseId);
|
|
452
457
|
const list = Array.isArray(result) ? result : result?.permissions ?? [];
|
|
453
458
|
if (options.json) {
|
|
454
|
-
json(list);
|
|
459
|
+
json(wholeListEnvelope(list));
|
|
455
460
|
return;
|
|
456
461
|
}
|
|
457
462
|
if (list.length === 0) {
|
|
@@ -1226,8 +1231,11 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
1226
1231
|
const group = databases
|
|
1227
1232
|
.command(name, { hidden })
|
|
1228
1233
|
.description(hidden
|
|
1229
|
-
? "Manage database CEL context (alias of 'cel-context')"
|
|
1230
|
-
: "Manage database CEL context (the dict referenced by access rules and filters)");
|
|
1234
|
+
? "(deprecated: use resource metadata categories, `primitive metadata`) Manage database CEL context (alias of 'cel-context')"
|
|
1235
|
+
: "(deprecated: use resource metadata categories, `primitive metadata`) Manage database CEL context (the dict referenced by access rules and filters)");
|
|
1236
|
+
// CEL context is deprecated in favour of resource metadata categories
|
|
1237
|
+
// (#1420, #1815), which carry separate read and write rules.
|
|
1238
|
+
deprecateCommandGroup(group, CEL_CONTEXT_SUCCESSOR, { issue: 1815 });
|
|
1231
1239
|
group
|
|
1232
1240
|
.command("get")
|
|
1233
1241
|
.description("Read database CEL context")
|
|
@@ -1315,7 +1323,7 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
1315
1323
|
const result = await client.listDatabaseOperations(resolvedAppId, databaseId);
|
|
1316
1324
|
const list = Array.isArray(result) ? result : [];
|
|
1317
1325
|
if (options.json) {
|
|
1318
|
-
json(list);
|
|
1326
|
+
json(wholeListEnvelope(list));
|
|
1319
1327
|
return;
|
|
1320
1328
|
}
|
|
1321
1329
|
if (list.length === 0) {
|
|
@@ -1455,7 +1463,7 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
1455
1463
|
const result = await client.listDatabaseIndexes(resolvedAppId, databaseId, options.model);
|
|
1456
1464
|
const list = result.indexes || [];
|
|
1457
1465
|
if (options.json) {
|
|
1458
|
-
json(list);
|
|
1466
|
+
json(wholeListEnvelope(list));
|
|
1459
1467
|
return;
|
|
1460
1468
|
}
|
|
1461
1469
|
if (list.length === 0) {
|
|
@@ -1579,8 +1587,14 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
1579
1587
|
databases
|
|
1580
1588
|
.command("export")
|
|
1581
1589
|
.description("Export a database (records, indexes, constraints)")
|
|
1590
|
+
// Both positionals are declared optional and the action decides which is
|
|
1591
|
+
// which (#3645). A required positional AFTER an optional one makes the
|
|
1592
|
+
// optional one mandatory: commander binds the first value it sees to
|
|
1593
|
+
// `[app-id]` and then reports the required argument missing, so
|
|
1594
|
+
// `databases export <database-id>` never reached the action. The database
|
|
1595
|
+
// id is still required — enforced below, where the shift is known.
|
|
1582
1596
|
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
1583
|
-
.argument("
|
|
1597
|
+
.argument("[database-id]", "Database ID to export (required)")
|
|
1584
1598
|
.option("--app <app-id>", "App ID")
|
|
1585
1599
|
.option("--output <dir>", "Output directory", "./primitive-export")
|
|
1586
1600
|
.option("--json", "Output as JSON")
|
|
@@ -1611,8 +1625,10 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
1611
1625
|
databases
|
|
1612
1626
|
.command("import")
|
|
1613
1627
|
.description("Import a database from an export directory")
|
|
1628
|
+
// Optional in commander, required in the action (#3645) — see `export`
|
|
1629
|
+
// above for why a `<...>` here would make `[app-id]` mandatory.
|
|
1614
1630
|
.argument("[app-id]", "App ID (uses current app if not specified)")
|
|
1615
|
-
.argument("
|
|
1631
|
+
.argument("[path]", "Path to database export directory (required)")
|
|
1616
1632
|
.option("--app <app-id>", "App ID")
|
|
1617
1633
|
.option("--overwrite", "Replace existing database if ID collides")
|
|
1618
1634
|
.option("--dry-run", "Show what would be imported without making changes")
|
|
@@ -1912,16 +1928,13 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
1912
1928
|
.command("generate")
|
|
1913
1929
|
.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.")
|
|
1914
1930
|
.argument("<database-type>", "Database type name")
|
|
1915
|
-
.option("--app <app-id>", "App ID")
|
|
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())
|
|
1918
1931
|
.option("-f, --force", "Overwrite an existing [models.*] block in the local file")
|
|
1919
1932
|
.option("--json", "Output the generated TOML as JSON")
|
|
1920
1933
|
.action(async (databaseType, options) => {
|
|
1921
|
-
//
|
|
1922
|
-
//
|
|
1923
|
-
const
|
|
1924
|
-
const resolvedAppId =
|
|
1934
|
+
// Resolved before the API call, so a project the CLI cannot resolve is
|
|
1935
|
+
// heard about without a round trip.
|
|
1936
|
+
const targetDir = resolveSyncDir();
|
|
1937
|
+
const resolvedAppId = getCurrentAppId();
|
|
1925
1938
|
const client = new ApiClient();
|
|
1926
1939
|
try {
|
|
1927
1940
|
// 1. Call the server's :scaffold endpoint.
|
|
@@ -1931,39 +1944,23 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
1931
1944
|
json({ schema: scaffoldedToml });
|
|
1932
1945
|
return;
|
|
1933
1946
|
}
|
|
1934
|
-
// 2. Locate the local `database-type-configs/<type>.toml` file
|
|
1935
|
-
//
|
|
1936
|
-
//
|
|
1937
|
-
//
|
|
1938
|
-
//
|
|
1947
|
+
// 2. Locate the local `database-type-configs/<type>.toml` file, at
|
|
1948
|
+
// `<config-dir>/database-type-configs/<type>.toml`.
|
|
1949
|
+
//
|
|
1950
|
+
// ONE file, for ONE environment (#3153, F4). This used to scan every
|
|
1951
|
+
// `primitive/<env>/` slot under the cwd and edit every
|
|
1952
|
+
// match, which spliced a scaffold generated against the selected
|
|
1953
|
+
// environment's server into other environments' committed files. The
|
|
1954
|
+
// directory now comes from the same resolver every other tree command
|
|
1955
|
+
// uses, so the file it edits is the selected environment's.
|
|
1939
1956
|
const candidateFiles = [];
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
else {
|
|
1944
|
-
// Search any env/appId subtree under .primitive/sync that matches.
|
|
1945
|
-
const root = path.join(process.cwd(), ".primitive", "sync");
|
|
1946
|
-
if (existsSync(root)) {
|
|
1947
|
-
for (const env of readdirSync(root)) {
|
|
1948
|
-
const envDir = path.join(root, env);
|
|
1949
|
-
try {
|
|
1950
|
-
for (const app of readdirSync(envDir)) {
|
|
1951
|
-
const candidate = path.join(envDir, app, "database-type-configs", `${databaseType}.toml`);
|
|
1952
|
-
if (existsSync(candidate)) {
|
|
1953
|
-
candidateFiles.push(candidate);
|
|
1954
|
-
}
|
|
1955
|
-
}
|
|
1956
|
-
}
|
|
1957
|
-
catch {
|
|
1958
|
-
// skip non-dirs
|
|
1959
|
-
}
|
|
1960
|
-
}
|
|
1961
|
-
}
|
|
1962
|
-
}
|
|
1957
|
+
const candidate = path.join(targetDir, "database-type-configs", `${databaseType}.toml`);
|
|
1958
|
+
if (existsSync(candidate))
|
|
1959
|
+
candidateFiles.push(candidate);
|
|
1963
1960
|
if (candidateFiles.length === 0) {
|
|
1964
1961
|
// No local file found — print the scaffold to stdout and tell
|
|
1965
1962
|
// the user where to put it.
|
|
1966
|
-
info(`No local database-type-configs/${databaseType}.toml found
|
|
1963
|
+
info(`No local database-type-configs/${databaseType}.toml found at ${candidate}. Generated TOML:`);
|
|
1967
1964
|
console.log("");
|
|
1968
1965
|
console.log(scaffoldedToml);
|
|
1969
1966
|
return;
|
|
@@ -2017,9 +2014,6 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
2017
2014
|
.command("codegen")
|
|
2018
2015
|
.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
2016
|
.argument("[database-type]", "Generate for a single database type (defaults to every database-type-configs/*.toml found)")
|
|
2020
|
-
.option("--app <app-id>", "App ID")
|
|
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
2017
|
.option("-o, --output <dir>", "Output directory for the generated files (defaults to <config-dir>/database-type-configs/generated/)")
|
|
2024
2018
|
.option("--lang <lang>", "Target language for the generated types: 'ts' (default) or 'swift'.", "ts")
|
|
2025
2019
|
.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.")
|
|
@@ -2033,17 +2027,10 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
2033
2027
|
error(`Unknown --lang "${options.lang}". Use "ts" or "swift".`);
|
|
2034
2028
|
process.exit(1);
|
|
2035
2029
|
}
|
|
2036
|
-
// 1.
|
|
2037
|
-
//
|
|
2038
|
-
// --dir / --app overrides and resolves the active env
|
|
2039
|
-
// (--env → PRIMITIVE_ENV → defaultEnvironment → single-env) instead
|
|
2040
|
-
// of silently merging types across every synced env.
|
|
2030
|
+
// 1. The single source database-type-configs/ directory: the
|
|
2031
|
+
// environment's, and only ever the environment's (#1510, #3154).
|
|
2041
2032
|
const dbTypesSourceDir = resolveCodegenSourceDir({
|
|
2042
2033
|
subdir: "database-type-configs",
|
|
2043
|
-
options: {
|
|
2044
|
-
app: options.app,
|
|
2045
|
-
syncDir: resolveSyncDirOverride(options, "databases codegen"),
|
|
2046
|
-
},
|
|
2047
2034
|
});
|
|
2048
2035
|
// 2. Collect the source .toml files (one per database type), filtered
|
|
2049
2036
|
// to a single type when an argument is given.
|
|
@@ -2063,7 +2050,7 @@ database-type-config' and the 'database-type-configs' group for inspection:
|
|
|
2063
2050
|
}
|
|
2064
2051
|
if (inputs.length === 0) {
|
|
2065
2052
|
error(databaseType
|
|
2066
|
-
? `No database-type-configs/${databaseType}.toml found under
|
|
2053
|
+
? `No database-type-configs/${databaseType}.toml found under primitive/<env>/.`
|
|
2067
2054
|
: "No database-type-configs/*.toml files found to generate from.");
|
|
2068
2055
|
process.exit(1);
|
|
2069
2056
|
}
|