@sixb/core 0.1.7 → 0.1.8
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/dist/actions/delegated-admission.d.ts +24 -0
- package/dist/actions/delegated-admission.d.ts.map +1 -0
- package/dist/actions/descriptor.d.ts +29 -0
- package/dist/actions/descriptor.d.ts.map +1 -0
- package/dist/actions/execution.d.ts +5 -5
- package/dist/actions/execution.d.ts.map +1 -1
- package/dist/actions/index.js +36 -30
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-authorization.d.ts +20 -0
- package/dist/actions/run-authorization.d.ts.map +1 -0
- package/dist/actions/run-dispatch.d.ts +3 -1
- package/dist/actions/run-dispatch.d.ts.map +1 -1
- package/dist/actions/worker.js +3 -3
- package/dist/actions/worker.js.map +1 -1
- package/dist/agents/adapters.d.ts +5 -122
- package/dist/agents/adapters.d.ts.map +1 -1
- package/dist/agents/authority.d.ts +1 -1
- package/dist/agents/authority.d.ts.map +1 -1
- package/dist/agents/context-resolution.d.ts.map +1 -1
- package/dist/agents/context.js +1 -1
- package/dist/agents/errors.d.ts +0 -9
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/identity.d.ts +3 -0
- package/dist/agents/identity.d.ts.map +1 -0
- package/dist/agents/index.d.ts +3 -3
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +43 -43
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/message.d.ts +4 -5
- package/dist/agents/message.d.ts.map +1 -1
- package/dist/agents/model-loop.d.ts +2 -0
- package/dist/agents/model-loop.d.ts.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/tool-definition.d.ts +0 -1
- package/dist/agents/tool-definition.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +0 -4
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/ai-usage/execution.d.ts.map +1 -1
- package/dist/auth/index.js +8 -5
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/decision.d.ts +10 -2
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +2 -1
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.d.ts +1 -1
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +7 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/bootstrap/discovery.d.ts +7 -1
- package/dist/bootstrap/discovery.d.ts.map +1 -1
- package/dist/bootstrap/index.js +46 -39
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/bootstrap/ontology-type-manifest.d.ts.map +1 -1
- package/dist/chunk-19jp6g9d.js +131 -0
- package/dist/chunk-19jp6g9d.js.map +11 -0
- package/dist/{chunk-x0qhkqje.js → chunk-2dw777qw.js} +50 -5
- package/dist/{chunk-x0qhkqje.js.map → chunk-2dw777qw.js.map} +4 -3
- package/dist/chunk-359jm1jw.js +147 -0
- package/dist/chunk-359jm1jw.js.map +10 -0
- package/dist/{chunk-2b5qtban.js → chunk-3xep5cjx.js} +56 -21
- package/dist/chunk-3xep5cjx.js.map +15 -0
- package/dist/{chunk-qjycjdj6.js → chunk-3z1qec12.js} +6 -8
- package/dist/{chunk-qjycjdj6.js.map → chunk-3z1qec12.js.map} +2 -2
- package/dist/{chunk-5jcdmjam.js → chunk-4jjp5k14.js} +1 -1
- package/dist/{chunk-n2arzn6e.js → chunk-4qfkag59.js} +44 -221
- package/dist/chunk-4qfkag59.js.map +20 -0
- package/dist/{chunk-rre42skh.js → chunk-4sm0aznx.js} +515 -80
- package/dist/{chunk-rre42skh.js.map → chunk-4sm0aznx.js.map} +11 -7
- package/dist/chunk-4yqmp43v.js +159 -0
- package/dist/chunk-4yqmp43v.js.map +11 -0
- package/dist/{chunk-atmkaf60.js → chunk-5e3pq99w.js} +2 -6
- package/dist/{chunk-atmkaf60.js.map → chunk-5e3pq99w.js.map} +3 -3
- package/dist/{chunk-agsvg9ar.js → chunk-5ntny1qx.js} +1 -1
- package/dist/{chunk-z2sery1b.js → chunk-9nbmsvn5.js} +60 -20
- package/dist/chunk-9nbmsvn5.js.map +11 -0
- package/dist/{chunk-e4rvtvpw.js → chunk-aa2pen2v.js} +250 -78
- package/dist/chunk-aa2pen2v.js.map +34 -0
- package/dist/{chunk-64sr682n.js → chunk-ajnan18g.js} +11 -8
- package/dist/chunk-ajnan18g.js.map +12 -0
- package/dist/{chunk-9aehf39w.js → chunk-f26bck4t.js} +4 -4
- package/dist/{chunk-7ds9620f.js → chunk-fvt9rjsa.js} +23 -7
- package/dist/chunk-fvt9rjsa.js.map +10 -0
- package/dist/{chunk-kt81c11h.js → chunk-gbejpkex.js} +5 -5
- package/dist/{chunk-kt81c11h.js.map → chunk-gbejpkex.js.map} +1 -1
- package/dist/{chunk-vjjv9mrb.js → chunk-gzasd5b6.js} +5 -5
- package/dist/{chunk-vjjv9mrb.js.map → chunk-gzasd5b6.js.map} +3 -3
- package/dist/{chunk-d63tybny.js → chunk-h0k55pc7.js} +4 -4
- package/dist/{chunk-d63tybny.js.map → chunk-h0k55pc7.js.map} +1 -1
- package/dist/chunk-h5vqbfmd.js +1537 -0
- package/dist/chunk-h5vqbfmd.js.map +19 -0
- package/dist/{chunk-3kv70xwp.js → chunk-j1sbhm7p.js} +18 -2
- package/dist/chunk-j1sbhm7p.js.map +10 -0
- package/dist/{chunk-hdz94br2.js → chunk-k522z7v6.js} +10 -5
- package/dist/chunk-k522z7v6.js.map +10 -0
- package/dist/{chunk-wjgm6jjt.js → chunk-mth82m8t.js} +128 -94
- package/dist/chunk-mth82m8t.js.map +14 -0
- package/dist/{chunk-qv38twt8.js → chunk-mwsxn98e.js} +46 -25
- package/dist/{chunk-qv38twt8.js.map → chunk-mwsxn98e.js.map} +6 -6
- package/dist/chunk-n4khvw9n.js +111 -0
- package/dist/chunk-n4khvw9n.js.map +11 -0
- package/dist/{chunk-qjzp9xyb.js → chunk-nn0tekr1.js} +6 -8
- package/dist/chunk-nn0tekr1.js.map +12 -0
- package/dist/chunk-nx7k8tpr.js +436 -0
- package/dist/chunk-nx7k8tpr.js.map +12 -0
- package/dist/{chunk-08twe8m6.js → chunk-p1rzczbt.js} +1 -1
- package/dist/{chunk-37wk412q.js → chunk-p1x242ad.js} +587 -70
- package/dist/chunk-p1x242ad.js.map +25 -0
- package/dist/{chunk-tn7xcs2n.js → chunk-pc7ys28c.js} +68 -5
- package/dist/chunk-pc7ys28c.js.map +14 -0
- package/dist/{chunk-3fqt22c4.js → chunk-q0k9nc5a.js} +280 -88
- package/dist/chunk-q0k9nc5a.js.map +14 -0
- package/dist/chunk-r8jrnexe.js +403 -0
- package/dist/chunk-r8jrnexe.js.map +10 -0
- package/dist/{chunk-gbrpsx4m.js → chunk-rafagrwr.js} +30 -2
- package/dist/chunk-rafagrwr.js.map +11 -0
- package/dist/{chunk-xdpwpkha.js → chunk-rv2hkwwa.js} +1 -1
- package/dist/{chunk-6ed5bwnd.js → chunk-sbzzr4kx.js} +1203 -691
- package/dist/{chunk-6ed5bwnd.js.map → chunk-sbzzr4kx.js.map} +15 -9
- package/dist/{chunk-d2ndstdf.js → chunk-v1xppd0y.js} +13 -11
- package/dist/{chunk-d2ndstdf.js.map → chunk-v1xppd0y.js.map} +2 -2
- package/dist/chunk-v4en4jc2.js +252 -0
- package/dist/chunk-v4en4jc2.js.map +10 -0
- package/dist/{chunk-1kamz6j0.js → chunk-w1tvjszy.js} +1 -1
- package/dist/{chunk-rp1mvzb4.js → chunk-w9tg6yyb.js} +11 -6
- package/dist/{chunk-rp1mvzb4.js.map → chunk-w9tg6yyb.js.map} +3 -3
- package/dist/{chunk-4nxeacx7.js → chunk-wdage1eb.js} +1 -1
- package/dist/{chunk-ha58tjtt.js → chunk-wtf06et8.js} +9 -5
- package/dist/{chunk-ha58tjtt.js.map → chunk-wtf06et8.js.map} +3 -3
- package/dist/{chunk-h0knpbz5.js → chunk-xajtptbw.js} +782 -211
- package/dist/chunk-xajtptbw.js.map +40 -0
- package/dist/{chunk-xc7hq65b.js → chunk-yp8ee62z.js} +49 -2
- package/dist/chunk-yp8ee62z.js.map +11 -0
- package/dist/chunk-z4ccwbkz.js +139 -0
- package/dist/chunk-z4ccwbkz.js.map +10 -0
- package/dist/datasets/builders.d.ts +11 -2
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/changes.d.ts +14 -4
- package/dist/datasets/changes.d.ts.map +1 -1
- package/dist/datasets/execution.d.ts +15 -1
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/index.d.ts +1 -0
- package/dist/datasets/index.d.ts.map +1 -1
- package/dist/datasets/sequence.d.ts +7 -0
- package/dist/datasets/sequence.d.ts.map +1 -0
- package/dist/datasets/types.d.ts +1 -0
- package/dist/datasets/types.d.ts.map +1 -1
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/datasets/write.d.ts +37 -0
- package/dist/datasets/write.d.ts.map +1 -0
- package/dist/datasets/write.js +17 -0
- package/dist/datasets/write.js.map +9 -0
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/types/datasets.d.ts +2 -6
- package/dist/events/types/datasets.d.ts.map +1 -1
- package/dist/execution/agent.d.ts.map +1 -1
- package/dist/execution/agent.js +39 -32
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts +58 -20
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +69 -0
- package/dist/execution/authorized-object-reader.d.ts.map +1 -0
- package/dist/execution/durable.d.ts.map +1 -1
- package/dist/execution/index.d.ts +1 -1
- package/dist/execution/index.d.ts.map +1 -1
- package/dist/execution/primitive.js +39 -32
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.d.ts +11 -0
- package/dist/execution/request.d.ts.map +1 -1
- package/dist/execution/request.js +76 -40
- package/dist/execution/request.js.map +3 -3
- package/dist/execution/scopes.d.ts +16 -0
- package/dist/execution/scopes.d.ts.map +1 -1
- package/dist/execution/types.d.ts +9 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/http/api-routes.d.ts +2 -0
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +92 -78
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/definition-updates.d.ts.map +1 -1
- package/dist/lake-storage/errors.d.ts +5 -1
- package/dist/lake-storage/errors.d.ts.map +1 -1
- package/dist/lake-storage/in-memory.d.ts +1 -0
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.d.ts +6 -1
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +24 -7
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/merge-validation.d.ts.map +1 -1
- package/dist/lake-storage/merge.d.ts +13 -2
- package/dist/lake-storage/merge.d.ts.map +1 -1
- package/dist/lake-storage/source-ordering.d.ts +19 -0
- package/dist/lake-storage/source-ordering.d.ts.map +1 -0
- package/dist/lake-storage/sql-transforms.d.ts +2 -1
- package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
- package/dist/lake-storage/types.d.ts +10 -5
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/lake-storage/version-inputs.d.ts +4 -0
- package/dist/lake-storage/version-inputs.d.ts.map +1 -0
- package/dist/materializer/index.js +25 -22
- package/dist/materializer/index.js.map +1 -1
- package/dist/objects/authorized-ontology-view.d.ts +25 -0
- package/dist/objects/authorized-ontology-view.d.ts.map +1 -0
- package/dist/objects/execution.d.ts +1 -1
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +29 -26
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/authorization.d.ts +2 -7
- package/dist/objects/link/authorization.d.ts.map +1 -1
- package/dist/objects/query/executor.d.ts +4 -2
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.js +24 -21
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/links.d.ts +22 -1
- package/dist/objects/query/links.d.ts.map +1 -1
- package/dist/objects/query/selected-read-admission.d.ts +27 -0
- package/dist/objects/query/selected-read-admission.d.ts.map +1 -0
- package/dist/objects/query/validate.d.ts +60 -2
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts.map +1 -1
- package/dist/objects/sdk/object-set.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts +2 -7
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/telemetry-channel.d.ts.map +1 -1
- package/dist/objects/service/list-service.d.ts +2 -3
- package/dist/objects/service/list-service.d.ts.map +1 -1
- package/dist/objects/telemetry/history.d.ts +8 -6
- package/dist/objects/telemetry/history.d.ts.map +1 -1
- package/dist/objects/telemetry/index.d.ts +2 -2
- package/dist/objects/telemetry/index.d.ts.map +1 -1
- package/dist/objects/telemetry/workload.d.ts +11 -0
- package/dist/objects/telemetry/workload.d.ts.map +1 -0
- package/dist/ontology/index.d.ts +2 -1
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +13 -12
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/inference/index.d.ts +2 -1
- package/dist/ontology/inference/index.d.ts.map +1 -1
- package/dist/ontology/internal.d.ts +0 -1
- package/dist/ontology/internal.d.ts.map +1 -1
- package/dist/ontology/internal.js +5 -10
- package/dist/ontology/internal.js.map +3 -3
- package/dist/ontology/json-schema.d.ts +10 -6
- package/dist/ontology/json-schema.d.ts.map +1 -1
- package/dist/ontology/link-path-selection.d.ts +35 -0
- package/dist/ontology/link-path-selection.d.ts.map +1 -0
- package/dist/ontology/refs.d.ts +2 -0
- package/dist/ontology/refs.d.ts.map +1 -1
- package/dist/ontology/tokens.d.ts +2 -1
- package/dist/ontology/tokens.d.ts.map +1 -1
- package/dist/pipelines/execution.d.ts.map +1 -1
- package/dist/pipelines/index.js +27 -24
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/request.d.ts.map +1 -1
- package/dist/projections/execution.d.ts.map +1 -1
- package/dist/projections/internal.js +25 -22
- package/dist/projections/internal.js.map +1 -1
- package/dist/projections/run-dispatch.d.ts.map +1 -1
- package/dist/rules/execution.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +4 -1
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/definitions.d.ts +2 -0
- package/dist/runtime/definitions.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +2 -0
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +1 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts +2 -0
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +4 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +3 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schedules/execution.d.ts +2 -1
- package/dist/schedules/execution.d.ts.map +1 -1
- package/dist/security/every.d.ts +4 -1
- package/dist/security/every.d.ts.map +1 -1
- package/dist/security/grants.d.ts +7 -2
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/registry.d.ts +1 -0
- package/dist/security/registry.d.ts.map +1 -1
- package/dist/security/types.d.ts +7 -1
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts +2 -0
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/access-plan.d.ts +22 -0
- package/dist/shares/access-plan.d.ts.map +1 -0
- package/dist/shares/builders.d.ts +14 -0
- package/dist/shares/builders.d.ts.map +1 -0
- package/dist/shares/compiler.d.ts +14 -0
- package/dist/shares/compiler.d.ts.map +1 -0
- package/dist/shares/errors.d.ts +4 -0
- package/dist/shares/errors.d.ts.map +1 -0
- package/dist/shares/execution.d.ts +57 -0
- package/dist/shares/execution.d.ts.map +1 -0
- package/dist/shares/index.d.ts +10 -0
- package/dist/shares/index.d.ts.map +1 -0
- package/dist/shares/internal.d.ts +3 -0
- package/dist/shares/internal.d.ts.map +1 -0
- package/dist/shares/internal.js +239 -0
- package/dist/shares/internal.js.map +10 -0
- package/dist/shares/intersection.d.ts +9 -0
- package/dist/shares/intersection.d.ts.map +1 -0
- package/dist/shares/session-protocol.d.ts +41 -0
- package/dist/shares/session-protocol.d.ts.map +1 -0
- package/dist/shares/types.d.ts +51 -0
- package/dist/shares/types.d.ts.map +1 -0
- package/dist/shares/validation.d.ts +11 -0
- package/dist/shares/validation.d.ts.map +1 -0
- package/dist/storage/action-runs/provider.js +2 -2
- package/dist/storage/agents/provider.js +2 -2
- package/dist/storage/executions/in-memory.d.ts +3 -0
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +4 -1
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +23 -3
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/run-link.d.ts +7 -0
- package/dist/storage/executions/run-link.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts +6 -0
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/in-memory/index.d.ts +8 -0
- package/dist/storage/in-memory/index.d.ts.map +1 -1
- package/dist/storage/index.d.ts +8 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +65 -36
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/objects/execution-limits.d.ts +25 -0
- package/dist/storage/objects/execution-limits.d.ts.map +1 -0
- package/dist/storage/objects/guard.d.ts +16 -0
- package/dist/storage/objects/guard.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/index.d.ts +3 -0
- package/dist/storage/objects/in-memory/index.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/keys.d.ts +10 -0
- package/dist/storage/objects/in-memory/keys.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/query.d.ts +31 -0
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/read-scope.d.ts +18 -0
- package/dist/storage/objects/in-memory/read-scope.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/read-source.d.ts +10 -0
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts +9 -0
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -0
- package/dist/storage/objects/{in-memory.d.ts → in-memory/storage.d.ts} +13 -10
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -0
- package/dist/storage/objects/index.d.ts +4 -1
- package/dist/storage/objects/index.d.ts.map +1 -1
- package/dist/storage/objects/keys.d.ts +1 -1
- package/dist/storage/objects/keys.d.ts.map +1 -1
- package/dist/storage/objects/read-scope.d.ts +25 -0
- package/dist/storage/objects/read-scope.d.ts.map +1 -0
- package/dist/storage/objects/types.d.ts +114 -22
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/operation-scope.d.ts +3 -0
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +4 -2
- package/dist/storage/operation-scope.js.map +1 -1
- package/dist/storage/pipeline-runs/provider.js +2 -2
- package/dist/storage/projection-runs/provider.js +2 -2
- package/dist/storage/share-grants/errors.d.ts +8 -0
- package/dist/storage/share-grants/errors.d.ts.map +1 -0
- package/dist/storage/share-grants/in-memory.d.ts +11 -0
- package/dist/storage/share-grants/in-memory.d.ts.map +1 -0
- package/dist/storage/share-grants/index.d.ts +5 -0
- package/dist/storage/share-grants/index.d.ts.map +1 -0
- package/dist/storage/share-grants/provider.d.ts +4 -0
- package/dist/storage/share-grants/provider.d.ts.map +1 -0
- package/dist/storage/share-grants/provider.js +24 -0
- package/dist/storage/share-grants/provider.js.map +9 -0
- package/dist/storage/share-grants/record.d.ts +11 -0
- package/dist/storage/share-grants/record.d.ts.map +1 -0
- package/dist/storage/share-grants/types.d.ts +97 -0
- package/dist/storage/share-grants/types.d.ts.map +1 -0
- package/dist/storage/share-sessions/errors.d.ts +8 -0
- package/dist/storage/share-sessions/errors.d.ts.map +1 -0
- package/dist/storage/share-sessions/in-memory.d.ts +14 -0
- package/dist/storage/share-sessions/in-memory.d.ts.map +1 -0
- package/dist/storage/share-sessions/index.d.ts +5 -0
- package/dist/storage/share-sessions/index.d.ts.map +1 -0
- package/dist/storage/share-sessions/provider.d.ts +3 -0
- package/dist/storage/share-sessions/provider.d.ts.map +1 -0
- package/dist/storage/share-sessions/provider.js +20 -0
- package/dist/storage/share-sessions/provider.js.map +9 -0
- package/dist/storage/share-sessions/record.d.ts +8 -0
- package/dist/storage/share-sessions/record.d.ts.map +1 -0
- package/dist/storage/share-sessions/types.d.ts +50 -0
- package/dist/storage/share-sessions/types.d.ts.map +1 -0
- package/dist/storage/sync-runs/provider.js +2 -2
- package/dist/storage/transaction.d.ts +2 -1
- package/dist/storage/transaction.d.ts.map +1 -1
- package/dist/storage/types.d.ts +8 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/webhook-runs/provider.js +2 -2
- package/dist/storage/workflow-runs/provider.js +10 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/execution.d.ts.map +1 -1
- package/dist/syncs/index.js +27 -24
- package/dist/syncs/index.js.map +1 -1
- package/dist/syncs/request.d.ts.map +1 -1
- package/dist/testing/dataset-sequence-contract.d.ts +4 -0
- package/dist/testing/dataset-sequence-contract.d.ts.map +1 -0
- package/dist/testing/effective-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts +4 -0
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2555 -908
- package/dist/testing/index.js.map +11 -7
- package/dist/testing/lake-merge-storage-contract.d.ts +1 -0
- package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts +22 -0
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -0
- package/dist/testing/share-grant-storage-contract.d.ts +10 -0
- package/dist/testing/share-grant-storage-contract.d.ts.map +1 -0
- package/dist/testing/share-session-storage-contract.d.ts +9 -0
- package/dist/testing/share-session-storage-contract.d.ts.map +1 -0
- package/dist/webhooks/internal.js +24 -21
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workflows/execution.d.ts.map +1 -1
- package/dist/workflows/index.js +42 -35
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/request.d.ts.map +1 -1
- package/package.json +25 -1
- package/src/actions/delegated-admission.ts +72 -0
- package/src/actions/descriptor.ts +58 -0
- package/src/actions/execution.ts +99 -24
- package/src/actions/request.ts +136 -19
- package/src/actions/run-authorization.ts +53 -0
- package/src/actions/run-dispatch.ts +8 -1
- package/src/agents/adapters.ts +30 -420
- package/src/agents/authority.ts +3 -4
- package/src/agents/context-resolution.ts +1 -4
- package/src/agents/errors.ts +0 -10
- package/src/agents/execution.ts +13 -5
- package/src/agents/identity.ts +4 -0
- package/src/agents/index.ts +1 -20
- package/src/agents/message.ts +4 -5
- package/src/agents/model-loop.ts +54 -6
- package/src/agents/request.ts +16 -3
- package/src/agents/tool-definition.ts +0 -19
- package/src/agents/validation.ts +6 -65
- package/src/ai-usage/execution.ts +4 -11
- package/src/authorization/decision.ts +29 -14
- package/src/authorization/grant-kinds.ts +10 -0
- package/src/authorization/index.ts +1 -0
- package/src/bootstrap/discovery.ts +3 -0
- package/src/bootstrap/ontology-type-manifest.ts +12 -6
- package/src/datasets/builders.ts +23 -2
- package/src/datasets/changes.ts +16 -4
- package/src/datasets/execution.ts +76 -5
- package/src/datasets/index.ts +1 -0
- package/src/datasets/sequence.ts +77 -0
- package/src/datasets/types.ts +1 -0
- package/src/datasets/validation.ts +26 -0
- package/src/datasets/write.ts +240 -0
- package/src/events/execution.ts +57 -7
- package/src/events/types/datasets.ts +2 -6
- package/src/execution/agent.ts +1 -4
- package/src/execution/authorization.ts +470 -90
- package/src/execution/authorized-object-reader.ts +695 -0
- package/src/execution/durable.ts +10 -2
- package/src/execution/index.ts +1 -0
- package/src/execution/request.ts +63 -13
- package/src/execution/scopes.ts +36 -6
- package/src/execution/types.ts +8 -0
- package/src/http/api-routes.ts +45 -0
- package/src/index.ts +36 -15
- package/src/lake-storage/definition-updates.ts +9 -0
- package/src/lake-storage/errors.ts +6 -1
- package/src/lake-storage/in-memory.ts +53 -17
- package/src/lake-storage/index.ts +10 -1
- package/src/lake-storage/merge-validation.ts +12 -2
- package/src/lake-storage/merge.ts +40 -2
- package/src/lake-storage/source-ordering.ts +95 -0
- package/src/lake-storage/sql-transforms.ts +2 -1
- package/src/lake-storage/types.ts +10 -5
- package/src/lake-storage/version-inputs.ts +14 -0
- package/src/objects/authorized-ontology-view.ts +512 -0
- package/src/objects/execution.ts +98 -143
- package/src/objects/link/authorization.ts +3 -2
- package/src/objects/query/executor.ts +45 -34
- package/src/objects/query/links.ts +84 -25
- package/src/objects/query/selected-read-admission.ts +310 -0
- package/src/objects/query/validate.ts +353 -36
- package/src/objects/sdk/object-handle.ts +2 -8
- package/src/objects/sdk/object-set.ts +10 -11
- package/src/objects/sdk/runtime-query-executor.ts +8 -28
- package/src/objects/sdk/telemetry-channel.ts +11 -7
- package/src/objects/service/list-service.ts +15 -29
- package/src/objects/telemetry/history.ts +297 -17
- package/src/objects/telemetry/index.ts +2 -2
- package/src/objects/telemetry/workload.ts +79 -0
- package/src/ontology/index.ts +7 -1
- package/src/ontology/inference/index.ts +4 -1
- package/src/ontology/internal.ts +0 -1
- package/src/ontology/json-schema.ts +13 -12
- package/src/ontology/link-path-selection.ts +193 -0
- package/src/ontology/refs.ts +19 -0
- package/src/ontology/tokens.ts +15 -8
- package/src/pipelines/execution.ts +30 -7
- package/src/pipelines/request.ts +5 -0
- package/src/projections/execution.ts +72 -11
- package/src/projections/run-dispatch.ts +6 -12
- package/src/rules/execution.ts +20 -8
- package/src/runtime/create.ts +5 -1
- package/src/runtime/definitions.ts +2 -0
- package/src/runtime/host.ts +25 -6
- package/src/runtime/internal.ts +1 -0
- package/src/runtime/resolve-definitions.ts +9 -0
- package/src/runtime/sixb.ts +23 -2
- package/src/runtime/types.ts +3 -0
- package/src/schedules/execution.ts +24 -2
- package/src/security/every.ts +4 -0
- package/src/security/grants.ts +45 -3
- package/src/security/index.ts +1 -0
- package/src/security/registry.ts +3 -0
- package/src/security/types.ts +8 -0
- package/src/security/validation.ts +3 -0
- package/src/shares/access-plan.ts +225 -0
- package/src/shares/builders.ts +381 -0
- package/src/shares/compiler.ts +359 -0
- package/src/shares/errors.ts +3 -0
- package/src/shares/execution.ts +394 -0
- package/src/shares/index.ts +28 -0
- package/src/shares/internal.ts +9 -0
- package/src/shares/intersection.ts +178 -0
- package/src/shares/session-protocol.ts +258 -0
- package/src/shares/types.ts +76 -0
- package/src/shares/validation.ts +40 -0
- package/src/storage/executions/in-memory.ts +9 -1
- package/src/storage/executions/provider.ts +30 -1
- package/src/storage/executions/run-link.ts +29 -0
- package/src/storage/executions/validation.ts +46 -1
- package/src/storage/in-memory/index.ts +21 -2
- package/src/storage/index.ts +51 -0
- package/src/storage/objects/execution-limits.ts +283 -0
- package/src/storage/objects/guard.ts +55 -0
- package/src/storage/objects/in-memory/index.ts +2 -0
- package/src/storage/objects/in-memory/keys.ts +46 -0
- package/src/storage/objects/in-memory/query.ts +754 -0
- package/src/storage/objects/in-memory/read-scope.ts +211 -0
- package/src/storage/objects/in-memory/read-source.ts +10 -0
- package/src/storage/objects/in-memory/selected-reader.ts +252 -0
- package/src/storage/objects/in-memory/storage.ts +589 -0
- package/src/storage/objects/index.ts +21 -0
- package/src/storage/objects/keys.ts +1 -1
- package/src/storage/objects/read-scope.ts +672 -0
- package/src/storage/objects/types.ts +123 -19
- package/src/storage/operation-scope.ts +16 -0
- package/src/storage/share-grants/errors.ts +14 -0
- package/src/storage/share-grants/in-memory.ts +107 -0
- package/src/storage/share-grants/index.ts +14 -0
- package/src/storage/share-grants/provider.ts +11 -0
- package/src/storage/share-grants/record.ts +347 -0
- package/src/storage/share-grants/types.ts +112 -0
- package/src/storage/share-sessions/errors.ts +14 -0
- package/src/storage/share-sessions/in-memory.ts +105 -0
- package/src/storage/share-sessions/index.ts +11 -0
- package/src/storage/share-sessions/provider.ts +9 -0
- package/src/storage/share-sessions/record.ts +176 -0
- package/src/storage/share-sessions/types.ts +57 -0
- package/src/storage/transaction.ts +14 -2
- package/src/storage/types.ts +27 -0
- package/src/syncs/execution.ts +25 -5
- package/src/syncs/request.ts +5 -0
- package/src/testing/dataset-sequence-contract.ts +373 -0
- package/src/testing/effective-storage-contract.ts +34 -0
- package/src/testing/execution-storage-contract.ts +79 -0
- package/src/testing/index.ts +16 -0
- package/src/testing/lake-merge-storage-contract.ts +3 -0
- package/src/testing/lake-storage-contract.ts +58 -0
- package/src/testing/object-read-scope-contract.ts +939 -0
- package/src/testing/share-grant-storage-contract.ts +325 -0
- package/src/testing/share-session-storage-contract.ts +235 -0
- package/src/workflows/execution.ts +53 -14
- package/src/workflows/request.ts +5 -0
- package/dist/chunk-2b5qtban.js.map +0 -14
- package/dist/chunk-37wk412q.js.map +0 -23
- package/dist/chunk-3fqt22c4.js.map +0 -14
- package/dist/chunk-3kv70xwp.js.map +0 -10
- package/dist/chunk-64sr682n.js.map +0 -12
- package/dist/chunk-7ds9620f.js.map +0 -10
- package/dist/chunk-dqn23610.js +0 -72
- package/dist/chunk-dqn23610.js.map +0 -11
- package/dist/chunk-e4rvtvpw.js.map +0 -34
- package/dist/chunk-gbrpsx4m.js.map +0 -11
- package/dist/chunk-h0knpbz5.js.map +0 -38
- package/dist/chunk-hdz94br2.js.map +0 -10
- package/dist/chunk-n2arzn6e.js.map +0 -20
- package/dist/chunk-qjzp9xyb.js.map +0 -12
- package/dist/chunk-tn7xcs2n.js.map +0 -13
- package/dist/chunk-wjgm6jjt.js.map +0 -13
- package/dist/chunk-xc7hq65b.js.map +0 -10
- package/dist/chunk-y35ma3mj.js +0 -551
- package/dist/chunk-y35ma3mj.js.map +0 -15
- package/dist/chunk-z2sery1b.js.map +0 -11
- package/dist/storage/objects/in-memory.d.ts.map +0 -1
- package/src/storage/objects/in-memory.ts +0 -1241
- /package/dist/{chunk-5jcdmjam.js.map → chunk-4jjp5k14.js.map} +0 -0
- /package/dist/{chunk-agsvg9ar.js.map → chunk-5ntny1qx.js.map} +0 -0
- /package/dist/{chunk-9aehf39w.js.map → chunk-f26bck4t.js.map} +0 -0
- /package/dist/{chunk-08twe8m6.js.map → chunk-p1rzczbt.js.map} +0 -0
- /package/dist/{chunk-xdpwpkha.js.map → chunk-rv2hkwwa.js.map} +0 -0
- /package/dist/{chunk-1kamz6j0.js.map → chunk-w1tvjszy.js.map} +0 -0
- /package/dist/{chunk-4nxeacx7.js.map → chunk-wdage1eb.js.map} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir, readdir, readFile, writeFile } from "node:fs/promises"
|
|
1
|
+
import { access, mkdir, readdir, readFile, writeFile } from "node:fs/promises"
|
|
2
2
|
import { dirname, extname, join, relative, resolve, sep } from "node:path"
|
|
3
3
|
import { pathToFileURL } from "node:url"
|
|
4
4
|
import type { OntologyDocumentInput } from "../ontology/registry"
|
|
@@ -75,11 +75,17 @@ export async function generateOntologyTypeManifest(
|
|
|
75
75
|
const discovery = await discoverOntologyTypeManifest(projectRoot)
|
|
76
76
|
|
|
77
77
|
if (discovery.moduleCount === 0) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
78
|
+
// Leave projects without ontology untouched, but clear a previously generated map.
|
|
79
|
+
try {
|
|
80
|
+
await access(outFile)
|
|
81
|
+
} catch (error) {
|
|
82
|
+
if (!isNotFoundError(error)) throw error
|
|
83
|
+
return {
|
|
84
|
+
...discovery,
|
|
85
|
+
path: outFile,
|
|
86
|
+
written: false,
|
|
87
|
+
skipped: true,
|
|
88
|
+
}
|
|
83
89
|
}
|
|
84
90
|
}
|
|
85
91
|
|
package/src/datasets/builders.ts
CHANGED
|
@@ -15,6 +15,7 @@ type DatasetColumnOptions = {
|
|
|
15
15
|
type DefineDatasetOptions = {
|
|
16
16
|
readonly schema: readonly DatasetColumnDefinition[]
|
|
17
17
|
readonly primaryKey?: DatasetPrimaryKey
|
|
18
|
+
readonly sequenceBy?: string
|
|
18
19
|
readonly partitionBy?: readonly string[]
|
|
19
20
|
readonly description?: string
|
|
20
21
|
}
|
|
@@ -23,6 +24,7 @@ type DeriveDatasetOptions<TParent extends DatasetDefinition> = {
|
|
|
23
24
|
readonly pick?: readonly DatasetColumnNameOf<TParent>[]
|
|
24
25
|
readonly add?: readonly DatasetColumnDefinition[]
|
|
25
26
|
readonly primaryKey?: DatasetPrimaryKey
|
|
27
|
+
readonly sequenceBy?: string
|
|
26
28
|
readonly partitionBy?: readonly string[]
|
|
27
29
|
readonly description?: string
|
|
28
30
|
}
|
|
@@ -58,8 +60,22 @@ type PrimaryKeyColumnNameOf<TColumns extends readonly DatasetColumnDefinition[]>
|
|
|
58
60
|
|
|
59
61
|
type CheckedDefineDatasetOptions<TOptions extends DefineDatasetOptions> = TOptions & {
|
|
60
62
|
readonly primaryKey?: DatasetPrimaryKey<PrimaryKeyColumnNameOf<TOptions["schema"]>>
|
|
63
|
+
readonly sequenceBy?: SequenceColumnNameOf<TOptions["schema"]>
|
|
61
64
|
}
|
|
62
65
|
|
|
66
|
+
type SequenceColumnNameOf<TColumns extends readonly DatasetColumnDefinition[]> =
|
|
67
|
+
string extends ColumnNameOf<TColumns>
|
|
68
|
+
? string
|
|
69
|
+
: {
|
|
70
|
+
[TName in ColumnNameOf<TColumns>]: ColumnDefinitionOf<TColumns, TName>["type"] extends
|
|
71
|
+
| "timestamp"
|
|
72
|
+
| "int64"
|
|
73
|
+
? ColumnDefinitionOf<TColumns, TName> extends { readonly nullable: true }
|
|
74
|
+
? never
|
|
75
|
+
: TName
|
|
76
|
+
: never
|
|
77
|
+
}[ColumnNameOf<TColumns>]
|
|
78
|
+
|
|
63
79
|
type PickColumns<
|
|
64
80
|
TColumns extends readonly DatasetColumnDefinition[],
|
|
65
81
|
TNames extends readonly ColumnNameOf<TColumns>[],
|
|
@@ -107,8 +123,9 @@ type DatasetColumnResult<
|
|
|
107
123
|
|
|
108
124
|
type DatasetDefinitionResult<TId extends string, TOptions extends DefineDatasetOptions> = Omit<
|
|
109
125
|
DatasetDefinition<TId, TOptions["schema"]>,
|
|
110
|
-
"primaryKey" | "partitionBy" | "description"
|
|
126
|
+
"primaryKey" | "sequenceBy" | "partitionBy" | "description"
|
|
111
127
|
> &
|
|
128
|
+
FieldFromOptions<TOptions, "sequenceBy", string> &
|
|
112
129
|
FieldFromOptions<TOptions, "primaryKey", DatasetPrimaryKey> &
|
|
113
130
|
FieldFromOptions<TOptions, "partitionBy", readonly string[]> &
|
|
114
131
|
FieldFromOptions<TOptions, "description", string>
|
|
@@ -119,8 +136,9 @@ type DerivedDatasetDefinitionResult<
|
|
|
119
136
|
TOptions extends DeriveDatasetOptions<TParent> | undefined,
|
|
120
137
|
> = Omit<
|
|
121
138
|
DatasetDefinition<TId, DerivedColumns<TParent, TOptions>>,
|
|
122
|
-
"primaryKey" | "partitionBy" | "description"
|
|
139
|
+
"primaryKey" | "sequenceBy" | "partitionBy" | "description"
|
|
123
140
|
> &
|
|
141
|
+
FieldFromOptions<TOptions, "sequenceBy", string> &
|
|
124
142
|
FieldFromOptions<TOptions, "primaryKey", DatasetPrimaryKey> &
|
|
125
143
|
FieldFromOptions<TOptions, "partitionBy", readonly string[]> &
|
|
126
144
|
FieldFromOptions<TOptions, "description", string>
|
|
@@ -130,6 +148,7 @@ type CheckedDeriveDatasetOptions<
|
|
|
130
148
|
TOptions extends DeriveDatasetOptions<TParent>,
|
|
131
149
|
> = TOptions & {
|
|
132
150
|
readonly primaryKey?: DatasetPrimaryKey<PrimaryKeyColumnNameOf<DerivedColumns<TParent, TOptions>>>
|
|
151
|
+
readonly sequenceBy?: SequenceColumnNameOf<DerivedColumns<TParent, TOptions>>
|
|
133
152
|
}
|
|
134
153
|
|
|
135
154
|
export function col<const TName extends string, const TType extends DatasetColumnType>(
|
|
@@ -177,6 +196,7 @@ function createDatasetDefinition(id: string, options: DefineDatasetOptions): Dat
|
|
|
177
196
|
}
|
|
178
197
|
: {}),
|
|
179
198
|
...(options.partitionBy !== undefined ? { partitionBy: [...options.partitionBy] } : {}),
|
|
199
|
+
...(options.sequenceBy !== undefined ? { sequenceBy: options.sequenceBy } : {}),
|
|
180
200
|
...(options.description !== undefined ? { description: options.description } : {}),
|
|
181
201
|
}
|
|
182
202
|
|
|
@@ -230,6 +250,7 @@ function deriveDatasetDefinition(
|
|
|
230
250
|
return createDatasetDefinition(id, {
|
|
231
251
|
schema: [...pickedColumns, ...(options.add ?? [])],
|
|
232
252
|
...(options.primaryKey !== undefined ? { primaryKey: options.primaryKey } : {}),
|
|
253
|
+
...(options.sequenceBy !== undefined ? { sequenceBy: options.sequenceBy } : {}),
|
|
233
254
|
...(options.partitionBy !== undefined ? { partitionBy: options.partitionBy } : {}),
|
|
234
255
|
...(options.description !== undefined ? { description: options.description } : {}),
|
|
235
256
|
})
|
package/src/datasets/changes.ts
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
export type MergeChange<Row, Key> =
|
|
2
2
|
| { readonly kind: "upsert"; readonly row: Row }
|
|
3
|
-
| { readonly kind: "delete"; readonly key: Key }
|
|
3
|
+
| { readonly kind: "delete"; readonly key: Key; readonly sequence?: string | number | Date }
|
|
4
4
|
|
|
5
5
|
export const change = {
|
|
6
6
|
upsert<const Row extends object>(row: Row): { readonly kind: "upsert"; readonly row: Row } {
|
|
7
7
|
return { kind: "upsert", row }
|
|
8
8
|
},
|
|
9
9
|
|
|
10
|
-
delete
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
delete: deleteChange,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function deleteChange<const Key extends object>(
|
|
14
|
+
key: Key
|
|
15
|
+
): { readonly kind: "delete"; readonly key: Key }
|
|
16
|
+
function deleteChange<const Key extends object, const Sequence extends string | number | Date>(
|
|
17
|
+
key: Key,
|
|
18
|
+
options: { readonly sequence: Sequence }
|
|
19
|
+
): { readonly kind: "delete"; readonly key: Key; readonly sequence: Sequence }
|
|
20
|
+
function deleteChange<Key extends object>(
|
|
21
|
+
key: Key,
|
|
22
|
+
options?: { readonly sequence: string | number | Date }
|
|
23
|
+
): { readonly kind: "delete"; readonly key: Key; readonly sequence?: string | number | Date } {
|
|
24
|
+
return { kind: "delete", key, ...(options ? { sequence: options.sequence } : {}) }
|
|
13
25
|
}
|
|
@@ -1,24 +1,95 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { assertPrivileged, isRuntimeAllowed } from "../authorization"
|
|
2
|
+
import type { BlobStorage } from "../blob-storage"
|
|
3
|
+
import type { ExecutionContext } from "../execution"
|
|
4
|
+
import { resolveRuntimeAuthorizationForProject } from "../execution/authorization"
|
|
5
|
+
import type { DatasetMergeCommitResult } from "../lake-storage/merge"
|
|
6
|
+
import { getDatasetPrimaryKeyColumns } from "../lake-storage/merge-validation"
|
|
7
|
+
import type { DatasetRow, LakeStorage } from "../lake-storage/types"
|
|
2
8
|
import type { SixbRuntimeContext } from "../runtime/types"
|
|
9
|
+
import type { MergeChange } from "./changes"
|
|
3
10
|
import type { DatasetDefinition } from "./types"
|
|
11
|
+
import { writeDataset } from "./write"
|
|
12
|
+
|
|
13
|
+
export interface DatasetIngestInput {
|
|
14
|
+
readonly changes:
|
|
15
|
+
| Iterable<MergeChange<DatasetRow, DatasetRow>>
|
|
16
|
+
| AsyncIterable<MergeChange<DatasetRow, DatasetRow>>
|
|
17
|
+
readonly signal?: AbortSignal
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Source commit result; downstream pipelines and projections run asynchronously. */
|
|
21
|
+
export type DatasetIngestResult = DatasetMergeCommitResult & { readonly rowsRead: number }
|
|
4
22
|
|
|
5
23
|
export interface DatasetsRuntime {
|
|
6
24
|
list(): readonly DatasetDefinition[]
|
|
7
25
|
getById(datasetId: string): DatasetDefinition | null
|
|
26
|
+
ingest(dataset: DatasetDefinition, input: DatasetIngestInput): Promise<DatasetIngestResult>
|
|
8
27
|
}
|
|
9
28
|
|
|
10
29
|
export function createDatasetsRuntime(
|
|
11
|
-
runtime:
|
|
12
|
-
|
|
30
|
+
runtime: SixbRuntimeContext,
|
|
31
|
+
execution: ExecutionContext,
|
|
32
|
+
source: Pick<DatasetsRuntime, "list" | "getById">,
|
|
33
|
+
lakeStorage: LakeStorage,
|
|
34
|
+
blobStorage: Pick<BlobStorage, "stat">
|
|
13
35
|
): DatasetsRuntime {
|
|
36
|
+
const authority = resolveRuntimeAuthorizationForProject(runtime)
|
|
14
37
|
const allowed = (datasetId: string) =>
|
|
15
|
-
|
|
38
|
+
isRuntimeAllowed(runtime, { kind: "dataset.view", datasetId })
|
|
16
39
|
|
|
17
40
|
return {
|
|
18
|
-
list: () =>
|
|
41
|
+
list: () =>
|
|
42
|
+
authority.type === "denied" || authority.type === "delegated"
|
|
43
|
+
? []
|
|
44
|
+
: source.list().filter((dataset) => allowed(dataset.id)),
|
|
19
45
|
getById: (datasetId) => {
|
|
46
|
+
if (authority.type === "denied" || authority.type === "delegated") return null
|
|
20
47
|
const dataset = source.getById(datasetId)
|
|
21
48
|
return dataset && allowed(datasetId) ? dataset : null
|
|
22
49
|
},
|
|
50
|
+
async ingest(dataset, input) {
|
|
51
|
+
assertPrivileged(runtime, "datasets.ingest")
|
|
52
|
+
const registered = source.getById(dataset.id)
|
|
53
|
+
if (!registered) throw new Error(`[Sixb] Dataset '${dataset.id}' is not registered.`)
|
|
54
|
+
if (getDatasetPrimaryKeyColumns(registered) === null) {
|
|
55
|
+
throw new Error(`[Sixb] Dataset '${dataset.id}' must define a primaryKey before ingestion.`)
|
|
56
|
+
}
|
|
57
|
+
if (typeof lakeStorage.beginMerge !== "function") {
|
|
58
|
+
throw new Error("[Sixb] Dataset ingestion requires a lake provider with merge support.")
|
|
59
|
+
}
|
|
60
|
+
const producer = { kind: "ingest" as const, id: execution.id }
|
|
61
|
+
const result = await writeDataset({
|
|
62
|
+
lakeStorage,
|
|
63
|
+
blobStorage,
|
|
64
|
+
dataset: registered,
|
|
65
|
+
mode: "merge",
|
|
66
|
+
signal: input.signal ?? new AbortController().signal,
|
|
67
|
+
producer,
|
|
68
|
+
readValues: async () =>
|
|
69
|
+
(async function* () {
|
|
70
|
+
for await (const value of input.changes) yield { value }
|
|
71
|
+
})(),
|
|
72
|
+
})
|
|
73
|
+
if (result.outcome === "created") {
|
|
74
|
+
await runtime.events.emit(
|
|
75
|
+
{
|
|
76
|
+
events: [
|
|
77
|
+
{
|
|
78
|
+
type: "dataset.version.committed",
|
|
79
|
+
payload: {
|
|
80
|
+
datasetId: registered.id,
|
|
81
|
+
versionId: result.version.versionId,
|
|
82
|
+
createdAt: result.version.createdAt.toISOString(),
|
|
83
|
+
producer,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
correlationId: execution.correlationId,
|
|
88
|
+
},
|
|
89
|
+
{ source: "SixbDatasets" }
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
return result
|
|
93
|
+
},
|
|
23
94
|
}
|
|
24
95
|
}
|
package/src/datasets/index.ts
CHANGED
|
@@ -2,6 +2,7 @@ export { col, defineDataset } from "./builders"
|
|
|
2
2
|
export type { MergeChange } from "./changes"
|
|
3
3
|
export { change } from "./changes"
|
|
4
4
|
export { DatasetValidationError } from "./errors"
|
|
5
|
+
export type { DatasetIngestInput, DatasetIngestResult, DatasetsRuntime } from "./execution"
|
|
5
6
|
export type {
|
|
6
7
|
DatasetColumnDefinition,
|
|
7
8
|
DatasetColumnDefinitionOf,
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { DatasetDefinition } from "./types"
|
|
2
|
+
|
|
3
|
+
const MIN_INT64 = -(1n << 63n)
|
|
4
|
+
const MAX_INT64 = (1n << 63n) - 1n
|
|
5
|
+
|
|
6
|
+
/** Normalize source ordering to an exact integer (timestamp milliseconds or signed int64). */
|
|
7
|
+
export function datasetSequenceValue(dataset: DatasetDefinition, value: unknown): bigint {
|
|
8
|
+
const column = dataset.schema.columns.find((column) => column.name === dataset.sequenceBy)
|
|
9
|
+
if (column?.type === "int64") {
|
|
10
|
+
if (
|
|
11
|
+
(typeof value === "number" && Number.isSafeInteger(value)) ||
|
|
12
|
+
(typeof value === "string" && /^-?\d+$/.test(value))
|
|
13
|
+
) {
|
|
14
|
+
const integer = BigInt(value)
|
|
15
|
+
if (integer >= MIN_INT64 && integer <= MAX_INT64) return integer
|
|
16
|
+
}
|
|
17
|
+
throw new Error(
|
|
18
|
+
`Dataset '${dataset.id}' sequence must be a signed int64; use a string outside the safe integer range.`
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
if (column?.type === "timestamp") {
|
|
22
|
+
const millis = parseDatasetTimestamp(value)
|
|
23
|
+
if (millis !== null) return BigInt(millis)
|
|
24
|
+
throw new Error(
|
|
25
|
+
`Dataset '${dataset.id}' sequence must be a valid Date or ISO timestamp with an explicit timezone and at most millisecond precision.`
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
throw new Error(
|
|
29
|
+
`Dataset '${dataset.id}' sequenceBy must reference a non-nullable timestamp or int64 column.`
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Date.parse alone normalizes impossible calendar dates instead of rejecting them. */
|
|
34
|
+
export function parseDatasetTimestamp(value: unknown): number | null {
|
|
35
|
+
if (value instanceof Date && Number.isFinite(value.getTime())) return value.getTime()
|
|
36
|
+
if (typeof value === "string") {
|
|
37
|
+
const match =
|
|
38
|
+
/^([+-]\d{6}|\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?(Z|[+-]\d{2}:\d{2})$/.exec(
|
|
39
|
+
value
|
|
40
|
+
)
|
|
41
|
+
if (match) {
|
|
42
|
+
const [, year, month, day, hour, minute, second, , zone] = match
|
|
43
|
+
const numericYear = Number(year)
|
|
44
|
+
const leapYear = numericYear % 4 === 0 && (numericYear % 100 !== 0 || numericYear % 400 === 0)
|
|
45
|
+
const days =
|
|
46
|
+
Number(month) === 2 ? (leapYear ? 29 : 28) : [4, 6, 9, 11].includes(Number(month)) ? 30 : 31
|
|
47
|
+
const validZone =
|
|
48
|
+
zone === "Z" || (Number(zone?.slice(1, 3)) <= 23 && Number(zone?.slice(4)) <= 59)
|
|
49
|
+
const millis = Date.parse(value)
|
|
50
|
+
if (
|
|
51
|
+
Number(month) >= 1 &&
|
|
52
|
+
Number(month) <= 12 &&
|
|
53
|
+
Number(day) >= 1 &&
|
|
54
|
+
Number(day) <= days &&
|
|
55
|
+
Number(hour) < 24 &&
|
|
56
|
+
Number(minute) < 60 &&
|
|
57
|
+
Number(second) < 60 &&
|
|
58
|
+
validZone &&
|
|
59
|
+
Number.isFinite(millis)
|
|
60
|
+
)
|
|
61
|
+
return millis
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return null
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export function getDatasetSequenceValidationError(
|
|
68
|
+
dataset: DatasetDefinition,
|
|
69
|
+
value: unknown
|
|
70
|
+
): string | null {
|
|
71
|
+
try {
|
|
72
|
+
datasetSequenceValue(dataset, value)
|
|
73
|
+
return null
|
|
74
|
+
} catch (error) {
|
|
75
|
+
return error instanceof Error ? error.message : String(error)
|
|
76
|
+
}
|
|
77
|
+
}
|
package/src/datasets/types.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { isFileRef } from "../blob-storage"
|
|
|
2
2
|
import { isJsonValue, isPlainRecord } from "../json"
|
|
3
3
|
import { isDecimalString } from "../ontology/decimal"
|
|
4
4
|
import { DatasetValidationError } from "./errors"
|
|
5
|
+
import { getDatasetSequenceValidationError, parseDatasetTimestamp } from "./sequence"
|
|
5
6
|
import type {
|
|
6
7
|
DatasetColumnDefinition,
|
|
7
8
|
DatasetColumnType,
|
|
@@ -185,6 +186,20 @@ export function assertDatasetDefinition(
|
|
|
185
186
|
assertDatasetPrimaryKey(definition.primaryKey, definition.schema, createError)
|
|
186
187
|
}
|
|
187
188
|
|
|
189
|
+
if (definition.sequenceBy !== undefined) {
|
|
190
|
+
const column = definition.schema.columns.find((column) => column.name === definition.sequenceBy)
|
|
191
|
+
if (
|
|
192
|
+
definition.primaryKey === undefined ||
|
|
193
|
+
!column ||
|
|
194
|
+
column.nullable ||
|
|
195
|
+
!["timestamp", "int64"].includes(column.type)
|
|
196
|
+
) {
|
|
197
|
+
throw createError(
|
|
198
|
+
"Dataset sequenceBy requires a primaryKey and a non-nullable timestamp or int64 column."
|
|
199
|
+
)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
188
203
|
if (definition.partitionBy !== undefined) {
|
|
189
204
|
if (!Array.isArray(definition.partitionBy)) {
|
|
190
205
|
throw createError("Dataset partitionBy must be an array of column names.")
|
|
@@ -268,6 +283,9 @@ function getColumnValidationError(
|
|
|
268
283
|
): string | null {
|
|
269
284
|
const hasValue = Object.hasOwn(row, column.name)
|
|
270
285
|
const value = row[column.name]
|
|
286
|
+
if (column.name === dataset.sequenceBy) {
|
|
287
|
+
return getDatasetSequenceValidationError(dataset, value)
|
|
288
|
+
}
|
|
271
289
|
|
|
272
290
|
// Treat `undefined` the same as an omitted field so callers either send a real
|
|
273
291
|
// value or use `null` explicitly on nullable columns.
|
|
@@ -285,6 +303,14 @@ function getColumnValidationError(
|
|
|
285
303
|
return null
|
|
286
304
|
}
|
|
287
305
|
|
|
306
|
+
// Every timestamp contributes to a sequenced row's millisecond-precision content digest.
|
|
307
|
+
// Reject ambiguous or lossy values before staging, even when another column orders the row.
|
|
308
|
+
if (dataset.sequenceBy !== undefined && column.type === "timestamp") {
|
|
309
|
+
return parseDatasetTimestamp(value) === null
|
|
310
|
+
? `Dataset '${dataset.id}' column '${column.name}' must be a valid Date or ISO timestamp with an explicit timezone and at most millisecond precision.`
|
|
311
|
+
: null
|
|
312
|
+
}
|
|
313
|
+
|
|
288
314
|
if (!matchesColumnType(value, column.type)) {
|
|
289
315
|
return `Dataset '${dataset.id}' column '${column.name}' must match type '${column.type}'.`
|
|
290
316
|
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import type { BlobStorage, FileRef } from "../blob-storage"
|
|
2
|
+
import { isFileRef } from "../blob-storage"
|
|
3
|
+
import { isPlainRecord } from "../json"
|
|
4
|
+
import type { DatasetMergeCommitResult } from "../lake-storage/merge"
|
|
5
|
+
import { getDatasetMergeChangeValidationError } from "../lake-storage/merge-validation"
|
|
6
|
+
import type {
|
|
7
|
+
DatasetProducer,
|
|
8
|
+
DatasetRow,
|
|
9
|
+
DatasetWriteMode,
|
|
10
|
+
LakeStorage,
|
|
11
|
+
} from "../lake-storage/types"
|
|
12
|
+
import type { MergeChange } from "./changes"
|
|
13
|
+
import type { DatasetDefinition } from "./types"
|
|
14
|
+
import { getDatasetRowValidationError } from "./validation"
|
|
15
|
+
|
|
16
|
+
export interface DatasetWriteValue {
|
|
17
|
+
readonly value: unknown
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface WriteDatasetInput<TValue extends DatasetWriteValue = DatasetWriteValue> {
|
|
21
|
+
readonly lakeStorage: LakeStorage
|
|
22
|
+
readonly blobStorage: Pick<BlobStorage, "stat">
|
|
23
|
+
readonly dataset: DatasetDefinition
|
|
24
|
+
readonly mode: DatasetWriteMode | "merge"
|
|
25
|
+
readonly signal: AbortSignal
|
|
26
|
+
/** Lazy so a merge's latest-version guard is checked before fetching source data. */
|
|
27
|
+
readValues(): Promise<Iterable<TValue> | AsyncIterable<TValue>>
|
|
28
|
+
readonly producer?: DatasetProducer
|
|
29
|
+
readonly expectedLatestVersionId?: string
|
|
30
|
+
readonly commitMessage?: string
|
|
31
|
+
/** Diagnostic label for the caller, including its component prefix. */
|
|
32
|
+
readonly sourceLabel?: string
|
|
33
|
+
/** Progress includes validated values even if the operation subsequently fails. */
|
|
34
|
+
onRead?(rowsRead: number): void
|
|
35
|
+
/** Attach caller-owned source provenance to a validation failure. */
|
|
36
|
+
mapValidationError?(error: unknown, value: TValue, itemIndex: number): unknown
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export type WriteDatasetResult = DatasetMergeCommitResult & { readonly rowsRead: number }
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Validate, stage, and commit one dataset write using existing lake sessions.
|
|
43
|
+
*
|
|
44
|
+
* The caller owns fetching/cancelling its source, execution bookkeeping, and publishing the
|
|
45
|
+
* dataset-update notification for a `created` result. This operation returns immediately after
|
|
46
|
+
* the lake commit; it does not wait for downstream pipelines or projections.
|
|
47
|
+
*/
|
|
48
|
+
export async function writeDataset<TValue extends DatasetWriteValue>(
|
|
49
|
+
input: WriteDatasetInput<TValue>
|
|
50
|
+
): Promise<WriteDatasetResult> {
|
|
51
|
+
const { lakeStorage, dataset, signal } = input
|
|
52
|
+
let abortWrite: (() => Promise<void>) | undefined
|
|
53
|
+
let rowsRead = 0
|
|
54
|
+
const onRead = () => {
|
|
55
|
+
rowsRead += 1
|
|
56
|
+
input.onRead?.(rowsRead)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
throwIfAborted(signal)
|
|
60
|
+
await lakeStorage.createDataset(dataset)
|
|
61
|
+
try {
|
|
62
|
+
throwIfAborted(signal)
|
|
63
|
+
const reconcileSnapshot = dataset.sequenceBy !== undefined && input.mode === "snapshot"
|
|
64
|
+
if (input.mode === "merge" || reconcileSnapshot) {
|
|
65
|
+
const session = await lakeStorage.beginMerge({
|
|
66
|
+
dataset,
|
|
67
|
+
expectedLatestVersionId: input.expectedLatestVersionId,
|
|
68
|
+
producer: input.producer,
|
|
69
|
+
})
|
|
70
|
+
abortWrite = () => session.abort()
|
|
71
|
+
throwIfAborted(signal)
|
|
72
|
+
const values = await input.readValues()
|
|
73
|
+
throwIfAborted(signal)
|
|
74
|
+
await session.writeChanges(
|
|
75
|
+
validatedValues(
|
|
76
|
+
input,
|
|
77
|
+
values,
|
|
78
|
+
async (value, itemIndex) =>
|
|
79
|
+
reconcileSnapshot
|
|
80
|
+
? { kind: "upsert" as const, row: await validateRow(value, input, itemIndex) }
|
|
81
|
+
: validateMergeChange(value, input, itemIndex),
|
|
82
|
+
onRead
|
|
83
|
+
)
|
|
84
|
+
)
|
|
85
|
+
throwIfAborted(signal)
|
|
86
|
+
const result = await session.commit({
|
|
87
|
+
commitMessage: input.commitMessage,
|
|
88
|
+
createInitialVersion: reconcileSnapshot,
|
|
89
|
+
retryOnConflict: dataset.sequenceBy !== undefined,
|
|
90
|
+
signal,
|
|
91
|
+
})
|
|
92
|
+
return { ...result, rowsRead }
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const values = await input.readValues()
|
|
96
|
+
throwIfAborted(signal)
|
|
97
|
+
const session = await lakeStorage.beginWrite({
|
|
98
|
+
dataset,
|
|
99
|
+
mode: input.mode,
|
|
100
|
+
producer: input.producer,
|
|
101
|
+
})
|
|
102
|
+
abortWrite = () => session.abort()
|
|
103
|
+
await session.writeRows(
|
|
104
|
+
validatedValues(
|
|
105
|
+
input,
|
|
106
|
+
values,
|
|
107
|
+
(value, itemIndex) => validateRow(value, input, itemIndex),
|
|
108
|
+
onRead
|
|
109
|
+
)
|
|
110
|
+
)
|
|
111
|
+
throwIfAborted(signal)
|
|
112
|
+
|
|
113
|
+
// Preserve sync semantics: an empty append must not invent an initial dataset version.
|
|
114
|
+
if (rowsRead === 0 && input.mode === "append") {
|
|
115
|
+
const version = await lakeStorage.getLatestVersion(dataset.id)
|
|
116
|
+
await session.abort()
|
|
117
|
+
return { outcome: "unchanged", version, rowsRead }
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const { outcome, ...version } = await session.commit({
|
|
121
|
+
expectedLatestVersionId: input.expectedLatestVersionId,
|
|
122
|
+
commitMessage: input.commitMessage,
|
|
123
|
+
})
|
|
124
|
+
return { outcome, version, rowsRead }
|
|
125
|
+
} catch (error) {
|
|
126
|
+
// Cleanup must not replace the source, validation, cancellation, or commit failure.
|
|
127
|
+
await abortWrite?.().catch(() => {})
|
|
128
|
+
throw error
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
async function* validatedValues<TValue extends DatasetWriteValue, TResult>(
|
|
133
|
+
input: WriteDatasetInput<TValue>,
|
|
134
|
+
values: Iterable<TValue> | AsyncIterable<TValue>,
|
|
135
|
+
validate: (value: unknown, itemIndex: number) => Promise<TResult>,
|
|
136
|
+
onRead: () => void
|
|
137
|
+
): AsyncIterable<TResult> {
|
|
138
|
+
let itemIndex = 0
|
|
139
|
+
for await (const sourceValue of values) {
|
|
140
|
+
throwIfAborted(input.signal)
|
|
141
|
+
itemIndex += 1
|
|
142
|
+
let value: TResult
|
|
143
|
+
try {
|
|
144
|
+
value = await validate(sourceValue.value, itemIndex)
|
|
145
|
+
} catch (error) {
|
|
146
|
+
throw input.mapValidationError
|
|
147
|
+
? input.mapValidationError(error, sourceValue, itemIndex)
|
|
148
|
+
: error
|
|
149
|
+
}
|
|
150
|
+
onRead()
|
|
151
|
+
yield value
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function sourceLabel(input: Pick<WriteDatasetInput, "dataset" | "sourceLabel">): string {
|
|
156
|
+
return input.sourceLabel ?? `[Sixb] Dataset '${input.dataset.id}' writer`
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
async function validateRow(
|
|
160
|
+
value: unknown,
|
|
161
|
+
input: WriteDatasetInput,
|
|
162
|
+
itemIndex: number
|
|
163
|
+
): Promise<DatasetRow> {
|
|
164
|
+
if (!isPlainRecord(value)) {
|
|
165
|
+
throw new Error(
|
|
166
|
+
`${sourceLabel(input)} returned an invalid row at item ${itemIndex}. Dataset rows must be plain objects.`
|
|
167
|
+
)
|
|
168
|
+
}
|
|
169
|
+
const validationError = getDatasetRowValidationError(value, input.dataset)
|
|
170
|
+
if (validationError) {
|
|
171
|
+
throw new Error(
|
|
172
|
+
`${sourceLabel(input)} returned an invalid row at item ${itemIndex}. ${validationError}`
|
|
173
|
+
)
|
|
174
|
+
}
|
|
175
|
+
await verifyRowFileRefs(value, input, itemIndex)
|
|
176
|
+
return value
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
async function validateMergeChange(
|
|
180
|
+
value: unknown,
|
|
181
|
+
input: WriteDatasetInput,
|
|
182
|
+
itemIndex: number
|
|
183
|
+
): Promise<MergeChange<DatasetRow, DatasetRow>> {
|
|
184
|
+
const validationError = getDatasetMergeChangeValidationError(value, input.dataset)
|
|
185
|
+
if (validationError) {
|
|
186
|
+
throw new Error(
|
|
187
|
+
`${sourceLabel(input)} returned an invalid merge change at item ${itemIndex}. ${validationError}`
|
|
188
|
+
)
|
|
189
|
+
}
|
|
190
|
+
const change = value as MergeChange<DatasetRow, DatasetRow>
|
|
191
|
+
if (change.kind === "upsert") await verifyRowFileRefs(change.row, input, itemIndex)
|
|
192
|
+
return change
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
async function verifyRowFileRefs(
|
|
196
|
+
row: DatasetRow,
|
|
197
|
+
input: WriteDatasetInput,
|
|
198
|
+
itemIndex: number
|
|
199
|
+
): Promise<void> {
|
|
200
|
+
for (const column of input.dataset.schema.columns) {
|
|
201
|
+
if (column.type !== "fileRef") continue
|
|
202
|
+
const value = row[column.name]
|
|
203
|
+
if (isFileRef(value)) await verifyFileRef(value, input, column.name, itemIndex)
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async function verifyFileRef(
|
|
208
|
+
fileRef: FileRef,
|
|
209
|
+
input: WriteDatasetInput,
|
|
210
|
+
columnName: string,
|
|
211
|
+
itemIndex: number
|
|
212
|
+
): Promise<void> {
|
|
213
|
+
const blobInfo = await input.blobStorage.stat(fileRef.blobId)
|
|
214
|
+
const context = `${sourceLabel(input)} returned row ${itemIndex} with dataset '${input.dataset.id}' column '${columnName}'`
|
|
215
|
+
if (!blobInfo) {
|
|
216
|
+
throw new Error(`${context} referencing unknown blob '${fileRef.blobId}'.`)
|
|
217
|
+
}
|
|
218
|
+
if (blobInfo.digest !== fileRef.digest) {
|
|
219
|
+
throw new Error(
|
|
220
|
+
`${context} referencing blob '${fileRef.blobId}' with digest '${fileRef.digest}', but blob storage has '${blobInfo.digest}'.`
|
|
221
|
+
)
|
|
222
|
+
}
|
|
223
|
+
if (blobInfo.sizeBytes !== fileRef.sizeBytes) {
|
|
224
|
+
throw new Error(
|
|
225
|
+
`${context} referencing blob '${fileRef.blobId}' with size ${fileRef.sizeBytes}, but blob storage has ${blobInfo.sizeBytes}.`
|
|
226
|
+
)
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function throwIfAborted(signal: AbortSignal): void {
|
|
231
|
+
if (!signal.aborted) return
|
|
232
|
+
if (signal.reason instanceof Error) throw signal.reason
|
|
233
|
+
const error = new Error(
|
|
234
|
+
typeof signal.reason === "string" && signal.reason.length > 0
|
|
235
|
+
? signal.reason
|
|
236
|
+
: "[Sixb] Dataset write was cancelled."
|
|
237
|
+
)
|
|
238
|
+
error.name = "AbortError"
|
|
239
|
+
throw error
|
|
240
|
+
}
|