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,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CLI's mirror of the server's integration `requestConfig` normalization
|
|
3
|
+
* (issue #2880, DSO-003).
|
|
4
|
+
*
|
|
5
|
+
* `normalizeIntegrationRequestConfig` (`src/services/integration-utils.ts`)
|
|
6
|
+
* rewrites an accepted request config on the way in: the base URL gains a
|
|
7
|
+
* single trailing slash, methods are upper-cased and de-duplicated, header and
|
|
8
|
+
* query lists are trimmed, and the optional keys are materialized. So the state
|
|
9
|
+
* the server RETURNS is not the text a hand-authored file holds — and comparing
|
|
10
|
+
* the two raw makes an authored integration read `local-edited` on every run,
|
|
11
|
+
* with push re-applying the same update forever. Baseline restamping cannot
|
|
12
|
+
* save it: after an apply the remote hash equals the fresh baseline while the
|
|
13
|
+
* local hash still does not.
|
|
14
|
+
*
|
|
15
|
+
* Mirrored rather than imported: the published CLI must not import server
|
|
16
|
+
* `src/` at runtime (the same rule the vendored config surfaces follow). The
|
|
17
|
+
* acceptance fixture pinning this mirror is the tripwire if the server's rule
|
|
18
|
+
* moves — a disagreement then shows as an ordinary `Modified` row, never a
|
|
19
|
+
* crash, which is why every step here is total: an input the server would
|
|
20
|
+
* REJECT (a missing base URL, a bogus method) is left exactly as authored so
|
|
21
|
+
* the server's own error is what the operator sees.
|
|
22
|
+
*/
|
|
23
|
+
/** Trim, drop empties, optionally re-case, and de-duplicate. */
|
|
24
|
+
function normalizeStringList(value, { lowercase = false, uppercase = false } = {}) {
|
|
25
|
+
if (!Array.isArray(value))
|
|
26
|
+
return [];
|
|
27
|
+
const out = [];
|
|
28
|
+
for (const item of value) {
|
|
29
|
+
if (typeof item !== "string")
|
|
30
|
+
continue;
|
|
31
|
+
let normalized = item.trim();
|
|
32
|
+
if (!normalized)
|
|
33
|
+
continue;
|
|
34
|
+
if (lowercase)
|
|
35
|
+
normalized = normalized.toLowerCase();
|
|
36
|
+
if (uppercase)
|
|
37
|
+
normalized = normalized.toUpperCase();
|
|
38
|
+
out.push(normalized);
|
|
39
|
+
}
|
|
40
|
+
return [...new Set(out)];
|
|
41
|
+
}
|
|
42
|
+
/** `https://host/v1///` → `https://host/v1/`; anything else stays as authored. */
|
|
43
|
+
function canonicalBaseUrl(raw) {
|
|
44
|
+
if (typeof raw !== "string")
|
|
45
|
+
return raw;
|
|
46
|
+
const base = raw.trim();
|
|
47
|
+
if (!(base.startsWith("http://") ||
|
|
48
|
+
base.startsWith("https://") ||
|
|
49
|
+
base.startsWith("test://"))) {
|
|
50
|
+
// The server rejects this; leaving it alone keeps the rejection the
|
|
51
|
+
// server's to make and the difference visible in the meantime.
|
|
52
|
+
return base;
|
|
53
|
+
}
|
|
54
|
+
return `${base.replace(/\/+$/, "")}/`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The request config as the server would store it, from what the file says.
|
|
58
|
+
*
|
|
59
|
+
* Applied to BOTH sides of the comparison (the remote side reaches it through
|
|
60
|
+
* the same projection), which is safe because the server's own output is
|
|
61
|
+
* already canonical and this is idempotent.
|
|
62
|
+
*/
|
|
63
|
+
export function canonicalizeIntegrationRequestConfig(input) {
|
|
64
|
+
if (!input || typeof input !== "object" || Array.isArray(input))
|
|
65
|
+
return input;
|
|
66
|
+
const raw = input;
|
|
67
|
+
const allowedMethods = normalizeStringList(raw.allowedMethods, {
|
|
68
|
+
uppercase: true,
|
|
69
|
+
});
|
|
70
|
+
const defaultMethod = raw.defaultMethod
|
|
71
|
+
? String(raw.defaultMethod).toUpperCase()
|
|
72
|
+
: allowedMethods[0] || "GET";
|
|
73
|
+
const methods = allowedMethods.length > 0 ? allowedMethods : ["GET"];
|
|
74
|
+
if (!methods.includes(defaultMethod))
|
|
75
|
+
methods.push(defaultMethod);
|
|
76
|
+
const allowedPaths = normalizeStringList(raw.allowedPaths).map((path) => path === "*" ? "/*" : path);
|
|
77
|
+
const defaultHeaders = {};
|
|
78
|
+
if (raw.defaultHeaders && typeof raw.defaultHeaders === "object") {
|
|
79
|
+
for (const [key, value] of Object.entries(raw.defaultHeaders)) {
|
|
80
|
+
if (!key)
|
|
81
|
+
continue;
|
|
82
|
+
defaultHeaders[key] = value == null ? "" : String(value);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const staticQuery = {};
|
|
86
|
+
if (raw.staticQuery && typeof raw.staticQuery === "object") {
|
|
87
|
+
for (const [key, value] of Object.entries(raw.staticQuery)) {
|
|
88
|
+
if (!key)
|
|
89
|
+
continue;
|
|
90
|
+
if (typeof value === "string" ||
|
|
91
|
+
typeof value === "number" ||
|
|
92
|
+
typeof value === "boolean") {
|
|
93
|
+
staticQuery[key] = value;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const validBodyModes = ["json", "raw", "multipart"];
|
|
98
|
+
const bodyMode = validBodyModes.includes(raw.bodyMode)
|
|
99
|
+
? raw.bodyMode
|
|
100
|
+
: undefined;
|
|
101
|
+
let multipartFieldMapping;
|
|
102
|
+
if (Array.isArray(raw.multipartFieldMapping)) {
|
|
103
|
+
multipartFieldMapping = raw.multipartFieldMapping
|
|
104
|
+
.filter((f) => f &&
|
|
105
|
+
typeof f === "object" &&
|
|
106
|
+
typeof f.fieldName === "string" &&
|
|
107
|
+
(f.type === "attachment" || f.type === "value"))
|
|
108
|
+
.map((f) => ({
|
|
109
|
+
fieldName: f.fieldName,
|
|
110
|
+
type: f.type,
|
|
111
|
+
...(f.attachmentIndex !== undefined && {
|
|
112
|
+
attachmentIndex: f.attachmentIndex,
|
|
113
|
+
}),
|
|
114
|
+
...(f.attachmentName !== undefined && {
|
|
115
|
+
attachmentName: f.attachmentName,
|
|
116
|
+
}),
|
|
117
|
+
...(f.value !== undefined && { value: f.value }),
|
|
118
|
+
}));
|
|
119
|
+
if (multipartFieldMapping.length === 0)
|
|
120
|
+
multipartFieldMapping = undefined;
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
baseUrl: canonicalBaseUrl(raw.baseUrl),
|
|
124
|
+
allowedMethods: methods,
|
|
125
|
+
allowedPaths: allowedPaths.length > 0 ? allowedPaths : ["/*"],
|
|
126
|
+
defaultMethod,
|
|
127
|
+
defaultHeaders,
|
|
128
|
+
forwardHeaders: normalizeStringList(raw.forwardHeaders, {
|
|
129
|
+
lowercase: true,
|
|
130
|
+
}),
|
|
131
|
+
staticQuery,
|
|
132
|
+
forwardQueryParams: normalizeStringList(raw.forwardQueryParams, {
|
|
133
|
+
lowercase: true,
|
|
134
|
+
}),
|
|
135
|
+
// The server stores `true` unless the value is exactly `false`.
|
|
136
|
+
responsePassthrough: raw.responsePassthrough === false ? false : true,
|
|
137
|
+
...(raw.exampleQuery && typeof raw.exampleQuery === "object"
|
|
138
|
+
? { exampleQuery: raw.exampleQuery }
|
|
139
|
+
: {}),
|
|
140
|
+
...(raw.exampleBody !== undefined ? { exampleBody: raw.exampleBody } : {}),
|
|
141
|
+
...(bodyMode ? { bodyMode } : {}),
|
|
142
|
+
...(multipartFieldMapping ? { multipartFieldMapping } : {}),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=integration-request-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-request-config.js","sourceRoot":"","sources":["../../../src/lib/integration-request-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the identifier the `integrations tests` verbs take (issue #3000).
|
|
3
|
+
*
|
|
4
|
+
* The block-testing endpoints key on the composite `integration#<blockId>` and
|
|
5
|
+
* never check that the block exists, so an identifier that names no
|
|
6
|
+
* integration came back as an empty page rather than a 404: `tests list`
|
|
7
|
+
* printed "No test cases found." and `tests run-all` printed
|
|
8
|
+
* `Total Tests: 0 / Failed: 0` and exited 0. That is success-shaped in CI and
|
|
9
|
+
* indistinguishable from an integration that genuinely has no cases, so a
|
|
10
|
+
* typo, an integration KEY, or an ID from another app all read as "nothing to
|
|
11
|
+
* run".
|
|
12
|
+
*
|
|
13
|
+
* Resolving here — against the app's own integration list — is what makes
|
|
14
|
+
* `Total Tests: 0` mean "this integration exists and has no cases". The list
|
|
15
|
+
* is the one call that can answer both halves: it maps a key to its ID (keys
|
|
16
|
+
* are stored lowercased, so the match is case-insensitive) and it proves the
|
|
17
|
+
* identifier belongs to THIS app. Archived integrations are included, because
|
|
18
|
+
* their cases stay inspectable.
|
|
19
|
+
*/
|
|
20
|
+
export interface ResolvedIntegration {
|
|
21
|
+
integrationId: string;
|
|
22
|
+
/** The integration's key, when the summary carries one. */
|
|
23
|
+
integrationKey?: string;
|
|
24
|
+
}
|
|
25
|
+
/** The one method this resolver needs from `ApiClient`. */
|
|
26
|
+
export interface IntegrationLister {
|
|
27
|
+
listIntegrations(appId: string, params?: {
|
|
28
|
+
status?: string;
|
|
29
|
+
cursor?: string;
|
|
30
|
+
limit?: number;
|
|
31
|
+
}): Promise<{
|
|
32
|
+
items: any[];
|
|
33
|
+
nextCursor?: string | null;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Map an integration ID or key to its integration ID.
|
|
38
|
+
*
|
|
39
|
+
* Throws — naming the identifier — when nothing in the app matches, so the
|
|
40
|
+
* caller's existing catch prints the message and exits non-zero.
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveIntegrationSelector(client: IntegrationLister, appId: string, selector: string): Promise<ResolvedIntegration>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the identifier the `integrations tests` verbs take (issue #3000).
|
|
3
|
+
*
|
|
4
|
+
* The block-testing endpoints key on the composite `integration#<blockId>` and
|
|
5
|
+
* never check that the block exists, so an identifier that names no
|
|
6
|
+
* integration came back as an empty page rather than a 404: `tests list`
|
|
7
|
+
* printed "No test cases found." and `tests run-all` printed
|
|
8
|
+
* `Total Tests: 0 / Failed: 0` and exited 0. That is success-shaped in CI and
|
|
9
|
+
* indistinguishable from an integration that genuinely has no cases, so a
|
|
10
|
+
* typo, an integration KEY, or an ID from another app all read as "nothing to
|
|
11
|
+
* run".
|
|
12
|
+
*
|
|
13
|
+
* Resolving here — against the app's own integration list — is what makes
|
|
14
|
+
* `Total Tests: 0` mean "this integration exists and has no cases". The list
|
|
15
|
+
* is the one call that can answer both halves: it maps a key to its ID (keys
|
|
16
|
+
* are stored lowercased, so the match is case-insensitive) and it proves the
|
|
17
|
+
* identifier belongs to THIS app. Archived integrations are included, because
|
|
18
|
+
* their cases stay inspectable.
|
|
19
|
+
*/
|
|
20
|
+
import { paginateAll } from "./paginate.js";
|
|
21
|
+
/**
|
|
22
|
+
* Map an integration ID or key to its integration ID.
|
|
23
|
+
*
|
|
24
|
+
* Throws — naming the identifier — when nothing in the app matches, so the
|
|
25
|
+
* caller's existing catch prints the message and exits non-zero.
|
|
26
|
+
*/
|
|
27
|
+
export async function resolveIntegrationSelector(client, appId, selector) {
|
|
28
|
+
const identifier = (selector ?? "").trim();
|
|
29
|
+
if (!identifier) {
|
|
30
|
+
throw new Error("An integration ID or key is required.");
|
|
31
|
+
}
|
|
32
|
+
const items = await paginateAll((cursor) => client.listIntegrations(appId, cursor ? { cursor } : {}));
|
|
33
|
+
const lowered = identifier.toLowerCase();
|
|
34
|
+
const match = items.find((item) => item?.integrationId === identifier) ??
|
|
35
|
+
items.find((item) => typeof item?.integrationKey === "string" &&
|
|
36
|
+
item.integrationKey.toLowerCase() === lowered);
|
|
37
|
+
if (!match) {
|
|
38
|
+
throw new Error(`No integration '${identifier}' in app ${appId}. ` +
|
|
39
|
+
`Pass an integration key or ID from 'primitive integrations list'.`);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
integrationId: match.integrationId ?? identifier,
|
|
43
|
+
...(match.integrationKey ? { integrationKey: match.integrationKey } : {}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=integration-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-selector.js","sourceRoot":"","sources":["../../../src/lib/integration-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAgB5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAyB,EACzB,KAAa,EACb,QAAgB;IAEhB,MAAM,UAAU,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAM,CAAC,MAAM,EAAE,EAAE,CAC9C,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACzD,CAAC;IAEF,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,KAAK,GACT,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,UAAU,CAAC;QACxD,KAAK,CAAC,IAAI,CACR,CAAC,IAAI,EAAE,EAAE,CACP,OAAO,IAAI,EAAE,cAAc,KAAK,QAAQ;YACxC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,KAAK,OAAO,CAChD,CAAC;IAEJ,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,mBAAmB,UAAU,YAAY,KAAK,IAAI;YAChD,mEAAmE,CACtE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,UAAU;QAChD,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The iOS client's Apple app identifier, per environment (#3081).
|
|
3
|
+
*
|
|
4
|
+
* Apple matches an association document against
|
|
5
|
+
* `<Application Identifier Prefix>.<Bundle Identifier>` — the prefix is ten
|
|
6
|
+
* alphanumerics, and it is USUALLY the Team ID but a legacy app's can differ
|
|
7
|
+
* (TN2311). Every message below therefore says "Application Identifier Prefix"
|
|
8
|
+
* and points at the signed app's `application-identifier` entitlement: a
|
|
9
|
+
* well-formed identifier with the wrong prefix produces a document that PARSES,
|
|
10
|
+
* so Apple caches it and both universal links and passkeys fail with nothing to
|
|
11
|
+
* read.
|
|
12
|
+
*
|
|
13
|
+
* One value per environment, because an app with alpha and production has one
|
|
14
|
+
* bundle id each. It is declared beside `webUrl` (#2982) — that pair is one
|
|
15
|
+
* cross-client link, the origin and the app it vouches for — and the Vue
|
|
16
|
+
* template's `scripts/deploy.mjs` generates the association document from it at
|
|
17
|
+
* deploy time.
|
|
18
|
+
*
|
|
19
|
+
* Returns the `string | true` shape `@inquirer/prompts` expects, like
|
|
20
|
+
* `validateWebUrl`, so the same function backs the flag check, the project
|
|
21
|
+
* config's field validation and any future prompt. `deploy.mjs` duplicates the
|
|
22
|
+
* shape rule (it is self-contained, node builtins only) but not these messages.
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Validates an Apple app identifier. Returns `true` when valid, otherwise the
|
|
26
|
+
* message to show the user.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateIosAppId(value: string): string | true;
|
|
29
|
+
/**
|
|
30
|
+
* The stored form of an already-validated identifier: trimmed, and otherwise
|
|
31
|
+
* byte-for-byte what Apple matches. Case is NOT folded — a bundle id is
|
|
32
|
+
* case-sensitive to Apple, and the prefix is uppercase already.
|
|
33
|
+
*/
|
|
34
|
+
export declare function normalizeIosAppId(value: string): string;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The iOS client's Apple app identifier, per environment (#3081).
|
|
3
|
+
*
|
|
4
|
+
* Apple matches an association document against
|
|
5
|
+
* `<Application Identifier Prefix>.<Bundle Identifier>` — the prefix is ten
|
|
6
|
+
* alphanumerics, and it is USUALLY the Team ID but a legacy app's can differ
|
|
7
|
+
* (TN2311). Every message below therefore says "Application Identifier Prefix"
|
|
8
|
+
* and points at the signed app's `application-identifier` entitlement: a
|
|
9
|
+
* well-formed identifier with the wrong prefix produces a document that PARSES,
|
|
10
|
+
* so Apple caches it and both universal links and passkeys fail with nothing to
|
|
11
|
+
* read.
|
|
12
|
+
*
|
|
13
|
+
* One value per environment, because an app with alpha and production has one
|
|
14
|
+
* bundle id each. It is declared beside `webUrl` (#2982) — that pair is one
|
|
15
|
+
* cross-client link, the origin and the app it vouches for — and the Vue
|
|
16
|
+
* template's `scripts/deploy.mjs` generates the association document from it at
|
|
17
|
+
* deploy time.
|
|
18
|
+
*
|
|
19
|
+
* Returns the `string | true` shape `@inquirer/prompts` expects, like
|
|
20
|
+
* `validateWebUrl`, so the same function backs the flag check, the project
|
|
21
|
+
* config's field validation and any future prompt. `deploy.mjs` duplicates the
|
|
22
|
+
* shape rule (it is self-contained, node builtins only) but not these messages.
|
|
23
|
+
*/
|
|
24
|
+
/** The example every message ends with, so a rejection is actionable. */
|
|
25
|
+
const SHAPE = "e.g. ABCDE12345.com.example.app";
|
|
26
|
+
/** Where the authoritative value is, when the Team ID is not the prefix. */
|
|
27
|
+
const VERIFY = "verify it against the signed app's application-identifier entitlement";
|
|
28
|
+
/** `<Application Identifier Prefix>.<Bundle Identifier>`, after trimming. */
|
|
29
|
+
const IOS_APP_ID = /^[A-Z0-9]{10}\.[A-Za-z0-9.-]+$/;
|
|
30
|
+
/** The placeholder the template's `.example` document ships with. */
|
|
31
|
+
const PLACEHOLDER_PREFIX = "TEAMID";
|
|
32
|
+
/**
|
|
33
|
+
* Validates an Apple app identifier. Returns `true` when valid, otherwise the
|
|
34
|
+
* message to show the user.
|
|
35
|
+
*/
|
|
36
|
+
export function validateIosAppId(value) {
|
|
37
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
38
|
+
return `iOS app id cannot be empty — ${SHAPE}`;
|
|
39
|
+
}
|
|
40
|
+
const trimmed = value.trim();
|
|
41
|
+
const dot = trimmed.indexOf(".");
|
|
42
|
+
if (dot === -1) {
|
|
43
|
+
return `iOS app id must be <Application Identifier Prefix>.<bundle id> — ${SHAPE}`;
|
|
44
|
+
}
|
|
45
|
+
const prefix = trimmed.slice(0, dot);
|
|
46
|
+
const bundleId = trimmed.slice(dot + 1);
|
|
47
|
+
if (prefix === PLACEHOLDER_PREFIX || bundleId === "BUNDLEID") {
|
|
48
|
+
return `iOS app id is still the "${PLACEHOLDER_PREFIX}.BUNDLEID" placeholder — replace it with this environment's Application Identifier Prefix (usually your Team ID; ${VERIFY}) and the iOS client's bundle id (${SHAPE})`;
|
|
49
|
+
}
|
|
50
|
+
if (!/^[A-Z0-9]{10}$/.test(prefix)) {
|
|
51
|
+
return `iOS app id must start with the 10-character Application Identifier Prefix (usually your Team ID; ${VERIFY}), not "${prefix}" — ${SHAPE}`;
|
|
52
|
+
}
|
|
53
|
+
if (!bundleId) {
|
|
54
|
+
return `iOS app id has no bundle id after the Application Identifier Prefix — ${SHAPE}`;
|
|
55
|
+
}
|
|
56
|
+
if (!IOS_APP_ID.test(trimmed)) {
|
|
57
|
+
return `iOS app id's bundle id may only contain letters, digits, dots and dashes — ${SHAPE}`;
|
|
58
|
+
}
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The stored form of an already-validated identifier: trimmed, and otherwise
|
|
63
|
+
* byte-for-byte what Apple matches. Case is NOT folded — a bundle id is
|
|
64
|
+
* case-sensitive to Apple, and the prefix is uppercase already.
|
|
65
|
+
*/
|
|
66
|
+
export function normalizeIosAppId(value) {
|
|
67
|
+
return value.trim();
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=ios-app-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ios-app-id.js","sourceRoot":"","sources":["../../../src/lib/ios-app-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,yEAAyE;AACzE,MAAM,KAAK,GAAG,iCAAiC,CAAC;AAEhD,4EAA4E;AAC5E,MAAM,MAAM,GACV,uEAAuE,CAAC;AAE1E,6EAA6E;AAC7E,MAAM,UAAU,GAAG,gCAAgC,CAAC;AAEpD,qEAAqE;AACrE,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,OAAO,gCAAgC,KAAK,EAAE,CAAC;IACjD,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;QACf,OAAO,oEAAoE,KAAK,EAAE,CAAC;IACrF,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,kBAAkB,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC7D,OAAO,4BAA4B,kBAAkB,oHAAoH,MAAM,qCAAqC,KAAK,GAAG,CAAC;IAC/N,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,OAAO,oGAAoG,MAAM,WAAW,MAAM,OAAO,KAAK,EAAE,CAAC;IACnJ,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,yEAAyE,KAAK,EAAE,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,OAAO,8EAA8E,KAAK,EAAE,CAAC;IAC/F,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `--limit` / `--cursor` pair every paged `list` verb declares (#3646).
|
|
3
|
+
*
|
|
4
|
+
* Pagination is a property of the route, not of the verb that happens to have
|
|
5
|
+
* needed it first: a `list` backed by a paged server route carries both flags,
|
|
6
|
+
* prints exactly one page and reports the page boundary in its envelope; a
|
|
7
|
+
* `list` backed by an unpaged route carries neither. Declaring the pair from
|
|
8
|
+
* one place keeps the help text — and therefore the command manifest the docs
|
|
9
|
+
* gate reads — identical across the thirty-odd verbs that page.
|
|
10
|
+
*
|
|
11
|
+
* `cli/tests/unit/list-envelope-uniform-3646.test.ts` walks the manifest and
|
|
12
|
+
* fails a `list` that declares one of the two without the other.
|
|
13
|
+
*/
|
|
14
|
+
import { Option } from "commander";
|
|
15
|
+
/** `--limit <n>`, for a list whose route pages. */
|
|
16
|
+
export declare function pageLimitOption(): Option;
|
|
17
|
+
/** `--cursor <cursor>`, for a list whose route pages. */
|
|
18
|
+
export declare function pageCursorOption(): Option;
|
|
19
|
+
/**
|
|
20
|
+
* Read `--limit` as a positive integer, or exit naming the flag.
|
|
21
|
+
*
|
|
22
|
+
* Refuses before the action asks anything of the server, so a typo costs a
|
|
23
|
+
* message rather than a page of rows the caller did not ask for.
|
|
24
|
+
*
|
|
25
|
+
* Only an absent flag means "the route's own default": an empty value is a
|
|
26
|
+
* value, and `--limit "$LIMIT"` with `LIMIT` unset is the ordinary way a script
|
|
27
|
+
* supplies one. Reading it as an omission would answer a malformed request with
|
|
28
|
+
* a page the caller never asked for, so it takes the same refusal as `--limit
|
|
29
|
+
* zero`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parsePageLimit(raw: unknown): number | undefined;
|
|
32
|
+
/** A page as the human-readable half of a `list` verb reads it. */
|
|
33
|
+
interface PageBoundary {
|
|
34
|
+
nextCursor?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A cursor as it must appear after `--cursor` in a printed hint.
|
|
38
|
+
*
|
|
39
|
+
* A list cursor is the server's keyset position run through `JSON.stringify`
|
|
40
|
+
* (`encodeListCursor`, `src/app-api/helpers/list-params.ts`), so the token a
|
|
41
|
+
* page hands back is routinely `{"documentId":"01HXY…"}` — braces and quotes
|
|
42
|
+
* that a shell eats. The hint exists to be copied verbatim, so anything but a
|
|
43
|
+
* bare word is single-quoted POSIX-style (an embedded `'` closes, escapes and
|
|
44
|
+
* reopens the quoting).
|
|
45
|
+
*/
|
|
46
|
+
export declare function quoteCursorArg(cursor: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* The "there is another page" hint, printed only when there is one.
|
|
49
|
+
*
|
|
50
|
+
* The counterpart of the envelope's `nextCursor` for a reader who is not
|
|
51
|
+
* parsing JSON: the same token, spelled as the argument that fetches the next
|
|
52
|
+
* page.
|
|
53
|
+
*/
|
|
54
|
+
export declare function printPageHint(page: PageBoundary): void;
|
|
55
|
+
/**
|
|
56
|
+
* The empty state for one page.
|
|
57
|
+
*
|
|
58
|
+
* An empty page is not the same thing as an empty listing: several routes cut
|
|
59
|
+
* the page from an index and filter it afterwards — `withoutFunctionOwned` and
|
|
60
|
+
* the status filter on webhooks, the bounded index scans — so a page can come
|
|
61
|
+
* back with no rows and a cursor pointing at matches further along. Before
|
|
62
|
+
* #3646 the draining readers hid that; now that a `list` prints one page,
|
|
63
|
+
* "No <subject> found." would be a lie in exactly that case, so it is said
|
|
64
|
+
* only when the server reported no next page, and the continuation is printed
|
|
65
|
+
* either way.
|
|
66
|
+
*/
|
|
67
|
+
export declare function printEmptyPage(page: PageBoundary, subject: string, emptyListing?: string): void;
|
|
68
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `--limit` / `--cursor` pair every paged `list` verb declares (#3646).
|
|
3
|
+
*
|
|
4
|
+
* Pagination is a property of the route, not of the verb that happens to have
|
|
5
|
+
* needed it first: a `list` backed by a paged server route carries both flags,
|
|
6
|
+
* prints exactly one page and reports the page boundary in its envelope; a
|
|
7
|
+
* `list` backed by an unpaged route carries neither. Declaring the pair from
|
|
8
|
+
* one place keeps the help text — and therefore the command manifest the docs
|
|
9
|
+
* gate reads — identical across the thirty-odd verbs that page.
|
|
10
|
+
*
|
|
11
|
+
* `cli/tests/unit/list-envelope-uniform-3646.test.ts` walks the manifest and
|
|
12
|
+
* fails a `list` that declares one of the two without the other.
|
|
13
|
+
*/
|
|
14
|
+
import { Option } from "commander";
|
|
15
|
+
import { error, info } from "./output.js";
|
|
16
|
+
/** `--limit <n>`, for a list whose route pages. */
|
|
17
|
+
export function pageLimitOption() {
|
|
18
|
+
return new Option("--limit <n>", "Maximum rows in one page (the route's own default when omitted)");
|
|
19
|
+
}
|
|
20
|
+
/** `--cursor <cursor>`, for a list whose route pages. */
|
|
21
|
+
export function pageCursorOption() {
|
|
22
|
+
return new Option("--cursor <cursor>", "Page to resume from: the `nextCursor` of a previous page");
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Read `--limit` as a positive integer, or exit naming the flag.
|
|
26
|
+
*
|
|
27
|
+
* Refuses before the action asks anything of the server, so a typo costs a
|
|
28
|
+
* message rather than a page of rows the caller did not ask for.
|
|
29
|
+
*
|
|
30
|
+
* Only an absent flag means "the route's own default": an empty value is a
|
|
31
|
+
* value, and `--limit "$LIMIT"` with `LIMIT` unset is the ordinary way a script
|
|
32
|
+
* supplies one. Reading it as an omission would answer a malformed request with
|
|
33
|
+
* a page the caller never asked for, so it takes the same refusal as `--limit
|
|
34
|
+
* zero`.
|
|
35
|
+
*/
|
|
36
|
+
export function parsePageLimit(raw) {
|
|
37
|
+
if (raw === undefined || raw === null)
|
|
38
|
+
return undefined;
|
|
39
|
+
const limit = Number(raw);
|
|
40
|
+
if (!Number.isInteger(limit) || limit <= 0) {
|
|
41
|
+
error("--limit must be a positive integer.");
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
return limit;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* A cursor as it must appear after `--cursor` in a printed hint.
|
|
48
|
+
*
|
|
49
|
+
* A list cursor is the server's keyset position run through `JSON.stringify`
|
|
50
|
+
* (`encodeListCursor`, `src/app-api/helpers/list-params.ts`), so the token a
|
|
51
|
+
* page hands back is routinely `{"documentId":"01HXY…"}` — braces and quotes
|
|
52
|
+
* that a shell eats. The hint exists to be copied verbatim, so anything but a
|
|
53
|
+
* bare word is single-quoted POSIX-style (an embedded `'` closes, escapes and
|
|
54
|
+
* reopens the quoting).
|
|
55
|
+
*/
|
|
56
|
+
export function quoteCursorArg(cursor) {
|
|
57
|
+
if (/^[A-Za-z0-9._:/=+-]+$/.test(cursor))
|
|
58
|
+
return cursor;
|
|
59
|
+
return `'${cursor.replace(/'/g, `'\\''`)}'`;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The "there is another page" hint, printed only when there is one.
|
|
63
|
+
*
|
|
64
|
+
* The counterpart of the envelope's `nextCursor` for a reader who is not
|
|
65
|
+
* parsing JSON: the same token, spelled as the argument that fetches the next
|
|
66
|
+
* page.
|
|
67
|
+
*/
|
|
68
|
+
export function printPageHint(page) {
|
|
69
|
+
if (!page.nextCursor)
|
|
70
|
+
return;
|
|
71
|
+
info(`More results available. Re-run with --cursor ${quoteCursorArg(page.nextCursor)}`);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The empty state for one page.
|
|
75
|
+
*
|
|
76
|
+
* An empty page is not the same thing as an empty listing: several routes cut
|
|
77
|
+
* the page from an index and filter it afterwards — `withoutFunctionOwned` and
|
|
78
|
+
* the status filter on webhooks, the bounded index scans — so a page can come
|
|
79
|
+
* back with no rows and a cursor pointing at matches further along. Before
|
|
80
|
+
* #3646 the draining readers hid that; now that a `list` prints one page,
|
|
81
|
+
* "No <subject> found." would be a lie in exactly that case, so it is said
|
|
82
|
+
* only when the server reported no next page, and the continuation is printed
|
|
83
|
+
* either way.
|
|
84
|
+
*/
|
|
85
|
+
export function printEmptyPage(page, subject, emptyListing = `No ${subject} found.`) {
|
|
86
|
+
info(page.nextCursor ? `No ${subject} on this page.` : emptyListing);
|
|
87
|
+
printPageHint(page);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=list-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-options.js","sourceRoot":"","sources":["../../../src/lib/list-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE1C,mDAAmD;AACnD,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,MAAM,CACf,aAAa,EACb,iEAAiE,CAClE,CAAC;AACJ,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,MAAM,CACf,mBAAmB,EACnB,0DAA0D,CAC3D,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAOD;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACxD,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAkB;IAC9C,IAAI,CAAC,IAAI,CAAC,UAAU;QAAE,OAAO;IAC7B,IAAI,CACF,gDAAgD,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAClF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAkB,EAClB,OAAe,EACf,YAAY,GAAG,MAAM,OAAO,SAAS;IAErC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACrE,aAAa,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-machine Primitive state: `.primitive/local.json` (#2873).
|
|
3
|
+
*
|
|
4
|
+
* `primitive env use` records which environment THIS machine is pointed at.
|
|
5
|
+
* That is not a team decision, so it must not land in the committed
|
|
6
|
+
* `primitive/config.json` — `defaultEnvironment` stays the team default a
|
|
7
|
+
* fresh clone resolves. The file sits beside `credentials.json`, which has the
|
|
8
|
+
* same "local, never committed" property.
|
|
9
|
+
*
|
|
10
|
+
* Reads go through the shared core (`env-resolver-core.ts`) so every reader —
|
|
11
|
+
* CLI, Vite plugin, Swift script — agrees; this module owns the writes and the
|
|
12
|
+
* ignore coverage that keeps the file out of `git status`.
|
|
13
|
+
*/
|
|
14
|
+
import { localStatePathForConfigPath, readLocalSelection } from "./env-resolver-core.js";
|
|
15
|
+
export { localStatePathForConfigPath, readLocalSelection };
|
|
16
|
+
/**
|
|
17
|
+
* Writes this machine's environment selection. Returns the path written so
|
|
18
|
+
* callers can name it in their success message.
|
|
19
|
+
*/
|
|
20
|
+
export declare function writeLocalSelection(configPath: string, name: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Clears the selection if (and only if) it names `name`. Used by `env remove`
|
|
23
|
+
* so removing the selected environment can't leave a dangling selection that
|
|
24
|
+
* makes every later command fail.
|
|
25
|
+
*/
|
|
26
|
+
export declare function clearLocalSelection(configPath: string, name: string): boolean;
|
|
27
|
+
export interface IgnoreCoverageOutcome {
|
|
28
|
+
/**
|
|
29
|
+
* - `not-a-repo` — nothing to do; the file cannot show up in a diff.
|
|
30
|
+
* - `already-ignored`— a committed .gitignore (or an earlier exclude) covers it.
|
|
31
|
+
* - `excluded` — we appended a pattern to the repo's info/exclude file.
|
|
32
|
+
* - `failed` — git was unavailable or the write failed; caller warns.
|
|
33
|
+
*/
|
|
34
|
+
status: "not-a-repo" | "already-ignored" | "excluded" | "failed";
|
|
35
|
+
/** The exclude file written, for `excluded`. */
|
|
36
|
+
excludePath?: string;
|
|
37
|
+
/** The pattern written, for `excluded`. */
|
|
38
|
+
pattern?: string;
|
|
39
|
+
/** Why, for `failed`. */
|
|
40
|
+
detail?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Makes sure `.primitive/local.json` is ignored before it is written.
|
|
44
|
+
*
|
|
45
|
+
* Templates scaffolded from now on carry the entry in their `.gitignore`, but
|
|
46
|
+
* projects created before this change do not — and `env use` writing an
|
|
47
|
+
* untracked-but-committable file would be exactly the "switching backends
|
|
48
|
+
* dirties the repo" problem this replaced. When the file is not already
|
|
49
|
+
* covered we append an anchored pattern to the repository's exclude file,
|
|
50
|
+
* resolved via `git rev-parse --git-path info/exclude` so a linked worktree
|
|
51
|
+
* (where `.git` is a FILE) works, and anchored relative to
|
|
52
|
+
* `git rev-parse --show-toplevel` so a project root nested below the worktree
|
|
53
|
+
* root is not mis-rooted.
|
|
54
|
+
*/
|
|
55
|
+
export declare function ensureLocalStateIgnored(localStatePath: string): IgnoreCoverageOutcome;
|