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,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the identifier the `prompts tests` and `workflows tests` verbs take
|
|
3
|
+
* (issue #3249).
|
|
4
|
+
*
|
|
5
|
+
* The block-testing endpoints key on the composite `<type>#<blockId>` and
|
|
6
|
+
* never check that the block exists, so an identifier that names no prompt or
|
|
7
|
+
* workflow came back as an empty page rather than a 404: `tests list <key>`
|
|
8
|
+
* printed "No test cases found." and exited 0, and a checked-in
|
|
9
|
+
* `prompts/<key>.tests/` sidecar looked unregistered until the id was tried.
|
|
10
|
+
* The key is what an author has to hand — `prompts list` prints it beside the
|
|
11
|
+
* id, and the config tree, `config push` and the test sidecars are all
|
|
12
|
+
* key-addressed — so a wrong identifier was indistinguishable from a block
|
|
13
|
+
* with no cases.
|
|
14
|
+
*
|
|
15
|
+
* Resolving here — against the app's own list — is what makes an empty
|
|
16
|
+
* listing mean "this block exists and has no cases", the same answer #3000
|
|
17
|
+
* gave the integration verbs (`integration-selector.ts`). The list is the one
|
|
18
|
+
* call that can answer both halves: it maps a key to its id and it proves the
|
|
19
|
+
* identifier belongs to THIS app. It is drained across every page, because
|
|
20
|
+
* the server pages prompts at 50 and workflows at 25 by default. Archived
|
|
21
|
+
* blocks are included, because their cases stay inspectable.
|
|
22
|
+
*
|
|
23
|
+
* Keys are matched exactly first. The server does not lowercase prompt or
|
|
24
|
+
* workflow keys on write, so a case-insensitive match is a fallback that
|
|
25
|
+
* resolves only when it is unambiguous — two keys differing only in case are
|
|
26
|
+
* refused by name rather than picked between (the `resolveScript` rule in
|
|
27
|
+
* `scripts.ts`).
|
|
28
|
+
*/
|
|
29
|
+
export interface ResolvedBlock {
|
|
30
|
+
blockId: string;
|
|
31
|
+
/** The block's key, when the summary carries one. */
|
|
32
|
+
blockKey?: string;
|
|
33
|
+
}
|
|
34
|
+
type ListPage = {
|
|
35
|
+
items: any[];
|
|
36
|
+
nextCursor?: string | null;
|
|
37
|
+
};
|
|
38
|
+
type ListParams = {
|
|
39
|
+
cursor?: string;
|
|
40
|
+
limit?: number;
|
|
41
|
+
};
|
|
42
|
+
/** The one method each resolver needs from `ApiClient`. */
|
|
43
|
+
export interface PromptLister {
|
|
44
|
+
listPrompts(appId: string, params?: ListParams): Promise<ListPage>;
|
|
45
|
+
}
|
|
46
|
+
export interface WorkflowLister {
|
|
47
|
+
listWorkflows(appId: string, params?: ListParams): Promise<ListPage>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Map a prompt ID or key to its prompt ID.
|
|
51
|
+
*
|
|
52
|
+
* Throws — naming the identifier — when nothing in the app matches, so the
|
|
53
|
+
* caller's existing catch prints the message and exits non-zero.
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolvePromptSelector(client: PromptLister, appId: string, selector: string): Promise<ResolvedBlock>;
|
|
56
|
+
/** The same resolution for a workflow ID or key. */
|
|
57
|
+
export declare function resolveWorkflowSelector(client: WorkflowLister, appId: string, selector: string): Promise<ResolvedBlock>;
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the identifier the `prompts tests` and `workflows tests` verbs take
|
|
3
|
+
* (issue #3249).
|
|
4
|
+
*
|
|
5
|
+
* The block-testing endpoints key on the composite `<type>#<blockId>` and
|
|
6
|
+
* never check that the block exists, so an identifier that names no prompt or
|
|
7
|
+
* workflow came back as an empty page rather than a 404: `tests list <key>`
|
|
8
|
+
* printed "No test cases found." and exited 0, and a checked-in
|
|
9
|
+
* `prompts/<key>.tests/` sidecar looked unregistered until the id was tried.
|
|
10
|
+
* The key is what an author has to hand — `prompts list` prints it beside the
|
|
11
|
+
* id, and the config tree, `config push` and the test sidecars are all
|
|
12
|
+
* key-addressed — so a wrong identifier was indistinguishable from a block
|
|
13
|
+
* with no cases.
|
|
14
|
+
*
|
|
15
|
+
* Resolving here — against the app's own list — is what makes an empty
|
|
16
|
+
* listing mean "this block exists and has no cases", the same answer #3000
|
|
17
|
+
* gave the integration verbs (`integration-selector.ts`). The list is the one
|
|
18
|
+
* call that can answer both halves: it maps a key to its id and it proves the
|
|
19
|
+
* identifier belongs to THIS app. It is drained across every page, because
|
|
20
|
+
* the server pages prompts at 50 and workflows at 25 by default. Archived
|
|
21
|
+
* blocks are included, because their cases stay inspectable.
|
|
22
|
+
*
|
|
23
|
+
* Keys are matched exactly first. The server does not lowercase prompt or
|
|
24
|
+
* workflow keys on write, so a case-insensitive match is a fallback that
|
|
25
|
+
* resolves only when it is unambiguous — two keys differing only in case are
|
|
26
|
+
* refused by name rather than picked between (the `resolveScript` rule in
|
|
27
|
+
* `scripts.ts`).
|
|
28
|
+
*/
|
|
29
|
+
import { paginateAll } from "./paginate.js";
|
|
30
|
+
const PROMPT_KIND = {
|
|
31
|
+
noun: "prompt",
|
|
32
|
+
idField: "promptId",
|
|
33
|
+
keyField: "promptKey",
|
|
34
|
+
listCommand: "primitive prompts list",
|
|
35
|
+
};
|
|
36
|
+
const WORKFLOW_KIND = {
|
|
37
|
+
noun: "workflow",
|
|
38
|
+
idField: "workflowId",
|
|
39
|
+
keyField: "workflowKey",
|
|
40
|
+
listCommand: "primitive workflows list",
|
|
41
|
+
};
|
|
42
|
+
/** The largest page the list endpoints accept (#1316), so a drain is few calls. */
|
|
43
|
+
const PAGE_LIMIT = 100;
|
|
44
|
+
/**
|
|
45
|
+
* Map a prompt ID or key to its prompt ID.
|
|
46
|
+
*
|
|
47
|
+
* Throws — naming the identifier — when nothing in the app matches, so the
|
|
48
|
+
* caller's existing catch prints the message and exits non-zero.
|
|
49
|
+
*/
|
|
50
|
+
export function resolvePromptSelector(client, appId, selector) {
|
|
51
|
+
return resolveBlockSelector(PROMPT_KIND, (params) => client.listPrompts(appId, params), appId, selector);
|
|
52
|
+
}
|
|
53
|
+
/** The same resolution for a workflow ID or key. */
|
|
54
|
+
export function resolveWorkflowSelector(client, appId, selector) {
|
|
55
|
+
return resolveBlockSelector(WORKFLOW_KIND, (params) => client.listWorkflows(appId, params), appId, selector);
|
|
56
|
+
}
|
|
57
|
+
async function resolveBlockSelector(kind, list, appId, selector) {
|
|
58
|
+
const identifier = (selector ?? "").trim();
|
|
59
|
+
if (!identifier) {
|
|
60
|
+
throw new Error(`A ${kind.noun} ID or key is required.`);
|
|
61
|
+
}
|
|
62
|
+
const items = await paginateAll((cursor) => list(cursor ? { cursor, limit: PAGE_LIMIT } : { limit: PAGE_LIMIT }));
|
|
63
|
+
const keyOf = (item) => typeof item?.[kind.keyField] === "string" ? item[kind.keyField] : undefined;
|
|
64
|
+
let match = items.find((item) => item?.[kind.idField] === identifier) ??
|
|
65
|
+
items.find((item) => keyOf(item) === identifier);
|
|
66
|
+
if (!match) {
|
|
67
|
+
const lowered = identifier.toLowerCase();
|
|
68
|
+
const ci = items.filter((item) => keyOf(item)?.toLowerCase() === lowered);
|
|
69
|
+
if (ci.length > 1) {
|
|
70
|
+
const candidates = ci
|
|
71
|
+
.map((item) => keyOf(item))
|
|
72
|
+
.sort()
|
|
73
|
+
.join(", ");
|
|
74
|
+
throw new Error(`${capitalize(kind.noun)} key is ambiguous: ${identifier}. Did you mean: ${candidates}? ` +
|
|
75
|
+
`Keys differing only in case must be given exactly, or by ID.`);
|
|
76
|
+
}
|
|
77
|
+
match = ci[0];
|
|
78
|
+
}
|
|
79
|
+
if (!match) {
|
|
80
|
+
throw new Error(`No ${kind.noun} '${identifier}' in app ${appId}. ` +
|
|
81
|
+
`Pass a ${kind.noun} key or ID from '${kind.listCommand}'.`);
|
|
82
|
+
}
|
|
83
|
+
const blockKey = keyOf(match);
|
|
84
|
+
return {
|
|
85
|
+
blockId: match[kind.idField] ?? identifier,
|
|
86
|
+
...(blockKey ? { blockKey } : {}),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function capitalize(word) {
|
|
90
|
+
return word.charAt(0).toUpperCase() + word.slice(1);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=block-selector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-selector.js","sourceRoot":"","sources":["../../../src/lib/block-selector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA6B5C,MAAM,WAAW,GAAc;IAC7B,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,wBAAwB;CACtC,CAAC;AAEF,MAAM,aAAa,GAAc;IAC/B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,aAAa;IACvB,WAAW,EAAE,0BAA0B;CACxC,CAAC;AAEF,mFAAmF;AACnF,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAoB,EACpB,KAAa,EACb,QAAgB;IAEhB,OAAO,oBAAoB,CACzB,WAAW,EACX,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,EAC7C,KAAK,EACL,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,uBAAuB,CACrC,MAAsB,EACtB,KAAa,EACb,QAAgB;IAEhB,OAAO,oBAAoB,CACzB,aAAa,EACb,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAC/C,KAAK,EACL,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,IAAe,EACf,IAA+C,EAC/C,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,KAAK,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAM,CAAC,MAAM,EAAE,EAAE,CAC9C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CACrE,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,IAAS,EAAsB,EAAE,CAC9C,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9E,IAAI,KAAK,GACP,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC;IAEnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC;QAC1E,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,EAAE;iBAClB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;iBAC3B,IAAI,EAAE;iBACN,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,UAAU,mBAAmB,UAAU,IAAI;gBACvF,8DAA8D,CACjE,CAAC;QACJ,CAAC;QACD,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,MAAM,IAAI,CAAC,IAAI,KAAK,UAAU,YAAY,KAAK,IAAI;YACjD,UAAU,IAAI,CAAC,IAAI,oBAAoB,IAAI,CAAC,WAAW,IAAI,CAC9D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU;QAC1C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical JSON serialization used for content comparison and hashing.
|
|
3
|
+
*
|
|
4
|
+
* Key order is normalized (sorted) so two structurally identical objects
|
|
5
|
+
* always produce the same string, while array order is preserved (step order
|
|
6
|
+
* matters in workflows).
|
|
7
|
+
*
|
|
8
|
+
* Lives in `lib/` rather than inside `commands/sync.ts` so both the sync
|
|
9
|
+
* command and the workflow-include reconciliation helper can compare values
|
|
10
|
+
* the same way without a circular import.
|
|
11
|
+
*/
|
|
12
|
+
export declare function canonicalJsonStringify(value: any): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical JSON serialization used for content comparison and hashing.
|
|
3
|
+
*
|
|
4
|
+
* Key order is normalized (sorted) so two structurally identical objects
|
|
5
|
+
* always produce the same string, while array order is preserved (step order
|
|
6
|
+
* matters in workflows).
|
|
7
|
+
*
|
|
8
|
+
* Lives in `lib/` rather than inside `commands/sync.ts` so both the sync
|
|
9
|
+
* command and the workflow-include reconciliation helper can compare values
|
|
10
|
+
* the same way without a circular import.
|
|
11
|
+
*/
|
|
12
|
+
export function canonicalJsonStringify(value) {
|
|
13
|
+
if (value === null || typeof value !== "object") {
|
|
14
|
+
return JSON.stringify(value);
|
|
15
|
+
}
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
return "[" + value.map((v) => canonicalJsonStringify(v)).join(",") + "]";
|
|
18
|
+
}
|
|
19
|
+
// Honor `toJSON` before the key walk. A `Date` — or smol-toml's `TomlDate`,
|
|
20
|
+
// what a TOML datetime literal parses to — has no enumerable own keys, so
|
|
21
|
+
// the `Object.keys()` walk below would collapse it to "{}" and every
|
|
22
|
+
// datetime would hash identically (issue #1919). Both implement `toJSON`,
|
|
23
|
+
// returning the ISO string; recursing on it makes date-like values (nested
|
|
24
|
+
// ones too) participate in the hash. Matches JSON.stringify's own semantics.
|
|
25
|
+
if (typeof value.toJSON === "function") {
|
|
26
|
+
return canonicalJsonStringify(value.toJSON());
|
|
27
|
+
}
|
|
28
|
+
const keys = Object.keys(value).sort();
|
|
29
|
+
return ("{" +
|
|
30
|
+
keys
|
|
31
|
+
.map((k) => JSON.stringify(k) + ":" + canonicalJsonStringify(value[k]))
|
|
32
|
+
.join(",") +
|
|
33
|
+
"}");
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=canonical-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../../../src/lib/canonical-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAU;IAC/C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3E,CAAC;IACD,4EAA4E;IAC5E,0EAA0E;IAC1E,qEAAqE;IACrE,0EAA0E;IAC1E,2EAA2E;IAC3E,6EAA6E;IAC7E,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,sBAAsB,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,CACL,GAAG;QACH,IAAI;aACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACtE,IAAI,CAAC,GAAG,CAAC;QACZ,GAAG,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const DEFAULT_CHANNEL_BRANCH = "main";
|
|
2
|
+
/**
|
|
3
|
+
* Normalize a server URL for comparison: keep the scheme/host/port, strip all
|
|
4
|
+
* trailing slashes from the pathname. Returns null for an unparseable value.
|
|
5
|
+
* `http` vs `https` intentionally does NOT normalize to the same string
|
|
6
|
+
* (scheme is significant).
|
|
7
|
+
*/
|
|
8
|
+
export declare function normalizeServerUrl(raw: string): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* Is `value` a plausible git branch ref that is safe to interpolate into a
|
|
11
|
+
* GitHub URL path? Deliberately strict — only ASCII letters/digits and
|
|
12
|
+
* `._/-`, no leading dash, no `..`, capped length. This guards the branch
|
|
13
|
+
* override env vars so no arbitrary string reaches a URL.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isValidBranchName(value: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Resolve which channel branch to fetch from. Precedence:
|
|
18
|
+
* 1. `override` (an undocumented, internal env var — `overrideName` is
|
|
19
|
+
* only used in the error message). An empty value is ignored; a value
|
|
20
|
+
* that is not a plausible git ref is rejected (throws).
|
|
21
|
+
* 2. Alpha detection: a normalized-URL match of the resolved server URL
|
|
22
|
+
* against `ALPHA_SERVER_URL` → `alpha`.
|
|
23
|
+
* 3. Otherwise `main` (production / local / any non-alpha target, or no
|
|
24
|
+
* target at all when the CLI is logged out).
|
|
25
|
+
*
|
|
26
|
+
* Pure and side-effect free: the caller passes the resolved server URL (or
|
|
27
|
+
* `undefined` when `getServerUrl()` threw) and the override, so this is
|
|
28
|
+
* fully unit-testable without config/credentials.
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveChannelBranch(serverUrl: string | undefined, override: string | undefined, overrideName: string): string;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ALPHA_SERVER_URL } from "./constants.js";
|
|
2
|
+
// Channel resolution shared by every surface that fetches from a
|
|
3
|
+
// branch-as-channel repo (issue #1934): `primitive guides` (the
|
|
4
|
+
// primitive-docs-site repo) and `primitive init` (the template mirrors).
|
|
5
|
+
// Branches are named after the deploy environment they describe: `main` =
|
|
6
|
+
// production, `alpha` = the alpha environment.
|
|
7
|
+
export const DEFAULT_CHANNEL_BRANCH = "main";
|
|
8
|
+
/**
|
|
9
|
+
* Normalize a server URL for comparison: keep the scheme/host/port, strip all
|
|
10
|
+
* trailing slashes from the pathname. Returns null for an unparseable value.
|
|
11
|
+
* `http` vs `https` intentionally does NOT normalize to the same string
|
|
12
|
+
* (scheme is significant).
|
|
13
|
+
*/
|
|
14
|
+
export function normalizeServerUrl(raw) {
|
|
15
|
+
try {
|
|
16
|
+
const u = new URL(raw);
|
|
17
|
+
const path = u.pathname.replace(/\/+$/, "");
|
|
18
|
+
return `${u.protocol}//${u.host}${path}`;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Is `value` a plausible git branch ref that is safe to interpolate into a
|
|
26
|
+
* GitHub URL path? Deliberately strict — only ASCII letters/digits and
|
|
27
|
+
* `._/-`, no leading dash, no `..`, capped length. This guards the branch
|
|
28
|
+
* override env vars so no arbitrary string reaches a URL.
|
|
29
|
+
*/
|
|
30
|
+
export function isValidBranchName(value) {
|
|
31
|
+
if (value.length === 0 || value.length > 100)
|
|
32
|
+
return false;
|
|
33
|
+
if (value.includes(".."))
|
|
34
|
+
return false;
|
|
35
|
+
return /^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(value);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve which channel branch to fetch from. Precedence:
|
|
39
|
+
* 1. `override` (an undocumented, internal env var — `overrideName` is
|
|
40
|
+
* only used in the error message). An empty value is ignored; a value
|
|
41
|
+
* that is not a plausible git ref is rejected (throws).
|
|
42
|
+
* 2. Alpha detection: a normalized-URL match of the resolved server URL
|
|
43
|
+
* against `ALPHA_SERVER_URL` → `alpha`.
|
|
44
|
+
* 3. Otherwise `main` (production / local / any non-alpha target, or no
|
|
45
|
+
* target at all when the CLI is logged out).
|
|
46
|
+
*
|
|
47
|
+
* Pure and side-effect free: the caller passes the resolved server URL (or
|
|
48
|
+
* `undefined` when `getServerUrl()` threw) and the override, so this is
|
|
49
|
+
* fully unit-testable without config/credentials.
|
|
50
|
+
*/
|
|
51
|
+
export function resolveChannelBranch(serverUrl, override, overrideName) {
|
|
52
|
+
const trimmedOverride = override?.trim();
|
|
53
|
+
if (trimmedOverride) {
|
|
54
|
+
if (!isValidBranchName(trimmedOverride)) {
|
|
55
|
+
throw new Error(`Invalid ${overrideName} "${override}": must be a plausible git branch name.`);
|
|
56
|
+
}
|
|
57
|
+
return trimmedOverride;
|
|
58
|
+
}
|
|
59
|
+
if (serverUrl) {
|
|
60
|
+
const target = normalizeServerUrl(serverUrl);
|
|
61
|
+
const alpha = normalizeServerUrl(ALPHA_SERVER_URL);
|
|
62
|
+
if (target !== null && alpha !== null && target === alpha) {
|
|
63
|
+
return "alpha";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return DEFAULT_CHANNEL_BRANCH;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/lib/channel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,iEAAiE;AACjE,gEAAgE;AAChE,yEAAyE;AACzE,0EAA0E;AAC1E,+CAA+C;AAE/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAC3D,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACvC,OAAO,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAA6B,EAC7B,QAA4B,EAC5B,YAAoB;IAEpB,MAAM,eAAe,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzC,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,WAAW,YAAY,KAAK,QAAQ,yCAAyC,CAC9E,CAAC;QACJ,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1D,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,sBAAsB,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Machine-readable CLI command manifest (issue #983).
|
|
3
|
+
*
|
|
4
|
+
* Serializes the full commander command tree (commands, subcommands, args,
|
|
5
|
+
* options, aliases, global options, version) into a stable JSON shape so that
|
|
6
|
+
* external tooling — e.g. `primitive-docs` CI — can drift-gate documented CLI
|
|
7
|
+
* invocations against the *published* CLI rather than scraping `--help` text.
|
|
8
|
+
*
|
|
9
|
+
* The walker uses only commander v12 public accessors, so it is decoupled from
|
|
10
|
+
* commander internals:
|
|
11
|
+
* - `cmd.name()`, `cmd.description()`, `cmd.aliases()`
|
|
12
|
+
* - `cmd.commands` (recurse into subcommands)
|
|
13
|
+
* - `cmd.registeredArguments` (positional args)
|
|
14
|
+
* - `cmd.options` (per-command options)
|
|
15
|
+
*
|
|
16
|
+
* `globalOptions` is the top-level program's own options (e.g. `-e, --env`),
|
|
17
|
+
* reported once at the root rather than repeated on every command.
|
|
18
|
+
*
|
|
19
|
+
* `schemaVersion` is the contract knob: consumers assert they understand the
|
|
20
|
+
* shape and fail loud if a future CLI bumps it. Bumping it is a breaking change
|
|
21
|
+
* for downstream tooling.
|
|
22
|
+
*/
|
|
23
|
+
import type { Command } from "commander";
|
|
24
|
+
/** Current manifest schema version. Bump on any breaking shape change. */
|
|
25
|
+
export declare const CLI_MANIFEST_SCHEMA_VERSION = 1;
|
|
26
|
+
export interface ManifestArg {
|
|
27
|
+
name: string;
|
|
28
|
+
required: boolean;
|
|
29
|
+
variadic: boolean;
|
|
30
|
+
description: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ManifestOption {
|
|
33
|
+
flags: string;
|
|
34
|
+
description: string;
|
|
35
|
+
required: boolean;
|
|
36
|
+
defaultValue: unknown;
|
|
37
|
+
/**
|
|
38
|
+
* True for options registered with commander's `hideHelp()` — deprecated
|
|
39
|
+
* aliases kept working for one window but not part of the supported surface
|
|
40
|
+
* (#2357). Consumers that treat the manifest as the flag allowlist (the
|
|
41
|
+
* docs CLI gate) should exclude these so new documentation cannot be
|
|
42
|
+
* written against a flag that is on its way out.
|
|
43
|
+
*/
|
|
44
|
+
hidden: boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface ManifestCommand {
|
|
47
|
+
name: string;
|
|
48
|
+
description: string;
|
|
49
|
+
aliases: string[];
|
|
50
|
+
args: ManifestArg[];
|
|
51
|
+
options: ManifestOption[];
|
|
52
|
+
commands: ManifestCommand[];
|
|
53
|
+
}
|
|
54
|
+
export interface CliManifest {
|
|
55
|
+
schemaVersion: number;
|
|
56
|
+
name: string;
|
|
57
|
+
version: string;
|
|
58
|
+
globalOptions: ManifestOption[];
|
|
59
|
+
commands: ManifestCommand[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Build the JSON manifest for a fully-built commander program.
|
|
63
|
+
*
|
|
64
|
+
* @param program The root commander `Command` after all subcommands are
|
|
65
|
+
* registered.
|
|
66
|
+
* @param version The CLI version (typically `pkg.version`).
|
|
67
|
+
*/
|
|
68
|
+
export declare function buildCliManifest(program: Command, version: string): CliManifest;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Machine-readable CLI command manifest (issue #983).
|
|
3
|
+
*
|
|
4
|
+
* Serializes the full commander command tree (commands, subcommands, args,
|
|
5
|
+
* options, aliases, global options, version) into a stable JSON shape so that
|
|
6
|
+
* external tooling — e.g. `primitive-docs` CI — can drift-gate documented CLI
|
|
7
|
+
* invocations against the *published* CLI rather than scraping `--help` text.
|
|
8
|
+
*
|
|
9
|
+
* The walker uses only commander v12 public accessors, so it is decoupled from
|
|
10
|
+
* commander internals:
|
|
11
|
+
* - `cmd.name()`, `cmd.description()`, `cmd.aliases()`
|
|
12
|
+
* - `cmd.commands` (recurse into subcommands)
|
|
13
|
+
* - `cmd.registeredArguments` (positional args)
|
|
14
|
+
* - `cmd.options` (per-command options)
|
|
15
|
+
*
|
|
16
|
+
* `globalOptions` is the top-level program's own options (e.g. `-e, --env`),
|
|
17
|
+
* reported once at the root rather than repeated on every command.
|
|
18
|
+
*
|
|
19
|
+
* `schemaVersion` is the contract knob: consumers assert they understand the
|
|
20
|
+
* shape and fail loud if a future CLI bumps it. Bumping it is a breaking change
|
|
21
|
+
* for downstream tooling.
|
|
22
|
+
*/
|
|
23
|
+
/** Current manifest schema version. Bump on any breaking shape change. */
|
|
24
|
+
export const CLI_MANIFEST_SCHEMA_VERSION = 1;
|
|
25
|
+
function serializeArg(arg) {
|
|
26
|
+
return {
|
|
27
|
+
name: arg.name(),
|
|
28
|
+
required: !!arg.required,
|
|
29
|
+
variadic: !!arg.variadic,
|
|
30
|
+
description: arg.description || "",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function serializeOption(opt) {
|
|
34
|
+
return {
|
|
35
|
+
flags: opt.flags,
|
|
36
|
+
description: opt.description || "",
|
|
37
|
+
required: !!opt.required,
|
|
38
|
+
defaultValue: opt.defaultValue ?? null,
|
|
39
|
+
hidden: !!opt.hidden,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function serializeCommand(cmd) {
|
|
43
|
+
return {
|
|
44
|
+
name: cmd.name(),
|
|
45
|
+
description: cmd.description() || "",
|
|
46
|
+
aliases: cmd.aliases() || [],
|
|
47
|
+
args: (cmd.registeredArguments || []).map(serializeArg),
|
|
48
|
+
options: (cmd.options || []).map(serializeOption),
|
|
49
|
+
commands: (cmd.commands || []).map(serializeCommand),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Build the JSON manifest for a fully-built commander program.
|
|
54
|
+
*
|
|
55
|
+
* @param program The root commander `Command` after all subcommands are
|
|
56
|
+
* registered.
|
|
57
|
+
* @param version The CLI version (typically `pkg.version`).
|
|
58
|
+
*/
|
|
59
|
+
export function buildCliManifest(program, version) {
|
|
60
|
+
const root = program;
|
|
61
|
+
return {
|
|
62
|
+
schemaVersion: CLI_MANIFEST_SCHEMA_VERSION,
|
|
63
|
+
name: root.name(),
|
|
64
|
+
version,
|
|
65
|
+
// Top-level program options are the "global" options (e.g. -e, --env);
|
|
66
|
+
// per-command options live under each command in `commands[]`.
|
|
67
|
+
globalOptions: (root.options || []).map(serializeOption),
|
|
68
|
+
commands: (root.commands || []).map(serializeCommand),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=cli-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-manifest.js","sourceRoot":"","sources":["../../../src/lib/cli-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAyC7C,SAAS,YAAY,CAAC,GAAQ;IAC5B,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;QACxB,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;QACxB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAQ;IAC/B,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,EAAE;QAClC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;QACxB,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,IAAI;QACtC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ;IAChC,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE;QAChB,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE;QACpC,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;QAC5B,IAAI,EAAE,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;QACvD,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;QACjD,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC;KACrD,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,OAAe;IAChE,MAAM,IAAI,GAAG,OAAc,CAAC;IAC5B,OAAO;QACL,aAAa,EAAE,2BAA2B;QAC1C,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,OAAO;QACP,uEAAuE;QACvE,+DAA+D;QAC/D,aAAa,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;QACxD,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC;KACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared write / `--check` / stale-cleanup machinery for the CLI codegen
|
|
3
|
+
* commands (issue #1442, sponsor decision #6).
|
|
4
|
+
*
|
|
5
|
+
* Both `databases codegen` (#814) and `workflows codegen` (#1442) render a set
|
|
6
|
+
* of `*.generated.ts` files and then either write them to disk or, under
|
|
7
|
+
* `--check`, compare the would-be output byte-for-byte against what's on disk.
|
|
8
|
+
* The write/compare/cleanup half is identical between them, so it lives here
|
|
9
|
+
* rather than being cloned into each generator.
|
|
10
|
+
*
|
|
11
|
+
* The RENDERING (schema → TS) stays in each generator — only the on-disk
|
|
12
|
+
* lifecycle is shared: `mkdir`, write, orphan cleanup, and the `--check`
|
|
13
|
+
* missing/differs/stale comparison.
|
|
14
|
+
*/
|
|
15
|
+
export type GeneratedFileMismatchReason = "missing" | "differs" | "stale";
|
|
16
|
+
export interface GeneratedFileMismatch {
|
|
17
|
+
filePath: string;
|
|
18
|
+
reason: GeneratedFileMismatchReason;
|
|
19
|
+
}
|
|
20
|
+
export interface WriteOrCheckResult {
|
|
21
|
+
/** Files written (or that would be written under `--check`). */
|
|
22
|
+
writtenFiles: string[];
|
|
23
|
+
/** Stale `*.generated.ts` files deleted (empty under `--check`). */
|
|
24
|
+
deletedFiles: string[];
|
|
25
|
+
/** Only populated under `--check`: files whose on-disk content is out of date. */
|
|
26
|
+
mismatches: GeneratedFileMismatch[];
|
|
27
|
+
}
|
|
28
|
+
export interface WriteOrCheckOptions {
|
|
29
|
+
/** Directory the generated files live in. */
|
|
30
|
+
outputDir: string;
|
|
31
|
+
/** Absolute file path → rendered content. */
|
|
32
|
+
filesToWrite: Map<string, string>;
|
|
33
|
+
/**
|
|
34
|
+
* If true, do not write. Compare each would-be file to disk and return a
|
|
35
|
+
* non-empty `mismatches` list if anything would change.
|
|
36
|
+
*/
|
|
37
|
+
check?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* When true, `filesToWrite` is the COMPLETE set of generated files this
|
|
40
|
+
* output dir owns, so orphaned `*.generated.ts` files are cleaned up (write
|
|
41
|
+
* mode) or flagged `stale` (check mode). When false — a run filtered to a
|
|
42
|
+
* subset — sibling generated files are left intact and not flagged, because
|
|
43
|
+
* `filesToWrite` is only a partial view.
|
|
44
|
+
*/
|
|
45
|
+
fullOwnership: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Suffix identifying generator-owned files (for orphan cleanup / stale
|
|
48
|
+
* detection). Defaults to `.generated.ts`. Both `databases codegen` and
|
|
49
|
+
* `workflows codegen` write one `<name>.generated.ts` file per entity into
|
|
50
|
+
* their OWN default output dir (`database-type-configs/generated/` and
|
|
51
|
+
* `workflows/generated/` respectively), so suffix-based ownership never
|
|
52
|
+
* reaches the other generator's files.
|
|
53
|
+
*/
|
|
54
|
+
generatedSuffix?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Optional banner prefix that further narrows ownership by file CONTENT.
|
|
57
|
+
* When set, a `<suffix>` file is only considered owned (for orphan cleanup /
|
|
58
|
+
* stale detection) if its contents also start with this prefix.
|
|
59
|
+
*
|
|
60
|
+
* The Swift path needs this: both `workflows codegen --lang swift` and the
|
|
61
|
+
* Swift model codegen (`swift-bao-codegen`) emit `.generated.swift` files and
|
|
62
|
+
* may share one output dir (a Sources dir in the consuming app). Suffix alone
|
|
63
|
+
* cannot tell them apart, so a suffix-only sweep would delete the other
|
|
64
|
+
* generator's files. Scoping by the emitted header banner keeps each
|
|
65
|
+
* generator's cleanup to its own files. The TS callers leave this unset —
|
|
66
|
+
* their default `generated/` dirs are single-generator, so suffix ownership
|
|
67
|
+
* is already unambiguous.
|
|
68
|
+
*
|
|
69
|
+
* Several banners may be given: a generator whose banner has been RENAMED
|
|
70
|
+
* still owns the files it stamped with the old one (issue #2760), and
|
|
71
|
+
* dropping them from the set would orphan every pre-rename output.
|
|
72
|
+
*/
|
|
73
|
+
ownershipBanner?: string | readonly string[];
|
|
74
|
+
/**
|
|
75
|
+
* Banners belonging to OTHER generators that must never be overwritten by
|
|
76
|
+
* this run (issue #1653, class 3b). When two generators share one `--output`
|
|
77
|
+
* dir and a name coincides (e.g. a workflow key equals a database type name),
|
|
78
|
+
* both resolve to the identical `<name>.generated.swift` path. Without this
|
|
79
|
+
* guard the second run silently clobbers the first (cleanup skips the foreign
|
|
80
|
+
* file because it carries the other banner, then the write loop overwrites
|
|
81
|
+
* it). Before writing OR checking, if a target path already holds a file whose
|
|
82
|
+
* content starts with one of these foreign banners, the run fails.
|
|
83
|
+
*/
|
|
84
|
+
foreignOwnershipBanners?: string[];
|
|
85
|
+
/**
|
|
86
|
+
* Builds the error thrown when a `foreignOwnershipBanners` collision is
|
|
87
|
+
* detected. Lets the caller throw its own named error (e.g. the Swift path's
|
|
88
|
+
* `SwiftCodegenError`) without this shared module depending on it. When unset,
|
|
89
|
+
* a generic `Error` is thrown.
|
|
90
|
+
*/
|
|
91
|
+
onForeignBannerCollision?: (info: {
|
|
92
|
+
filePath: string;
|
|
93
|
+
foreignBanner: string;
|
|
94
|
+
}) => Error;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Write (or `--check`) a set of rendered generated files, handling orphan
|
|
98
|
+
* cleanup / stale detection. Pure lifecycle: the caller renders content, this
|
|
99
|
+
* owns the disk side.
|
|
100
|
+
*/
|
|
101
|
+
export declare function writeOrCheckGeneratedFiles(options: WriteOrCheckOptions): Promise<WriteOrCheckResult>;
|