primitive-admin 1.1.0-alpha.7 → 1.1.0-alpha.71
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 +404 -80
- package/assets/skill/skills/primitive-platform/SKILL.md +808 -0
- package/dist/bin/primitive.d.ts +2 -0
- package/dist/bin/primitive.js +294 -21
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.d.ts +2 -0
- package/dist/src/commands/admins.js +138 -19
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.d.ts +2 -0
- package/dist/src/commands/analytics.js +544 -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 +51 -96
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth.d.ts +2 -0
- package/dist/src/commands/auth.js +177 -7
- 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 +330 -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 +37 -38
- 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 +92 -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 +565 -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 +479 -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 +100 -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 +265 -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 +171 -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 +2140 -112
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +2 -0
- package/dist/src/commands/documents.js +1357 -19
- 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 +174 -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 +333 -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 +116 -0
- package/dist/src/commands/feature-flags.js.map +1 -0
- package/dist/src/commands/group-type-configs.d.ts +2 -0
- package/dist/src/commands/group-type-configs.js +86 -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 +38 -99
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +223 -0
- package/dist/src/commands/guides.js +617 -65
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +25 -0
- package/dist/src/commands/init.js +1605 -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 +380 -178
- 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 +160 -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 +112 -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 +281 -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 +225 -584
- 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 +272 -0
- package/dist/src/commands/rule-sets.js.map +1 -0
- package/dist/src/commands/scripts.d.ts +20 -0
- package/dist/src/commands/scripts.js +554 -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 +108 -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 +75 -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 +330 -0
- package/dist/src/commands/sync-app-settings.js.map +1 -0
- package/dist/src/commands/sync.d.ts +2323 -0
- package/dist/src/commands/sync.js +15065 -843
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.d.ts +2 -0
- package/dist/src/commands/tokens.js +130 -21
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.d.ts +2 -0
- package/dist/src/commands/users.js +532 -23
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +96 -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 +10 -10
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +2 -0
- package/dist/src/commands/webhooks.js +562 -0
- package/dist/src/commands/webhooks.js.map +1 -0
- package/dist/src/commands/workflows.d.ts +116 -0
- package/dist/src/commands/workflows.js +1583 -681
- 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 +1936 -0
- package/dist/src/lib/api-client.js +1826 -138
- 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 +575 -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/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 +68 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +168 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- package/dist/src/lib/config-object-descriptor.d.ts +127 -0
- package/dist/src/lib/config-object-descriptor.js +658 -0
- package/dist/src/lib/config-object-descriptor.js.map +1 -0
- package/dist/src/lib/config-payload.d.ts +85 -0
- package/dist/src/lib/config-payload.js +116 -0
- package/dist/src/lib/config-payload.js.map +1 -0
- package/dist/src/lib/config-surface.d.ts +130 -0
- package/dist/src/lib/config-surface.js +300 -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 +53 -0
- package/dist/src/lib/config.js +92 -53
- 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 +89 -0
- package/dist/src/lib/credentials-store.js +330 -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 +517 -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/env-resolver-core.d.ts +147 -0
- package/dist/src/lib/env-resolver-core.js +265 -0
- package/dist/src/lib/env-resolver-core.js.map +1 -0
- package/dist/src/lib/env-resolver.d.ts +84 -0
- package/dist/src/lib/env-resolver.js +133 -0
- package/dist/src/lib/env-resolver.js.map +1 -0
- package/dist/src/lib/fetch.d.ts +5 -0
- package/dist/src/lib/generated-allowlist.d.ts +28 -0
- package/dist/src/lib/generated-allowlist.js +277 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -0
- package/dist/src/lib/generated-config-surfaces.d.ts +682 -0
- package/dist/src/lib/generated-config-surfaces.js +4058 -0
- package/dist/src/lib/generated-config-surfaces.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-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-ios-links.d.ts +50 -0
- package/dist/src/lib/init-ios-links.js +153 -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 +33 -0
- package/dist/src/lib/init-xcode.js +114 -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/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/log-inspection.d.ts +568 -0
- package/dist/src/lib/log-inspection.js +639 -0
- package/dist/src/lib/log-inspection.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 +109 -0
- package/dist/src/lib/output.js +191 -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 +83 -0
- package/dist/src/lib/paginate.js +95 -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 +97 -0
- package/dist/src/lib/project-config.js +217 -0
- package/dist/src/lib/project-config.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 +65 -0
- package/dist/src/lib/refresh-admin-credentials.js +103 -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-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 +25 -0
- package/dist/src/lib/skill-installer.js +266 -0
- package/dist/src/lib/skill-installer.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +99 -0
- package/dist/src/lib/snapshots.js +357 -0
- package/dist/src/lib/snapshots.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +914 -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/generator.d.ts +94 -0
- package/dist/src/lib/swift-codegen/generator.js +440 -0
- package/dist/src/lib/swift-codegen/generator.js.map +1 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +72 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +644 -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 +111 -0
- package/dist/src/lib/sync-paths.js +198 -0
- package/dist/src/lib/sync-paths.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +544 -0
- package/dist/src/lib/sync-resource-types.js +975 -0
- package/dist/src/lib/sync-resource-types.js.map +1 -0
- package/dist/src/lib/sync-selectors.d.ts +95 -0
- package/dist/src/lib/sync-selectors.js +228 -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-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 +15 -0
- package/dist/src/lib/test-case-variables.js +29 -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 +527 -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/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 +202 -0
- package/dist/src/lib/workflow-toml-validator.js +757 -0
- package/dist/src/lib/workflow-toml-validator.js.map +1 -0
- package/dist/src/types/index.d.ts +581 -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 +32 -8
|
@@ -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>;
|
|
@@ -0,0 +1,191 @@
|
|
|
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
|
+
import * as path from "path";
|
|
16
|
+
import { promises as fsp } from "fs";
|
|
17
|
+
const DEFAULT_GENERATED_SUFFIX = ".generated.ts";
|
|
18
|
+
/** Normalize the one-or-many ownership banner into a list. */
|
|
19
|
+
function bannerList(banner) {
|
|
20
|
+
if (banner === undefined)
|
|
21
|
+
return [];
|
|
22
|
+
return typeof banner === "string" ? [banner] : banner;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Write (or `--check`) a set of rendered generated files, handling orphan
|
|
26
|
+
* cleanup / stale detection. Pure lifecycle: the caller renders content, this
|
|
27
|
+
* owns the disk side.
|
|
28
|
+
*/
|
|
29
|
+
export async function writeOrCheckGeneratedFiles(options) {
|
|
30
|
+
const outAbs = path.resolve(options.outputDir);
|
|
31
|
+
const suffix = options.generatedSuffix ?? DEFAULT_GENERATED_SUFFIX;
|
|
32
|
+
// Cross-generator collision guard (issue #1653, class 3b). Runs BEFORE the
|
|
33
|
+
// check/write branch so `--check` reports the named collision too, rather than
|
|
34
|
+
// a generic `differs`.
|
|
35
|
+
await assertNoForeignBannerCollision(options.filesToWrite, options.foreignOwnershipBanners, options.onForeignBannerCollision);
|
|
36
|
+
if (options.check === true) {
|
|
37
|
+
return await runCheck(outAbs, options.filesToWrite, options.fullOwnership, suffix, options.ownershipBanner);
|
|
38
|
+
}
|
|
39
|
+
await fsp.mkdir(outAbs, { recursive: true });
|
|
40
|
+
const deletedFiles = await cleanupGeneratedOutputs(outAbs, options.filesToWrite, options.fullOwnership, suffix, options.ownershipBanner);
|
|
41
|
+
const writtenFiles = [];
|
|
42
|
+
for (const [filePath, content] of options.filesToWrite) {
|
|
43
|
+
await fsp.writeFile(filePath, content, "utf-8");
|
|
44
|
+
writtenFiles.push(filePath);
|
|
45
|
+
}
|
|
46
|
+
writtenFiles.sort();
|
|
47
|
+
deletedFiles.sort();
|
|
48
|
+
return { writtenFiles, deletedFiles, mismatches: [] };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Fail if any target path already holds a file owned by a DIFFERENT generator
|
|
52
|
+
* (its content starts with a foreign ownership banner). A genuinely absent file
|
|
53
|
+
* (ENOENT) is not a collision and is skipped; any other read error is
|
|
54
|
+
* propagated (abort) so the write path never truncates a file whose banner
|
|
55
|
+
* could not be verified. Runs in both the write and `--check` paths.
|
|
56
|
+
*/
|
|
57
|
+
async function assertNoForeignBannerCollision(filesToWrite, foreignBanners, onCollision) {
|
|
58
|
+
if (!foreignBanners || foreignBanners.length === 0)
|
|
59
|
+
return;
|
|
60
|
+
for (const filePath of filesToWrite.keys()) {
|
|
61
|
+
let contents;
|
|
62
|
+
try {
|
|
63
|
+
contents = await fsp.readFile(filePath, "utf-8");
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
if (err && err.code === "ENOENT") {
|
|
67
|
+
continue; // genuinely absent → not a collision
|
|
68
|
+
}
|
|
69
|
+
// Any other read error (e.g. EACCES on an owner-write-only file) means
|
|
70
|
+
// the banner could NOT be verified. Treating it as absent is fail-open:
|
|
71
|
+
// the write path would then truncate a foreign file whose banner was
|
|
72
|
+
// never checked. Rethrow so the run aborts, matching the sibling
|
|
73
|
+
// `runCheck`.
|
|
74
|
+
throw err;
|
|
75
|
+
}
|
|
76
|
+
const foreignBanner = foreignBanners.find((b) => contents.startsWith(b));
|
|
77
|
+
if (foreignBanner !== undefined) {
|
|
78
|
+
throw onCollision
|
|
79
|
+
? onCollision({ filePath, foreignBanner })
|
|
80
|
+
: new Error(`codegen: output collision — "${filePath}" is already owned by a ` +
|
|
81
|
+
`different generator (banner "${foreignBanner.trim()}"). Give ` +
|
|
82
|
+
`one generator a separate --output directory.`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async function runCheck(outAbs, filesToWrite, fullOwnership, suffix, ownershipBanner) {
|
|
87
|
+
const mismatches = [];
|
|
88
|
+
for (const [filePath, expected] of filesToWrite) {
|
|
89
|
+
let actual;
|
|
90
|
+
try {
|
|
91
|
+
actual = await fsp.readFile(filePath, "utf-8");
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err && err.code === "ENOENT") {
|
|
95
|
+
actual = null;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw err;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (actual === null) {
|
|
102
|
+
mismatches.push({ filePath, reason: "missing" });
|
|
103
|
+
}
|
|
104
|
+
else if (actual !== expected) {
|
|
105
|
+
mismatches.push({ filePath, reason: "differs" });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Stale on-disk generated files the generator wouldn't produce also count as
|
|
109
|
+
// a mismatch (so CI catches dropped types/workflows). Skip when this run only
|
|
110
|
+
// owns a subset: `filesToWrite` is then partial, so sibling files aren't
|
|
111
|
+
// "stale" — they just weren't in scope.
|
|
112
|
+
if (fullOwnership && (await dirExists(outAbs))) {
|
|
113
|
+
const onDisk = await listOwnedGeneratedFiles(outAbs, suffix, ownershipBanner);
|
|
114
|
+
const expectedPaths = new Set(filesToWrite.keys());
|
|
115
|
+
for (const filePath of onDisk) {
|
|
116
|
+
if (!expectedPaths.has(filePath)) {
|
|
117
|
+
mismatches.push({ filePath, reason: "stale" });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
writtenFiles: [...filesToWrite.keys()].sort(),
|
|
123
|
+
deletedFiles: [],
|
|
124
|
+
mismatches,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
async function cleanupGeneratedOutputs(outDir, filesToWrite, fullOwnership, suffix, ownershipBanner) {
|
|
128
|
+
// A filtered run only owns a subset; `filesToWrite` does not represent the
|
|
129
|
+
// full set of generated files, so skip orphan cleanup to avoid destroying
|
|
130
|
+
// sibling files. Full cleanup only happens on the unfiltered run.
|
|
131
|
+
if (!fullOwnership)
|
|
132
|
+
return [];
|
|
133
|
+
const onDisk = await listOwnedGeneratedFiles(outDir, suffix, ownershipBanner);
|
|
134
|
+
const expectedPaths = new Set(filesToWrite.keys());
|
|
135
|
+
const deleted = [];
|
|
136
|
+
for (const filePath of onDisk) {
|
|
137
|
+
if (!expectedPaths.has(filePath)) {
|
|
138
|
+
await fsp.unlink(filePath);
|
|
139
|
+
deleted.push(filePath);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return deleted;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* List only the generator-owned files in `outDir`, decided by the `suffix`
|
|
146
|
+
* (`.generated.ts`) and, when given, an `ownershipBanner` prefix on the file's
|
|
147
|
+
* content. Hand-written files — and files owned by a DIFFERENT generator that
|
|
148
|
+
* happen to share the suffix — are never touched.
|
|
149
|
+
*/
|
|
150
|
+
async function listOwnedGeneratedFiles(outDir, suffix, ownershipBanner) {
|
|
151
|
+
if (!(await dirExists(outDir)))
|
|
152
|
+
return [];
|
|
153
|
+
const entries = await fsp.readdir(outDir, { withFileTypes: true });
|
|
154
|
+
const owned = [];
|
|
155
|
+
for (const entry of entries) {
|
|
156
|
+
if (!entry.isFile())
|
|
157
|
+
continue;
|
|
158
|
+
if (!entry.name.endsWith(suffix))
|
|
159
|
+
continue;
|
|
160
|
+
const filePath = path.join(outDir, entry.name);
|
|
161
|
+
const banners = bannerList(ownershipBanner);
|
|
162
|
+
if (banners.length > 0) {
|
|
163
|
+
// Content-scoped ownership: only sweep files carrying THIS generator's
|
|
164
|
+
// banner, so a shared output dir keeps each generator's cleanup to its
|
|
165
|
+
// own files. A read failure means "not confidently ours" → skip it.
|
|
166
|
+
let contents;
|
|
167
|
+
try {
|
|
168
|
+
contents = await fsp.readFile(filePath, "utf-8");
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (!banners.some((banner) => contents.startsWith(banner)))
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
owned.push(filePath);
|
|
177
|
+
}
|
|
178
|
+
return owned;
|
|
179
|
+
}
|
|
180
|
+
async function dirExists(dir) {
|
|
181
|
+
try {
|
|
182
|
+
const stat = await fsp.stat(dir);
|
|
183
|
+
return stat.isDirectory();
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
if (err && err.code === "ENOENT")
|
|
187
|
+
return false;
|
|
188
|
+
throw err;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=generatedFiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generatedFiles.js","sourceRoot":"","sources":["../../../../src/lib/codegen-shared/generatedFiles.ts"],"names":[],"mappings":"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"}
|