primitive-admin 1.1.0-alpha.9 → 1.1.0
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 +523 -109
- package/assets/skill/skills/primitive-platform/SKILL.md +289 -0
- package/dist/bin/primitive.d.ts +2 -0
- package/dist/bin/primitive.js +372 -21
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.d.ts +2 -0
- package/dist/src/commands/admins.js +136 -30
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.d.ts +2 -0
- package/dist/src/commands/analytics.js +713 -55
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.d.ts +2 -0
- package/dist/src/commands/apps.js +65 -100
- 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.d.ts +2 -0
- package/dist/src/commands/auth.js +238 -108
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.d.ts +2 -0
- package/dist/src/commands/blob-buckets.js +331 -0
- package/dist/src/commands/blob-buckets.js.map +1 -0
- package/dist/src/commands/catalog.d.ts +2 -0
- package/dist/src/commands/catalog.js +63 -48
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.d.ts +2 -0
- package/dist/src/commands/collection-type-configs.js +85 -0
- package/dist/src/commands/collection-type-configs.js.map +1 -0
- package/dist/src/commands/collections.d.ts +2 -0
- package/dist/src/commands/collections.js +1282 -0
- package/dist/src/commands/collections.js.map +1 -0
- package/dist/src/commands/comparisons.d.ts +2 -0
- package/dist/src/commands/comparisons.js +6 -6
- package/dist/src/commands/comparisons.js.map +1 -1
- package/dist/src/commands/config.d.ts +46 -0
- package/dist/src/commands/config.js +465 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/connections.d.ts +2 -0
- package/dist/src/commands/connections.js +99 -0
- package/dist/src/commands/connections.js.map +1 -0
- package/dist/src/commands/cron-triggers.d.ts +2 -0
- package/dist/src/commands/cron-triggers.js +266 -0
- package/dist/src/commands/cron-triggers.js.map +1 -0
- package/dist/src/commands/database-type-configs.d.ts +2 -0
- package/dist/src/commands/database-type-configs.js +164 -0
- package/dist/src/commands/database-type-configs.js.map +1 -0
- package/dist/src/commands/database-types.d.ts +2 -0
- package/dist/src/commands/database-types.js +471 -0
- package/dist/src/commands/database-types.js.map +1 -0
- package/dist/src/commands/databases.d.ts +65 -0
- package/dist/src/commands/databases.js +1887 -243
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +60 -0
- package/dist/src/commands/documents.js +2888 -22
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.d.ts +2 -0
- package/dist/src/commands/email-templates.js +175 -0
- package/dist/src/commands/email-templates.js.map +1 -0
- package/dist/src/commands/env.d.ts +23 -0
- package/dist/src/commands/env.js +395 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/feature-flags.d.ts +14 -0
- package/dist/src/commands/feature-flags.js +117 -0
- package/dist/src/commands/feature-flags.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/src/commands/group-type-configs.js +87 -0
- package/dist/src/commands/group-type-configs.js.map +1 -0
- package/dist/src/commands/groups.d.ts +2 -0
- package/dist/src/commands/groups.js +65 -113
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +223 -0
- package/dist/src/commands/guides.js +627 -69
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +37 -0
- package/dist/src/commands/init.js +1693 -208
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.d.ts +2 -0
- package/dist/src/commands/integrations.js +428 -187
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/llm.d.ts +2 -0
- package/dist/src/commands/llm.js +4 -2
- package/dist/src/commands/llm.js.map +1 -1
- package/dist/src/commands/locks.d.ts +8 -0
- package/dist/src/commands/locks.js +175 -0
- package/dist/src/commands/locks.js.map +1 -0
- package/dist/src/commands/metadata-category-configs.d.ts +12 -0
- package/dist/src/commands/metadata-category-configs.js +113 -0
- package/dist/src/commands/metadata-category-configs.js.map +1 -0
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +288 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.d.ts +2 -0
- package/dist/src/commands/prompts.js +322 -634
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +3 -0
- package/dist/src/commands/rule-sets.js +139 -148
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +30 -0
- package/dist/src/commands/scripts.js +688 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/secrets.d.ts +2 -0
- package/dist/src/commands/secrets.js +109 -0
- package/dist/src/commands/secrets.js.map +1 -0
- package/dist/src/commands/sessions.d.ts +2 -0
- package/dist/src/commands/sessions.js +76 -0
- package/dist/src/commands/sessions.js.map +1 -0
- package/dist/src/commands/skill.d.ts +2 -0
- package/dist/src/commands/skill.js +29 -0
- package/dist/src/commands/skill.js.map +1 -0
- package/dist/src/commands/sync-app-settings.d.ts +158 -0
- package/dist/src/commands/sync-app-settings.js +328 -0
- package/dist/src/commands/sync-app-settings.js.map +1 -0
- package/dist/src/commands/sync.d.ts +2670 -0
- package/dist/src/commands/sync.js +17144 -834
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.d.ts +2 -0
- package/dist/src/commands/tokens.js +132 -22
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.d.ts +2 -0
- package/dist/src/commands/users.js +542 -24
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +97 -0
- package/dist/src/commands/vars.js.map +1 -0
- package/dist/src/commands/waitlist.d.ts +2 -0
- package/dist/src/commands/waitlist.js +12 -11
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +31 -0
- package/dist/src/commands/webhooks.js +633 -0
- package/dist/src/commands/webhooks.js.map +1 -0
- package/dist/src/commands/workflows.d.ts +88 -0
- package/dist/src/commands/workflows.js +1568 -742
- 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 +2550 -0
- package/dist/src/lib/api-client.js +2503 -160
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
- package/dist/src/lib/app-settings-descriptor.js +583 -0
- package/dist/src/lib/app-settings-descriptor.js.map +1 -0
- package/dist/src/lib/auth-flow.d.ts +8 -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/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/canonical-json.d.ts +12 -0
- package/dist/src/lib/canonical-json.js +35 -0
- package/dist/src/lib/canonical-json.js.map +1 -0
- package/dist/src/lib/channel.d.ts +30 -0
- package/dist/src/lib/channel.js +68 -0
- package/dist/src/lib/channel.js.map +1 -0
- package/dist/src/lib/cli-manifest.d.ts +68 -0
- package/dist/src/lib/cli-manifest.js +71 -0
- package/dist/src/lib/cli-manifest.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
- package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
- package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
- package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- 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.d.ts +127 -0
- package/dist/src/lib/config-object-descriptor.js +740 -0
- package/dist/src/lib/config-object-descriptor.js.map +1 -0
- package/dist/src/lib/config-payload.d.ts +92 -0
- package/dist/src/lib/config-payload.js +161 -0
- package/dist/src/lib/config-payload.js.map +1 -0
- package/dist/src/lib/config-surface.d.ts +141 -0
- package/dist/src/lib/config-surface.js +368 -0
- package/dist/src/lib/config-surface.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 +71 -0
- package/dist/src/lib/config.js +71 -68
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/confirm-prompt.d.ts +83 -0
- package/dist/src/lib/confirm-prompt.js +110 -0
- package/dist/src/lib/confirm-prompt.js.map +1 -0
- package/dist/src/lib/constants.d.ts +11 -0
- package/dist/src/lib/constants.js +12 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/crash-handlers.d.ts +20 -0
- package/dist/src/lib/crash-handlers.js +49 -0
- package/dist/src/lib/crash-handlers.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +104 -0
- package/dist/src/lib/credentials-store.js +336 -0
- package/dist/src/lib/credentials-store.js.map +1 -0
- package/dist/src/lib/csv.d.ts +47 -0
- package/dist/src/lib/csv.js +172 -0
- package/dist/src/lib/csv.js.map +1 -0
- package/dist/src/lib/data-input.d.ts +23 -0
- package/dist/src/lib/data-input.js +50 -0
- package/dist/src/lib/data-input.js.map +1 -0
- package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
- package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
- package/dist/src/lib/db-codegen/dbNaming.js +180 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js +525 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
- 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 +258 -0
- package/dist/src/lib/env-resolver-core.js +447 -0
- package/dist/src/lib/env-resolver-core.js.map +1 -0
- package/dist/src/lib/env-resolver.d.ts +99 -0
- package/dist/src/lib/env-resolver.js +153 -0
- package/dist/src/lib/env-resolver.js.map +1 -0
- package/dist/src/lib/fetch.d.ts +5 -0
- 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.d.ts +28 -0
- package/dist/src/lib/generated-allowlist.js +281 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -0
- package/dist/src/lib/generated-config-surfaces.d.ts +2936 -0
- package/dist/src/lib/generated-config-surfaces.js +10569 -0
- package/dist/src/lib/generated-config-surfaces.js.map +1 -0
- 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/generated-template-lint.d.ts +212 -0
- package/dist/src/lib/generated-template-lint.js +624 -0
- package/dist/src/lib/generated-template-lint.js.map +1 -0
- package/dist/src/lib/init-adopt.d.ts +16 -0
- package/dist/src/lib/init-adopt.js +34 -0
- package/dist/src/lib/init-adopt.js.map +1 -0
- package/dist/src/lib/init-assets.d.ts +39 -0
- package/dist/src/lib/init-assets.js +97 -0
- package/dist/src/lib/init-assets.js.map +1 -0
- 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 +98 -0
- package/dist/src/lib/init-config.js +186 -0
- package/dist/src/lib/init-config.js.map +1 -0
- 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 +91 -0
- package/dist/src/lib/init-ios-links.js +219 -0
- package/dist/src/lib/init-ios-links.js.map +1 -0
- package/dist/src/lib/init-plan.d.ts +80 -0
- package/dist/src/lib/init-plan.js +95 -0
- package/dist/src/lib/init-plan.js.map +1 -0
- package/dist/src/lib/init-production-env.d.ts +48 -0
- package/dist/src/lib/init-production-env.js +59 -0
- package/dist/src/lib/init-production-env.js.map +1 -0
- package/dist/src/lib/init-schema.d.ts +74 -0
- package/dist/src/lib/init-schema.js +358 -0
- package/dist/src/lib/init-schema.js.map +1 -0
- package/dist/src/lib/init-xcode.d.ts +34 -0
- package/dist/src/lib/init-xcode.js +138 -0
- package/dist/src/lib/init-xcode.js.map +1 -0
- package/dist/src/lib/integration-request-config.d.ts +30 -0
- package/dist/src/lib/integration-request-config.js +145 -0
- package/dist/src/lib/integration-request-config.js.map +1 -0
- 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 +55 -0
- package/dist/src/lib/local-state.js +167 -0
- package/dist/src/lib/local-state.js.map +1 -0
- 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 +715 -0
- package/dist/src/lib/log-inspection.js +816 -0
- package/dist/src/lib/log-inspection.js.map +1 -0
- 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/migration-nag.d.ts +49 -0
- package/dist/src/lib/migration-nag.js +163 -0
- package/dist/src/lib/migration-nag.js.map +1 -0
- package/dist/src/lib/object-status-filter.d.ts +22 -0
- package/dist/src/lib/object-status-filter.js +45 -0
- package/dist/src/lib/object-status-filter.js.map +1 -0
- package/dist/src/lib/output.d.ts +124 -0
- package/dist/src/lib/output.js +219 -8
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/package-manager.d.ts +140 -0
- package/dist/src/lib/package-manager.js +305 -0
- package/dist/src/lib/package-manager.js.map +1 -0
- package/dist/src/lib/paginate.d.ts +98 -0
- package/dist/src/lib/paginate.js +112 -0
- package/dist/src/lib/paginate.js.map +1 -0
- package/dist/src/lib/platform-owned.d.ts +63 -0
- package/dist/src/lib/platform-owned.js +85 -0
- package/dist/src/lib/platform-owned.js.map +1 -0
- package/dist/src/lib/project-config.d.ts +122 -0
- package/dist/src/lib/project-config.js +244 -0
- package/dist/src/lib/project-config.js.map +1 -0
- 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/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/record-filter.d.ts +18 -0
- package/dist/src/lib/record-filter.js +55 -0
- package/dist/src/lib/record-filter.js.map +1 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +73 -0
- package/dist/src/lib/refresh-admin-credentials.js +123 -0
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
- package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
- package/dist/src/lib/resolve-init-dev-port.js +55 -0
- package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
- package/dist/src/lib/resolve-init-server.d.ts +64 -0
- package/dist/src/lib/resolve-init-server.js +77 -0
- package/dist/src/lib/resolve-init-server.js.map +1 -0
- 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/resolve-platform.d.ts +74 -0
- package/dist/src/lib/resolve-platform.js +105 -0
- package/dist/src/lib/resolve-platform.js.map +1 -0
- package/dist/src/lib/run-status.d.ts +19 -0
- package/dist/src/lib/run-status.generated.d.ts +39 -0
- package/dist/src/lib/run-status.generated.js +66 -0
- package/dist/src/lib/run-status.generated.js.map +1 -0
- package/dist/src/lib/run-status.js +19 -0
- package/dist/src/lib/run-status.js.map +1 -0
- package/dist/src/lib/server-text-normalization.d.ts +51 -0
- package/dist/src/lib/server-text-normalization.js +90 -0
- package/dist/src/lib/server-text-normalization.js.map +1 -0
- package/dist/src/lib/server-url.d.ts +22 -0
- package/dist/src/lib/server-url.js +33 -0
- package/dist/src/lib/server-url.js.map +1 -0
- package/dist/src/lib/signing-secret-status.d.ts +81 -0
- package/dist/src/lib/signing-secret-status.js +116 -0
- package/dist/src/lib/signing-secret-status.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +71 -0
- package/dist/src/lib/skill-installer.js +441 -0
- package/dist/src/lib/skill-installer.js.map +1 -0
- 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 +98 -0
- package/dist/src/lib/snapshots.js +294 -0
- package/dist/src/lib/snapshots.js.map +1 -0
- 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.d.ts +113 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +926 -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/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 +100 -0
- package/dist/src/lib/swift-codegen/generator.js +457 -0
- package/dist/src/lib/swift-codegen/generator.js.map +1 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.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-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 +128 -0
- package/dist/src/lib/sync-paths.js +195 -0
- package/dist/src/lib/sync-paths.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +563 -0
- package/dist/src/lib/sync-resource-types.js +1073 -0
- package/dist/src/lib/sync-resource-types.js.map +1 -0
- package/dist/src/lib/sync-selectors.d.ts +138 -0
- package/dist/src/lib/sync-selectors.js +289 -0
- package/dist/src/lib/sync-selectors.js.map +1 -0
- package/dist/src/lib/template.d.ts +170 -0
- package/dist/src/lib/template.js +484 -68
- package/dist/src/lib/template.js.map +1 -1
- 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 +29 -0
- package/dist/src/lib/test-case-keys.js +55 -0
- package/dist/src/lib/test-case-keys.js.map +1 -0
- package/dist/src/lib/test-case-variables.d.ts +29 -0
- package/dist/src/lib/test-case-variables.js +71 -0
- package/dist/src/lib/test-case-variables.js.map +1 -0
- package/dist/src/lib/token-inject.d.ts +56 -0
- package/dist/src/lib/token-inject.js +204 -0
- package/dist/src/lib/token-inject.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +123 -0
- package/dist/src/lib/toml-database-config.js +544 -0
- package/dist/src/lib/toml-database-config.js.map +1 -0
- package/dist/src/lib/toml-metadata-config.d.ts +151 -0
- package/dist/src/lib/toml-metadata-config.js +476 -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 +129 -0
- package/dist/src/lib/toml-params-validator.js +298 -0
- package/dist/src/lib/toml-params-validator.js.map +1 -0
- package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
- package/dist/src/lib/toml-scalar-edit.js +283 -0
- package/dist/src/lib/toml-scalar-edit.js.map +1 -0
- package/dist/src/lib/user-selector.d.ts +24 -0
- package/dist/src/lib/user-selector.js +33 -0
- package/dist/src/lib/user-selector.js.map +1 -0
- package/dist/src/lib/version-check.d.ts +35 -0
- package/dist/src/lib/version-check.js +241 -0
- package/dist/src/lib/version-check.js.map +1 -0
- package/dist/src/lib/watch.d.ts +121 -0
- package/dist/src/lib/watch.js +169 -0
- package/dist/src/lib/watch.js.map +1 -0
- 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-apply.d.ts +110 -0
- package/dist/src/lib/workflow-apply.js +164 -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 +96 -0
- package/dist/src/lib/workflow-codegen/generator.js +361 -0
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +76 -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 +80 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
- package/dist/src/lib/workflow-config-apply.d.ts +70 -0
- package/dist/src/lib/workflow-config-apply.js +137 -0
- package/dist/src/lib/workflow-config-apply.js.map +1 -0
- package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
- package/dist/src/lib/workflow-config-sidecar.js +96 -0
- package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
- package/dist/src/lib/workflow-defaults.d.ts +29 -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-fragments.d.ts +64 -0
- package/dist/src/lib/workflow-fragments.js +342 -0
- package/dist/src/lib/workflow-fragments.js.map +1 -0
- package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
- package/dist/src/lib/workflow-include-preserve.js +286 -0
- package/dist/src/lib/workflow-include-preserve.js.map +1 -0
- package/dist/src/lib/workflow-payload.d.ts +98 -0
- package/dist/src/lib/workflow-payload.js +178 -0
- package/dist/src/lib/workflow-payload.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +211 -0
- package/dist/src/lib/workflow-toml-validator.js +770 -0
- package/dist/src/lib/workflow-toml-validator.js.map +1 -0
- 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 +591 -0
- package/dist/src/validators.d.ts +65 -0
- package/dist/src/validators.js +64 -0
- package/dist/src/validators.js.map +1 -0
- package/package.json +34 -9
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared source-directory resolution for the CLI codegen commands
|
|
3
|
+
* (`workflows codegen` #1442, `databases codegen` #814, `databases schema
|
|
4
|
+
* generate` #666, issue #1510).
|
|
5
|
+
*
|
|
6
|
+
* Each of them reads a set of `*.toml` schemas out of one synced sub-directory
|
|
7
|
+
* (`workflows/`, `database-type-configs/`) and renders `*.generated.ts` beside
|
|
8
|
+
* them. It used to take four branches to say which directory that was: a
|
|
9
|
+
* `--dir` override, the resolved environment, an `--app`-alone fallback, and —
|
|
10
|
+
* when none of those answered — a SCAN of every `primitive/<env>/<subdir>` that resolved
|
|
11
|
+
* if exactly one environment happened to have the directory. The scan is how
|
|
12
|
+
* `PRIMITIVE_ENV=dev workflows codegen` could generate from the `alpha` TOML,
|
|
13
|
+
* and how two codegen commands in one run could read two different
|
|
14
|
+
* environments.
|
|
15
|
+
*
|
|
16
|
+
* There is one branch now (#3154, intent criterion 4): the sub-directory of
|
|
17
|
+
* the environment's own tree. `resolveSyncDir()` refuses rather than guesses,
|
|
18
|
+
* so an ambiguous project, an unknown `--env` and no project at all each reach
|
|
19
|
+
* the user as themselves.
|
|
20
|
+
*
|
|
21
|
+
* Design notes that survive:
|
|
22
|
+
* - Throw plain `Error`s; the calling commands keep their existing
|
|
23
|
+
* `error(); process.exit(1)` convention (they catch at the boundary). A
|
|
24
|
+
* `PrimitiveEnvError` from the resolver is an Error too, and its message is
|
|
25
|
+
* already the one the user needs.
|
|
26
|
+
* - Do NOT use `resolveAppId()` — it is auth-oriented, and codegen is
|
|
27
|
+
* offline.
|
|
28
|
+
*/
|
|
29
|
+
export interface ResolveCodegenSourceDirArgs {
|
|
30
|
+
/** The synced sub-directory to resolve, e.g. "workflows" or "database-type-configs". */
|
|
31
|
+
subdir: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The single source directory a codegen command reads its `*.toml` schemas
|
|
35
|
+
* from. Throws with a user-facing message when the environment cannot be
|
|
36
|
+
* resolved or the directory is not there.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveCodegenSourceDir(args: ResolveCodegenSourceDirArgs): string;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared source-directory resolution for the CLI codegen commands
|
|
3
|
+
* (`workflows codegen` #1442, `databases codegen` #814, `databases schema
|
|
4
|
+
* generate` #666, issue #1510).
|
|
5
|
+
*
|
|
6
|
+
* Each of them reads a set of `*.toml` schemas out of one synced sub-directory
|
|
7
|
+
* (`workflows/`, `database-type-configs/`) and renders `*.generated.ts` beside
|
|
8
|
+
* them. It used to take four branches to say which directory that was: a
|
|
9
|
+
* `--dir` override, the resolved environment, an `--app`-alone fallback, and —
|
|
10
|
+
* when none of those answered — a SCAN of every `primitive/<env>/<subdir>` that resolved
|
|
11
|
+
* if exactly one environment happened to have the directory. The scan is how
|
|
12
|
+
* `PRIMITIVE_ENV=dev workflows codegen` could generate from the `alpha` TOML,
|
|
13
|
+
* and how two codegen commands in one run could read two different
|
|
14
|
+
* environments.
|
|
15
|
+
*
|
|
16
|
+
* There is one branch now (#3154, intent criterion 4): the sub-directory of
|
|
17
|
+
* the environment's own tree. `resolveSyncDir()` refuses rather than guesses,
|
|
18
|
+
* so an ambiguous project, an unknown `--env` and no project at all each reach
|
|
19
|
+
* the user as themselves.
|
|
20
|
+
*
|
|
21
|
+
* Design notes that survive:
|
|
22
|
+
* - Throw plain `Error`s; the calling commands keep their existing
|
|
23
|
+
* `error(); process.exit(1)` convention (they catch at the boundary). A
|
|
24
|
+
* `PrimitiveEnvError` from the resolver is an Error too, and its message is
|
|
25
|
+
* already the one the user needs.
|
|
26
|
+
* - Do NOT use `resolveAppId()` — it is auth-oriented, and codegen is
|
|
27
|
+
* offline.
|
|
28
|
+
*/
|
|
29
|
+
import { existsSync } from "fs";
|
|
30
|
+
import { join } from "path";
|
|
31
|
+
import { resolveSyncDir } from "../sync-paths.js";
|
|
32
|
+
/**
|
|
33
|
+
* The single source directory a codegen command reads its `*.toml` schemas
|
|
34
|
+
* from. Throws with a user-facing message when the environment cannot be
|
|
35
|
+
* resolved or the directory is not there.
|
|
36
|
+
*/
|
|
37
|
+
export function resolveCodegenSourceDir(args) {
|
|
38
|
+
const { subdir } = args;
|
|
39
|
+
const dir = join(resolveSyncDir(), subdir);
|
|
40
|
+
if (!existsSync(dir)) {
|
|
41
|
+
throw new Error(`No ${subdir}/ directory in ${dir}. Run \`primitive config pull\` first, ` +
|
|
42
|
+
`or select another environment with --env <name>.`);
|
|
43
|
+
}
|
|
44
|
+
return dir;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=resolveCodegenSourceDir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveCodegenSourceDir.js","sourceRoot":"","sources":["../../../../src/lib/codegen-shared/resolveCodegenSourceDir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAOlD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAiC;IACvE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,MAAM,MAAM,kBAAkB,GAAG,yCAAyC;YACxE,kDAAkD,CACrD,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `collections.json` artifact, and the decisions an import makes from it
|
|
3
|
+
* (#3643).
|
|
4
|
+
*
|
|
5
|
+
* `documents export-all` / `documents import` carry Yjs state, blobs,
|
|
6
|
+
* permissions and aliases, but nothing about collections: which exist, what
|
|
7
|
+
* each contains, who its members are and at what level, its group grants, and
|
|
8
|
+
* who owns it. This module is the half of `collections export` /
|
|
9
|
+
* `collections import` that needs no server — the file's shape, the plan the
|
|
10
|
+
* import builds from it, the comparisons that plan rests on, and the exit
|
|
11
|
+
* rule — so each is checkable on its own, as `document-ingest-rows` and
|
|
12
|
+
* `snapshot-build-rows` are for their commands.
|
|
13
|
+
*
|
|
14
|
+
* The one thing that does NOT live here is resolution: which userId an email
|
|
15
|
+
* answers to, whether a document exists, whether a group exists. Those are
|
|
16
|
+
* reads against a real server, they are the facts the plan is built from, and
|
|
17
|
+
* the command performs them and hands the answers in.
|
|
18
|
+
*/
|
|
19
|
+
/** The only file version this CLI reads or writes. */
|
|
20
|
+
export declare const COLLECTION_EXPORT_VERSION = 1;
|
|
21
|
+
/** Its name inside an export directory, beside `manifest.json`. */
|
|
22
|
+
export declare const COLLECTION_EXPORT_FILENAME = "collections.json";
|
|
23
|
+
export type CollectionPermission = "reader" | "read-write";
|
|
24
|
+
export interface ExportedOwner {
|
|
25
|
+
/** The SOURCE app's userId. Meaningful in the target only for a same-app import. */
|
|
26
|
+
userId: string;
|
|
27
|
+
/** Present when the source server could resolve it; the only cross-app identity. */
|
|
28
|
+
email?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ExportedMember extends ExportedOwner {
|
|
31
|
+
permission: CollectionPermission;
|
|
32
|
+
}
|
|
33
|
+
export interface ExportedGroupGrant {
|
|
34
|
+
groupType: string;
|
|
35
|
+
groupId: string;
|
|
36
|
+
permission: CollectionPermission;
|
|
37
|
+
}
|
|
38
|
+
export interface ExportedCollectionDocument {
|
|
39
|
+
documentId: string;
|
|
40
|
+
addedAt?: string | null;
|
|
41
|
+
}
|
|
42
|
+
export interface ExportedCollection {
|
|
43
|
+
collectionId: string;
|
|
44
|
+
name: string;
|
|
45
|
+
description: string | null;
|
|
46
|
+
collectionType: string | null;
|
|
47
|
+
contextId: string | null;
|
|
48
|
+
createdAt: string | null;
|
|
49
|
+
owner: ExportedOwner | null;
|
|
50
|
+
documents: ExportedCollectionDocument[];
|
|
51
|
+
members: ExportedMember[];
|
|
52
|
+
groups: ExportedGroupGrant[];
|
|
53
|
+
}
|
|
54
|
+
export interface CollectionExportFile {
|
|
55
|
+
version: number;
|
|
56
|
+
exportedAt: string;
|
|
57
|
+
sourceAppId: string;
|
|
58
|
+
collectionCount: number;
|
|
59
|
+
collections: ExportedCollection[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Resolve the `<path>` an import was given to the file it must read.
|
|
63
|
+
*
|
|
64
|
+
* Both forms work: an export DIRECTORY (the one `documents export-all` also
|
|
65
|
+
* wrote into) and the file itself.
|
|
66
|
+
*/
|
|
67
|
+
export declare function resolveCollectionExportPath(inputPath: string): string;
|
|
68
|
+
/**
|
|
69
|
+
* Read and validate `collections.json`.
|
|
70
|
+
*
|
|
71
|
+
* Every refusal here happens BEFORE any request: a file this CLI cannot read
|
|
72
|
+
* is not a reason to start writing collections into the target app.
|
|
73
|
+
*/
|
|
74
|
+
export declare function readCollectionExportFile(inputPath: string): CollectionExportFile;
|
|
75
|
+
export type CollectionImportAction = "create" | "merge" | "skip" | "refused";
|
|
76
|
+
/** Which part of a collection a per-item problem is about. */
|
|
77
|
+
export type CollectionProblemKind = "owner" | "collection" | "document" | "member" | "group";
|
|
78
|
+
export interface CollectionImportProblem {
|
|
79
|
+
sourceCollectionId: string;
|
|
80
|
+
name: string;
|
|
81
|
+
kind: CollectionProblemKind;
|
|
82
|
+
/** The offending identity: a userId, an email, a documentId, `type/id`. */
|
|
83
|
+
id: string;
|
|
84
|
+
reason: string;
|
|
85
|
+
}
|
|
86
|
+
/** The target collection a name match found, as far as compatibility cares. */
|
|
87
|
+
export interface ExistingTargetCollection {
|
|
88
|
+
collectionId: string;
|
|
89
|
+
createdBy: string;
|
|
90
|
+
collectionType: string | null;
|
|
91
|
+
contextId: string | null;
|
|
92
|
+
}
|
|
93
|
+
export interface CollectionResolution {
|
|
94
|
+
/** The userId the owner resolved to in the TARGET app, or null. */
|
|
95
|
+
ownerUserId: string | null;
|
|
96
|
+
/** Why the owner could not be resolved — becomes the refusal's reason. */
|
|
97
|
+
ownerReason?: string;
|
|
98
|
+
/** The target collection carrying this exact name, if any. */
|
|
99
|
+
existing?: ExistingTargetCollection | null;
|
|
100
|
+
/** The source id of an earlier collection in the same file with this name. */
|
|
101
|
+
duplicateOfSourceId?: string | null;
|
|
102
|
+
}
|
|
103
|
+
export interface CollectionPlanRow {
|
|
104
|
+
sourceCollectionId: string;
|
|
105
|
+
name: string;
|
|
106
|
+
action: CollectionImportAction;
|
|
107
|
+
/** Why it was refused or skipped. Absent for `create`/`merge`. */
|
|
108
|
+
reason?: string;
|
|
109
|
+
/** Where it lands: known up front only for a `merge`. */
|
|
110
|
+
targetCollectionId?: string;
|
|
111
|
+
/** The resolved owner, for a `create`. */
|
|
112
|
+
ownerUserId?: string;
|
|
113
|
+
/** A refusal that must also be REPORTED as a problem carries it here. */
|
|
114
|
+
problem?: Omit<CollectionImportProblem, "sourceCollectionId" | "name">;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Which of `createdBy`, `collectionType` and `contextId` a name match differs
|
|
118
|
+
* on — the fields the server will never let an update change
|
|
119
|
+
* (`collections-controller.ts` rejects type and context; `createdBy` is
|
|
120
|
+
* immutable), so a difference cannot be merged away (F2).
|
|
121
|
+
*
|
|
122
|
+
* Returns null when the match is compatible.
|
|
123
|
+
*/
|
|
124
|
+
export declare function incompatibleField(collection: Pick<ExportedCollection, "collectionType" | "contextId">, existing: ExistingTargetCollection, ownerUserId: string): "owner" | "collectionType" | "contextId" | null;
|
|
125
|
+
/** What to do about one recorded group grant, given the target's grants. */
|
|
126
|
+
export type GrantDisposition = "grant" | "already-applied" | "update";
|
|
127
|
+
/**
|
|
128
|
+
* Compare a recorded grant with the target's.
|
|
129
|
+
*
|
|
130
|
+
* A grant already at the recorded level counts as applied without a write. A
|
|
131
|
+
* grant at a DIFFERENT level is sent: #3163 recomputes each document's
|
|
132
|
+
* materialized `DocumentGroupPermission` from its live sources on every
|
|
133
|
+
* collection-wide change, so the new level reaches what the group's members can
|
|
134
|
+
* actually do. Before that it did not — `materializeDGP` left an existing row
|
|
135
|
+
* alone once the collection was one of its sources — which is why the import
|
|
136
|
+
* used to report such a grant instead of changing it (F3).
|
|
137
|
+
*/
|
|
138
|
+
export declare function grantDisposition(wanted: ExportedGroupGrant, targetGrants: ExportedGroupGrant[]): GrantDisposition;
|
|
139
|
+
/** The line a level change is announced with, named from and to. */
|
|
140
|
+
export declare function grantUpdateLine(groupLabel: string, existingPermission: string, wantedPermission: string): string;
|
|
141
|
+
/**
|
|
142
|
+
* What a server refusal reads as in a per-item problem.
|
|
143
|
+
*
|
|
144
|
+
* The prose alone is not enough to act on. `COLLECTION_FANOUT_LIMIT` is the
|
|
145
|
+
* case that matters here: past `COLLECTION_GROUP_FANOUT_MAX` documents the
|
|
146
|
+
* server refuses a collection-wide group change whole (#3163), and the remedy —
|
|
147
|
+
* split the collection, or grant its documents one at a time — is nothing like
|
|
148
|
+
* the remedy for a 404 group. Carrying the code makes the two tellable apart by
|
|
149
|
+
* a script as well as by a reader.
|
|
150
|
+
*/
|
|
151
|
+
export declare function serverReason(err: any): string;
|
|
152
|
+
/**
|
|
153
|
+
* Decide what happens to one collection, from the facts the resolve phase read.
|
|
154
|
+
*
|
|
155
|
+
* Nothing here talks to a server: every input is already an answer.
|
|
156
|
+
*/
|
|
157
|
+
export declare function planCollection(collection: ExportedCollection, resolution: CollectionResolution, options: {
|
|
158
|
+
overwrite: boolean;
|
|
159
|
+
}): CollectionPlanRow;
|
|
160
|
+
/**
|
|
161
|
+
* The source ids of earlier same-named collections, keyed by source id.
|
|
162
|
+
*
|
|
163
|
+
* The FIRST collection with a name is the one that may land; every later one
|
|
164
|
+
* maps to it here and is refused.
|
|
165
|
+
*/
|
|
166
|
+
export declare function duplicateNameSources(collections: ExportedCollection[]): Map<string, string>;
|
|
167
|
+
export interface CollectionImportSummary {
|
|
168
|
+
created: number;
|
|
169
|
+
merged: number;
|
|
170
|
+
skipped: number;
|
|
171
|
+
refused: number;
|
|
172
|
+
groupsGranted: number;
|
|
173
|
+
membersAdded: number;
|
|
174
|
+
documentsAdded: number;
|
|
175
|
+
}
|
|
176
|
+
export declare function emptyImportSummary(): CollectionImportSummary;
|
|
177
|
+
/**
|
|
178
|
+
* The exit rule, in one place: 1 when any per-item problem was reported.
|
|
179
|
+
*
|
|
180
|
+
* A skip for a name collision is NOT a problem — it is the documented way to
|
|
181
|
+
* re-run an import without `--overwrite`. A refusal is, because something the
|
|
182
|
+
* operator asked for did not happen.
|
|
183
|
+
*/
|
|
184
|
+
export declare function importExitCode(problems: CollectionImportProblem[]): number;
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `collections.json` artifact, and the decisions an import makes from it
|
|
3
|
+
* (#3643).
|
|
4
|
+
*
|
|
5
|
+
* `documents export-all` / `documents import` carry Yjs state, blobs,
|
|
6
|
+
* permissions and aliases, but nothing about collections: which exist, what
|
|
7
|
+
* each contains, who its members are and at what level, its group grants, and
|
|
8
|
+
* who owns it. This module is the half of `collections export` /
|
|
9
|
+
* `collections import` that needs no server — the file's shape, the plan the
|
|
10
|
+
* import builds from it, the comparisons that plan rests on, and the exit
|
|
11
|
+
* rule — so each is checkable on its own, as `document-ingest-rows` and
|
|
12
|
+
* `snapshot-build-rows` are for their commands.
|
|
13
|
+
*
|
|
14
|
+
* The one thing that does NOT live here is resolution: which userId an email
|
|
15
|
+
* answers to, whether a document exists, whether a group exists. Those are
|
|
16
|
+
* reads against a real server, they are the facts the plan is built from, and
|
|
17
|
+
* the command performs them and hands the answers in.
|
|
18
|
+
*/
|
|
19
|
+
import fs from "node:fs";
|
|
20
|
+
import path from "node:path";
|
|
21
|
+
/** The only file version this CLI reads or writes. */
|
|
22
|
+
export const COLLECTION_EXPORT_VERSION = 1;
|
|
23
|
+
/** Its name inside an export directory, beside `manifest.json`. */
|
|
24
|
+
export const COLLECTION_EXPORT_FILENAME = "collections.json";
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the `<path>` an import was given to the file it must read.
|
|
27
|
+
*
|
|
28
|
+
* Both forms work: an export DIRECTORY (the one `documents export-all` also
|
|
29
|
+
* wrote into) and the file itself.
|
|
30
|
+
*/
|
|
31
|
+
export function resolveCollectionExportPath(inputPath) {
|
|
32
|
+
if (fs.existsSync(inputPath) && fs.statSync(inputPath).isDirectory()) {
|
|
33
|
+
return path.join(inputPath, COLLECTION_EXPORT_FILENAME);
|
|
34
|
+
}
|
|
35
|
+
return inputPath;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Read and validate `collections.json`.
|
|
39
|
+
*
|
|
40
|
+
* Every refusal here happens BEFORE any request: a file this CLI cannot read
|
|
41
|
+
* is not a reason to start writing collections into the target app.
|
|
42
|
+
*/
|
|
43
|
+
export function readCollectionExportFile(inputPath) {
|
|
44
|
+
const filePath = resolveCollectionExportPath(inputPath);
|
|
45
|
+
if (!fs.existsSync(filePath)) {
|
|
46
|
+
throw new Error(`No ${COLLECTION_EXPORT_FILENAME} found at ${filePath}. Point the ` +
|
|
47
|
+
`import at an export directory holding one, or at the file itself.`);
|
|
48
|
+
}
|
|
49
|
+
let parsed;
|
|
50
|
+
try {
|
|
51
|
+
parsed = JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
throw new Error(`${filePath} is not valid JSON: ${err.message}`);
|
|
55
|
+
}
|
|
56
|
+
if (parsed?.version !== COLLECTION_EXPORT_VERSION) {
|
|
57
|
+
throw new Error(`${filePath} declares version ${JSON.stringify(parsed?.version)}; ` +
|
|
58
|
+
`this CLI reads version ${COLLECTION_EXPORT_VERSION} only.`);
|
|
59
|
+
}
|
|
60
|
+
const collections = Array.isArray(parsed.collections) ? parsed.collections : [];
|
|
61
|
+
return {
|
|
62
|
+
version: parsed.version,
|
|
63
|
+
exportedAt: String(parsed.exportedAt ?? ""),
|
|
64
|
+
sourceAppId: String(parsed.sourceAppId ?? ""),
|
|
65
|
+
collectionCount: Number(parsed.collectionCount ?? collections.length),
|
|
66
|
+
collections,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Which of `createdBy`, `collectionType` and `contextId` a name match differs
|
|
71
|
+
* on — the fields the server will never let an update change
|
|
72
|
+
* (`collections-controller.ts` rejects type and context; `createdBy` is
|
|
73
|
+
* immutable), so a difference cannot be merged away (F2).
|
|
74
|
+
*
|
|
75
|
+
* Returns null when the match is compatible.
|
|
76
|
+
*/
|
|
77
|
+
export function incompatibleField(collection, existing, ownerUserId) {
|
|
78
|
+
if (existing.createdBy !== ownerUserId)
|
|
79
|
+
return "owner";
|
|
80
|
+
// The server defaults an unset type to "default", so the file's null and the
|
|
81
|
+
// target's "default" are the same collection type, not a difference.
|
|
82
|
+
const wanted = collection.collectionType || "default";
|
|
83
|
+
if ((existing.collectionType || "default") !== wanted)
|
|
84
|
+
return "collectionType";
|
|
85
|
+
if ((existing.contextId ?? null) !== (collection.contextId ?? null)) {
|
|
86
|
+
return "contextId";
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Compare a recorded grant with the target's.
|
|
92
|
+
*
|
|
93
|
+
* A grant already at the recorded level counts as applied without a write. A
|
|
94
|
+
* grant at a DIFFERENT level is sent: #3163 recomputes each document's
|
|
95
|
+
* materialized `DocumentGroupPermission` from its live sources on every
|
|
96
|
+
* collection-wide change, so the new level reaches what the group's members can
|
|
97
|
+
* actually do. Before that it did not — `materializeDGP` left an existing row
|
|
98
|
+
* alone once the collection was one of its sources — which is why the import
|
|
99
|
+
* used to report such a grant instead of changing it (F3).
|
|
100
|
+
*/
|
|
101
|
+
export function grantDisposition(wanted, targetGrants) {
|
|
102
|
+
const existing = targetGrants.find((g) => g.groupType === wanted.groupType && g.groupId === wanted.groupId);
|
|
103
|
+
if (!existing)
|
|
104
|
+
return "grant";
|
|
105
|
+
return existing.permission === wanted.permission
|
|
106
|
+
? "already-applied"
|
|
107
|
+
: "update";
|
|
108
|
+
}
|
|
109
|
+
/** The line a level change is announced with, named from and to. */
|
|
110
|
+
export function grantUpdateLine(groupLabel, existingPermission, wantedPermission) {
|
|
111
|
+
return (`${groupLabel}: ${existingPermission} → ${wantedPermission} ` +
|
|
112
|
+
`(the level the export records)`);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* What a server refusal reads as in a per-item problem.
|
|
116
|
+
*
|
|
117
|
+
* The prose alone is not enough to act on. `COLLECTION_FANOUT_LIMIT` is the
|
|
118
|
+
* case that matters here: past `COLLECTION_GROUP_FANOUT_MAX` documents the
|
|
119
|
+
* server refuses a collection-wide group change whole (#3163), and the remedy —
|
|
120
|
+
* split the collection, or grant its documents one at a time — is nothing like
|
|
121
|
+
* the remedy for a 404 group. Carrying the code makes the two tellable apart by
|
|
122
|
+
* a script as well as by a reader.
|
|
123
|
+
*/
|
|
124
|
+
export function serverReason(err) {
|
|
125
|
+
const message = err?.message ?? String(err);
|
|
126
|
+
const code = typeof err?.code === "string" ? err.code : null;
|
|
127
|
+
return code ? `${message} (${code})` : message;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Decide what happens to one collection, from the facts the resolve phase read.
|
|
131
|
+
*
|
|
132
|
+
* Nothing here talks to a server: every input is already an answer.
|
|
133
|
+
*/
|
|
134
|
+
export function planCollection(collection, resolution, options) {
|
|
135
|
+
const base = {
|
|
136
|
+
sourceCollectionId: collection.collectionId,
|
|
137
|
+
name: collection.name,
|
|
138
|
+
};
|
|
139
|
+
// A name is unique per app, so two collections in one file that share one
|
|
140
|
+
// could not both land. The second is refused before anything is written,
|
|
141
|
+
// naming both source ids.
|
|
142
|
+
if (resolution.duplicateOfSourceId) {
|
|
143
|
+
return {
|
|
144
|
+
...base,
|
|
145
|
+
action: "refused",
|
|
146
|
+
reason: `the export lists two collections named "${collection.name}" ` +
|
|
147
|
+
`(${resolution.duplicateOfSourceId} and ${collection.collectionId}); ` +
|
|
148
|
+
`a collection name is unique per app, so only one can land. Rename ` +
|
|
149
|
+
`one in the export and re-run.`,
|
|
150
|
+
problem: {
|
|
151
|
+
kind: "collection",
|
|
152
|
+
id: collection.collectionId,
|
|
153
|
+
reason: `duplicate name "${collection.name}" in the export file`,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
if (!resolution.ownerUserId) {
|
|
158
|
+
const reason = resolution.ownerReason ??
|
|
159
|
+
`its owner could not be resolved in the target app`;
|
|
160
|
+
return {
|
|
161
|
+
...base,
|
|
162
|
+
action: "refused",
|
|
163
|
+
reason: `${reason}. Pass --owner <userId-or-email> to give every collection in this run an owner that exists here.`,
|
|
164
|
+
problem: {
|
|
165
|
+
kind: "owner",
|
|
166
|
+
id: collection.owner?.email || collection.owner?.userId || "(none)",
|
|
167
|
+
reason,
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const existing = resolution.existing ?? null;
|
|
172
|
+
if (!existing) {
|
|
173
|
+
return {
|
|
174
|
+
...base,
|
|
175
|
+
action: "create",
|
|
176
|
+
ownerUserId: resolution.ownerUserId,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// A name match is checked for compatibility WHETHER OR NOT --overwrite was
|
|
180
|
+
// given: none of these fields can be changed after creation, so an
|
|
181
|
+
// incompatible match can never become the collection the file describes, and
|
|
182
|
+
// reporting it under --dry-run is the point (F2).
|
|
183
|
+
const field = incompatibleField(collection, existing, resolution.ownerUserId);
|
|
184
|
+
if (field) {
|
|
185
|
+
const reason = `a collection named "${collection.name}" already exists in the target ` +
|
|
186
|
+
`(${existing.collectionId}) with a different ${field}, which cannot be ` +
|
|
187
|
+
`changed after creation`;
|
|
188
|
+
return {
|
|
189
|
+
...base,
|
|
190
|
+
action: "refused",
|
|
191
|
+
targetCollectionId: existing.collectionId,
|
|
192
|
+
reason: `${reason}. Delete or rename it, or rename the collection in the export.`,
|
|
193
|
+
problem: { kind: "collection", id: existing.collectionId, reason },
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (!options.overwrite) {
|
|
197
|
+
return {
|
|
198
|
+
...base,
|
|
199
|
+
action: "skip",
|
|
200
|
+
targetCollectionId: existing.collectionId,
|
|
201
|
+
reason: `already exists (use --overwrite to merge into ${existing.collectionId})`,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
...base,
|
|
206
|
+
action: "merge",
|
|
207
|
+
targetCollectionId: existing.collectionId,
|
|
208
|
+
ownerUserId: resolution.ownerUserId,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The source ids of earlier same-named collections, keyed by source id.
|
|
213
|
+
*
|
|
214
|
+
* The FIRST collection with a name is the one that may land; every later one
|
|
215
|
+
* maps to it here and is refused.
|
|
216
|
+
*/
|
|
217
|
+
export function duplicateNameSources(collections) {
|
|
218
|
+
const firstByName = new Map();
|
|
219
|
+
const duplicates = new Map();
|
|
220
|
+
for (const collection of collections) {
|
|
221
|
+
const seen = firstByName.get(collection.name);
|
|
222
|
+
if (seen) {
|
|
223
|
+
duplicates.set(collection.collectionId, seen);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
firstByName.set(collection.name, collection.collectionId);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return duplicates;
|
|
230
|
+
}
|
|
231
|
+
export function emptyImportSummary() {
|
|
232
|
+
return {
|
|
233
|
+
created: 0,
|
|
234
|
+
merged: 0,
|
|
235
|
+
skipped: 0,
|
|
236
|
+
refused: 0,
|
|
237
|
+
groupsGranted: 0,
|
|
238
|
+
membersAdded: 0,
|
|
239
|
+
documentsAdded: 0,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* The exit rule, in one place: 1 when any per-item problem was reported.
|
|
244
|
+
*
|
|
245
|
+
* A skip for a name collision is NOT a problem — it is the documented way to
|
|
246
|
+
* re-run an import without `--overwrite`. A refusal is, because something the
|
|
247
|
+
* operator asked for did not happen.
|
|
248
|
+
*/
|
|
249
|
+
export function importExitCode(problems) {
|
|
250
|
+
return problems.length > 0 ? 1 : 0;
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=collection-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-export.js","sourceRoot":"","sources":["../../../src/lib/collection-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emitting a `type: "json"` field (a JSON Schema, a provider-options blob) as
|
|
3
|
+
* TOML — the rule `config pull` writes every such field through.
|
|
4
|
+
*
|
|
5
|
+
* Issue #1446 wrote it for workflows and prompts inside `sync.ts`; #3317 moved
|
|
6
|
+
* it here because `serializeFunction` lives in its own module and needed the
|
|
7
|
+
* same rule rather than a second, subtly different copy of it. A function's
|
|
8
|
+
* schemas are stored as JSON STRINGS on the row, so the module that could not
|
|
9
|
+
* reach this one emitted nothing at all for them, and the comparison read the
|
|
10
|
+
* server as holding no schema.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* The TOML value for one `type: "json"` field, or `undefined` when the record
|
|
14
|
+
* holds none (the key is then omitted).
|
|
15
|
+
*
|
|
16
|
+
* The parsed value is emitted as a native table whenever it round-trips
|
|
17
|
+
* faithfully (`canEmitNative === null`), falling back to the JSON string only
|
|
18
|
+
* for the values TOML silently drops (`null` / `undefined` anywhere inside).
|
|
19
|
+
* The empty object `{}` is a real, distinct value (for a schema: "accepts
|
|
20
|
+
* anything") and emits as an empty table, so it survives a pull → push cycle
|
|
21
|
+
* instead of being cleared server-side.
|
|
22
|
+
*
|
|
23
|
+
* The sponsor-approved decision is to always move to native aggressively — no
|
|
24
|
+
* form preservation — so this does not consult the existing file's form.
|
|
25
|
+
*
|
|
26
|
+
* `subject` names the object in the fallback warning, e.g. `Workflow 'greet'`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function serializeJsonField(value: any, fieldName: string, subject: string, log: (message: string) => void): any;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Emitting a `type: "json"` field (a JSON Schema, a provider-options blob) as
|
|
3
|
+
* TOML — the rule `config pull` writes every such field through.
|
|
4
|
+
*
|
|
5
|
+
* Issue #1446 wrote it for workflows and prompts inside `sync.ts`; #3317 moved
|
|
6
|
+
* it here because `serializeFunction` lives in its own module and needed the
|
|
7
|
+
* same rule rather than a second, subtly different copy of it. A function's
|
|
8
|
+
* schemas are stored as JSON STRINGS on the row, so the module that could not
|
|
9
|
+
* reach this one emitted nothing at all for them, and the comparison read the
|
|
10
|
+
* server as holding no schema.
|
|
11
|
+
*/
|
|
12
|
+
import { canEmitNative } from "./toml-native-form.js";
|
|
13
|
+
/**
|
|
14
|
+
* The TOML value for one `type: "json"` field, or `undefined` when the record
|
|
15
|
+
* holds none (the key is then omitted).
|
|
16
|
+
*
|
|
17
|
+
* The parsed value is emitted as a native table whenever it round-trips
|
|
18
|
+
* faithfully (`canEmitNative === null`), falling back to the JSON string only
|
|
19
|
+
* for the values TOML silently drops (`null` / `undefined` anywhere inside).
|
|
20
|
+
* The empty object `{}` is a real, distinct value (for a schema: "accepts
|
|
21
|
+
* anything") and emits as an empty table, so it survives a pull → push cycle
|
|
22
|
+
* instead of being cleared server-side.
|
|
23
|
+
*
|
|
24
|
+
* The sponsor-approved decision is to always move to native aggressively — no
|
|
25
|
+
* form preservation — so this does not consult the existing file's form.
|
|
26
|
+
*
|
|
27
|
+
* `subject` names the object in the fallback warning, e.g. `Workflow 'greet'`.
|
|
28
|
+
*/
|
|
29
|
+
export function serializeJsonField(value, fieldName, subject, log) {
|
|
30
|
+
if (value === undefined || value === null)
|
|
31
|
+
return undefined;
|
|
32
|
+
// JSON fields arrive from the server GET parsed; defensively accept a JSON
|
|
33
|
+
// string too (a function's schemas are always one, and an inline-authored
|
|
34
|
+
// file re-serialized here is another).
|
|
35
|
+
let obj = value;
|
|
36
|
+
if (typeof value === "string") {
|
|
37
|
+
try {
|
|
38
|
+
obj = JSON.parse(value);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Not valid JSON — keep the original string as the emitted value.
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (obj && typeof obj === "object") {
|
|
46
|
+
const reason = canEmitNative(obj);
|
|
47
|
+
if (reason) {
|
|
48
|
+
log(`${subject}: cannot emit \`${fieldName}\` as native TOML (${reason}); using JSON string.`);
|
|
49
|
+
return JSON.stringify(obj);
|
|
50
|
+
}
|
|
51
|
+
return obj;
|
|
52
|
+
}
|
|
53
|
+
// A non-object value (unexpected) — preserve it as a JSON string.
|
|
54
|
+
return JSON.stringify(obj);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=config-json-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-json-field.js","sourceRoot":"","sources":["../../../src/lib/config-json-field.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAU,EACV,SAAiB,EACjB,OAAe,EACf,GAA8B;IAE9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,2EAA2E;IAC3E,0EAA0E;IAC1E,uCAAuC;IACvC,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;YAClE,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,MAAM,EAAE,CAAC;YACX,GAAG,CACD,GAAG,OAAO,mBAAmB,SAAS,sBAAsB,MAAM,uBAAuB,CAC1F,CAAC;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,kEAAkE;IAClE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}
|