@weave-kit/engine 0.5.0 → 0.6.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/CHANGELOG.md +61 -0
- package/README.md +6 -6
- package/dist/adapters/auth/index.d.ts +4 -2
- package/dist/adapters/auth/index.d.ts.map +1 -1
- package/dist/adapters/auth/index.js +1 -0
- package/dist/adapters/auth/index.js.map +1 -1
- package/dist/adapters/auth/source.d.ts +4 -4
- package/dist/adapters/auth/source.d.ts.map +1 -1
- package/dist/adapters/auth/subject.d.ts +22 -0
- package/dist/adapters/auth/subject.d.ts.map +1 -0
- package/dist/adapters/auth/subject.js +42 -0
- package/dist/adapters/auth/subject.js.map +1 -0
- package/dist/adapters/auth/verify.d.ts +12 -0
- package/dist/adapters/auth/verify.d.ts.map +1 -0
- package/dist/adapters/auth/verify.js +2 -0
- package/dist/adapters/auth/verify.js.map +1 -0
- package/dist/adapters/events/index.d.ts +2 -1
- package/dist/adapters/events/index.d.ts.map +1 -1
- package/dist/adapters/events/index.js +2 -1
- package/dist/adapters/events/index.js.map +1 -1
- package/dist/adapters/mcp/generate.d.ts +3 -3
- package/dist/adapters/mcp/generate.d.ts.map +1 -1
- package/dist/adapters/mcp/generate.js +34 -11
- package/dist/adapters/mcp/generate.js.map +1 -1
- package/dist/adapters/mcp/guardrails.d.ts +1 -1
- package/dist/adapters/mcp/http.d.ts +3 -1
- package/dist/adapters/mcp/http.d.ts.map +1 -1
- package/dist/adapters/mcp/http.js +2 -2
- package/dist/adapters/mcp/http.js.map +1 -1
- package/dist/adapters/mcp/index.d.ts +13 -4
- package/dist/adapters/mcp/index.d.ts.map +1 -1
- package/dist/adapters/mcp/index.js +12 -8
- package/dist/adapters/mcp/index.js.map +1 -1
- package/dist/adapters/mcp/session.d.ts +5 -5
- package/dist/adapters/mcp/session.d.ts.map +1 -1
- package/dist/adapters/mcp/tools.d.ts +6 -0
- package/dist/adapters/mcp/tools.d.ts.map +1 -1
- package/dist/adapters/mcp/tools.js +38 -14
- package/dist/adapters/mcp/tools.js.map +1 -1
- package/dist/adapters/mcp/types.d.ts +3 -1
- package/dist/adapters/mcp/types.d.ts.map +1 -1
- package/dist/adapters/mcp/types.js +1 -1
- package/dist/adapters/mcp/types.js.map +1 -1
- package/dist/adapters/openapi/document.d.ts.map +1 -1
- package/dist/adapters/openapi/document.js +72 -2
- package/dist/adapters/openapi/document.js.map +1 -1
- package/dist/adapters/openapi/schema.d.ts.map +1 -1
- package/dist/adapters/openapi/schema.js +40 -4
- package/dist/adapters/openapi/schema.js.map +1 -1
- package/dist/adapters/openapi/types.d.ts +1 -0
- package/dist/adapters/openapi/types.d.ts.map +1 -1
- package/dist/adapters/openapi/types.js +2 -0
- package/dist/adapters/openapi/types.js.map +1 -1
- package/dist/adapters/rest/approvals.d.ts +2 -2
- package/dist/adapters/rest/approvals.js +2 -2
- package/dist/adapters/rest/audit.d.ts +2 -2
- package/dist/adapters/rest/audit.js +2 -2
- package/dist/adapters/rest/common.d.ts +3 -3
- package/dist/adapters/rest/common.d.ts.map +1 -1
- package/dist/adapters/rest/common.js +1 -1
- package/dist/adapters/rest/guardrails.d.ts +1 -1
- package/dist/adapters/rest/guardrails.js +1 -1
- package/dist/adapters/rest/identities.d.ts +4 -4
- package/dist/adapters/rest/identities.d.ts.map +1 -1
- package/dist/adapters/rest/identities.js +3 -3
- package/dist/adapters/rest/identities.js.map +1 -1
- package/dist/adapters/rest/identityAdmin.d.ts +18 -0
- package/dist/adapters/rest/identityAdmin.d.ts.map +1 -0
- package/dist/adapters/rest/identityAdmin.js +58 -0
- package/dist/adapters/rest/identityAdmin.js.map +1 -0
- package/dist/adapters/rest/index.d.ts +4 -0
- package/dist/adapters/rest/index.d.ts.map +1 -1
- package/dist/adapters/rest/index.js +3 -0
- package/dist/adapters/rest/index.js.map +1 -1
- package/dist/adapters/rest/metadata.d.ts +1 -1
- package/dist/adapters/rest/metadata.js +1 -1
- package/dist/adapters/rest/pages.d.ts +1 -1
- package/dist/adapters/rest/pages.d.ts.map +1 -1
- package/dist/adapters/rest/permissions.d.ts +1 -1
- package/dist/adapters/rest/permissions.js +1 -1
- package/dist/adapters/rest/plugin.d.ts +2 -2
- package/dist/adapters/rest/plugin.d.ts.map +1 -1
- package/dist/adapters/rest/schemas.d.ts +1 -1
- package/dist/adapters/rest/schemas.d.ts.map +1 -1
- package/dist/adapters/rest/workflow.d.ts +15 -0
- package/dist/adapters/rest/workflow.d.ts.map +1 -0
- package/dist/adapters/rest/workflow.js +89 -0
- package/dist/adapters/rest/workflow.js.map +1 -0
- package/dist/adapters/rest/workflowSource.d.ts +15 -0
- package/dist/adapters/rest/workflowSource.d.ts.map +1 -0
- package/dist/adapters/rest/workflowSource.js +63 -0
- package/dist/adapters/rest/workflowSource.js.map +1 -0
- package/dist/cli/commands/build.js +1 -1
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/connect.d.ts +1 -1
- package/dist/cli/commands/default-view.d.ts +2 -2
- package/dist/cli/commands/default-view.js +2 -2
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +18 -9
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/identity.d.ts +15 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +115 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/introspect.d.ts.map +1 -1
- package/dist/cli/commands/introspect.js +23 -0
- package/dist/cli/commands/introspect.js.map +1 -1
- package/dist/cli/commands/mcp-config.js +1 -1
- package/dist/cli/commands/mcp-config.js.map +1 -1
- package/dist/cli/commands/migrate.js +2 -2
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/module.d.ts +2 -2
- package/dist/cli/commands/module.d.ts.map +1 -1
- package/dist/cli/commands/module.js +2 -2
- package/dist/cli/commands/module.js.map +1 -1
- package/dist/cli/commands/object-create.d.ts.map +1 -1
- package/dist/cli/commands/object-create.js +15 -15
- package/dist/cli/commands/object-create.js.map +1 -1
- package/dist/cli/commands/workflow-close.d.ts +9 -0
- package/dist/cli/commands/workflow-close.d.ts.map +1 -0
- package/dist/cli/commands/workflow-close.js +48 -0
- package/dist/cli/commands/workflow-close.js.map +1 -0
- package/dist/cli/commands/workflow-migrate.d.ts +11 -0
- package/dist/cli/commands/workflow-migrate.d.ts.map +1 -0
- package/dist/cli/commands/workflow-migrate.js +120 -0
- package/dist/cli/commands/workflow-migrate.js.map +1 -0
- package/dist/cli/commands/workflow-open.d.ts +10 -0
- package/dist/cli/commands/workflow-open.d.ts.map +1 -0
- package/dist/cli/commands/workflow-open.js +112 -0
- package/dist/cli/commands/workflow-open.js.map +1 -0
- package/dist/cli/commands/workflow-starter.d.ts +10 -0
- package/dist/cli/commands/workflow-starter.d.ts.map +1 -0
- package/dist/cli/commands/workflow-starter.js +29 -0
- package/dist/cli/commands/workflow-starter.js.map +1 -0
- package/dist/cli/commands/workflow-switch.d.ts +10 -0
- package/dist/cli/commands/workflow-switch.d.ts.map +1 -0
- package/dist/cli/commands/workflow-switch.js +60 -0
- package/dist/cli/commands/workflow-switch.js.map +1 -0
- package/dist/cli/commands/workflow-upgrade.d.ts +12 -0
- package/dist/cli/commands/workflow-upgrade.d.ts.map +1 -0
- package/dist/cli/commands/workflow-upgrade.js +116 -0
- package/dist/cli/commands/workflow-upgrade.js.map +1 -0
- package/dist/cli/index.js +72 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/project-types/manifest.d.ts +25 -0
- package/dist/cli/project-types/manifest.d.ts.map +1 -0
- package/dist/cli/project-types/manifest.js +40 -0
- package/dist/cli/project-types/manifest.js.map +1 -0
- package/dist/cli/ready-screen.js +1 -1
- package/dist/cli/ready-screen.js.map +1 -1
- package/dist/cli/scaffold.d.ts.map +1 -1
- package/dist/cli/scaffold.js +21 -34
- package/dist/cli/scaffold.js.map +1 -1
- package/dist/cli/types/commands.d.ts +46 -0
- package/dist/cli/types/commands.d.ts.map +1 -1
- package/dist/cli/types/index.d.ts +1 -1
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/types/values.d.ts +9 -0
- package/dist/cli/types/values.d.ts.map +1 -1
- package/dist/cli/types/values.js +9 -0
- package/dist/cli/types/values.js.map +1 -1
- package/dist/core/api/error.d.ts.map +1 -1
- package/dist/core/api/error.js +7 -4
- package/dist/core/api/error.js.map +1 -1
- package/dist/core/audit/types.d.ts +4 -2
- package/dist/core/audit/types.d.ts.map +1 -1
- package/dist/core/audit/types.js +2 -0
- package/dist/core/audit/types.js.map +1 -1
- package/dist/core/formula/validate.d.ts.map +1 -1
- package/dist/core/formula/validate.js +6 -0
- package/dist/core/formula/validate.js.map +1 -1
- package/dist/core/i18n/ar.d.ts.map +1 -1
- package/dist/core/i18n/ar.js +37 -3
- package/dist/core/i18n/ar.js.map +1 -1
- package/dist/core/i18n/de.d.ts.map +1 -1
- package/dist/core/i18n/de.js +37 -3
- package/dist/core/i18n/de.js.map +1 -1
- package/dist/core/i18n/en.d.ts +38 -4
- package/dist/core/i18n/en.d.ts.map +1 -1
- package/dist/core/i18n/en.js +38 -4
- package/dist/core/i18n/en.js.map +1 -1
- package/dist/core/i18n/es.d.ts.map +1 -1
- package/dist/core/i18n/es.js +37 -3
- package/dist/core/i18n/es.js.map +1 -1
- package/dist/core/i18n/fr.d.ts.map +1 -1
- package/dist/core/i18n/fr.js +37 -3
- package/dist/core/i18n/fr.js.map +1 -1
- package/dist/core/i18n/hi.d.ts.map +1 -1
- package/dist/core/i18n/hi.js +37 -3
- package/dist/core/i18n/hi.js.map +1 -1
- package/dist/core/i18n/id.d.ts.map +1 -1
- package/dist/core/i18n/id.js +37 -3
- package/dist/core/i18n/id.js.map +1 -1
- package/dist/core/i18n/ja.d.ts.map +1 -1
- package/dist/core/i18n/ja.js +37 -3
- package/dist/core/i18n/ja.js.map +1 -1
- package/dist/core/i18n/ko.d.ts.map +1 -1
- package/dist/core/i18n/ko.js +37 -3
- package/dist/core/i18n/ko.js.map +1 -1
- package/dist/core/i18n/pt.d.ts.map +1 -1
- package/dist/core/i18n/pt.js +37 -3
- package/dist/core/i18n/pt.js.map +1 -1
- package/dist/core/i18n/ru.d.ts.map +1 -1
- package/dist/core/i18n/ru.js +37 -3
- package/dist/core/i18n/ru.js.map +1 -1
- package/dist/core/i18n/vi.d.ts.map +1 -1
- package/dist/core/i18n/vi.js +37 -3
- package/dist/core/i18n/vi.js.map +1 -1
- package/dist/core/i18n/zh-hant.d.ts.map +1 -1
- package/dist/core/i18n/zh-hant.js +37 -3
- package/dist/core/i18n/zh-hant.js.map +1 -1
- package/dist/core/i18n/zh.d.ts.map +1 -1
- package/dist/core/i18n/zh.js +38 -4
- package/dist/core/i18n/zh.js.map +1 -1
- package/dist/core/object/describe.d.ts +34 -3
- package/dist/core/object/describe.d.ts.map +1 -1
- package/dist/core/object/describe.js +48 -8
- package/dist/core/object/describe.js.map +1 -1
- package/dist/core/object/gen-types.d.ts.map +1 -1
- package/dist/core/object/gen-types.js +12 -1
- package/dist/core/object/gen-types.js.map +1 -1
- package/dist/core/object/graph.d.ts.map +1 -1
- package/dist/core/object/graph.js +52 -22
- package/dist/core/object/graph.js.map +1 -1
- package/dist/core/object/index.d.ts +5 -1
- package/dist/core/object/index.d.ts.map +1 -1
- package/dist/core/object/index.js +5 -1
- package/dist/core/object/index.js.map +1 -1
- package/dist/core/object/migrations.d.ts.map +1 -1
- package/dist/core/object/migrations.js +39 -0
- package/dist/core/object/migrations.js.map +1 -1
- package/dist/core/object/parse.d.ts +7 -0
- package/dist/core/object/parse.d.ts.map +1 -1
- package/dist/core/object/parse.js +32 -1
- package/dist/core/object/parse.js.map +1 -1
- package/dist/core/object/record-key.d.ts +19 -0
- package/dist/core/object/record-key.d.ts.map +1 -0
- package/dist/core/object/record-key.js +100 -0
- package/dist/core/object/record-key.js.map +1 -0
- package/dist/core/object/schema-version.d.ts +1 -1
- package/dist/core/object/schema-version.js +1 -1
- package/dist/core/object/system-objects.d.ts +16 -0
- package/dist/core/object/system-objects.d.ts.map +1 -0
- package/dist/core/object/system-objects.js +72 -0
- package/dist/core/object/system-objects.js.map +1 -0
- package/dist/core/object/validate/field.d.ts.map +1 -1
- package/dist/core/object/validate/field.js +235 -35
- package/dist/core/object/validate/field.js.map +1 -1
- package/dist/core/object/validate/formulas.d.ts.map +1 -1
- package/dist/core/object/validate/formulas.js +6 -0
- package/dist/core/object/validate/formulas.js.map +1 -1
- package/dist/core/object/validate/object.d.ts +2 -0
- package/dist/core/object/validate/object.d.ts.map +1 -1
- package/dist/core/object/validate/object.js +51 -19
- package/dist/core/object/validate/object.js.map +1 -1
- package/dist/core/object/validate/permissions.d.ts.map +1 -1
- package/dist/core/object/validate/permissions.js +4 -0
- package/dist/core/object/validate/permissions.js.map +1 -1
- package/dist/core/object/validate/primitives.d.ts +0 -1
- package/dist/core/object/validate/primitives.d.ts.map +1 -1
- package/dist/core/object/validate/primitives.js +1 -2
- package/dist/core/object/validate/primitives.js.map +1 -1
- package/dist/core/object/validate/workflow.d.ts +10 -0
- package/dist/core/object/validate/workflow.d.ts.map +1 -0
- package/dist/core/object/validate/workflow.js +143 -0
- package/dist/core/object/validate/workflow.js.map +1 -0
- package/dist/core/object/workflow-hash.d.ts +10 -0
- package/dist/core/object/workflow-hash.d.ts.map +1 -0
- package/dist/core/object/workflow-hash.js +27 -0
- package/dist/core/object/workflow-hash.js.map +1 -0
- package/dist/core/object/workflow-migrations.d.ts +27 -0
- package/dist/core/object/workflow-migrations.d.ts.map +1 -0
- package/dist/core/object/workflow-migrations.js +125 -0
- package/dist/core/object/workflow-migrations.js.map +1 -0
- package/dist/core/provider/event/index.d.ts +1 -1
- package/dist/core/provider/event/index.d.ts.map +1 -1
- package/dist/core/provider/event/index.js.map +1 -1
- package/dist/core/provider/event/types.d.ts +17 -2
- package/dist/core/provider/event/types.d.ts.map +1 -1
- package/dist/core/provider/event/types.js +2 -1
- package/dist/core/provider/event/types.js.map +1 -1
- package/dist/core/provider/identity/directory.d.ts +90 -0
- package/dist/core/provider/identity/directory.d.ts.map +1 -0
- package/dist/core/provider/identity/directory.js +3 -0
- package/dist/core/provider/identity/directory.js.map +1 -0
- package/dist/core/provider/identity/index.d.ts +5 -1
- package/dist/core/provider/identity/index.d.ts.map +1 -1
- package/dist/core/provider/identity/index.js +2 -1
- package/dist/core/provider/identity/index.js.map +1 -1
- package/dist/core/provider/identity/source.d.ts +22 -0
- package/dist/core/provider/identity/source.d.ts.map +1 -0
- package/dist/core/provider/identity/source.js +3 -0
- package/dist/core/provider/identity/source.js.map +1 -0
- package/dist/core/provider/identity/types.d.ts +62 -7
- package/dist/core/provider/identity/types.d.ts.map +1 -1
- package/dist/core/provider/identity/types.js +13 -0
- package/dist/core/provider/identity/types.js.map +1 -1
- package/dist/core/proxy/types.d.ts +4 -4
- package/dist/core/proxy/types.d.ts.map +1 -1
- package/dist/core/rbac/authorize.d.ts +10 -9
- package/dist/core/rbac/authorize.d.ts.map +1 -1
- package/dist/core/rbac/authorize.js +23 -18
- package/dist/core/rbac/authorize.js.map +1 -1
- package/dist/core/rbac/details.d.ts +33 -0
- package/dist/core/rbac/details.d.ts.map +1 -0
- package/dist/core/rbac/details.js +74 -0
- package/dist/core/rbac/details.js.map +1 -0
- package/dist/core/rbac/fields.d.ts +2 -1
- package/dist/core/rbac/fields.d.ts.map +1 -1
- package/dist/core/rbac/fields.js +3 -2
- package/dist/core/rbac/fields.js.map +1 -1
- package/dist/core/rbac/index.d.ts +3 -2
- package/dist/core/rbac/index.d.ts.map +1 -1
- package/dist/core/rbac/index.js +2 -1
- package/dist/core/rbac/index.js.map +1 -1
- package/dist/core/rbac/resolve.d.ts +3 -1
- package/dist/core/rbac/resolve.d.ts.map +1 -1
- package/dist/core/rbac/resolve.js +17 -9
- package/dist/core/rbac/resolve.js.map +1 -1
- package/dist/core/rbac/rls.d.ts +6 -0
- package/dist/core/rbac/rls.d.ts.map +1 -1
- package/dist/core/rbac/rls.js +52 -7
- package/dist/core/rbac/rls.js.map +1 -1
- package/dist/core/rbac/rowScope.d.ts +13 -6
- package/dist/core/rbac/rowScope.d.ts.map +1 -1
- package/dist/core/rbac/rowScope.js +88 -16
- package/dist/core/rbac/rowScope.js.map +1 -1
- package/dist/core/rbac/types.d.ts +6 -7
- package/dist/core/rbac/types.d.ts.map +1 -1
- package/dist/core/script/types.d.ts +1 -1
- package/dist/core/script/types.d.ts.map +1 -1
- package/dist/core/storage/diff.d.ts +4 -2
- package/dist/core/storage/diff.d.ts.map +1 -1
- package/dist/core/storage/diff.js +20 -17
- package/dist/core/storage/diff.js.map +1 -1
- package/dist/core/storage/index.d.ts +7 -1
- package/dist/core/storage/index.d.ts.map +1 -1
- package/dist/core/storage/index.js +6 -1
- package/dist/core/storage/index.js.map +1 -1
- package/dist/core/storage/inspect.d.ts +12 -3
- package/dist/core/storage/inspect.d.ts.map +1 -1
- package/dist/core/storage/inspect.js +39 -22
- package/dist/core/storage/inspect.js.map +1 -1
- package/dist/core/storage/introspect.d.ts +9 -2
- package/dist/core/storage/introspect.d.ts.map +1 -1
- package/dist/core/storage/introspect.js +100 -43
- package/dist/core/storage/introspect.js.map +1 -1
- package/dist/core/storage/link-table.d.ts +47 -0
- package/dist/core/storage/link-table.d.ts.map +1 -0
- package/dist/core/storage/link-table.js +110 -0
- package/dist/core/storage/link-table.js.map +1 -0
- package/dist/core/storage/map.d.ts.map +1 -1
- package/dist/core/storage/map.js +135 -81
- package/dist/core/storage/map.js.map +1 -1
- package/dist/core/storage/meta.d.ts +6 -3
- package/dist/core/storage/meta.d.ts.map +1 -1
- package/dist/core/storage/meta.js +9 -5
- package/dist/core/storage/meta.js.map +1 -1
- package/dist/core/storage/migrate.d.ts.map +1 -1
- package/dist/core/storage/migrate.js +144 -11
- package/dist/core/storage/migrate.js.map +1 -1
- package/dist/core/storage/record-key-sql.d.ts +19 -0
- package/dist/core/storage/record-key-sql.d.ts.map +1 -0
- package/dist/core/storage/record-key-sql.js +43 -0
- package/dist/core/storage/record-key-sql.js.map +1 -0
- package/dist/core/storage/record-meta.d.ts +68 -0
- package/dist/core/storage/record-meta.d.ts.map +1 -0
- package/dist/core/storage/record-meta.js +108 -0
- package/dist/core/storage/record-meta.js.map +1 -0
- package/dist/core/storage/report.d.ts.map +1 -1
- package/dist/core/storage/report.js +17 -7
- package/dist/core/storage/report.js.map +1 -1
- package/dist/core/storage/sql-literals.d.ts +9 -0
- package/dist/core/storage/sql-literals.d.ts.map +1 -0
- package/dist/core/storage/sql-literals.js +13 -0
- package/dist/core/storage/sql-literals.js.map +1 -0
- package/dist/core/storage/system-tables.d.ts +44 -0
- package/dist/core/storage/system-tables.d.ts.map +1 -0
- package/dist/core/storage/system-tables.js +268 -0
- package/dist/core/storage/system-tables.js.map +1 -0
- package/dist/core/tools/policies.d.ts +2 -2
- package/dist/core/tools/policies.js +2 -2
- package/dist/core/tools/types.d.ts +6 -6
- package/dist/core/tools/types.d.ts.map +1 -1
- package/dist/core/tools/values.d.ts +5 -0
- package/dist/core/tools/values.d.ts.map +1 -1
- package/dist/core/tools/values.js +9 -1
- package/dist/core/tools/values.js.map +1 -1
- package/dist/core/types/currency.d.ts +9 -0
- package/dist/core/types/currency.d.ts.map +1 -0
- package/dist/core/types/currency.js +28 -0
- package/dist/core/types/currency.js.map +1 -0
- package/dist/core/types/field-type.d.ts +4 -1
- package/dist/core/types/field-type.d.ts.map +1 -1
- package/dist/core/types/fields.d.ts +105 -19
- package/dist/core/types/fields.d.ts.map +1 -1
- package/dist/core/types/index.d.ts +8 -6
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +4 -3
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/types/object.d.ts +18 -1
- package/dist/core/types/object.d.ts.map +1 -1
- package/dist/core/types/permission.d.ts +5 -0
- package/dist/core/types/permission.d.ts.map +1 -1
- package/dist/core/types/primaryField.d.ts +6 -1
- package/dist/core/types/primaryField.d.ts.map +1 -1
- package/dist/core/types/primaryField.js +8 -1
- package/dist/core/types/primaryField.js.map +1 -1
- package/dist/core/types/registry.d.ts +6 -4
- package/dist/core/types/registry.d.ts.map +1 -1
- package/dist/core/types/registry.js +40 -30
- package/dist/core/types/registry.js.map +1 -1
- package/dist/core/types/values.d.ts +97 -27
- package/dist/core/types/values.d.ts.map +1 -1
- package/dist/core/types/values.js +64 -29
- package/dist/core/types/values.js.map +1 -1
- package/dist/core/types/workflow.d.ts +140 -0
- package/dist/core/types/workflow.d.ts.map +1 -0
- package/dist/core/types/workflow.js +49 -0
- package/dist/core/types/workflow.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/event/bus.d.ts.map +1 -1
- package/dist/infrastructure/event/bus.js +14 -0
- package/dist/infrastructure/event/bus.js.map +1 -1
- package/dist/infrastructure/identity.d.ts +2 -2
- package/dist/infrastructure/identity.d.ts.map +1 -1
- package/dist/infrastructure/identity.js.map +1 -1
- package/dist/layout-format.d.ts +6 -6
- package/dist/layout-format.js +4 -4
- package/dist/runtime/data-access/builder.d.ts +15 -5
- package/dist/runtime/data-access/builder.d.ts.map +1 -1
- package/dist/runtime/data-access/builder.js +222 -30
- package/dist/runtime/data-access/builder.js.map +1 -1
- package/dist/runtime/data-access/details.d.ts.map +1 -1
- package/dist/runtime/data-access/details.js +7 -2
- package/dist/runtime/data-access/details.js.map +1 -1
- package/dist/runtime/data-access/formula.d.ts +11 -3
- package/dist/runtime/data-access/formula.d.ts.map +1 -1
- package/dist/runtime/data-access/formula.js +82 -19
- package/dist/runtime/data-access/formula.js.map +1 -1
- package/dist/runtime/data-access/index.d.ts +1 -1
- package/dist/runtime/data-access/index.d.ts.map +1 -1
- package/dist/runtime/data-access/index.js +1 -1
- package/dist/runtime/data-access/index.js.map +1 -1
- package/dist/runtime/data-access/link.d.ts +7 -0
- package/dist/runtime/data-access/link.d.ts.map +1 -0
- package/dist/runtime/data-access/link.js +80 -0
- package/dist/runtime/data-access/link.js.map +1 -0
- package/dist/runtime/data-access/query.d.ts +48 -3
- package/dist/runtime/data-access/query.d.ts.map +1 -1
- package/dist/runtime/data-access/query.js +381 -45
- package/dist/runtime/data-access/query.js.map +1 -1
- package/dist/runtime/data-access/rbac.d.ts.map +1 -1
- package/dist/runtime/data-access/rbac.js +134 -16
- package/dist/runtime/data-access/rbac.js.map +1 -1
- package/dist/runtime/data-access/seqno.d.ts +0 -2
- package/dist/runtime/data-access/seqno.d.ts.map +1 -1
- package/dist/runtime/data-access/seqno.js +0 -9
- package/dist/runtime/data-access/seqno.js.map +1 -1
- package/dist/runtime/data-access/sql-executor.d.ts +13 -3
- package/dist/runtime/data-access/sql-executor.d.ts.map +1 -1
- package/dist/runtime/data-access/sql-executor.js +20 -14
- package/dist/runtime/data-access/sql-executor.js.map +1 -1
- package/dist/runtime/data-access/sql-gate.d.ts +4 -4
- package/dist/runtime/data-access/sql-gate.d.ts.map +1 -1
- package/dist/runtime/data-access/sql-gate.js +5 -5
- package/dist/runtime/data-access/sql-gate.js.map +1 -1
- package/dist/runtime/data-access/tx.d.ts +1 -1
- package/dist/runtime/data-access/tx.js +1 -1
- package/dist/runtime/data-access/types.d.ts +31 -3
- package/dist/runtime/data-access/types.d.ts.map +1 -1
- package/dist/runtime/data-access/validate.d.ts.map +1 -1
- package/dist/runtime/data-access/validate.js +79 -15
- package/dist/runtime/data-access/validate.js.map +1 -1
- package/dist/runtime/data-access/workflow.d.ts +146 -0
- package/dist/runtime/data-access/workflow.d.ts.map +1 -0
- package/dist/runtime/data-access/workflow.js +636 -0
- package/dist/runtime/data-access/workflow.js.map +1 -0
- package/dist/runtime/engine.d.ts +89 -14
- package/dist/runtime/engine.d.ts.map +1 -1
- package/dist/runtime/engine.js +123 -26
- package/dist/runtime/engine.js.map +1 -1
- package/dist/runtime/fieldtypes/loader.d.ts.map +1 -1
- package/dist/runtime/fieldtypes/loader.js +12 -1
- package/dist/runtime/fieldtypes/loader.js.map +1 -1
- package/dist/runtime/git/guardrailSource.d.ts +1 -1
- package/dist/runtime/git/index.d.ts +4 -2
- package/dist/runtime/git/index.d.ts.map +1 -1
- package/dist/runtime/git/index.js +2 -1
- package/dist/runtime/git/index.js.map +1 -1
- package/dist/runtime/git/layoutSource.d.ts +1 -1
- package/dist/runtime/git/loader.d.ts.map +1 -1
- package/dist/runtime/git/loader.js +18 -6
- package/dist/runtime/git/loader.js.map +1 -1
- package/dist/runtime/git/pageCatalog.d.ts +1 -1
- package/dist/runtime/git/schemaChange.d.ts +22 -0
- package/dist/runtime/git/schemaChange.d.ts.map +1 -1
- package/dist/runtime/git/schemaChange.js +28 -2
- package/dist/runtime/git/schemaChange.js.map +1 -1
- package/dist/runtime/git/schemaSource.d.ts +1 -1
- package/dist/runtime/git/sourceFile.d.ts +1 -1
- package/dist/runtime/git/sourceFile.js +1 -1
- package/dist/runtime/git/sourceTransaction.d.ts +1 -1
- package/dist/runtime/git/workflowSource.d.ts +40 -0
- package/dist/runtime/git/workflowSource.d.ts.map +1 -0
- package/dist/runtime/git/workflowSource.js +45 -0
- package/dist/runtime/git/workflowSource.js.map +1 -0
- package/dist/runtime/identity/admin.d.ts +18 -0
- package/dist/runtime/identity/admin.d.ts.map +1 -0
- package/dist/runtime/identity/admin.js +27 -0
- package/dist/runtime/identity/admin.js.map +1 -0
- package/dist/runtime/identity/directory.d.ts +12 -0
- package/dist/runtime/identity/directory.d.ts.map +1 -0
- package/dist/runtime/identity/directory.js +22 -0
- package/dist/runtime/identity/directory.js.map +1 -0
- package/dist/runtime/identity/index.d.ts +11 -0
- package/dist/runtime/identity/index.d.ts.map +1 -0
- package/dist/runtime/identity/index.js +8 -0
- package/dist/runtime/identity/index.js.map +1 -0
- package/dist/runtime/identity/resolve.d.ts +10 -0
- package/dist/runtime/identity/resolve.d.ts.map +1 -0
- package/dist/runtime/identity/resolve.js +16 -0
- package/dist/runtime/identity/resolve.js.map +1 -0
- package/dist/runtime/identity/sources/function.d.ts +10 -0
- package/dist/runtime/identity/sources/function.d.ts.map +1 -0
- package/dist/runtime/identity/sources/function.js +9 -0
- package/dist/runtime/identity/sources/function.js.map +1 -0
- package/dist/runtime/identity/sources/pg.d.ts +42 -0
- package/dist/runtime/identity/sources/pg.d.ts.map +1 -0
- package/dist/runtime/identity/sources/pg.js +121 -0
- package/dist/runtime/identity/sources/pg.js.map +1 -0
- package/dist/runtime/identity/store.d.ts +27 -0
- package/dist/runtime/identity/store.d.ts.map +1 -0
- package/dist/runtime/identity/store.js +139 -0
- package/dist/runtime/identity/store.js.map +1 -0
- package/dist/runtime/identity/sync.d.ts +34 -0
- package/dist/runtime/identity/sync.d.ts.map +1 -0
- package/dist/runtime/identity/sync.js +149 -0
- package/dist/runtime/identity/sync.js.map +1 -0
- package/dist/runtime/metadata/cache.d.ts +0 -2
- package/dist/runtime/metadata/cache.d.ts.map +1 -1
- package/dist/runtime/metadata/cache.js +0 -11
- package/dist/runtime/metadata/cache.js.map +1 -1
- package/dist/runtime/metadata/index.d.ts +1 -1
- package/dist/runtime/metadata/index.d.ts.map +1 -1
- package/dist/runtime/metadata/index.js +1 -1
- package/dist/runtime/metadata/index.js.map +1 -1
- package/dist/runtime/record-meta/index.d.ts +2 -0
- package/dist/runtime/record-meta/index.d.ts.map +1 -0
- package/dist/runtime/record-meta/index.js +2 -0
- package/dist/runtime/record-meta/index.js.map +1 -0
- package/dist/runtime/record-meta/store.d.ts +43 -0
- package/dist/runtime/record-meta/store.d.ts.map +1 -0
- package/dist/runtime/record-meta/store.js +88 -0
- package/dist/runtime/record-meta/store.js.map +1 -0
- package/dist/runtime/sql-analyzer/index.d.ts.map +1 -1
- package/dist/runtime/sql-analyzer/index.js +59 -0
- package/dist/runtime/sql-analyzer/index.js.map +1 -1
- package/dist/runtime/tools/executor.d.ts +11 -11
- package/dist/runtime/tools/executor.d.ts.map +1 -1
- package/dist/runtime/tools/executor.js +6 -6
- package/dist/runtime/tools/executor.js.map +1 -1
- package/dist/runtime/tools/index.d.ts +2 -0
- package/dist/runtime/tools/index.d.ts.map +1 -1
- package/dist/runtime/tools/index.js +1 -0
- package/dist/runtime/tools/index.js.map +1 -1
- package/dist/runtime/tools/policies.d.ts +22 -5
- package/dist/runtime/tools/policies.d.ts.map +1 -1
- package/dist/runtime/tools/policies.js +42 -12
- package/dist/runtime/tools/policies.js.map +1 -1
- package/dist/runtime/tunnel/connector.d.ts +1 -1
- package/dist/runtime/tunnel/forwarder.js +1 -1
- package/dist/runtime/tunnel/framing.d.ts +1 -1
- package/dist/runtime/tunnel/server.d.ts +1 -1
- package/dist/subsystems/approvals/index.d.ts +4 -4
- package/dist/subsystems/approvals/index.d.ts.map +1 -1
- package/dist/subsystems/approvals/index.js +5 -6
- package/dist/subsystems/approvals/index.js.map +1 -1
- package/dist/subsystems/approvals/store.d.ts +1 -3
- package/dist/subsystems/approvals/store.d.ts.map +1 -1
- package/dist/subsystems/approvals/store.js +1 -16
- package/dist/subsystems/approvals/store.js.map +1 -1
- package/dist/subsystems/audit/index.d.ts +1 -1
- package/dist/subsystems/audit/index.d.ts.map +1 -1
- package/dist/subsystems/audit/index.js +2 -3
- package/dist/subsystems/audit/index.js.map +1 -1
- package/dist/subsystems/audit/store.d.ts +0 -2
- package/dist/subsystems/audit/store.d.ts.map +1 -1
- package/dist/subsystems/audit/store.js +0 -21
- package/dist/subsystems/audit/store.js.map +1 -1
- package/dist/subsystems/quota/store.d.ts +9 -0
- package/dist/subsystems/quota/store.d.ts.map +1 -1
- package/dist/subsystems/quota/store.js +0 -8
- package/dist/subsystems/quota/store.js.map +1 -1
- package/dist/subsystems/script/backend/isolated-vm.js +1 -1
- package/dist/subsystems/script/backend/types.d.ts +2 -2
- package/dist/subsystems/script/backend/types.d.ts.map +1 -1
- package/dist/subsystems/script/bridge.d.ts +1 -1
- package/dist/subsystems/script/bridge.d.ts.map +1 -1
- package/dist/subsystems/script/bridge.js +6 -4
- package/dist/subsystems/script/bridge.js.map +1 -1
- package/dist/subsystems/script/dispatcher.d.ts.map +1 -1
- package/dist/subsystems/script/dispatcher.js +3 -1
- package/dist/subsystems/script/dispatcher.js.map +1 -1
- package/dist/subsystems/workflow/index.d.ts +4 -0
- package/dist/subsystems/workflow/index.d.ts.map +1 -0
- package/dist/subsystems/workflow/index.js +3 -0
- package/dist/subsystems/workflow/index.js.map +1 -0
- package/dist/subsystems/workflow/scheduler.d.ts +27 -0
- package/dist/subsystems/workflow/scheduler.d.ts.map +1 -0
- package/dist/subsystems/workflow/scheduler.js +109 -0
- package/dist/subsystems/workflow/scheduler.js.map +1 -0
- package/dist/subsystems/workflow/store.d.ts +10 -0
- package/dist/subsystems/workflow/store.d.ts.map +1 -0
- package/dist/subsystems/workflow/store.js +44 -0
- package/dist/subsystems/workflow/store.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +7 -3
package/dist/core/storage/map.js
CHANGED
|
@@ -1,38 +1,48 @@
|
|
|
1
1
|
import { DEFAULT_FIELD_TYPE_REGISTRY, fieldBase } from '../types/index.js';
|
|
2
|
+
import { currencyMinorUnits } from '../types/currency.js';
|
|
2
3
|
import { SchemaError } from '../types/errors.js';
|
|
3
4
|
import { FIELD_TYPES, ON_DELETE_ACTIONS } from '../types/values.js';
|
|
5
|
+
import { sqlLiteral } from './sql-literals.js';
|
|
6
|
+
/**
|
|
7
|
+
* PG type-name vocabulary → canonical array element `udt_name` (without the
|
|
8
|
+
* leading underscore). The single source for both the safe-type whitelist a
|
|
9
|
+
* registered `storage.pgType` may return and array-element comparison.
|
|
10
|
+
*/
|
|
11
|
+
const PG_TYPE_BASE = {
|
|
12
|
+
VARCHAR: 'varchar',
|
|
13
|
+
'CHARACTER VARYING': 'varchar',
|
|
14
|
+
CHAR: 'bpchar',
|
|
15
|
+
BPCHAR: 'bpchar',
|
|
16
|
+
TEXT: 'text',
|
|
17
|
+
SMALLINT: 'int2',
|
|
18
|
+
INT2: 'int2',
|
|
19
|
+
INTEGER: 'int4',
|
|
20
|
+
INT: 'int4',
|
|
21
|
+
INT4: 'int4',
|
|
22
|
+
BIGINT: 'int8',
|
|
23
|
+
INT8: 'int8',
|
|
24
|
+
NUMERIC: 'numeric',
|
|
25
|
+
DECIMAL: 'numeric',
|
|
26
|
+
REAL: 'float4',
|
|
27
|
+
'DOUBLE PRECISION': 'float8',
|
|
28
|
+
BOOLEAN: 'bool',
|
|
29
|
+
DATE: 'date',
|
|
30
|
+
TIME: 'time',
|
|
31
|
+
TIMETZ: 'timetz',
|
|
32
|
+
TIMESTAMP: 'timestamp',
|
|
33
|
+
'TIMESTAMP WITHOUT TIME ZONE': 'timestamp',
|
|
34
|
+
TIMESTAMPTZ: 'timestamptz',
|
|
35
|
+
'TIMESTAMP WITH TIME ZONE': 'timestamptz',
|
|
36
|
+
JSON: 'json',
|
|
37
|
+
JSONB: 'jsonb',
|
|
38
|
+
UUID: 'uuid',
|
|
39
|
+
MONEY: 'money',
|
|
40
|
+
};
|
|
4
41
|
/** base PostgreSQL type names a registered `storage.pgType` may return */
|
|
5
|
-
const SAFE_PG_BASE = new Set(
|
|
6
|
-
'VARCHAR',
|
|
7
|
-
'CHARACTER VARYING',
|
|
8
|
-
'CHAR',
|
|
9
|
-
'BPCHAR',
|
|
10
|
-
'TEXT',
|
|
11
|
-
'SMALLINT',
|
|
12
|
-
'INTEGER',
|
|
13
|
-
'INT',
|
|
14
|
-
'INT2',
|
|
15
|
-
'INT4',
|
|
16
|
-
'INT8',
|
|
17
|
-
'BIGINT',
|
|
18
|
-
'NUMERIC',
|
|
19
|
-
'DECIMAL',
|
|
20
|
-
'REAL',
|
|
21
|
-
'DOUBLE PRECISION',
|
|
22
|
-
'BOOLEAN',
|
|
23
|
-
'DATE',
|
|
24
|
-
'TIME',
|
|
25
|
-
'TIMETZ',
|
|
26
|
-
'TIMESTAMP',
|
|
27
|
-
'TIMESTAMPTZ',
|
|
28
|
-
'TIMESTAMP WITH TIME ZONE',
|
|
29
|
-
'TIMESTAMP WITHOUT TIME ZONE',
|
|
30
|
-
'JSON',
|
|
31
|
-
'JSONB',
|
|
32
|
-
'UUID',
|
|
33
|
-
'MONEY',
|
|
34
|
-
]);
|
|
42
|
+
const SAFE_PG_BASE = new Set(Object.keys(PG_TYPE_BASE));
|
|
35
43
|
const SAFE_PG_RE = /^([A-Z][A-Z0-9_ ]*?)(\(\d+(?:\s*,\s*\d+)?\))?(\[\])?$/;
|
|
44
|
+
/** a native enum type name is interpolated raw into DDL: snake_case identifier only */
|
|
45
|
+
const PG_ENUM_TYPE_RE = /^[a-z][a-z0-9_]*$/;
|
|
36
46
|
/**
|
|
37
47
|
* True when a registered `storage.pgType` output is a safe PostgreSQL column
|
|
38
48
|
* type: a known base type with optional numeric parameters and an optional
|
|
@@ -72,28 +82,73 @@ export function pgType(field, targetPkType, registry = DEFAULT_FIELD_TYPE_REGIST
|
|
|
72
82
|
return 'VARCHAR(255)';
|
|
73
83
|
case FIELD_TYPES.TEXT:
|
|
74
84
|
return 'TEXT';
|
|
85
|
+
case FIELD_TYPES.CHAR:
|
|
86
|
+
return `CHAR(${field.length ?? 1})`;
|
|
87
|
+
case FIELD_TYPES.SMALLINT:
|
|
88
|
+
return 'SMALLINT';
|
|
75
89
|
case FIELD_TYPES.INTEGER:
|
|
76
90
|
return 'INTEGER';
|
|
77
|
-
case FIELD_TYPES.
|
|
78
|
-
return
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
91
|
+
case FIELD_TYPES.BIGINT:
|
|
92
|
+
return 'BIGINT';
|
|
93
|
+
case FIELD_TYPES.NUMBER: {
|
|
94
|
+
const precision = field.precision;
|
|
95
|
+
const scale = field.scale;
|
|
96
|
+
if (!precision)
|
|
97
|
+
return 'NUMERIC';
|
|
98
|
+
return scale ? `NUMERIC(${precision},${scale})` : `NUMERIC(${precision})`;
|
|
99
|
+
}
|
|
100
|
+
case FIELD_TYPES.REAL:
|
|
101
|
+
return 'REAL';
|
|
102
|
+
case FIELD_TYPES.DOUBLE:
|
|
103
|
+
return 'DOUBLE PRECISION';
|
|
104
|
+
case FIELD_TYPES.CURRENCY: {
|
|
105
|
+
// scale follows the ISO 4217 code when declared (USD=2, JPY=0); absent → 2
|
|
106
|
+
const code = field.currency;
|
|
107
|
+
const scale = code === undefined ? 2 : currencyMinorUnits(code);
|
|
108
|
+
// precision is configurable for large amounts; default 12
|
|
109
|
+
const precision = field.precision ?? 12;
|
|
110
|
+
return `NUMERIC(${precision},${scale})`;
|
|
111
|
+
}
|
|
83
112
|
case FIELD_TYPES.BOOLEAN:
|
|
84
113
|
return 'BOOLEAN';
|
|
85
|
-
case FIELD_TYPES.DATETIME:
|
|
86
|
-
return 'TIMESTAMPTZ';
|
|
87
114
|
case FIELD_TYPES.DATE:
|
|
88
115
|
return 'DATE';
|
|
116
|
+
case FIELD_TYPES.TIME:
|
|
117
|
+
return 'TIME';
|
|
118
|
+
case FIELD_TYPES.TIMETZ:
|
|
119
|
+
return 'TIMETZ';
|
|
120
|
+
case FIELD_TYPES.TIMESTAMP:
|
|
121
|
+
return 'TIMESTAMP';
|
|
122
|
+
case FIELD_TYPES.TIMESTAMPTZ:
|
|
123
|
+
return 'TIMESTAMPTZ';
|
|
124
|
+
case FIELD_TYPES.INTERVAL:
|
|
125
|
+
return 'INTERVAL';
|
|
126
|
+
case FIELD_TYPES.UUID:
|
|
127
|
+
return 'UUID';
|
|
89
128
|
case FIELD_TYPES.JSON:
|
|
129
|
+
return 'JSON';
|
|
130
|
+
case FIELD_TYPES.JSONB:
|
|
90
131
|
return 'JSONB';
|
|
91
|
-
case FIELD_TYPES.ENUM:
|
|
92
|
-
|
|
132
|
+
case FIELD_TYPES.ENUM: {
|
|
133
|
+
const enumType = field.enumType;
|
|
134
|
+
const multiple = field.multiple === true;
|
|
135
|
+
if (enumType !== undefined) {
|
|
136
|
+
// defense in depth: the validator already restricts enumType to a
|
|
137
|
+
// snake_case identifier, but it is interpolated raw into DDL here, so
|
|
138
|
+
// re-check before it can reach a type name.
|
|
139
|
+
if (!PG_ENUM_TYPE_RE.test(enumType)) {
|
|
140
|
+
throw new SchemaError('field.enum.enumType.invalid', { object: field.name, value: enumType });
|
|
141
|
+
}
|
|
142
|
+
return multiple ? `${enumType}[]` : enumType;
|
|
143
|
+
}
|
|
144
|
+
return multiple ? 'TEXT[]' : 'VARCHAR(255)';
|
|
145
|
+
}
|
|
93
146
|
case FIELD_TYPES.RELATION:
|
|
94
147
|
return targetPkType ?? 'VARCHAR(255)';
|
|
95
148
|
case FIELD_TYPES.MULTI_RELATION:
|
|
96
|
-
|
|
149
|
+
// multiRelation fields have no column — they are backed by an engine link
|
|
150
|
+
// table (`core/storage/link-table.ts`), never mapped to a column type
|
|
151
|
+
throw new Error('multiRelation fields do not create a column (link table)');
|
|
97
152
|
case FIELD_TYPES.SEQ_NO:
|
|
98
153
|
return 'VARCHAR(255)';
|
|
99
154
|
case FIELD_TYPES.DETAILS:
|
|
@@ -109,60 +164,52 @@ export function defaultExpr(field, registry = DEFAULT_FIELD_TYPE_REGISTRY) {
|
|
|
109
164
|
return undefined;
|
|
110
165
|
const base = fieldBase(registry, field.type);
|
|
111
166
|
switch (base) {
|
|
112
|
-
case FIELD_TYPES.DATETIME:
|
|
113
167
|
case FIELD_TYPES.DATE:
|
|
114
|
-
|
|
168
|
+
case FIELD_TYPES.TIMESTAMP:
|
|
169
|
+
case FIELD_TYPES.TIMESTAMPTZ:
|
|
170
|
+
return raw.default === 'now' ? 'now()' : sqlLiteral(String(raw.default));
|
|
171
|
+
case FIELD_TYPES.TIME:
|
|
172
|
+
case FIELD_TYPES.TIMETZ:
|
|
173
|
+
return sqlLiteral(String(raw.default));
|
|
115
174
|
case FIELD_TYPES.ENUM:
|
|
116
175
|
// multi-value enum defaults are not expressed in DDL (application layer)
|
|
117
|
-
return field.multiple ? undefined :
|
|
176
|
+
return field.multiple ? undefined : sqlLiteral(String(raw.default));
|
|
118
177
|
case FIELD_TYPES.STRING:
|
|
119
178
|
// multi-value image defaults are application layer too
|
|
120
179
|
if (field.type === FIELD_TYPES.IMAGE && field.multiple === true)
|
|
121
180
|
return undefined;
|
|
122
|
-
return
|
|
181
|
+
return sqlLiteral(String(raw.default));
|
|
123
182
|
case FIELD_TYPES.TEXT:
|
|
124
|
-
|
|
183
|
+
case FIELD_TYPES.CHAR:
|
|
184
|
+
case FIELD_TYPES.UUID:
|
|
185
|
+
return sqlLiteral(String(raw.default));
|
|
125
186
|
case FIELD_TYPES.BOOLEAN:
|
|
126
187
|
return String(raw.default);
|
|
188
|
+
case FIELD_TYPES.SMALLINT:
|
|
127
189
|
case FIELD_TYPES.INTEGER:
|
|
190
|
+
case FIELD_TYPES.BIGINT:
|
|
128
191
|
case FIELD_TYPES.NUMBER:
|
|
192
|
+
case FIELD_TYPES.REAL:
|
|
193
|
+
case FIELD_TYPES.DOUBLE:
|
|
129
194
|
case FIELD_TYPES.CURRENCY:
|
|
130
|
-
return
|
|
195
|
+
return numericLiteral(field, raw.default);
|
|
131
196
|
default:
|
|
132
197
|
return undefined;
|
|
133
198
|
}
|
|
134
199
|
}
|
|
135
|
-
/**
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
INT8: 'int8',
|
|
149
|
-
NUMERIC: 'numeric',
|
|
150
|
-
DECIMAL: 'numeric',
|
|
151
|
-
REAL: 'float4',
|
|
152
|
-
'DOUBLE PRECISION': 'float8',
|
|
153
|
-
BOOLEAN: 'bool',
|
|
154
|
-
DATE: 'date',
|
|
155
|
-
TIME: 'time',
|
|
156
|
-
TIMETZ: 'timetz',
|
|
157
|
-
TIMESTAMP: 'timestamp',
|
|
158
|
-
TIMESTAMPTZ: 'timestamptz',
|
|
159
|
-
'TIMESTAMP WITH TIME ZONE': 'timestamptz',
|
|
160
|
-
'TIMESTAMP WITHOUT TIME ZONE': 'timestamp',
|
|
161
|
-
JSON: 'json',
|
|
162
|
-
JSONB: 'jsonb',
|
|
163
|
-
UUID: 'uuid',
|
|
164
|
-
MONEY: 'money',
|
|
165
|
-
};
|
|
200
|
+
/**
|
|
201
|
+
* A safe numeric DDL literal. JS numbers are emitted verbatim (finite only);
|
|
202
|
+
* string defaults (only reachable for `bigint`, whose large values may exceed
|
|
203
|
+
* `Number.MAX_SAFE_INTEGER`) must be a plain integer. Anything else fails loud
|
|
204
|
+
* rather than being interpolated raw into DDL.
|
|
205
|
+
*/
|
|
206
|
+
function numericLiteral(field, value) {
|
|
207
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
208
|
+
return String(value);
|
|
209
|
+
if (typeof value === 'string' && /^[+-]?\d+$/.test(value))
|
|
210
|
+
return value;
|
|
211
|
+
throw new SchemaError('storage.default.invalid', { field: field.name, value: String(value) });
|
|
212
|
+
}
|
|
166
213
|
/**
|
|
167
214
|
* Compare a declared column type (`pgType()` output, e.g. `VARCHAR(255)`,
|
|
168
215
|
* `NUMERIC(12,2)`, `TEXT[]`, or a custom `storage.pgType` value) against a live
|
|
@@ -174,7 +221,7 @@ const ARRAY_ELEMENT_UDT = {
|
|
|
174
221
|
*/
|
|
175
222
|
export function pgTypeMatches(expected, actual) {
|
|
176
223
|
const exp = expected.trim().toUpperCase();
|
|
177
|
-
const match = /^([A-Z][A-
|
|
224
|
+
const match = /^([A-Z][A-Z0-9_ ]*?)(?:\(([^)]*)\))?(\[\])?$/.exec(exp);
|
|
178
225
|
if (match === null)
|
|
179
226
|
return false;
|
|
180
227
|
const base = match[1].trim();
|
|
@@ -185,7 +232,11 @@ export function pgTypeMatches(expected, actual) {
|
|
|
185
232
|
if (!liveIsArray)
|
|
186
233
|
return false;
|
|
187
234
|
const udt = actual.udtName?.replace(/^_/, '').toLowerCase();
|
|
188
|
-
|
|
235
|
+
const mapped = PG_TYPE_BASE[base];
|
|
236
|
+
if (mapped !== undefined)
|
|
237
|
+
return mapped === udt;
|
|
238
|
+
// a user-defined element type (e.g. a native enum): compare the type name
|
|
239
|
+
return base.toLowerCase() === udt;
|
|
189
240
|
}
|
|
190
241
|
const actualBase = actual.dataType.toUpperCase();
|
|
191
242
|
switch (base) {
|
|
@@ -224,6 +275,8 @@ export function pgTypeMatches(expected, actual) {
|
|
|
224
275
|
case 'TIMESTAMPTZ':
|
|
225
276
|
case 'TIMESTAMP WITH TIME ZONE':
|
|
226
277
|
return actualBase === 'TIMESTAMP WITH TIME ZONE';
|
|
278
|
+
case 'INTERVAL':
|
|
279
|
+
return actualBase === 'INTERVAL';
|
|
227
280
|
case 'JSON':
|
|
228
281
|
return actualBase === 'JSON';
|
|
229
282
|
case 'JSONB':
|
|
@@ -248,7 +301,8 @@ export function pgTypeMatches(expected, actual) {
|
|
|
248
301
|
return true;
|
|
249
302
|
}
|
|
250
303
|
default:
|
|
251
|
-
|
|
304
|
+
// user-defined type (e.g. a native enum): compare to the live udt_name
|
|
305
|
+
return actual.udtName !== undefined && base.toLowerCase() === actual.udtName.toLowerCase();
|
|
252
306
|
}
|
|
253
307
|
}
|
|
254
308
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/core/storage/map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAA0B,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../../src/core/storage/map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAA0B,MAAM,mBAAmB,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,YAAY,GAA2B;IAC3C,OAAO,EAAE,SAAS;IAClB,mBAAmB,EAAE,SAAS;IAC9B,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,QAAQ;IACd,kBAAkB,EAAE,QAAQ;IAC5B,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,6BAA6B,EAAE,WAAW;IAC1C,WAAW,EAAE,aAAa;IAC1B,0BAA0B,EAAE,aAAa;IACzC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,0EAA0E;AAC1E,MAAM,YAAY,GAAwB,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAE7E,MAAM,UAAU,GAAG,uDAAuD,CAAC;AAE3E,uFAAuF;AACvF,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,KAAsB,EACtB,YAAgC,EAChC,WAA8B,2BAA2B;IAEzD,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,UAAU,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,KAAmC,CAAC,CAAC;QAC9E,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,WAAW,CAAC,2BAA2B,EAAE;gBACjD,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,MAAM,EAAE,4BAA4B,MAAM,CAAC,MAAM,CAAC,wCAAwC;aAC3F,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,MAAM;YACrB,iEAAiE;YACjE,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,IAAK,KAAgC,CAAC,QAAQ,KAAK,IAAI;gBAAE,OAAO,QAAQ,CAAC;YAC7G,OAAO,cAAc,CAAC;QACxB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,QAAS,KAA6B,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC;QAC/D,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,UAAU,CAAC;QACpB,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YACxB,MAAM,SAAS,GAAI,KAAgC,CAAC,SAAS,CAAC;YAC9D,MAAM,KAAK,GAAI,KAA4B,CAAC,KAAK,CAAC;YAClD,IAAI,CAAC,SAAS;gBAAE,OAAO,SAAS,CAAC;YACjC,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,SAAS,GAAG,CAAC;QAC5E,CAAC;QACD,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,kBAAkB,CAAC;QAC5B,KAAK,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1B,2EAA2E;YAC3E,MAAM,IAAI,GAAI,KAA+B,CAAC,QAAQ,CAAC;YACvD,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAChE,0DAA0D;YAC1D,MAAM,SAAS,GAAI,KAAgC,CAAC,SAAS,IAAI,EAAE,CAAC;YACpE,OAAO,WAAW,SAAS,IAAI,KAAK,GAAG,CAAC;QAC1C,CAAC;QACD,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,WAAW,CAAC;QACrB,KAAK,WAAW,CAAC,WAAW;YAC1B,OAAO,aAAa,CAAC;QACvB,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,UAAU,CAAC;QACpB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW,CAAC,KAAK;YACpB,OAAO,OAAO,CAAC;QACjB,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YACtB,MAAM,QAAQ,GAAI,KAA+B,CAAC,QAAQ,CAAC;YAC3D,MAAM,QAAQ,GAAI,KAAgC,CAAC,QAAQ,KAAK,IAAI,CAAC;YACrE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,kEAAkE;gBAClE,sEAAsE;gBACtE,4CAA4C;gBAC5C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACpC,MAAM,IAAI,WAAW,CAAC,6BAA6B,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAChG,CAAC;gBACD,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC/C,CAAC;YACD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC;QAC9C,CAAC;QACD,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,YAAY,IAAI,cAAc,CAAC;QACxC,KAAK,WAAW,CAAC,cAAc;YAC7B,0EAA0E;YAC1E,sEAAsE;YACtE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,cAAc,CAAC;QACxB,KAAK,WAAW,CAAC,OAAO;YACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D;YACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,WAAW,CACzB,KAAsB,EACtB,WAA8B,2BAA2B;IAEzD,MAAM,GAAG,GAAG,KAAkD,CAAC;IAC/D,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,WAAW,CAAC,IAAI,CAAC;QACtB,KAAK,WAAW,CAAC,SAAS,CAAC;QAC3B,KAAK,WAAW,CAAC,WAAW;YAC1B,OAAO,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,KAAK,WAAW,CAAC,IAAI,CAAC;QACtB,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,KAAK,WAAW,CAAC,IAAI;YACnB,yEAAyE;YACzE,OAAQ,KAAgC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAClG,KAAK,WAAW,CAAC,MAAM;YACrB,uDAAuD;YACvD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,IAAK,KAAgC,CAAC,QAAQ,KAAK,IAAI;gBAAE,OAAO,SAAS,CAAC;YAC9G,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,KAAK,WAAW,CAAC,IAAI,CAAC;QACtB,KAAK,WAAW,CAAC,IAAI,CAAC;QACtB,KAAK,WAAW,CAAC,IAAI;YACnB,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,KAAK,WAAW,CAAC,QAAQ,CAAC;QAC1B,KAAK,WAAW,CAAC,OAAO,CAAC;QACzB,KAAK,WAAW,CAAC,MAAM,CAAC;QACxB,KAAK,WAAW,CAAC,MAAM,CAAC;QACxB,KAAK,WAAW,CAAC,IAAI,CAAC;QACtB,KAAK,WAAW,CAAC,MAAM,CAAC;QACxB,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5C;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,KAAsB,EAAE,KAAc;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,MAAM,IAAI,WAAW,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChG,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,QAAgB,EAChB,MAKC;IAED,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IAEvC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;QAC1G,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,KAAK,GAAG,CAAC;QAChD,0EAA0E;QAC1E,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEjD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,mBAAmB;YACtB,OAAO,UAAU,KAAK,mBAAmB,IAAI,UAAU,KAAK,SAAS,CAAC;QACxE,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,CAAC;QACxF,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,MAAM,CAAC;QAC/B,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,MAAM,CAAC;QAC5D,KAAK,SAAS,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,KAAK,IAAI,UAAU,KAAK,MAAM,CAAC;QACnF,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,MAAM,CAAC;QAC1D,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,CAAC;QAC1D,KAAK,kBAAkB;YACrB,OAAO,UAAU,KAAK,kBAAkB,IAAI,UAAU,KAAK,QAAQ,CAAC;QACtE,KAAK,SAAS;YACZ,OAAO,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,MAAM,CAAC;QAC3D,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,MAAM,CAAC;QAC/B,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,wBAAwB,CAAC;QAC1E,KAAK,QAAQ;YACX,OAAO,UAAU,KAAK,qBAAqB,CAAC;QAC9C,KAAK,WAAW;YACd,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,6BAA6B,CAAC;QACpF,KAAK,aAAa,CAAC;QACnB,KAAK,0BAA0B;YAC7B,OAAO,UAAU,KAAK,0BAA0B,CAAC;QACnD,KAAK,UAAU;YACb,OAAO,UAAU,KAAK,UAAU,CAAC;QACnC,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,MAAM,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,UAAU,KAAK,OAAO,CAAC;QAChC,KAAK,MAAM;YACT,OAAO,UAAU,KAAK,MAAM,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,UAAU,KAAK,OAAO,CAAC;QAChC,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YACvE,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC;YACpC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9E,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,gBAAgB,IAAI,IAAI,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBAC3G,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,IAAI,MAAM,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;gBAClH,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD;YACE,uEAAuE;YACvE,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAC/F,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,MAA0B;IACvD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,iBAAiB,CAAC,OAAO;YAC5B,OAAO,SAAS,CAAC;QACnB,KAAK,iBAAiB,CAAC,QAAQ;YAC7B,OAAO,UAAU,CAAC;QACpB,KAAK,iBAAiB,CAAC,QAAQ,CAAC;QAChC;YACE,OAAO,UAAU,CAAC;IACtB,CAAC;AACH,CAAC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { Pool } from 'pg';
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Upsert a meta record (e.g. `schema.applied.<object>` -> applied_at).
|
|
4
|
+
* The table is created by `weave migrate` — the runtime never runs DDL.
|
|
5
|
+
*/
|
|
5
6
|
export declare function setMeta(pool: Pool, key: string, value: string): Promise<void>;
|
|
7
|
+
/** read a meta value (null when the key is absent) */
|
|
8
|
+
export declare function getMeta(pool: Pool, key: string): Promise<string | null>;
|
|
6
9
|
//# sourceMappingURL=meta.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/core/storage/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI/B
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/core/storage/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAI/B;;;GAGG;AACH,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF;AAED,sDAAsD;AACtD,wBAAsB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAG7E"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
const META_TABLE = 'weavekit_meta';
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/** upsert an audit record (e.g. schema.applied.<object> -> applied_at) */
|
|
2
|
+
/**
|
|
3
|
+
* Upsert a meta record (e.g. `schema.applied.<object>` -> applied_at).
|
|
4
|
+
* The table is created by `weave migrate` — the runtime never runs DDL.
|
|
5
|
+
*/
|
|
7
6
|
export async function setMeta(pool, key, value) {
|
|
8
7
|
await pool.query(`INSERT INTO ${META_TABLE} (key, value) VALUES ($1, $2)
|
|
9
8
|
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`, [key, value]);
|
|
10
9
|
}
|
|
10
|
+
/** read a meta value (null when the key is absent) */
|
|
11
|
+
export async function getMeta(pool, key) {
|
|
12
|
+
const res = await pool.query(`SELECT value FROM ${META_TABLE} WHERE key = $1`, [key]);
|
|
13
|
+
return res.rows[0]?.value ?? null;
|
|
14
|
+
}
|
|
11
15
|
//# sourceMappingURL=meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/core/storage/meta.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,eAAe,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/core/storage/meta.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,GAAG,eAAe,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,GAAW,EAAE,KAAa;IAClE,MAAM,IAAI,CAAC,KAAK,CACd,eAAe,UAAU;4DAC+B,EACxD,CAAC,GAAG,EAAE,KAAK,CAAC,CACb,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,GAAW;IACnD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,qBAAqB,UAAU,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtF,OAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAmC,EAAE,KAAK,IAAI,IAAI,CAAC;AACvE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/core/storage/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/core/storage/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAiBzD,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAmGD;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4I9G"}
|
|
@@ -1,11 +1,64 @@
|
|
|
1
|
+
import { systemObjects } from '../object/index.js';
|
|
1
2
|
import { FIELD_TYPES } from '../types/index.js';
|
|
2
3
|
import { SchemaError, primaryKeyOf } from '../types/index.js';
|
|
3
4
|
import { applyStatements } from './apply.js';
|
|
4
5
|
import { buildExpectedTable, diffAll, diffRls, diffTable } from './diff.js';
|
|
5
6
|
import { inspectSchema } from './inspect.js';
|
|
6
|
-
import {
|
|
7
|
+
import { buildLinkTables } from './link-table.js';
|
|
8
|
+
import { setMeta } from './meta.js';
|
|
7
9
|
import { createPool } from './pool.js';
|
|
8
|
-
|
|
10
|
+
import { buildRecordMetaTable } from './record-meta.js';
|
|
11
|
+
import { sqlIdent, sqlLiteral } from './sql-literals.js';
|
|
12
|
+
import { SYSTEM_TABLES, buildSystemTables, systemHardeningStatements } from './system-tables.js';
|
|
13
|
+
import { isSafeRlsRole } from '../rbac/index.js';
|
|
14
|
+
const q = (id) => `"${id}"`;
|
|
15
|
+
/**
|
|
16
|
+
* DDL to ensure the native enum types referenced by managed objects exist.
|
|
17
|
+
* `CREATE TYPE` when the type is missing; `ALTER TYPE … ADD VALUE IF NOT EXISTS`
|
|
18
|
+
* only for managed (created / `alter: true`) objects — never for adopted,
|
|
19
|
+
* read-only tables (the engine must not ALTER a customer's type).
|
|
20
|
+
*/
|
|
21
|
+
async function buildEnumStatements(pool, defs, managed) {
|
|
22
|
+
const declared = new Map();
|
|
23
|
+
for (const def of defs.values()) {
|
|
24
|
+
if (!managed.has(def.name))
|
|
25
|
+
continue;
|
|
26
|
+
for (const field of def.fields) {
|
|
27
|
+
const e = field;
|
|
28
|
+
if (e.type !== FIELD_TYPES.ENUM || e.enumType === undefined || !Array.isArray(e.options))
|
|
29
|
+
continue;
|
|
30
|
+
const set = declared.get(e.enumType) ?? new Set();
|
|
31
|
+
for (const option of e.options)
|
|
32
|
+
set.add(String(option));
|
|
33
|
+
declared.set(e.enumType, set);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (declared.size === 0)
|
|
37
|
+
return [];
|
|
38
|
+
const res = await pool.query(`SELECT t.typname AS name, e.enumlabel AS label
|
|
39
|
+
FROM pg_type t JOIN pg_enum e ON e.enumtypid = t.oid
|
|
40
|
+
WHERE t.typtype = 'e'`);
|
|
41
|
+
const existing = new Map();
|
|
42
|
+
for (const row of res.rows) {
|
|
43
|
+
const set = existing.get(row.name) ?? new Set();
|
|
44
|
+
set.add(row.label);
|
|
45
|
+
existing.set(row.name, set);
|
|
46
|
+
}
|
|
47
|
+
const statements = [];
|
|
48
|
+
for (const [name, options] of declared) {
|
|
49
|
+
const labels = existing.get(name);
|
|
50
|
+
if (labels === undefined) {
|
|
51
|
+
statements.push(`CREATE TYPE ${q(name)} AS ENUM (${[...options].map(sqlLiteral).join(', ')})`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
for (const option of options) {
|
|
55
|
+
if (!labels.has(option))
|
|
56
|
+
statements.push(`ALTER TYPE ${q(name)} ADD VALUE IF NOT EXISTS ${sqlLiteral(option)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return statements;
|
|
61
|
+
}
|
|
9
62
|
/**
|
|
10
63
|
* Best-effort provisioning of the restricted-SQL role: `CREATE ROLE` (needs
|
|
11
64
|
* CREATEROLE; failure → warning + false) and `GRANT` membership for
|
|
@@ -16,7 +69,7 @@ async function provisionRlsRole(pool, role, warnings) {
|
|
|
16
69
|
const existing = await pool.query('SELECT 1 FROM pg_roles WHERE rolname = $1', [role]);
|
|
17
70
|
if (existing.rows.length === 0) {
|
|
18
71
|
try {
|
|
19
|
-
await pool.query(`CREATE ROLE ${role}`);
|
|
72
|
+
await pool.query(`CREATE ROLE ${sqlIdent(role)}`);
|
|
20
73
|
}
|
|
21
74
|
catch {
|
|
22
75
|
warnings.push(`could not create role "${role}" (needs CREATEROLE) — create it manually to enable RLS`);
|
|
@@ -24,13 +77,30 @@ async function provisionRlsRole(pool, role, warnings) {
|
|
|
24
77
|
}
|
|
25
78
|
}
|
|
26
79
|
try {
|
|
27
|
-
|
|
80
|
+
// no dynamic SQL: decide membership in JS, then GRANT with a quoted identifier
|
|
81
|
+
const res = await pool.query(`SELECT pg_has_role(current_user, $1, 'MEMBER') AS member`, [role]);
|
|
82
|
+
if (res.rows[0].member !== true) {
|
|
83
|
+
await pool.query(`GRANT ${sqlIdent(role)} TO current_user`);
|
|
84
|
+
}
|
|
28
85
|
}
|
|
29
86
|
catch (error) {
|
|
30
87
|
warnings.push(`could not grant role "${role}" to current user: ${String(error.message)}`);
|
|
31
88
|
}
|
|
32
89
|
return true;
|
|
33
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* True when `PUBLIC` still holds `TRUNCATE` on `table`, i.e. the append-only
|
|
93
|
+
* hardening `REVOKE` is worth emitting. New tables grant nothing to `PUBLIC`
|
|
94
|
+
* by default, so a clean run emits no hardening statement (keeps migrate
|
|
95
|
+
* idempotent).
|
|
96
|
+
*/
|
|
97
|
+
async function publicHasTruncate(pool, table) {
|
|
98
|
+
const res = await pool.query(`SELECT EXISTS (
|
|
99
|
+
SELECT 1 FROM pg_class c, aclexplode(coalesce(c.relacl, acldefault('r', c.relowner))) a
|
|
100
|
+
WHERE c.oid = to_regclass($1) AND a.grantee = 0 AND a.privilege_type = 'TRUNCATE'
|
|
101
|
+
) AS needs`, [table]);
|
|
102
|
+
return res.rows[0]?.needs === true;
|
|
103
|
+
}
|
|
34
104
|
/**
|
|
35
105
|
* State-diff migration: compare each engine-managed object's expected table
|
|
36
106
|
* against the live `information_schema`, generate DDL, apply inside a
|
|
@@ -52,9 +122,9 @@ export async function migrate(registry, options = {}) {
|
|
|
52
122
|
const warnings = [];
|
|
53
123
|
const pool = createPool(url);
|
|
54
124
|
try {
|
|
55
|
-
const defs = new Map(registry.list().map((d) => [d.name, d]));
|
|
125
|
+
const defs = new Map([...systemObjects(), ...registry.list()].map((d) => [d.name, d]));
|
|
56
126
|
const actual = await inspectSchema(pool);
|
|
57
|
-
if (options.rls !== undefined && !
|
|
127
|
+
if (options.rls !== undefined && !isSafeRlsRole(options.rls.role)) {
|
|
58
128
|
throw new Error(`invalid RLS role name "${options.rls.role}"`);
|
|
59
129
|
}
|
|
60
130
|
// new objects (no live table by that name) are diffed and created; objects
|
|
@@ -64,6 +134,31 @@ export async function migrate(registry, options = {}) {
|
|
|
64
134
|
.filter((d) => d.alter === true || actual.get(d.name) === undefined)
|
|
65
135
|
.map((d) => buildExpectedTable(d, defs, registry.fieldTypes));
|
|
66
136
|
const statements = diffAll(expected, actual);
|
|
137
|
+
// native enum types must exist before the tables that reference them
|
|
138
|
+
const enumStatements = await buildEnumStatements(pool, defs, new Set(expected.map((t) => t.name)));
|
|
139
|
+
// engine-owned per-object record metadata side tables: one per object (R1),
|
|
140
|
+
// created idempotently for every object regardless of `alter`/ownership —
|
|
141
|
+
// they never touch the customer's own table
|
|
142
|
+
const metaTables = [...defs.keys()].map((name) => buildRecordMetaTable(name));
|
|
143
|
+
const metaStatements = diffAll(metaTables, actual);
|
|
144
|
+
// engine-owned many-to-many link tables for every `multiRelation` field:
|
|
145
|
+
// one per (object, field), created idempotently regardless of `alter`.
|
|
146
|
+
const linkTables = buildLinkTables(defs, registry.fieldTypes);
|
|
147
|
+
const linkStatements = diffAll(linkTables, actual);
|
|
148
|
+
// engine-owned system tables (metadata cache / seq / audit / approvals /
|
|
149
|
+
// timers / counters) + their ACL hardening: provisioned here (and only
|
|
150
|
+
// here) so the runtime never runs DDL and can be least-privileged.
|
|
151
|
+
// one-time reshape of the legacy workflow timer table
|
|
152
|
+
// (id/state/workflow_version -> record_key/node_id): engine-owned and
|
|
153
|
+
// transient, so drop+recreate is safe (there are no users yet).
|
|
154
|
+
const legacyTimers = actual.get(SYSTEM_TABLES.WORKFLOW_TIMERS);
|
|
155
|
+
const dropLegacyTimers = legacyTimers !== undefined &&
|
|
156
|
+
legacyTimers.columns.some((c) => c.name === 'state') &&
|
|
157
|
+
!legacyTimers.columns.some((c) => c.name === 'record_key');
|
|
158
|
+
if (dropLegacyTimers)
|
|
159
|
+
actual.delete(SYSTEM_TABLES.WORKFLOW_TIMERS);
|
|
160
|
+
const systemStatements = diffAll(buildSystemTables(), actual);
|
|
161
|
+
const hardening = (await publicHasTruncate(pool, SYSTEM_TABLES.AUDIT)) ? systemHardeningStatements() : [];
|
|
67
162
|
// existing tables are read-only unless the object opted in (`alter: true`):
|
|
68
163
|
// verify every declared field is a live column (prevents REST/MCP pointing
|
|
69
164
|
// at ghost columns). With `alter: true`, missing fields become ADD COLUMN
|
|
@@ -83,8 +178,9 @@ export async function migrate(registry, options = {}) {
|
|
|
83
178
|
continue;
|
|
84
179
|
for (const field of def.fields) {
|
|
85
180
|
// details fields have no column on the parent (the child table carries
|
|
86
|
-
// parent_id/parent_type/parent_idx)
|
|
87
|
-
|
|
181
|
+
// parent_id/parent_type/parent_idx); multiRelation fields have no column
|
|
182
|
+
// either (a link table carries the pairs) — never ghost-column checks
|
|
183
|
+
if (field.type === FIELD_TYPES.DETAILS || field.type === FIELD_TYPES.MULTI_RELATION)
|
|
88
184
|
continue;
|
|
89
185
|
if (!cols.has(field.name)) {
|
|
90
186
|
throw new SchemaError('object.field.columnMissing', { object: def.name, table: def.name, field: field.name });
|
|
@@ -103,7 +199,7 @@ export async function migrate(registry, options = {}) {
|
|
|
103
199
|
if (roleReady) {
|
|
104
200
|
const { rows } = await pool.query('SELECT current_user AS u');
|
|
105
201
|
const currentUser = String(rows[0].u);
|
|
106
|
-
for (const def of
|
|
202
|
+
for (const def of registry.list()) {
|
|
107
203
|
const actualTable = actual.get(def.name);
|
|
108
204
|
const applies = actualTable === undefined || (def.alter === true && actualTable.owner === currentUser);
|
|
109
205
|
if (!applies) {
|
|
@@ -114,20 +210,57 @@ export async function migrate(registry, options = {}) {
|
|
|
114
210
|
}
|
|
115
211
|
rlsStatements = rlsStatements.concat(diffRls(def, actualTable, options.rls.role));
|
|
116
212
|
}
|
|
213
|
+
// link tables are engine plumbing (never registry-visible): enable
|
|
214
|
+
// RLS with no policy so the restricted role reads 0 rows even if it is
|
|
215
|
+
// ever granted, a second layer behind the sql-gate. The engine runs as
|
|
216
|
+
// the owner and bypasses RLS, so its own reads are unaffected.
|
|
217
|
+
for (const table of linkTables) {
|
|
218
|
+
if (actual.get(table.name)?.rlsEnabled !== true) {
|
|
219
|
+
rlsStatements.push(`ALTER TABLE ${q(table.name)} ENABLE ROW LEVEL SECURITY;`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
117
222
|
}
|
|
118
223
|
}
|
|
119
|
-
const allStatements = [
|
|
224
|
+
const allStatements = [
|
|
225
|
+
...enumStatements,
|
|
226
|
+
...(dropLegacyTimers ? [`DROP TABLE ${q(SYSTEM_TABLES.WORKFLOW_TIMERS)};`] : []),
|
|
227
|
+
...statements,
|
|
228
|
+
...metaStatements,
|
|
229
|
+
...linkStatements,
|
|
230
|
+
...systemStatements,
|
|
231
|
+
...rlsStatements,
|
|
232
|
+
...hardening,
|
|
233
|
+
];
|
|
120
234
|
if (!dryRun && allStatements.length > 0) {
|
|
121
|
-
await ensureMetaTable(pool);
|
|
122
235
|
await applyStatements(pool, allStatements);
|
|
123
236
|
const ts = new Date().toISOString();
|
|
124
237
|
for (const name of applied)
|
|
125
238
|
await setMeta(pool, `schema.applied.${name}`, ts);
|
|
126
239
|
}
|
|
240
|
+
// content-address every object's workflow definition (append-only, idempotent)
|
|
241
|
+
// so running instances can resolve the exact revision they were pinned to.
|
|
242
|
+
if (!dryRun)
|
|
243
|
+
await registerWorkflowDefinitions(pool, defs);
|
|
127
244
|
return { statements: allStatements, applied, dryRun, warnings };
|
|
128
245
|
}
|
|
129
246
|
finally {
|
|
130
247
|
await pool.end();
|
|
131
248
|
}
|
|
132
249
|
}
|
|
250
|
+
/**
|
|
251
|
+
* Upsert each object's current workflow definition into
|
|
252
|
+
* `weavekit_workflow_definitions` (keyed by content hash). Idempotent; the
|
|
253
|
+
* `version_seq` is a monotonic display/switch ordinal. Never rewrites or drops
|
|
254
|
+
* an existing row (append-only revision history for instance pinning).
|
|
255
|
+
*/
|
|
256
|
+
async function registerWorkflowDefinitions(pool, defs) {
|
|
257
|
+
const table = q(SYSTEM_TABLES.WORKFLOW_DEFINITIONS);
|
|
258
|
+
for (const def of defs.values()) {
|
|
259
|
+
if (def.workflow === undefined || def.workflowHash === undefined)
|
|
260
|
+
continue;
|
|
261
|
+
await pool.query(`INSERT INTO ${table} (object, hash, version_seq, definition)
|
|
262
|
+
VALUES ($1, $2, (SELECT COALESCE(MAX(version_seq), 0) + 1 FROM ${table} WHERE object = $1), $3::jsonb)
|
|
263
|
+
ON CONFLICT (object, hash) DO NOTHING`, [def.name, def.workflowHash, JSON.stringify(def.workflow)]);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
133
266
|
//# sourceMappingURL=migrate.js.map
|