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,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync snapshots — point-in-time backups of a sync directory taken before a
|
|
3
|
+
* destructive `config pull` overwrites local TOML state (issue #578, Phase 1).
|
|
4
|
+
*
|
|
5
|
+
* A snapshot is a full recursive copy of the live sync tree (including
|
|
6
|
+
* `.primitive-sync.json`, the content-hash baseline) into a timestamped slot
|
|
7
|
+
* under the snapshots root:
|
|
8
|
+
*
|
|
9
|
+
* <snapshotsRoot>/<YYYY-MM-DDTHH-MM-SS>/
|
|
10
|
+
* <full pre-pull copy of the sync tree, incl. .primitive-sync.json>
|
|
11
|
+
* .snapshot-complete # integrity marker, written LAST
|
|
12
|
+
* .audit-id # ULID cross-link (Phase 2; absent in P1)
|
|
13
|
+
*
|
|
14
|
+
* The `.snapshot-complete` marker is written last so a partial/interrupted
|
|
15
|
+
* copy is detectable: `restoreSnapshot` refuses any snapshot missing it.
|
|
16
|
+
*
|
|
17
|
+
* Snapshots fail LOUD — `createSnapshot` throws if it can't write a complete
|
|
18
|
+
* snapshot. The caller (config pull) aborts before touching any local file so we
|
|
19
|
+
* never perform a destructive pull without a recoverable backup.
|
|
20
|
+
*
|
|
21
|
+
* Restore is staged-then-swapped: the snapshot is materialized into a sibling
|
|
22
|
+
* temp dir, then the live `configDir` is atomically replaced, so a mid-restore
|
|
23
|
+
* crash never leaves a half-written tree.
|
|
24
|
+
*/
|
|
25
|
+
import { existsSync, readdirSync, statSync, writeFileSync, readFileSync, cpSync, rmSync, renameSync, mkdirSync, mkdtempSync, } from "fs";
|
|
26
|
+
import { join, dirname, resolve, relative, isAbsolute } from "path";
|
|
27
|
+
/**
|
|
28
|
+
* Returns true if `child` is `parent` or lives somewhere beneath it. Used to
|
|
29
|
+
* detect the legacy `--dir` case where the snapshots root sits INSIDE the sync
|
|
30
|
+
* tree (`<userDir>/.snapshots/`) — we must not copy that subtree into the
|
|
31
|
+
* snapshot, or `cpSync` recurses into itself.
|
|
32
|
+
*/
|
|
33
|
+
function isInside(parent, child) {
|
|
34
|
+
const rel = relative(resolve(parent), resolve(child));
|
|
35
|
+
return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
|
|
36
|
+
}
|
|
37
|
+
/** Marker file written LAST inside a snapshot to prove it completed. */
|
|
38
|
+
export const SNAPSHOT_COMPLETE_MARKER = ".snapshot-complete";
|
|
39
|
+
/** Cross-link to the audit entry that produced the snapshot (Phase 2). */
|
|
40
|
+
export const SNAPSHOT_AUDIT_ID_MARKER = ".audit-id";
|
|
41
|
+
/**
|
|
42
|
+
* Produce the timestamp directory name for a snapshot, e.g.
|
|
43
|
+
* `2026-06-01T17-42-18`. Colons (illegal on Windows, awkward everywhere) are
|
|
44
|
+
* replaced with hyphens; milliseconds and the trailing `Z` are dropped.
|
|
45
|
+
*/
|
|
46
|
+
function snapshotTimestamp(now = new Date()) {
|
|
47
|
+
// 2026-06-01T17:42:18.401Z -> 2026-06-01T17-42-18
|
|
48
|
+
return now.toISOString().replace(/\.\d+Z$/, "").replace(/:/g, "-");
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns true if `dir` exists and contains at least one entry. A fresh
|
|
52
|
+
* project (no prior sync dir, or an empty one) has nothing to back up.
|
|
53
|
+
*/
|
|
54
|
+
function dirHasContent(dir) {
|
|
55
|
+
if (!existsSync(dir))
|
|
56
|
+
return false;
|
|
57
|
+
try {
|
|
58
|
+
return readdirSync(dir).length > 0;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Snapshot the current `syncDir` into a new timestamped slot under
|
|
66
|
+
* `snapshotsRoot`. Returns the created snapshot, or `null` when there's
|
|
67
|
+
* nothing to back up (missing/empty `syncDir`).
|
|
68
|
+
*
|
|
69
|
+
* Fails LOUD: throws if the copy or marker write fails. The partial snapshot
|
|
70
|
+
* dir is best-effort cleaned up before rethrowing so a failed snapshot never
|
|
71
|
+
* leaves a marker-less husk behind.
|
|
72
|
+
*/
|
|
73
|
+
export function createSnapshot(syncDir, snapshotsRoot, opts = {}) {
|
|
74
|
+
if (!dirHasContent(syncDir)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const id = snapshotTimestamp(opts.now);
|
|
78
|
+
const dest = join(snapshotsRoot, id);
|
|
79
|
+
// Guard against an id collision (two pulls within the same second). Append a
|
|
80
|
+
// numeric suffix until we find a free slot so a rapid second pull can't
|
|
81
|
+
// clobber the first snapshot.
|
|
82
|
+
let finalId = id;
|
|
83
|
+
let finalDest = dest;
|
|
84
|
+
let suffix = 1;
|
|
85
|
+
while (existsSync(finalDest)) {
|
|
86
|
+
finalId = `${id}-${suffix}`;
|
|
87
|
+
finalDest = join(snapshotsRoot, finalId);
|
|
88
|
+
suffix += 1;
|
|
89
|
+
}
|
|
90
|
+
// Fork 4: under legacy `--dir`, the snapshots root lives INSIDE the sync
|
|
91
|
+
// tree (`<userDir>/.snapshots/`). Node's cpSync refuses to copy a directory
|
|
92
|
+
// into its own subtree (ERR_FS_CP_EINVAL) even with a filter, so in that
|
|
93
|
+
// case we stage the copy into an external temp dir (excluding the backups
|
|
94
|
+
// subtree) and then move it into place.
|
|
95
|
+
const rootIsInside = isInside(syncDir, snapshotsRoot);
|
|
96
|
+
const snapshotsRootResolved = resolve(snapshotsRoot);
|
|
97
|
+
const filter = rootIsInside
|
|
98
|
+
? (src) => !isInside(snapshotsRootResolved, src)
|
|
99
|
+
: undefined;
|
|
100
|
+
let externalStage = null;
|
|
101
|
+
try {
|
|
102
|
+
mkdirSync(snapshotsRoot, { recursive: true });
|
|
103
|
+
if (rootIsInside) {
|
|
104
|
+
// Copy to a sibling of syncDir first (outside the sync tree, so no
|
|
105
|
+
// self-recursion), then move into the inside-the-tree slot. Staging in
|
|
106
|
+
// the parent keeps the move same-filesystem (avoids cross-device EXDEV
|
|
107
|
+
// that a tmpdir stage could hit).
|
|
108
|
+
const parent = dirname(resolve(syncDir));
|
|
109
|
+
mkdirSync(parent, { recursive: true });
|
|
110
|
+
externalStage = mkdtempSync(join(parent, ".primitive-snapshot-stage-"));
|
|
111
|
+
const stageTree = join(externalStage, "tree");
|
|
112
|
+
cpSync(syncDir, stageTree, {
|
|
113
|
+
recursive: true,
|
|
114
|
+
dereference: false,
|
|
115
|
+
...(filter ? { filter } : {}),
|
|
116
|
+
});
|
|
117
|
+
renameSync(stageTree, finalDest);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Full recursive copy. `dereference: false` keeps symlinks from being
|
|
121
|
+
// silently followed (edge case: symlinks inside the sync tree).
|
|
122
|
+
cpSync(syncDir, finalDest, { recursive: true, dereference: false });
|
|
123
|
+
}
|
|
124
|
+
if (opts.auditId) {
|
|
125
|
+
writeFileSync(join(finalDest, SNAPSHOT_AUDIT_ID_MARKER), opts.auditId);
|
|
126
|
+
}
|
|
127
|
+
// Integrity marker written LAST — its presence proves the copy finished.
|
|
128
|
+
writeFileSync(join(finalDest, SNAPSHOT_COMPLETE_MARKER), new Date().toISOString());
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
// Best-effort cleanup of the partial snapshot so we don't leave an
|
|
132
|
+
// incomplete (marker-less) directory around.
|
|
133
|
+
try {
|
|
134
|
+
rmSync(finalDest, { recursive: true, force: true });
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// ignore cleanup failure
|
|
138
|
+
}
|
|
139
|
+
throw err;
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
if (externalStage) {
|
|
143
|
+
try {
|
|
144
|
+
rmSync(externalStage, { recursive: true, force: true });
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// ignore
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return { id: finalId, path: finalDest };
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* List snapshots under `snapshotsRoot`, newest-first. Returns an empty array
|
|
155
|
+
* if the root doesn't exist. Each entry reports whether it's complete and any
|
|
156
|
+
* cross-linked audit id.
|
|
157
|
+
*/
|
|
158
|
+
export function listSnapshots(snapshotsRoot) {
|
|
159
|
+
if (!existsSync(snapshotsRoot))
|
|
160
|
+
return [];
|
|
161
|
+
let names;
|
|
162
|
+
try {
|
|
163
|
+
names = readdirSync(snapshotsRoot);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return [];
|
|
167
|
+
}
|
|
168
|
+
const infos = [];
|
|
169
|
+
for (const name of names) {
|
|
170
|
+
const path = join(snapshotsRoot, name);
|
|
171
|
+
let stat;
|
|
172
|
+
try {
|
|
173
|
+
stat = statSync(path);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (!stat.isDirectory())
|
|
179
|
+
continue;
|
|
180
|
+
const complete = existsSync(join(path, SNAPSHOT_COMPLETE_MARKER));
|
|
181
|
+
let auditId = null;
|
|
182
|
+
const auditPath = join(path, SNAPSHOT_AUDIT_ID_MARKER);
|
|
183
|
+
if (existsSync(auditPath)) {
|
|
184
|
+
try {
|
|
185
|
+
auditId = readFileSync(auditPath, "utf-8").trim() || null;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
auditId = null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
infos.push({ id: name, path, complete, auditId, createdAt: stat.mtime });
|
|
192
|
+
}
|
|
193
|
+
// Newest first. The id is a sortable timestamp string, so a reverse string
|
|
194
|
+
// sort matches chronological order (and stays correct for the `-N` suffixed
|
|
195
|
+
// collision variants within the same second).
|
|
196
|
+
infos.sort((a, b) => (a.id < b.id ? 1 : a.id > b.id ? -1 : 0));
|
|
197
|
+
return infos;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Resolve a snapshot by id within `snapshotsRoot`. Accepts either the full
|
|
201
|
+
* timestamp directory name OR a unique prefix of at least `minPrefix`
|
|
202
|
+
* characters (default 8). Returns the matching snapshot, or throws a clear
|
|
203
|
+
* error on no-match / ambiguous-prefix.
|
|
204
|
+
*
|
|
205
|
+
* When `id` is omitted, resolves to the most recent COMPLETE snapshot.
|
|
206
|
+
*/
|
|
207
|
+
export function resolveSnapshot(snapshotsRoot, id, minPrefix = 8) {
|
|
208
|
+
const all = listSnapshots(snapshotsRoot);
|
|
209
|
+
if (all.length === 0) {
|
|
210
|
+
throw new Error(`No snapshots found in ${snapshotsRoot}`);
|
|
211
|
+
}
|
|
212
|
+
if (!id) {
|
|
213
|
+
const mostRecentComplete = all.find((s) => s.complete);
|
|
214
|
+
if (!mostRecentComplete) {
|
|
215
|
+
throw new Error(`No complete snapshots found in ${snapshotsRoot} (all are missing the ${SNAPSHOT_COMPLETE_MARKER} marker).`);
|
|
216
|
+
}
|
|
217
|
+
return mostRecentComplete;
|
|
218
|
+
}
|
|
219
|
+
// Exact match wins.
|
|
220
|
+
const exact = all.find((s) => s.id === id);
|
|
221
|
+
if (exact)
|
|
222
|
+
return exact;
|
|
223
|
+
// Prefix match (must be unique and >= minPrefix chars).
|
|
224
|
+
if (id.length < minPrefix) {
|
|
225
|
+
throw new Error(`Snapshot id "${id}" is too short — provide at least ${minPrefix} characters or the full timestamp.`);
|
|
226
|
+
}
|
|
227
|
+
const matches = all.filter((s) => s.id.startsWith(id));
|
|
228
|
+
if (matches.length === 0) {
|
|
229
|
+
throw new Error(`No snapshot matches "${id}" in ${snapshotsRoot}`);
|
|
230
|
+
}
|
|
231
|
+
if (matches.length > 1) {
|
|
232
|
+
throw new Error(`Snapshot prefix "${id}" is ambiguous (${matches.length} matches: ${matches
|
|
233
|
+
.map((m) => m.id)
|
|
234
|
+
.join(", ")}). Provide more characters.`);
|
|
235
|
+
}
|
|
236
|
+
return matches[0];
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Restore a snapshot into `syncDir`, replacing whatever is there.
|
|
240
|
+
*
|
|
241
|
+
* Refuses to restore a snapshot missing the `.snapshot-complete` marker
|
|
242
|
+
* (partial/corrupted snapshot). The internal marker files (`.snapshot-complete`,
|
|
243
|
+
* `.audit-id`) are NOT copied into the restored tree.
|
|
244
|
+
*
|
|
245
|
+
* Staged-then-swapped: the snapshot is materialized into a sibling temp dir,
|
|
246
|
+
* then `syncDir` is atomically replaced, so a mid-restore crash never leaves a
|
|
247
|
+
* half-written tree.
|
|
248
|
+
*
|
|
249
|
+
* `opts.preserveDir` names a directory (the snapshots root) that lives INSIDE
|
|
250
|
+
* `syncDir` and must survive the full-tree swap — the Fork-4 legacy `--dir`
|
|
251
|
+
* case, where backups sit at `<syncDir>/.snapshots/`. Without preserving it,
|
|
252
|
+
* the swap would wipe the user's entire snapshot history on restore.
|
|
253
|
+
*/
|
|
254
|
+
export function restoreSnapshot(snapshotPath, syncDir, opts = {}) {
|
|
255
|
+
if (!existsSync(snapshotPath)) {
|
|
256
|
+
throw new Error(`Snapshot not found: ${snapshotPath}`);
|
|
257
|
+
}
|
|
258
|
+
if (!existsSync(join(snapshotPath, SNAPSHOT_COMPLETE_MARKER))) {
|
|
259
|
+
throw new Error(`Refusing to restore: snapshot ${snapshotPath} is missing the ${SNAPSHOT_COMPLETE_MARKER} marker (partial/corrupted snapshot).`);
|
|
260
|
+
}
|
|
261
|
+
const parent = dirname(syncDir);
|
|
262
|
+
mkdirSync(parent, { recursive: true });
|
|
263
|
+
const unique = `${Date.now()}-${Math.floor(Math.random() * 1e6)}`;
|
|
264
|
+
const stageDir = join(parent, `.primitive-restore-stage-${unique}`);
|
|
265
|
+
const oldDir = join(parent, `.primitive-restore-old-${unique}`);
|
|
266
|
+
// Determine whether a backups dir living inside syncDir needs preserving.
|
|
267
|
+
const preserve = opts.preserveDir &&
|
|
268
|
+
isInside(syncDir, opts.preserveDir) &&
|
|
269
|
+
!isInside(snapshotPath, opts.preserveDir) // don't preserve a dir that's part of the snapshot
|
|
270
|
+
? resolve(opts.preserveDir)
|
|
271
|
+
: null;
|
|
272
|
+
const preserveStash = preserve
|
|
273
|
+
? join(parent, `.primitive-restore-keep-${unique}`)
|
|
274
|
+
: null;
|
|
275
|
+
try {
|
|
276
|
+
// Materialize the snapshot into the staging dir.
|
|
277
|
+
cpSync(snapshotPath, stageDir, { recursive: true, dereference: false });
|
|
278
|
+
// Drop the snapshot-internal marker files from the restored tree.
|
|
279
|
+
for (const marker of [SNAPSHOT_COMPLETE_MARKER, SNAPSHOT_AUDIT_ID_MARKER]) {
|
|
280
|
+
const markerPath = join(stageDir, marker);
|
|
281
|
+
if (existsSync(markerPath)) {
|
|
282
|
+
rmSync(markerPath, { force: true });
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// Atomic-ish swap: move the live dir aside, move staging into place, then
|
|
286
|
+
// delete the old dir. Same-filesystem renames are atomic.
|
|
287
|
+
if (existsSync(syncDir)) {
|
|
288
|
+
renameSync(syncDir, oldDir);
|
|
289
|
+
}
|
|
290
|
+
try {
|
|
291
|
+
renameSync(stageDir, syncDir);
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
// Swap failed — try to roll the original back so we never leave the
|
|
295
|
+
// user with no sync dir at all.
|
|
296
|
+
if (existsSync(oldDir) && !existsSync(syncDir)) {
|
|
297
|
+
try {
|
|
298
|
+
renameSync(oldDir, syncDir);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
// ignore rollback failure; original error is more useful
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
throw err;
|
|
305
|
+
}
|
|
306
|
+
// Re-attach the preserved backups dir (Fork-4 `--dir` mode) into the
|
|
307
|
+
// freshly-restored tree, pulling it out of the displaced original.
|
|
308
|
+
if (preserve && preserveStash) {
|
|
309
|
+
const rel = relative(resolve(syncDir), preserve);
|
|
310
|
+
const fromOld = join(oldDir, rel);
|
|
311
|
+
const intoNew = join(syncDir, rel);
|
|
312
|
+
if (existsSync(fromOld) && !existsSync(intoNew)) {
|
|
313
|
+
mkdirSync(dirname(intoNew), { recursive: true });
|
|
314
|
+
renameSync(fromOld, intoNew);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Success — remove the displaced original.
|
|
318
|
+
if (existsSync(oldDir)) {
|
|
319
|
+
rmSync(oldDir, { recursive: true, force: true });
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
finally {
|
|
323
|
+
// Clean up any leftover staging/old/stash dirs on failure.
|
|
324
|
+
for (const dir of [stageDir, oldDir, preserveStash].filter((d) => Boolean(d))) {
|
|
325
|
+
if (existsSync(dir)) {
|
|
326
|
+
try {
|
|
327
|
+
rmSync(dir, { recursive: true, force: true });
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
// ignore
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Prune snapshots older than `retentionDays` from `snapshotsRoot`. Only the
|
|
338
|
+
* given slot is touched (cross-slot retention is independent — each slot has
|
|
339
|
+
* its own snapshots root). No-op if the root doesn't exist.
|
|
340
|
+
*/
|
|
341
|
+
export function pruneSnapshots(snapshotsRoot, retentionDays = 28) {
|
|
342
|
+
if (!existsSync(snapshotsRoot))
|
|
343
|
+
return;
|
|
344
|
+
const cutoff = Date.now() - retentionDays * 24 * 60 * 60 * 1000;
|
|
345
|
+
for (const info of listSnapshots(snapshotsRoot)) {
|
|
346
|
+
if (info.createdAt.getTime() < cutoff) {
|
|
347
|
+
try {
|
|
348
|
+
rmSync(info.path, { recursive: true, force: true });
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
// Best-effort prune — a failure to delete one stale snapshot must not
|
|
352
|
+
// abort the pull that triggered the prune.
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=snapshots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../../src/lib/snapshots.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,UAAU,EACV,WAAW,EACX,QAAQ,EACR,aAAa,EACb,YAAY,EACZ,MAAM,EACN,MAAM,EACN,UAAU,EACV,SAAS,EACT,WAAW,GACZ,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEpE;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,MAAc,EAAE,KAAa;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAC7D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,WAAW,CAAC;AAsBpD;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,MAAY,IAAI,IAAI,EAAE;IAC/C,kDAAkD;IAClD,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,OAAe,EACf,aAAqB,EACrB,OAAyC,EAAE;IAE3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAErC,6EAA6E;IAC7E,wEAAwE;IACxE,8BAA8B;IAC9B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;QAC5B,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,yEAAyE;IACzE,4EAA4E;IAC5E,yEAAyE;IACzE,0EAA0E;IAC1E,wCAAwC;IACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,YAAY;QACzB,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,CAAC;QACxD,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9C,IAAI,YAAY,EAAE,CAAC;YACjB,mEAAmE;YACnE,uEAAuE;YACvE,uEAAuE;YACvE,kCAAkC;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YACzC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC,CAAC;YACxE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE;gBACzB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,KAAK;gBAClB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9B,CAAC,CAAC;YACH,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,sEAAsE;YACtE,gEAAgE;YAChE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzE,CAAC;QAED,yEAAyE;QACzE,aAAa,CACX,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,EACzC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CACzB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,mEAAmE;QACnE,6CAA6C;QAC7C,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;YAAS,CAAC;QACT,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,aAAqB;IACjD,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1C,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,SAAS;QAElC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAClE,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;QACvD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,8CAA8C;IAC9C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,aAAqB,EACrB,EAAsB,EACtB,SAAS,GAAG,CAAC;IAEb,MAAM,GAAG,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC;IACzC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,aAAa,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,kBAAkB,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,kCAAkC,aAAa,yBAAyB,wBAAwB,WAAW,CAC5G,CAAC;QACJ,CAAC;QACD,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,oBAAoB;IACpB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3C,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,wDAAwD;IACxD,IAAI,EAAE,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,gBAAgB,EAAE,qCAAqC,SAAS,oCAAoC,CACrG,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,QAAQ,aAAa,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,oBAAoB,EAAE,mBAAmB,OAAO,CAAC,MAAM,aAAa,OAAO;aACxE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChB,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,eAAe,CAC7B,YAAoB,EACpB,OAAe,EACf,OAAiC,EAAE;IAEnC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,uBAAuB,YAAY,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CACb,iCAAiC,YAAY,mBAAmB,wBAAwB,uCAAuC,CAChI,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,4BAA4B,MAAM,EAAE,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,0BAA0B,MAAM,EAAE,CAAC,CAAC;IAEhE,0EAA0E;IAC1E,MAAM,QAAQ,GACZ,IAAI,CAAC,WAAW;QAChB,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC;QACnC,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,mDAAmD;QAC3F,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;QAC3B,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,aAAa,GAAG,QAAQ;QAC5B,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,MAAM,EAAE,CAAC;QACnD,CAAC,CAAC,IAAI,CAAC;IAET,IAAI,CAAC;QACH,iDAAiD;QACjD,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,kEAAkE;QAClE,KAAK,MAAM,MAAM,IAAI,CAAC,wBAAwB,EAAE,wBAAwB,CAAC,EAAE,CAAC;YAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC1C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,0DAA0D;QAC1D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,CAAC;YACH,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,oEAAoE;YACpE,gCAAgC;YAChC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC;oBACH,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC9B,CAAC;gBAAC,MAAM,CAAC;oBACP,yDAAyD;gBAC3D,CAAC;YACH,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,qEAAqE;QACrE,mEAAmE;QACnE,IAAI,QAAQ,IAAI,aAAa,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACnC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChD,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACjD,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,2DAA2D;QAC3D,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,MAAM,CACxD,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAC/B,EAAE,CAAC;YACF,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,aAAqB,EAAE,aAAa,GAAG,EAAE;IACtE,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,OAAO;IAEvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAChE,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,sEAAsE;gBACtE,2CAA2C;YAC7C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `databases codegen --lang swift` orchestrator (issue #1547, Phase 4).
|
|
3
|
+
*
|
|
4
|
+
* The Swift counterpart of `db-codegen/dbGenerator.ts`. Reads the SAME synced
|
|
5
|
+
* `database-type-configs/*.toml` and emits ONE `<type>.generated.swift` per database
|
|
6
|
+
* type. Each file carries the type's record structs (read shape), per-op params
|
|
7
|
+
* structs (write shape), per-op result typealiases, and a typed `<Type>Ops`
|
|
8
|
+
* factory over the additive generic `executeOperation` overload on
|
|
9
|
+
* `DatabasesAPI` (the only published SDK surface for this generator).
|
|
10
|
+
*
|
|
11
|
+
* Design decisions realized (issue #1547):
|
|
12
|
+
* - Operation + record metadata (which ops exist, their params, their result
|
|
13
|
+
* descriptor, and per-model fields) is read from the SHARED `describeDbType`
|
|
14
|
+
* IR — the SAME source the TS renderer (`db-codegen/dbGenerator.ts`) reads.
|
|
15
|
+
* The Swift renderer reconstructs none of it (binding item 5), so the two
|
|
16
|
+
* clients can never disagree on a type's surface.
|
|
17
|
+
* - The generic result envelopes (`DBQueryResult<T>`, `DBMutationResult`, …)
|
|
18
|
+
* live in the JsBaoClient SDK, NOT emitted per file — a Swift package
|
|
19
|
+
* compiles all generated files into one module, so a per-file copy would
|
|
20
|
+
* collide. Generated files reference the SDK envelopes (mirrors how Phase 3
|
|
21
|
+
* put the workflow result envelopes in the SDK).
|
|
22
|
+
* - Swift has no analog of TS `Pick<M, …>` / `Partial<M>`, so a query op with
|
|
23
|
+
* a `pick`/`partial` projection types its rows as the open `JSONValue`
|
|
24
|
+
* rather than a narrowed record (the same Fork-4 "no clean analog →
|
|
25
|
+
* JSONValue" fallback the emitter uses for un-descended schema nodes). A
|
|
26
|
+
* `full` projection over a known record types as `DBQueryResult<Record>`.
|
|
27
|
+
* - Disk lifecycle (write / `--check` / orphan cleanup) delegates to the
|
|
28
|
+
* shared `writeOrCheckGeneratedFiles`, scoped by an ownership BANNER
|
|
29
|
+
* distinct from both the workflow Swift banner and the model codegen's, so
|
|
30
|
+
* a shared Swift output dir stays safe.
|
|
31
|
+
*/
|
|
32
|
+
import { type WriteOrCheckResult } from "../codegen-shared/generatedFiles.js";
|
|
33
|
+
import { type DbCodegenInput } from "../db-codegen/dbTypeIR.js";
|
|
34
|
+
/**
|
|
35
|
+
* Banner prefix stamped on every CLI-emitted database `.generated.swift` file.
|
|
36
|
+
* Distinct from both the workflow Swift banner (`// AUTO-GENERATED FROM
|
|
37
|
+
* workflows/`) and the model codegen's (`// Generated by swift-bao-codegen`),
|
|
38
|
+
* so none of the three generators' stale-sweeps ever deletes another's files
|
|
39
|
+
* when they share an output dir.
|
|
40
|
+
*/
|
|
41
|
+
export declare const DB_SWIFT_BANNER_PREFIX = "// AUTO-GENERATED FROM database-type-configs/";
|
|
42
|
+
/**
|
|
43
|
+
* The banner this generator stamped before issue #2760 renamed the source
|
|
44
|
+
* directory. RECOGNITION ONLY — nothing emits it.
|
|
45
|
+
*
|
|
46
|
+
* Ownership everywhere is `contents.startsWith(banner)`, so without this a file
|
|
47
|
+
* generated before the rename would match neither the db banner nor the
|
|
48
|
+
* workflow one: it would survive the db stale sweep as a stranger, stay
|
|
49
|
+
* invisible to the sibling-symbol scans, and be silently overwritten by
|
|
50
|
+
* `workflows codegen --lang swift` on a name collision instead of refused.
|
|
51
|
+
*/
|
|
52
|
+
export declare const LEGACY_DB_SWIFT_BANNER_PREFIX = "// AUTO-GENERATED FROM database-types/";
|
|
53
|
+
/** Both spellings, for every ownership check this generator performs. */
|
|
54
|
+
export declare const DB_SWIFT_BANNER_PREFIXES: string[];
|
|
55
|
+
export interface GenerateDbSwiftTypesOptions {
|
|
56
|
+
inputs: DbCodegenInput[];
|
|
57
|
+
/** Directory where the `<type>.generated.swift` files are written. */
|
|
58
|
+
outputDir: string;
|
|
59
|
+
/** `--check`: compare against disk, do not write. */
|
|
60
|
+
check?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Set when the run was filtered to a single database type. `inputs` is then a
|
|
63
|
+
* PARTIAL view, so orphan cleanup / stale detection is scoped to the filtered
|
|
64
|
+
* file. Mirrors the TS generator's `singleType`.
|
|
65
|
+
*/
|
|
66
|
+
singleType?: boolean;
|
|
67
|
+
}
|
|
68
|
+
/** Swift record struct type name for a model (shared naming + Swift sanitize). */
|
|
69
|
+
export declare function dbRecordSwiftTypeName(modelName: string, className: string | undefined): string;
|
|
70
|
+
/**
|
|
71
|
+
* Namespace `enum` name for a database type (issue #1687). Every symbol a type
|
|
72
|
+
* emits is nested under `public enum <Type>` (`securities-ref` →
|
|
73
|
+
* `SecuritiesRef`), so two DB types can never collide on a shared op symbol.
|
|
74
|
+
* Reuses the same `structTypeName` sanitizer (keyword suffixing + digit-leading
|
|
75
|
+
* `_` guard) the old `<Type>Ops` derivation used, so the namespace name is a
|
|
76
|
+
* legal Swift type identifier.
|
|
77
|
+
*/
|
|
78
|
+
export declare function dbNamespaceName(databaseType: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Validate that a database type's derived namespace enum name is safe to emit,
|
|
81
|
+
* and return it. Throws a named `SwiftCodegenError` (with a rename hint) for
|
|
82
|
+
* the whole class of unsafe names a server-accepted database type can produce
|
|
83
|
+
* (#1687):
|
|
84
|
+
*
|
|
85
|
+
* 1. **Degenerate `_`** — a type with no retained identifier characters
|
|
86
|
+
* (empty after sanitize, or separator/emoji/punctuation-only, e.g. `--`,
|
|
87
|
+
* `🎉`) normalizes to `_` via `structTypeName`. Swift reserves `_` as the
|
|
88
|
+
* wildcard and rejects `public enum _` (Codex [P2]).
|
|
89
|
+
* 2. **Stdlib/SDK shadowing** — a name in `RESERVED_NAMESPACE_NAMES` shadows
|
|
90
|
+
* a type the generated body references unqualified (Codex [P1]).
|
|
91
|
+
*
|
|
92
|
+
* Leading-digit residue (`123` → `_123`) and Swift reserved words (`self` →
|
|
93
|
+
* `Self_`, `any` → `Any_`) are already lifted into legal, non-shadowing
|
|
94
|
+
* identifiers by `structTypeName` (digit-leading `_` guard + keyword suffix),
|
|
95
|
+
* so they need no rejection here — only names that survive that sanitizer as
|
|
96
|
+
* `_` or as a real type identifier remain unsafe. The two in-run / retained-
|
|
97
|
+
* sibling namespace-NAME collision guards (two database types whose names
|
|
98
|
+
* normalize to the SAME enum) live in `generateDbSwiftTypes`; this check
|
|
99
|
+
* covers the single-type unsafe-name class.
|
|
100
|
+
*/
|
|
101
|
+
export declare function assertSafeNamespaceName(databaseType: string, sourceFile: string): string;
|
|
102
|
+
/**
|
|
103
|
+
* Render the full `<type>.generated.swift` content for one database-type TOML.
|
|
104
|
+
* Pure — exported so tests can assert on the string directly. Throws on a Swift
|
|
105
|
+
* record type-name collision between two models (mirrors the TS collision guard).
|
|
106
|
+
*/
|
|
107
|
+
export declare function renderDbTypeSwiftFile(input: DbCodegenInput): string;
|
|
108
|
+
/**
|
|
109
|
+
* Run Swift database codegen end-to-end. One `<type>.generated.swift` per
|
|
110
|
+
* database type; delegates the disk lifecycle to the shared writer/checker with
|
|
111
|
+
* banner-scoped ownership so a shared Swift output dir stays safe.
|
|
112
|
+
*/
|
|
113
|
+
export declare function generateDbSwiftTypes(options: GenerateDbSwiftTypesOptions): Promise<WriteOrCheckResult>;
|