primitive-admin 1.1.0-alpha.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +523 -109
- package/assets/skill/skills/primitive-platform/SKILL.md +289 -0
- package/dist/bin/primitive.d.ts +2 -0
- package/dist/bin/primitive.js +372 -21
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/admins.d.ts +2 -0
- package/dist/src/commands/admins.js +136 -30
- package/dist/src/commands/admins.js.map +1 -1
- package/dist/src/commands/analytics.d.ts +2 -0
- package/dist/src/commands/analytics.js +713 -55
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps.d.ts +2 -0
- package/dist/src/commands/apps.js +65 -100
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth-sessions.d.ts +7 -0
- package/dist/src/commands/auth-sessions.js +144 -0
- package/dist/src/commands/auth-sessions.js.map +1 -0
- package/dist/src/commands/auth.d.ts +2 -0
- package/dist/src/commands/auth.js +238 -108
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/blob-buckets.d.ts +2 -0
- package/dist/src/commands/blob-buckets.js +331 -0
- package/dist/src/commands/blob-buckets.js.map +1 -0
- package/dist/src/commands/catalog.d.ts +2 -0
- package/dist/src/commands/catalog.js +63 -48
- package/dist/src/commands/catalog.js.map +1 -1
- package/dist/src/commands/collection-type-configs.d.ts +2 -0
- package/dist/src/commands/collection-type-configs.js +85 -0
- package/dist/src/commands/collection-type-configs.js.map +1 -0
- package/dist/src/commands/collections.d.ts +2 -0
- package/dist/src/commands/collections.js +1282 -0
- package/dist/src/commands/collections.js.map +1 -0
- package/dist/src/commands/comparisons.d.ts +2 -0
- package/dist/src/commands/comparisons.js +6 -6
- package/dist/src/commands/comparisons.js.map +1 -1
- package/dist/src/commands/config.d.ts +46 -0
- package/dist/src/commands/config.js +465 -0
- package/dist/src/commands/config.js.map +1 -0
- package/dist/src/commands/connections.d.ts +2 -0
- package/dist/src/commands/connections.js +99 -0
- package/dist/src/commands/connections.js.map +1 -0
- package/dist/src/commands/cron-triggers.d.ts +2 -0
- package/dist/src/commands/cron-triggers.js +266 -0
- package/dist/src/commands/cron-triggers.js.map +1 -0
- package/dist/src/commands/database-type-configs.d.ts +2 -0
- package/dist/src/commands/database-type-configs.js +164 -0
- package/dist/src/commands/database-type-configs.js.map +1 -0
- package/dist/src/commands/database-types.d.ts +2 -0
- package/dist/src/commands/database-types.js +471 -0
- package/dist/src/commands/database-types.js.map +1 -0
- package/dist/src/commands/databases.d.ts +65 -0
- package/dist/src/commands/databases.js +1887 -243
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/documents.d.ts +60 -0
- package/dist/src/commands/documents.js +2888 -22
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/email-templates.d.ts +2 -0
- package/dist/src/commands/email-templates.js +175 -0
- package/dist/src/commands/email-templates.js.map +1 -0
- package/dist/src/commands/env.d.ts +23 -0
- package/dist/src/commands/env.js +395 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/feature-flags.d.ts +14 -0
- package/dist/src/commands/feature-flags.js +117 -0
- package/dist/src/commands/feature-flags.js.map +1 -0
- package/dist/src/commands/functions.d.ts +20 -0
- package/dist/src/commands/functions.js +1630 -0
- package/dist/src/commands/functions.js.map +1 -0
- package/dist/src/commands/group-type-configs.d.ts +2 -0
- package/dist/src/commands/group-type-configs.js +87 -0
- package/dist/src/commands/group-type-configs.js.map +1 -0
- package/dist/src/commands/groups.d.ts +2 -0
- package/dist/src/commands/groups.js +65 -113
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.d.ts +223 -0
- package/dist/src/commands/guides.js +627 -69
- package/dist/src/commands/guides.js.map +1 -1
- package/dist/src/commands/init.d.ts +37 -0
- package/dist/src/commands/init.js +1693 -208
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.d.ts +2 -0
- package/dist/src/commands/integrations.js +428 -187
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/llm.d.ts +2 -0
- package/dist/src/commands/llm.js +4 -2
- package/dist/src/commands/llm.js.map +1 -1
- package/dist/src/commands/locks.d.ts +8 -0
- package/dist/src/commands/locks.js +175 -0
- package/dist/src/commands/locks.js.map +1 -0
- package/dist/src/commands/metadata-category-configs.d.ts +12 -0
- package/dist/src/commands/metadata-category-configs.js +113 -0
- package/dist/src/commands/metadata-category-configs.js.map +1 -0
- package/dist/src/commands/metadata.d.ts +2 -0
- package/dist/src/commands/metadata.js +288 -0
- package/dist/src/commands/metadata.js.map +1 -0
- package/dist/src/commands/prompts.d.ts +2 -0
- package/dist/src/commands/prompts.js +322 -634
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/rule-sets.d.ts +3 -0
- package/dist/src/commands/rule-sets.js +139 -148
- package/dist/src/commands/rule-sets.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +30 -0
- package/dist/src/commands/scripts.js +688 -0
- package/dist/src/commands/scripts.js.map +1 -0
- package/dist/src/commands/secrets.d.ts +2 -0
- package/dist/src/commands/secrets.js +109 -0
- package/dist/src/commands/secrets.js.map +1 -0
- package/dist/src/commands/sessions.d.ts +2 -0
- package/dist/src/commands/sessions.js +76 -0
- package/dist/src/commands/sessions.js.map +1 -0
- package/dist/src/commands/skill.d.ts +2 -0
- package/dist/src/commands/skill.js +29 -0
- package/dist/src/commands/skill.js.map +1 -0
- package/dist/src/commands/sync-app-settings.d.ts +158 -0
- package/dist/src/commands/sync-app-settings.js +328 -0
- package/dist/src/commands/sync-app-settings.js.map +1 -0
- package/dist/src/commands/sync.d.ts +2670 -0
- package/dist/src/commands/sync.js +17144 -834
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.d.ts +2 -0
- package/dist/src/commands/tokens.js +132 -22
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.d.ts +2 -0
- package/dist/src/commands/users.js +542 -24
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/vars.d.ts +8 -0
- package/dist/src/commands/vars.js +97 -0
- package/dist/src/commands/vars.js.map +1 -0
- package/dist/src/commands/waitlist.d.ts +2 -0
- package/dist/src/commands/waitlist.js +12 -11
- package/dist/src/commands/waitlist.js.map +1 -1
- package/dist/src/commands/webhooks.d.ts +31 -0
- package/dist/src/commands/webhooks.js +633 -0
- package/dist/src/commands/webhooks.js.map +1 -0
- package/dist/src/commands/workflows.d.ts +88 -0
- package/dist/src/commands/workflows.js +1568 -742
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/access-rule-display.d.ts +21 -0
- package/dist/src/lib/access-rule-display.js +34 -0
- package/dist/src/lib/access-rule-display.js.map +1 -0
- package/dist/src/lib/api-client.d.ts +2550 -0
- package/dist/src/lib/api-client.js +2503 -160
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +263 -0
- package/dist/src/lib/app-settings-descriptor.js +583 -0
- package/dist/src/lib/app-settings-descriptor.js.map +1 -0
- package/dist/src/lib/auth-flow.d.ts +8 -0
- package/dist/src/lib/batch.d.ts +26 -0
- package/dist/src/lib/batch.js +32 -0
- package/dist/src/lib/batch.js.map +1 -0
- package/dist/src/lib/block-layout.d.ts +160 -0
- package/dist/src/lib/block-layout.js +451 -0
- package/dist/src/lib/block-layout.js.map +1 -0
- package/dist/src/lib/block-selector.d.ts +58 -0
- package/dist/src/lib/block-selector.js +92 -0
- package/dist/src/lib/block-selector.js.map +1 -0
- package/dist/src/lib/canonical-json.d.ts +12 -0
- package/dist/src/lib/canonical-json.js +35 -0
- package/dist/src/lib/canonical-json.js.map +1 -0
- package/dist/src/lib/channel.d.ts +30 -0
- package/dist/src/lib/channel.js +68 -0
- package/dist/src/lib/channel.js.map +1 -0
- package/dist/src/lib/cli-manifest.d.ts +68 -0
- package/dist/src/lib/cli-manifest.js +71 -0
- package/dist/src/lib/cli-manifest.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +101 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js +191 -0
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -0
- package/dist/src/lib/codegen-shared/prettierStable.d.ts +262 -0
- package/dist/src/lib/codegen-shared/prettierStable.js +610 -0
- package/dist/src/lib/codegen-shared/prettierStable.js.map +1 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +38 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +46 -0
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js.map +1 -0
- package/dist/src/lib/collection-export.d.ts +184 -0
- package/dist/src/lib/collection-export.js +252 -0
- package/dist/src/lib/collection-export.js.map +1 -0
- package/dist/src/lib/config-json-field.d.ts +28 -0
- package/dist/src/lib/config-json-field.js +56 -0
- package/dist/src/lib/config-json-field.js.map +1 -0
- package/dist/src/lib/config-object-descriptor.d.ts +127 -0
- package/dist/src/lib/config-object-descriptor.js +740 -0
- package/dist/src/lib/config-object-descriptor.js.map +1 -0
- package/dist/src/lib/config-payload.d.ts +92 -0
- package/dist/src/lib/config-payload.js +161 -0
- package/dist/src/lib/config-payload.js.map +1 -0
- package/dist/src/lib/config-surface.d.ts +141 -0
- package/dist/src/lib/config-surface.js +368 -0
- package/dist/src/lib/config-surface.js.map +1 -0
- package/dist/src/lib/config-toml.d.ts +10 -0
- package/dist/src/lib/config-toml.js +42 -0
- package/dist/src/lib/config-toml.js.map +1 -0
- package/dist/src/lib/config.d.ts +71 -0
- package/dist/src/lib/config.js +71 -68
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/confirm-prompt.d.ts +83 -0
- package/dist/src/lib/confirm-prompt.js +110 -0
- package/dist/src/lib/confirm-prompt.js.map +1 -0
- package/dist/src/lib/constants.d.ts +11 -0
- package/dist/src/lib/constants.js +12 -0
- package/dist/src/lib/constants.js.map +1 -0
- package/dist/src/lib/crash-handlers.d.ts +20 -0
- package/dist/src/lib/crash-handlers.js +49 -0
- package/dist/src/lib/crash-handlers.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +104 -0
- package/dist/src/lib/credentials-store.js +336 -0
- package/dist/src/lib/credentials-store.js.map +1 -0
- package/dist/src/lib/csv.d.ts +47 -0
- package/dist/src/lib/csv.js +172 -0
- package/dist/src/lib/csv.js.map +1 -0
- package/dist/src/lib/data-input.d.ts +23 -0
- package/dist/src/lib/data-input.js +50 -0
- package/dist/src/lib/data-input.js.map +1 -0
- package/dist/src/lib/db-codegen/dbFingerprint.d.ts +10 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js +17 -0
- package/dist/src/lib/db-codegen/dbFingerprint.js.map +1 -0
- package/dist/src/lib/db-codegen/dbGenerator.d.ts +67 -0
- package/dist/src/lib/db-codegen/dbGenerator.js +170 -0
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/db-codegen/dbNaming.d.ts +87 -0
- package/dist/src/lib/db-codegen/dbNaming.js +180 -0
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +272 -0
- package/dist/src/lib/db-codegen/dbTemplates.js +480 -0
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +73 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js +139 -0
- package/dist/src/lib/db-codegen/dbTsTypes.js.map +1 -0
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +146 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js +525 -0
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.d.ts +112 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js +211 -0
- package/dist/src/lib/db-codegen/generated-operation-def-descriptor.js.map +1 -0
- package/dist/src/lib/deprecation.d.ts +22 -0
- package/dist/src/lib/deprecation.js +43 -0
- package/dist/src/lib/deprecation.js.map +1 -0
- package/dist/src/lib/document-export-permissions.d.ts +30 -0
- package/dist/src/lib/document-export-permissions.js +54 -0
- package/dist/src/lib/document-export-permissions.js.map +1 -0
- package/dist/src/lib/document-ingest-artifact.d.ts +120 -0
- package/dist/src/lib/document-ingest-artifact.js +505 -0
- package/dist/src/lib/document-ingest-artifact.js.map +1 -0
- package/dist/src/lib/document-ingest-input.d.ts +51 -0
- package/dist/src/lib/document-ingest-input.js +132 -0
- package/dist/src/lib/document-ingest-input.js.map +1 -0
- package/dist/src/lib/document-ingest-rows.d.ts +137 -0
- package/dist/src/lib/document-ingest-rows.js +181 -0
- package/dist/src/lib/document-ingest-rows.js.map +1 -0
- package/dist/src/lib/document-ingest.d.ts +101 -0
- package/dist/src/lib/document-ingest.js +384 -0
- package/dist/src/lib/document-ingest.js.map +1 -0
- package/dist/src/lib/env-resolver-core.d.ts +258 -0
- package/dist/src/lib/env-resolver-core.js +447 -0
- package/dist/src/lib/env-resolver-core.js.map +1 -0
- package/dist/src/lib/env-resolver.d.ts +99 -0
- package/dist/src/lib/env-resolver.js +153 -0
- package/dist/src/lib/env-resolver.js.map +1 -0
- package/dist/src/lib/fetch.d.ts +5 -0
- package/dist/src/lib/function-bundle.d.ts +147 -0
- package/dist/src/lib/function-bundle.js +341 -0
- package/dist/src/lib/function-bundle.js.map +1 -0
- package/dist/src/lib/function-collect.d.ts +123 -0
- package/dist/src/lib/function-collect.js +610 -0
- package/dist/src/lib/function-collect.js.map +1 -0
- package/dist/src/lib/function-db-types.d.ts +202 -0
- package/dist/src/lib/function-db-types.js +870 -0
- package/dist/src/lib/function-db-types.js.map +1 -0
- package/dist/src/lib/function-document-types.d.ts +144 -0
- package/dist/src/lib/function-document-types.js +370 -0
- package/dist/src/lib/function-document-types.js.map +1 -0
- package/dist/src/lib/function-grants-preflight.d.ts +64 -0
- package/dist/src/lib/function-grants-preflight.js +105 -0
- package/dist/src/lib/function-grants-preflight.js.map +1 -0
- package/dist/src/lib/function-log-lines.d.ts +76 -0
- package/dist/src/lib/function-log-lines.js +160 -0
- package/dist/src/lib/function-log-lines.js.map +1 -0
- package/dist/src/lib/function-log-row.d.ts +29 -0
- package/dist/src/lib/function-log-row.js +73 -0
- package/dist/src/lib/function-log-row.js.map +1 -0
- package/dist/src/lib/function-log-tail.d.ts +132 -0
- package/dist/src/lib/function-log-tail.js +262 -0
- package/dist/src/lib/function-log-tail.js.map +1 -0
- package/dist/src/lib/function-run.d.ts +289 -0
- package/dist/src/lib/function-run.js +389 -0
- package/dist/src/lib/function-run.js.map +1 -0
- package/dist/src/lib/function-schema-codegen.d.ts +143 -0
- package/dist/src/lib/function-schema-codegen.js +420 -0
- package/dist/src/lib/function-schema-codegen.js.map +1 -0
- package/dist/src/lib/function-sync.d.ts +459 -0
- package/dist/src/lib/function-sync.js +1258 -0
- package/dist/src/lib/function-sync.js.map +1 -0
- package/dist/src/lib/function-trigger-listing.d.ts +27 -0
- package/dist/src/lib/function-trigger-listing.js +70 -0
- package/dist/src/lib/function-trigger-listing.js.map +1 -0
- package/dist/src/lib/function-typecheck.d.ts +86 -0
- package/dist/src/lib/function-typecheck.js +370 -0
- package/dist/src/lib/function-typecheck.js.map +1 -0
- package/dist/src/lib/function-versions.d.ts +122 -0
- package/dist/src/lib/function-versions.js +182 -0
- package/dist/src/lib/function-versions.js.map +1 -0
- package/dist/src/lib/generated-allowlist.d.ts +28 -0
- package/dist/src/lib/generated-allowlist.js +281 -0
- package/dist/src/lib/generated-allowlist.js.map +1 -0
- package/dist/src/lib/generated-config-surfaces.d.ts +2936 -0
- package/dist/src/lib/generated-config-surfaces.js +10569 -0
- package/dist/src/lib/generated-config-surfaces.js.map +1 -0
- package/dist/src/lib/generated-sdk-types.d.ts +12 -0
- package/dist/src/lib/generated-sdk-types.js +13 -0
- package/dist/src/lib/generated-sdk-types.js.map +1 -0
- package/dist/src/lib/generated-template-lint.d.ts +212 -0
- package/dist/src/lib/generated-template-lint.js +624 -0
- package/dist/src/lib/generated-template-lint.js.map +1 -0
- package/dist/src/lib/init-adopt.d.ts +16 -0
- package/dist/src/lib/init-adopt.js +34 -0
- package/dist/src/lib/init-adopt.js.map +1 -0
- package/dist/src/lib/init-assets.d.ts +39 -0
- package/dist/src/lib/init-assets.js +97 -0
- package/dist/src/lib/init-assets.js.map +1 -0
- package/dist/src/lib/init-client-platforms.d.ts +14 -0
- package/dist/src/lib/init-client-platforms.js +71 -0
- package/dist/src/lib/init-client-platforms.js.map +1 -0
- package/dist/src/lib/init-config.d.ts +98 -0
- package/dist/src/lib/init-config.js +186 -0
- package/dist/src/lib/init-config.js.map +1 -0
- package/dist/src/lib/init-email-redirect-uris.d.ts +37 -0
- package/dist/src/lib/init-email-redirect-uris.js +46 -0
- package/dist/src/lib/init-email-redirect-uris.js.map +1 -0
- package/dist/src/lib/init-ios-links.d.ts +91 -0
- package/dist/src/lib/init-ios-links.js +219 -0
- package/dist/src/lib/init-ios-links.js.map +1 -0
- package/dist/src/lib/init-plan.d.ts +80 -0
- package/dist/src/lib/init-plan.js +95 -0
- package/dist/src/lib/init-plan.js.map +1 -0
- package/dist/src/lib/init-production-env.d.ts +48 -0
- package/dist/src/lib/init-production-env.js +59 -0
- package/dist/src/lib/init-production-env.js.map +1 -0
- package/dist/src/lib/init-schema.d.ts +74 -0
- package/dist/src/lib/init-schema.js +358 -0
- package/dist/src/lib/init-schema.js.map +1 -0
- package/dist/src/lib/init-xcode.d.ts +34 -0
- package/dist/src/lib/init-xcode.js +138 -0
- package/dist/src/lib/init-xcode.js.map +1 -0
- package/dist/src/lib/integration-request-config.d.ts +30 -0
- package/dist/src/lib/integration-request-config.js +145 -0
- package/dist/src/lib/integration-request-config.js.map +1 -0
- package/dist/src/lib/integration-selector.d.ts +42 -0
- package/dist/src/lib/integration-selector.js +46 -0
- package/dist/src/lib/integration-selector.js.map +1 -0
- package/dist/src/lib/ios-app-id.d.ts +34 -0
- package/dist/src/lib/ios-app-id.js +69 -0
- package/dist/src/lib/ios-app-id.js.map +1 -0
- package/dist/src/lib/list-options.d.ts +68 -0
- package/dist/src/lib/list-options.js +89 -0
- package/dist/src/lib/list-options.js.map +1 -0
- package/dist/src/lib/local-state.d.ts +55 -0
- package/dist/src/lib/local-state.js +167 -0
- package/dist/src/lib/local-state.js.map +1 -0
- package/dist/src/lib/local-test-cases.d.ts +63 -0
- package/dist/src/lib/local-test-cases.js +136 -0
- package/dist/src/lib/local-test-cases.js.map +1 -0
- package/dist/src/lib/log-inspection.d.ts +715 -0
- package/dist/src/lib/log-inspection.js +816 -0
- package/dist/src/lib/log-inspection.js.map +1 -0
- package/dist/src/lib/logout-admin-session.d.ts +33 -0
- package/dist/src/lib/logout-admin-session.js +70 -0
- package/dist/src/lib/logout-admin-session.js.map +1 -0
- package/dist/src/lib/migration-nag.d.ts +49 -0
- package/dist/src/lib/migration-nag.js +163 -0
- package/dist/src/lib/migration-nag.js.map +1 -0
- package/dist/src/lib/object-status-filter.d.ts +22 -0
- package/dist/src/lib/object-status-filter.js +45 -0
- package/dist/src/lib/object-status-filter.js.map +1 -0
- package/dist/src/lib/output.d.ts +124 -0
- package/dist/src/lib/output.js +219 -8
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/package-manager.d.ts +140 -0
- package/dist/src/lib/package-manager.js +305 -0
- package/dist/src/lib/package-manager.js.map +1 -0
- package/dist/src/lib/paginate.d.ts +98 -0
- package/dist/src/lib/paginate.js +112 -0
- package/dist/src/lib/paginate.js.map +1 -0
- package/dist/src/lib/platform-owned.d.ts +63 -0
- package/dist/src/lib/platform-owned.js +85 -0
- package/dist/src/lib/platform-owned.js.map +1 -0
- package/dist/src/lib/project-config.d.ts +122 -0
- package/dist/src/lib/project-config.js +244 -0
- package/dist/src/lib/project-config.js.map +1 -0
- package/dist/src/lib/prompt-cost-format.d.ts +11 -0
- package/dist/src/lib/prompt-cost-format.js +41 -0
- package/dist/src/lib/prompt-cost-format.js.map +1 -0
- package/dist/src/lib/prompt-schema-codegen.d.ts +147 -0
- package/dist/src/lib/prompt-schema-codegen.js +462 -0
- package/dist/src/lib/prompt-schema-codegen.js.map +1 -0
- package/dist/src/lib/query-operators.d.ts +43 -0
- package/dist/src/lib/query-operators.js +80 -0
- package/dist/src/lib/query-operators.js.map +1 -0
- package/dist/src/lib/record-filter.d.ts +18 -0
- package/dist/src/lib/record-filter.js +55 -0
- package/dist/src/lib/record-filter.js.map +1 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +73 -0
- package/dist/src/lib/refresh-admin-credentials.js +123 -0
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -0
- package/dist/src/lib/resolve-init-dev-port.d.ts +56 -0
- package/dist/src/lib/resolve-init-dev-port.js +55 -0
- package/dist/src/lib/resolve-init-dev-port.js.map +1 -0
- package/dist/src/lib/resolve-init-server.d.ts +64 -0
- package/dist/src/lib/resolve-init-server.js +77 -0
- package/dist/src/lib/resolve-init-server.js.map +1 -0
- package/dist/src/lib/resolve-owner.d.ts +19 -0
- package/dist/src/lib/resolve-owner.js +20 -0
- package/dist/src/lib/resolve-owner.js.map +1 -0
- package/dist/src/lib/resolve-platform.d.ts +74 -0
- package/dist/src/lib/resolve-platform.js +105 -0
- package/dist/src/lib/resolve-platform.js.map +1 -0
- package/dist/src/lib/run-status.d.ts +19 -0
- package/dist/src/lib/run-status.generated.d.ts +39 -0
- package/dist/src/lib/run-status.generated.js +66 -0
- package/dist/src/lib/run-status.generated.js.map +1 -0
- package/dist/src/lib/run-status.js +19 -0
- package/dist/src/lib/run-status.js.map +1 -0
- package/dist/src/lib/server-text-normalization.d.ts +51 -0
- package/dist/src/lib/server-text-normalization.js +90 -0
- package/dist/src/lib/server-text-normalization.js.map +1 -0
- package/dist/src/lib/server-url.d.ts +22 -0
- package/dist/src/lib/server-url.js +33 -0
- package/dist/src/lib/server-url.js.map +1 -0
- package/dist/src/lib/signing-secret-status.d.ts +81 -0
- package/dist/src/lib/signing-secret-status.js +116 -0
- package/dist/src/lib/signing-secret-status.js.map +1 -0
- package/dist/src/lib/skill-installer.d.ts +71 -0
- package/dist/src/lib/skill-installer.js +441 -0
- package/dist/src/lib/skill-installer.js.map +1 -0
- package/dist/src/lib/snapshot-audit-source.d.ts +45 -0
- package/dist/src/lib/snapshot-audit-source.js +58 -0
- package/dist/src/lib/snapshot-audit-source.js.map +1 -0
- package/dist/src/lib/snapshot-audit-store.d.ts +52 -0
- package/dist/src/lib/snapshot-audit-store.js +196 -0
- package/dist/src/lib/snapshot-audit-store.js.map +1 -0
- package/dist/src/lib/snapshot-audit.d.ts +207 -0
- package/dist/src/lib/snapshot-audit.js +431 -0
- package/dist/src/lib/snapshot-audit.js.map +1 -0
- package/dist/src/lib/snapshot-build-rows.d.ts +60 -0
- package/dist/src/lib/snapshot-build-rows.js +87 -0
- package/dist/src/lib/snapshot-build-rows.js.map +1 -0
- package/dist/src/lib/snapshot-build.d.ts +50 -0
- package/dist/src/lib/snapshot-build.js +111 -0
- package/dist/src/lib/snapshot-build.js.map +1 -0
- package/dist/src/lib/snapshot-manifest-layout.d.ts +61 -0
- package/dist/src/lib/snapshot-manifest-layout.js +70 -0
- package/dist/src/lib/snapshot-manifest-layout.js.map +1 -0
- package/dist/src/lib/snapshots.d.ts +98 -0
- package/dist/src/lib/snapshots.js +294 -0
- package/dist/src/lib/snapshots.js.map +1 -0
- package/dist/src/lib/step-run-table.d.ts +43 -0
- package/dist/src/lib/step-run-table.js +129 -0
- package/dist/src/lib/step-run-table.js.map +1 -0
- package/dist/src/lib/storage-pending-retry.d.ts +26 -0
- package/dist/src/lib/storage-pending-retry.js +42 -0
- package/dist/src/lib/storage-pending-retry.js.map +1 -0
- package/dist/src/lib/swift-codegen/agentGenerator.d.ts +42 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js +118 -0
- package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/banners.d.ts +24 -0
- package/dist/src/lib/swift-codegen/banners.js +25 -0
- package/dist/src/lib/swift-codegen/banners.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +113 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js +926 -0
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.d.ts +42 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js +100 -0
- package/dist/src/lib/swift-codegen/dbSwiftTypes.js.map +1 -0
- package/dist/src/lib/swift-codegen/functionGenerator.d.ts +139 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js +462 -0
- package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -0
- package/dist/src/lib/swift-codegen/generator.d.ts +100 -0
- package/dist/src/lib/swift-codegen/generator.js +457 -0
- package/dist/src/lib/swift-codegen/generator.js.map +1 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +87 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js +661 -0
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.d.ts +94 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.js +155 -0
- package/dist/src/lib/swift-codegen/siblingSymbols.js.map +1 -0
- package/dist/src/lib/swift-codegen/swiftNaming.d.ts +85 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js +198 -0
- package/dist/src/lib/swift-codegen/swiftNaming.js.map +1 -0
- package/dist/src/lib/sync-dir-selector.d.ts +21 -0
- package/dist/src/lib/sync-dir-selector.js +30 -0
- package/dist/src/lib/sync-dir-selector.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +128 -0
- package/dist/src/lib/sync-paths.js +195 -0
- package/dist/src/lib/sync-paths.js.map +1 -0
- package/dist/src/lib/sync-resource-types.d.ts +563 -0
- package/dist/src/lib/sync-resource-types.js +1073 -0
- package/dist/src/lib/sync-resource-types.js.map +1 -0
- package/dist/src/lib/sync-selectors.d.ts +138 -0
- package/dist/src/lib/sync-selectors.js +289 -0
- package/dist/src/lib/sync-selectors.js.map +1 -0
- package/dist/src/lib/template.d.ts +170 -0
- package/dist/src/lib/template.js +484 -68
- package/dist/src/lib/template.js.map +1 -1
- package/dist/src/lib/test-case-file-names.d.ts +40 -0
- package/dist/src/lib/test-case-file-names.js +91 -0
- package/dist/src/lib/test-case-file-names.js.map +1 -0
- package/dist/src/lib/test-case-keys.d.ts +29 -0
- package/dist/src/lib/test-case-keys.js +55 -0
- package/dist/src/lib/test-case-keys.js.map +1 -0
- package/dist/src/lib/test-case-variables.d.ts +29 -0
- package/dist/src/lib/test-case-variables.js +71 -0
- package/dist/src/lib/test-case-variables.js.map +1 -0
- package/dist/src/lib/token-inject.d.ts +56 -0
- package/dist/src/lib/token-inject.js +204 -0
- package/dist/src/lib/token-inject.js.map +1 -0
- package/dist/src/lib/toml-database-config.d.ts +123 -0
- package/dist/src/lib/toml-database-config.js +544 -0
- package/dist/src/lib/toml-database-config.js.map +1 -0
- package/dist/src/lib/toml-metadata-config.d.ts +151 -0
- package/dist/src/lib/toml-metadata-config.js +476 -0
- package/dist/src/lib/toml-metadata-config.js.map +1 -0
- package/dist/src/lib/toml-native-form.d.ts +46 -0
- package/dist/src/lib/toml-native-form.js +78 -0
- package/dist/src/lib/toml-native-form.js.map +1 -0
- package/dist/src/lib/toml-params-validator.d.ts +129 -0
- package/dist/src/lib/toml-params-validator.js +298 -0
- package/dist/src/lib/toml-params-validator.js.map +1 -0
- package/dist/src/lib/toml-scalar-edit.d.ts +43 -0
- package/dist/src/lib/toml-scalar-edit.js +283 -0
- package/dist/src/lib/toml-scalar-edit.js.map +1 -0
- package/dist/src/lib/user-selector.d.ts +24 -0
- package/dist/src/lib/user-selector.js +33 -0
- package/dist/src/lib/user-selector.js.map +1 -0
- package/dist/src/lib/version-check.d.ts +35 -0
- package/dist/src/lib/version-check.js +241 -0
- package/dist/src/lib/version-check.js.map +1 -0
- package/dist/src/lib/watch.d.ts +121 -0
- package/dist/src/lib/watch.js +169 -0
- package/dist/src/lib/watch.js.map +1 -0
- package/dist/src/lib/web-url.d.ts +40 -0
- package/dist/src/lib/web-url.js +76 -0
- package/dist/src/lib/web-url.js.map +1 -0
- package/dist/src/lib/webhook-deliver.d.ts +209 -0
- package/dist/src/lib/webhook-deliver.js +519 -0
- package/dist/src/lib/webhook-deliver.js.map +1 -0
- package/dist/src/lib/workflow-apply.d.ts +110 -0
- package/dist/src/lib/workflow-apply.js +164 -0
- package/dist/src/lib/workflow-apply.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.d.ts +129 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js +269 -0
- package/dist/src/lib/workflow-codegen/generated-schema-descriptor.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +96 -0
- package/dist/src/lib/workflow-codegen/generator.js +361 -0
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -0
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +94 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js +76 -0
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -0
- package/dist/src/lib/workflow-codegen/naming.d.ts +33 -0
- package/dist/src/lib/workflow-codegen/naming.js +81 -0
- package/dist/src/lib/workflow-codegen/naming.js.map +1 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.d.ts +80 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js +303 -0
- package/dist/src/lib/workflow-codegen/schemaToTs.js.map +1 -0
- package/dist/src/lib/workflow-config-apply.d.ts +70 -0
- package/dist/src/lib/workflow-config-apply.js +137 -0
- package/dist/src/lib/workflow-config-apply.js.map +1 -0
- package/dist/src/lib/workflow-config-sidecar.d.ts +63 -0
- package/dist/src/lib/workflow-config-sidecar.js +96 -0
- package/dist/src/lib/workflow-config-sidecar.js.map +1 -0
- package/dist/src/lib/workflow-defaults.d.ts +29 -0
- package/dist/src/lib/workflow-defaults.js +41 -0
- package/dist/src/lib/workflow-defaults.js.map +1 -0
- package/dist/src/lib/workflow-fragments.d.ts +64 -0
- package/dist/src/lib/workflow-fragments.js +342 -0
- package/dist/src/lib/workflow-fragments.js.map +1 -0
- package/dist/src/lib/workflow-include-preserve.d.ts +76 -0
- package/dist/src/lib/workflow-include-preserve.js +286 -0
- package/dist/src/lib/workflow-include-preserve.js.map +1 -0
- package/dist/src/lib/workflow-payload.d.ts +98 -0
- package/dist/src/lib/workflow-payload.js +178 -0
- package/dist/src/lib/workflow-payload.js.map +1 -0
- package/dist/src/lib/workflow-toml-validator.d.ts +211 -0
- package/dist/src/lib/workflow-toml-validator.js +770 -0
- package/dist/src/lib/workflow-toml-validator.js.map +1 -0
- package/dist/src/lib/workflow-usage.d.ts +196 -0
- package/dist/src/lib/workflow-usage.js +310 -0
- package/dist/src/lib/workflow-usage.js.map +1 -0
- package/dist/src/types/index.d.ts +591 -0
- package/dist/src/validators.d.ts +65 -0
- package/dist/src/validators.js +64 -0
- package/dist/src/validators.js.map +1 -0
- package/package.json +34 -9
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The artifact `primitive documents ingest` uploads, built from a directory.
|
|
3
|
+
*
|
|
4
|
+
* Read the lines, check every one of them against the document's own schema,
|
|
5
|
+
* put each model's records in id order, and cut them into gzipped chunks whose
|
|
6
|
+
* descriptors match their bytes. All of it before a session exists: an ingest
|
|
7
|
+
* swaps a live document's tables, so a refusal the server would reach halfway
|
|
8
|
+
* through is a refusal this side should have reached first.
|
|
9
|
+
*
|
|
10
|
+
* Two passes over the input, not one. The first validates and decides whether
|
|
11
|
+
* a model's lines already ascend; the second builds. That is what lets an
|
|
12
|
+
* input that is already in order — every export, and most generated files —
|
|
13
|
+
* be streamed through with no temp file at any size, while an unsorted one
|
|
14
|
+
* falls back to a bounded external sort.
|
|
15
|
+
*
|
|
16
|
+
* The local check is the server's, said on this side: the rules it mirrors are
|
|
17
|
+
* `planLine`'s in `src/large-documents/ingest-pipeline.ts`, and the artifact's
|
|
18
|
+
* own rules are in `docs/large-document-ingest.md`.
|
|
19
|
+
*/
|
|
20
|
+
import fs from "fs";
|
|
21
|
+
import path from "path";
|
|
22
|
+
import os from "os";
|
|
23
|
+
import readline from "readline";
|
|
24
|
+
import zlib from "zlib";
|
|
25
|
+
import { createHash } from "crypto";
|
|
26
|
+
import { StringDecoder } from "string_decoder";
|
|
27
|
+
import { compareRecordIds, INGEST_CHUNK_LIMITS } from "js-bao";
|
|
28
|
+
/** A line, a file or a plan this document's schema does not accept. */
|
|
29
|
+
export class IngestArtifactError extends Error {
|
|
30
|
+
constructor(message) {
|
|
31
|
+
super(message);
|
|
32
|
+
this.name = "IngestArtifactError";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The schema as `GET documents/:id/schema` answers it.
|
|
37
|
+
*
|
|
38
|
+
* A stringset is a field whose declared `type` is `stringset`; every other
|
|
39
|
+
* declared field is a scalar. A field named `type` is an ordinary field like
|
|
40
|
+
* any other (#3501) — the word is read from the declaration's VALUE, never
|
|
41
|
+
* from a field's name.
|
|
42
|
+
*/
|
|
43
|
+
export function ingestSchemaFromIntrospection(response) {
|
|
44
|
+
const models = new Map();
|
|
45
|
+
const declared = response?.schema?.models ?? {};
|
|
46
|
+
for (const [model, declaration] of Object.entries(declared)) {
|
|
47
|
+
const fields = new Set();
|
|
48
|
+
const stringSets = new Set();
|
|
49
|
+
for (const [field, spec] of Object.entries(declaration?.fields ?? {})) {
|
|
50
|
+
fields.add(field);
|
|
51
|
+
if (spec?.type === "stringset")
|
|
52
|
+
stringSets.add(field);
|
|
53
|
+
}
|
|
54
|
+
models.set(model, { fields, stringSets });
|
|
55
|
+
}
|
|
56
|
+
return { models };
|
|
57
|
+
}
|
|
58
|
+
/** 75% of the session limits: a chunk the server will not have to refuse. */
|
|
59
|
+
export const INGEST_CUT_RAW_BYTES = 12 * 1024 * 1024;
|
|
60
|
+
export const INGEST_CUT_ROWS = 40_000;
|
|
61
|
+
/** One external-sort run's in-memory bound. */
|
|
62
|
+
export const INGEST_SORT_RUN_BYTES = 64 * 1024 * 1024;
|
|
63
|
+
export async function buildIngestArtifact(options) {
|
|
64
|
+
const { input, schema, cutRawBytes = INGEST_CUT_RAW_BYTES, cutRows = INGEST_CUT_ROWS, runBytes = INGEST_SORT_RUN_BYTES, maxChunkBytes = INGEST_CHUNK_LIMITS.maxChunkBytes, maxChunkRawBytes = INGEST_CHUNK_LIMITS.maxChunkRawBytes, maxChunkRows = INGEST_CHUNK_LIMITS.maxChunkRows, maxChunks = INGEST_CHUNK_LIMITS.maxChunks, maxTotalBytes = INGEST_CHUNK_LIMITS.maxTotalBytes, } = options;
|
|
65
|
+
const scratch = fs.mkdtempSync(path.join(options.tmpDir ?? os.tmpdir(), "primitive-ingest-"));
|
|
66
|
+
const written = [];
|
|
67
|
+
const cleanup = async () => {
|
|
68
|
+
fs.rmSync(scratch, { recursive: true, force: true });
|
|
69
|
+
};
|
|
70
|
+
try {
|
|
71
|
+
// ── Pass 1: validate, tally, and find out what is already in order ──
|
|
72
|
+
const models = new Map();
|
|
73
|
+
for (const source of input.sources) {
|
|
74
|
+
let entry = models.get(source.model);
|
|
75
|
+
if (!entry) {
|
|
76
|
+
entry = { sources: [], rows: 0, deletes: 0, sorted: true };
|
|
77
|
+
models.set(source.model, entry);
|
|
78
|
+
}
|
|
79
|
+
entry.sources.push(source);
|
|
80
|
+
}
|
|
81
|
+
for (const [model, entry] of models) {
|
|
82
|
+
const declared = schema.models.get(model);
|
|
83
|
+
if (!declared) {
|
|
84
|
+
throw new IngestArtifactError(`This document declares no model ${model}. An ingest applies the ` +
|
|
85
|
+
"document's existing schema; declare the model through your app's " +
|
|
86
|
+
"models before bulk-loading it.");
|
|
87
|
+
}
|
|
88
|
+
let previous = null;
|
|
89
|
+
for (const source of entry.sources) {
|
|
90
|
+
for await (const line of readSource(source)) {
|
|
91
|
+
const parsed = checkIngestLine(line.where, model, line.text, declared);
|
|
92
|
+
entry.rows += 1;
|
|
93
|
+
if (parsed.deleted)
|
|
94
|
+
entry.deletes += 1;
|
|
95
|
+
if (previous !== null && compareRecordIds(parsed.id, previous) <= 0) {
|
|
96
|
+
entry.sorted = false;
|
|
97
|
+
if (input.presorted) {
|
|
98
|
+
// An export promises its chunks ascend in manifest order. One
|
|
99
|
+
// that does not is not an export this CLI can stream, and
|
|
100
|
+
// sorting it silently would hide a corrupted artifact.
|
|
101
|
+
throw new IngestArtifactError(`${line.where}: this export's chunks are not in ascending id ` +
|
|
102
|
+
`order (${parsed.id} follows ${previous}). Re-export the document.`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
previous = parsed.id;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// ── Pass 2: put each model in order and cut it into chunks ──
|
|
110
|
+
const chunks = [];
|
|
111
|
+
const summaries = [];
|
|
112
|
+
let sortRuns = 0;
|
|
113
|
+
let totalBytes = 0;
|
|
114
|
+
for (const [model, entry] of models) {
|
|
115
|
+
const cutter = new ChunkCutter({
|
|
116
|
+
model,
|
|
117
|
+
scratch,
|
|
118
|
+
cutRawBytes,
|
|
119
|
+
cutRows,
|
|
120
|
+
maxChunkBytes,
|
|
121
|
+
maxChunkRawBytes,
|
|
122
|
+
maxChunkRows,
|
|
123
|
+
});
|
|
124
|
+
if (entry.sorted) {
|
|
125
|
+
let previousId = null;
|
|
126
|
+
for (const source of entry.sources) {
|
|
127
|
+
for await (const line of readSource(source)) {
|
|
128
|
+
const parsed = parseIngestLine(line.where, line.text);
|
|
129
|
+
assertNoDuplicate(previousId, parsed, line.where);
|
|
130
|
+
previousId = parsed.id;
|
|
131
|
+
await cutter.push({ ...parsed, where: line.where });
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const sorted = await externalSort(entry.sources, scratch, runBytes);
|
|
137
|
+
sortRuns += sorted.runs;
|
|
138
|
+
let previous = null;
|
|
139
|
+
for (const line of sorted.lines()) {
|
|
140
|
+
if (previous && compareRecordIds(previous.id, line.id) === 0) {
|
|
141
|
+
throw new IngestArtifactError(`Duplicate record ${model} ${line.id}: ${previous.where} and ` +
|
|
142
|
+
`${line.where}. A model's artifact may name a record once.`);
|
|
143
|
+
}
|
|
144
|
+
previous = line;
|
|
145
|
+
await cutter.push(line);
|
|
146
|
+
}
|
|
147
|
+
sorted.discard();
|
|
148
|
+
}
|
|
149
|
+
const cut = await cutter.finish();
|
|
150
|
+
for (const chunk of cut) {
|
|
151
|
+
written.push(chunk.file);
|
|
152
|
+
totalBytes += chunk.bytes;
|
|
153
|
+
}
|
|
154
|
+
chunks.push(...cut);
|
|
155
|
+
summaries.push({
|
|
156
|
+
model,
|
|
157
|
+
rows: entry.rows,
|
|
158
|
+
chunks: cut.length,
|
|
159
|
+
bytes: cut.reduce((sum, chunk) => sum + chunk.bytes, 0),
|
|
160
|
+
rawBytes: cut.reduce((sum, chunk) => sum + chunk.rawBytes, 0),
|
|
161
|
+
deletes: entry.deletes,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (chunks.length > maxChunks) {
|
|
165
|
+
throw new IngestArtifactError(`This input cuts into ${chunks.length} chunks; one session may hold ` +
|
|
166
|
+
`${maxChunks}. Split it into several ingests.`);
|
|
167
|
+
}
|
|
168
|
+
if (totalBytes > maxTotalBytes) {
|
|
169
|
+
throw new IngestArtifactError(`This input stores ${totalBytes} bytes; one session may hold ` +
|
|
170
|
+
`${maxTotalBytes}. Split it into several ingests.`);
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
models: summaries,
|
|
174
|
+
chunks,
|
|
175
|
+
rows: summaries.reduce((sum, model) => sum + model.rows, 0),
|
|
176
|
+
bytes: totalBytes,
|
|
177
|
+
rawBytes: summaries.reduce((sum, model) => sum + model.rawBytes, 0),
|
|
178
|
+
deletes: summaries.reduce((sum, model) => sum + model.deletes, 0),
|
|
179
|
+
sortRuns,
|
|
180
|
+
cleanup,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
await cleanup();
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function assertNoDuplicate(previousId, parsed, where) {
|
|
189
|
+
if (previousId !== null && compareRecordIds(previousId, parsed.id) === 0) {
|
|
190
|
+
throw new IngestArtifactError(`Duplicate record ${parsed.id} at ${where}. A model's artifact may name ` +
|
|
191
|
+
"a record once.");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** Every non-empty line of one source, with `file:line` for each. */
|
|
195
|
+
async function* readSource(source) {
|
|
196
|
+
const stream = source.gzip
|
|
197
|
+
? fs.createReadStream(source.file).pipe(zlib.createGunzip())
|
|
198
|
+
: fs.createReadStream(source.file);
|
|
199
|
+
const lines = readline.createInterface({ input: stream, crlfDelay: Infinity });
|
|
200
|
+
let number = 0;
|
|
201
|
+
try {
|
|
202
|
+
for await (const text of lines) {
|
|
203
|
+
number += 1;
|
|
204
|
+
if (text.trim() === "")
|
|
205
|
+
continue;
|
|
206
|
+
yield { where: `${source.label}:${number}`, text };
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
finally {
|
|
210
|
+
lines.close();
|
|
211
|
+
stream.destroy?.();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/** One line's id and patch, whichever of the two forms it is written in. */
|
|
215
|
+
export function parseIngestLine(where, text) {
|
|
216
|
+
let id;
|
|
217
|
+
let patch;
|
|
218
|
+
if (text.startsWith("{")) {
|
|
219
|
+
// The convenience form: one JSON object per line, carrying its own `id`.
|
|
220
|
+
let parsed;
|
|
221
|
+
try {
|
|
222
|
+
parsed = JSON.parse(text);
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
throw new IngestArtifactError(`${where}: not JSON (${error.message})`);
|
|
226
|
+
}
|
|
227
|
+
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
228
|
+
throw new IngestArtifactError(`${where}: a line is a JSON object`);
|
|
229
|
+
}
|
|
230
|
+
if (typeof parsed.id !== "string" || parsed.id === "") {
|
|
231
|
+
throw new IngestArtifactError(`${where}: a line in the object form carries its record's \`id\``);
|
|
232
|
+
}
|
|
233
|
+
id = parsed.id;
|
|
234
|
+
patch = parsed;
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
// The artifact's own form: `⟨id⟩\t⟨merge patch⟩`.
|
|
238
|
+
const tab = text.indexOf("\t");
|
|
239
|
+
if (tab < 0) {
|
|
240
|
+
throw new IngestArtifactError(`${where}: a line is \`⟨id⟩⟨tab⟩⟨patch JSON⟩\`, or one JSON object carrying \`id\``);
|
|
241
|
+
}
|
|
242
|
+
id = text.slice(0, tab);
|
|
243
|
+
if (id === "") {
|
|
244
|
+
throw new IngestArtifactError(`${where}: the line's id is empty`);
|
|
245
|
+
}
|
|
246
|
+
try {
|
|
247
|
+
patch = JSON.parse(text.slice(tab + 1));
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
throw new IngestArtifactError(`${where}: the patch is not JSON (${error.message})`);
|
|
251
|
+
}
|
|
252
|
+
if (patch === null || typeof patch !== "object" || Array.isArray(patch)) {
|
|
253
|
+
throw new IngestArtifactError(`${where}: the patch is a JSON object`);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (id.includes("\t") || id.includes("\n")) {
|
|
257
|
+
throw new IngestArtifactError(`${where}: a record id carries no tab and no newline`);
|
|
258
|
+
}
|
|
259
|
+
return {
|
|
260
|
+
id,
|
|
261
|
+
patch: JSON.stringify(patch),
|
|
262
|
+
deleted: patch._deleted === true,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* One line, checked against the model's declaration.
|
|
267
|
+
*
|
|
268
|
+
* Every rule the server's `planLine` applies, applied here: a key the model
|
|
269
|
+
* does not declare, an array on a scalar field, a scalar on a stringset,
|
|
270
|
+
* `_deleted` beside anything else, or an `id` key that disagrees with the
|
|
271
|
+
* line's own id.
|
|
272
|
+
*/
|
|
273
|
+
export function checkIngestLine(where, model, text, declared) {
|
|
274
|
+
const parsed = parseIngestLine(where, text);
|
|
275
|
+
const patch = JSON.parse(parsed.patch);
|
|
276
|
+
const keys = Object.keys(patch);
|
|
277
|
+
if (Object.prototype.hasOwnProperty.call(patch, "_deleted")) {
|
|
278
|
+
if (patch._deleted !== true || keys.some((key) => key !== "_deleted" && key !== "id")) {
|
|
279
|
+
throw new IngestArtifactError(`${where}: \`_deleted\` deletes the record and may carry nothing beside it`);
|
|
280
|
+
}
|
|
281
|
+
return parsed;
|
|
282
|
+
}
|
|
283
|
+
for (const key of keys) {
|
|
284
|
+
const value = patch[key];
|
|
285
|
+
if (key === "id") {
|
|
286
|
+
if (value !== parsed.id) {
|
|
287
|
+
throw new IngestArtifactError(`${where}: its \`id\` says ${JSON.stringify(value)} and the line says ` +
|
|
288
|
+
`${JSON.stringify(parsed.id)}`);
|
|
289
|
+
}
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
if (declared.stringSets.has(key)) {
|
|
293
|
+
if (value === null)
|
|
294
|
+
continue;
|
|
295
|
+
if (!Array.isArray(value) || value.some((member) => typeof member !== "string")) {
|
|
296
|
+
throw new IngestArtifactError(`${where}: the stringset field ${key} takes an array of strings, ` +
|
|
297
|
+
"`[]` for an empty set, or `null` to unset it");
|
|
298
|
+
}
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (!declared.fields.has(key)) {
|
|
302
|
+
throw new IngestArtifactError(`${where}: the model ${model} does not declare the field ${key}`);
|
|
303
|
+
}
|
|
304
|
+
if (Array.isArray(value)) {
|
|
305
|
+
throw new IngestArtifactError(`${where}: the field ${key} is not a stringset and takes no array`);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return parsed;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* One model's lines in id order, buffered in runs of at most `runBytes`.
|
|
312
|
+
*
|
|
313
|
+
* A model that fits in one run never touches the disk. One that does not
|
|
314
|
+
* writes each sorted run out and merges them back k-way, so the peak cost is
|
|
315
|
+
* the run size plus one line per run whatever the input's size.
|
|
316
|
+
*/
|
|
317
|
+
async function externalSort(sources, scratch, runBytes) {
|
|
318
|
+
const runFiles = [];
|
|
319
|
+
let buffer = [];
|
|
320
|
+
let buffered = 0;
|
|
321
|
+
const flush = () => {
|
|
322
|
+
buffer.sort((left, right) => compareRecordIds(left.id, right.id));
|
|
323
|
+
const file = path.join(scratch, `run-${runFiles.length}.tsv`);
|
|
324
|
+
fs.writeFileSync(file, buffer.map((line) => `${line.id}\t${line.where}\t${line.patch}`).join("\n") + "\n");
|
|
325
|
+
runFiles.push(file);
|
|
326
|
+
buffer = [];
|
|
327
|
+
buffered = 0;
|
|
328
|
+
};
|
|
329
|
+
for (const source of sources) {
|
|
330
|
+
for await (const raw of readSource(source)) {
|
|
331
|
+
const parsed = parseIngestLine(raw.where, raw.text);
|
|
332
|
+
buffer.push({ ...parsed, where: raw.where });
|
|
333
|
+
buffered += parsed.id.length + parsed.patch.length + raw.where.length + 2;
|
|
334
|
+
if (buffered >= runBytes)
|
|
335
|
+
flush();
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
if (runFiles.length === 0) {
|
|
339
|
+
buffer.sort((left, right) => compareRecordIds(left.id, right.id));
|
|
340
|
+
const lines = buffer;
|
|
341
|
+
return { runs: 0, lines: () => lines, discard: () => { } };
|
|
342
|
+
}
|
|
343
|
+
if (buffer.length > 0)
|
|
344
|
+
flush();
|
|
345
|
+
const count = runFiles.length;
|
|
346
|
+
const discard = () => {
|
|
347
|
+
for (const file of runFiles)
|
|
348
|
+
fs.rmSync(file, { force: true });
|
|
349
|
+
};
|
|
350
|
+
function* merge() {
|
|
351
|
+
// One line of each run at a time and nothing more: the whole point of
|
|
352
|
+
// spilling was not to hold the model in memory, and a merge that read its
|
|
353
|
+
// runs back whole would have given that away again.
|
|
354
|
+
const readers = runFiles.map((file) => new RunReader(file));
|
|
355
|
+
const heads = readers.map((reader) => reader.next());
|
|
356
|
+
try {
|
|
357
|
+
for (;;) {
|
|
358
|
+
let best = -1;
|
|
359
|
+
for (let run = 0; run < heads.length; run++) {
|
|
360
|
+
if (!heads[run])
|
|
361
|
+
continue;
|
|
362
|
+
if (best < 0 || compareRecordIds(heads[run].id, heads[best].id) < 0) {
|
|
363
|
+
best = run;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (best < 0)
|
|
367
|
+
return;
|
|
368
|
+
const line = heads[best];
|
|
369
|
+
heads[best] = readers[best].next();
|
|
370
|
+
yield line;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
finally {
|
|
374
|
+
for (const reader of readers)
|
|
375
|
+
reader.close();
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
return { runs: count, lines: merge, discard };
|
|
379
|
+
}
|
|
380
|
+
/** One sorted run, read back a line at a time. */
|
|
381
|
+
class RunReader {
|
|
382
|
+
fd;
|
|
383
|
+
buffer = "";
|
|
384
|
+
done = false;
|
|
385
|
+
scratch = Buffer.alloc(64 * 1024);
|
|
386
|
+
// A read boundary can land inside a multi-byte character, and an id or a
|
|
387
|
+
// patch carrying one would come back corrupted from a naive toString.
|
|
388
|
+
decoder = new StringDecoder("utf8");
|
|
389
|
+
constructor(file) {
|
|
390
|
+
this.fd = fs.openSync(file, "r");
|
|
391
|
+
}
|
|
392
|
+
next() {
|
|
393
|
+
for (;;) {
|
|
394
|
+
const newline = this.buffer.indexOf("\n");
|
|
395
|
+
if (newline >= 0) {
|
|
396
|
+
const text = this.buffer.slice(0, newline);
|
|
397
|
+
this.buffer = this.buffer.slice(newline + 1);
|
|
398
|
+
if (text === "")
|
|
399
|
+
continue;
|
|
400
|
+
const first = text.indexOf("\t");
|
|
401
|
+
const second = text.indexOf("\t", first + 1);
|
|
402
|
+
return {
|
|
403
|
+
id: text.slice(0, first),
|
|
404
|
+
where: text.slice(first + 1, second),
|
|
405
|
+
patch: text.slice(second + 1),
|
|
406
|
+
deleted: false,
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
if (this.done)
|
|
410
|
+
return null;
|
|
411
|
+
const read = fs.readSync(this.fd, this.scratch, 0, this.scratch.length, null);
|
|
412
|
+
if (read === 0) {
|
|
413
|
+
this.done = true;
|
|
414
|
+
if (this.buffer === "")
|
|
415
|
+
return null;
|
|
416
|
+
this.buffer += "\n";
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
this.buffer += this.decoder.write(this.scratch.subarray(0, read));
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
close() {
|
|
423
|
+
try {
|
|
424
|
+
fs.closeSync(this.fd);
|
|
425
|
+
}
|
|
426
|
+
catch {
|
|
427
|
+
/* already closed */
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// ── Cutting ──────────────────────────────────────────────────────────
|
|
432
|
+
/** Accumulates one model's lines and writes chunks as the bounds are met. */
|
|
433
|
+
class ChunkCutter {
|
|
434
|
+
options;
|
|
435
|
+
buffer = [];
|
|
436
|
+
rawBytes = 0;
|
|
437
|
+
out = [];
|
|
438
|
+
constructor(options) {
|
|
439
|
+
this.options = options;
|
|
440
|
+
}
|
|
441
|
+
async push(line) {
|
|
442
|
+
const size = Buffer.byteLength(`${line.id}\t${line.patch}\n`, "utf8");
|
|
443
|
+
if (size > this.options.maxChunkRawBytes) {
|
|
444
|
+
throw new IngestArtifactError(`${line.where}: this line is ${size} bytes and a chunk may carry ` +
|
|
445
|
+
`${this.options.maxChunkRawBytes}. One record cannot be split across chunks.`);
|
|
446
|
+
}
|
|
447
|
+
if (this.buffer.length > 0 &&
|
|
448
|
+
(this.rawBytes + size > this.options.cutRawBytes ||
|
|
449
|
+
this.buffer.length >= this.options.cutRows ||
|
|
450
|
+
this.buffer.length >= this.options.maxChunkRows)) {
|
|
451
|
+
await this.flush();
|
|
452
|
+
}
|
|
453
|
+
this.buffer.push(line);
|
|
454
|
+
this.rawBytes += size;
|
|
455
|
+
}
|
|
456
|
+
async finish() {
|
|
457
|
+
if (this.buffer.length > 0)
|
|
458
|
+
await this.flush();
|
|
459
|
+
return this.out;
|
|
460
|
+
}
|
|
461
|
+
async flush() {
|
|
462
|
+
const lines = this.buffer;
|
|
463
|
+
this.buffer = [];
|
|
464
|
+
this.rawBytes = 0;
|
|
465
|
+
await this.write(lines);
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Write one chunk, halving it when the STORED size passes the limit.
|
|
469
|
+
*
|
|
470
|
+
* The raw bound is what the cut aims at; gzip decides the stored size, and
|
|
471
|
+
* an incompressible run can pass the stored limit while sitting well inside
|
|
472
|
+
* the raw one. A single line that cannot be made to fit is refused rather
|
|
473
|
+
* than uploaded to be refused.
|
|
474
|
+
*/
|
|
475
|
+
async write(lines) {
|
|
476
|
+
const text = lines.map((line) => `${line.id}\t${line.patch}`).join("\n") + "\n";
|
|
477
|
+
const raw = Buffer.from(text, "utf8");
|
|
478
|
+
const body = zlib.gzipSync(raw, { level: 9 });
|
|
479
|
+
if (body.byteLength > this.options.maxChunkBytes && lines.length > 1) {
|
|
480
|
+
const half = Math.ceil(lines.length / 2);
|
|
481
|
+
await this.write(lines.slice(0, half));
|
|
482
|
+
await this.write(lines.slice(half));
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
if (body.byteLength > this.options.maxChunkBytes) {
|
|
486
|
+
throw new IngestArtifactError(`${lines[0].where}: this record stores as ${body.byteLength} bytes and ` +
|
|
487
|
+
`a chunk may carry ${this.options.maxChunkBytes}.`);
|
|
488
|
+
}
|
|
489
|
+
const index = this.out.length;
|
|
490
|
+
const file = path.join(this.options.scratch, `${this.options.model}-${index}.ndjson.gz`);
|
|
491
|
+
fs.writeFileSync(file, body);
|
|
492
|
+
this.out.push({
|
|
493
|
+
model: this.options.model,
|
|
494
|
+
index,
|
|
495
|
+
rows: lines.length,
|
|
496
|
+
bytes: body.byteLength,
|
|
497
|
+
rawBytes: raw.byteLength,
|
|
498
|
+
sha256: createHash("sha256").update(body).digest("hex"),
|
|
499
|
+
firstId: lines[0].id,
|
|
500
|
+
lastId: lines[lines.length - 1].id,
|
|
501
|
+
file,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
//# sourceMappingURL=document-ingest-artifact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-ingest-artifact.js","sourceRoot":"","sources":["../../../src/lib/document-ingest-artifact.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which files `primitive documents ingest` reads, and in which order.
|
|
3
|
+
*
|
|
4
|
+
* Two layouts, and the directory itself says which one it is:
|
|
5
|
+
*
|
|
6
|
+
* - **plain** — `<dir>/<model>.ndjson` or `<model>.ndjson.gz`, one record per
|
|
7
|
+
* line. Nothing on disk promises the lines ascend, so they are sorted.
|
|
8
|
+
* - **export** — what `primitive documents export` wrote: a
|
|
9
|
+
* `snapshot/manifest.json` and its chunks, at the directory itself or under
|
|
10
|
+
* `documents/<document-id>/`. A snapshot's chunks ascend and are disjoint
|
|
11
|
+
* per model in manifest order, so an export needs no sort — it is read in
|
|
12
|
+
* that order and streamed straight through.
|
|
13
|
+
*
|
|
14
|
+
* A directory that is neither, or that is both, is refused naming what it
|
|
15
|
+
* held. Every refusal here happens before a session exists: an ingest replaces
|
|
16
|
+
* a live document's tables, and half of one is not something to discover from
|
|
17
|
+
* the server's side.
|
|
18
|
+
*/
|
|
19
|
+
/** A directory that is not an ingest input, said as what was found. */
|
|
20
|
+
export declare class IngestInputError extends Error {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
23
|
+
/** One file of lines, and the model they belong to. */
|
|
24
|
+
export interface IngestSource {
|
|
25
|
+
model: string;
|
|
26
|
+
/** Absolute path on disk. */
|
|
27
|
+
file: string;
|
|
28
|
+
gzip: boolean;
|
|
29
|
+
/** What a `file:line` message calls it: relative to the input root. */
|
|
30
|
+
label: string;
|
|
31
|
+
}
|
|
32
|
+
/** What the input directory holds. */
|
|
33
|
+
export interface DiscoveredIngestInput {
|
|
34
|
+
layout: "plain" | "export";
|
|
35
|
+
/** The directory the sources are relative to. */
|
|
36
|
+
root: string;
|
|
37
|
+
/** In read order: manifest order for an export, model order for plain. */
|
|
38
|
+
sources: IngestSource[];
|
|
39
|
+
/** Parts of an export an ingest has no use for, named once on stderr. */
|
|
40
|
+
ignored: string[];
|
|
41
|
+
/** True when the read order is already ascending per model. */
|
|
42
|
+
presorted: boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Decide what `dir` is and list the files to read, in order.
|
|
46
|
+
*
|
|
47
|
+
* `documentId` matters only for the export layout: an export directory may
|
|
48
|
+
* hold several documents, and re-ingesting one document's rows into another
|
|
49
|
+
* is not a thing to guess at.
|
|
50
|
+
*/
|
|
51
|
+
export declare function discoverIngestInput(dir: string, documentId: string): DiscoveredIngestInput;
|