@sixb/core 0.1.11 → 0.1.12
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/builders/params.d.ts +1 -22
- package/dist/actions/builders/params.d.ts.map +1 -1
- package/dist/actions/index.js +29 -28
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/types/params.d.ts +10 -44
- package/dist/actions/types/params.d.ts.map +1 -1
- package/dist/actions/validation.d.ts.map +1 -1
- package/dist/actions/worker.js +3 -2
- package/dist/actions/worker.js.map +2 -2
- package/dist/agents/errors.d.ts +1 -1
- package/dist/agents/errors.d.ts.map +1 -1
- package/dist/agents/execution.d.ts +15 -9
- package/dist/agents/execution.d.ts.map +1 -1
- package/dist/agents/ids.d.ts +2 -0
- package/dist/agents/ids.d.ts.map +1 -1
- package/dist/agents/index.d.ts +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +48 -42
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/sandbox.d.ts +5 -0
- package/dist/agents/sandbox.d.ts.map +1 -0
- package/dist/agents/streams/index.js +4 -3
- package/dist/agents/streams/index.js.map +1 -1
- package/dist/agents/streams/internal.js +4 -3
- package/dist/agents/streams/internal.js.map +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/auth/index.js +8 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/authorization/index.js +5 -4
- package/dist/authorization/index.js.map +1 -1
- package/dist/bootstrap/index.js +50 -46
- package/dist/bootstrap/index.js.map +1 -1
- package/dist/{chunk-17kfctj6.js → chunk-0mza4xb2.js} +2 -2
- package/dist/{chunk-g00bfdq6.js → chunk-2cxv584m.js} +12 -56
- package/dist/{chunk-g00bfdq6.js.map → chunk-2cxv584m.js.map} +3 -3
- package/dist/{chunk-jsy70480.js → chunk-2h63nrde.js} +365 -95
- package/dist/chunk-2h63nrde.js.map +20 -0
- package/dist/{chunk-1yefycb1.js → chunk-3bnt2wna.js} +2 -2
- package/dist/{chunk-awbhdqyc.js → chunk-3ghw2t5q.js} +1 -1
- package/dist/{chunk-b19g04jk.js → chunk-3h7ctayx.js} +1 -1
- package/dist/{chunk-wjasrj67.js → chunk-3qpcrcj8.js} +1 -1
- package/dist/{chunk-5hz0fnca.js → chunk-4k53sm9e.js} +6 -2
- package/dist/chunk-4k53sm9e.js.map +12 -0
- package/dist/chunk-4ph94nhd.js +81 -0
- package/dist/chunk-4ph94nhd.js.map +10 -0
- package/dist/chunk-58geavnf.js +29 -0
- package/dist/chunk-58geavnf.js.map +10 -0
- package/dist/{chunk-0y39rgsb.js → chunk-5tetw4hn.js} +1 -1
- package/dist/{chunk-7bs40fe1.js → chunk-69266efg.js} +83 -2
- package/dist/chunk-69266efg.js.map +12 -0
- package/dist/{chunk-a0e6x5hd.js → chunk-6ma8dvzc.js} +121 -53
- package/dist/chunk-6ma8dvzc.js.map +15 -0
- package/dist/{chunk-skz0hst3.js → chunk-7c2g3sz9.js} +6 -86
- package/dist/{chunk-skz0hst3.js.map → chunk-7c2g3sz9.js.map} +3 -3
- package/dist/{chunk-z0s4axeh.js → chunk-7qnvhtcd.js} +93 -17
- package/dist/{chunk-z0s4axeh.js.map → chunk-7qnvhtcd.js.map} +7 -6
- package/dist/{chunk-c5rkjrgp.js → chunk-7ytf06d3.js} +1 -1
- package/dist/{chunk-mrp7k0pw.js → chunk-91kcnbf0.js} +9 -14
- package/dist/chunk-91kcnbf0.js.map +10 -0
- package/dist/{chunk-yv79ncbv.js → chunk-96yw3pwd.js} +3 -3
- package/dist/chunk-96yw3pwd.js.map +10 -0
- package/dist/chunk-98cw09sw.js.map +2 -2
- package/dist/{chunk-93csa55g.js → chunk-axndsymr.js} +10 -4
- package/dist/chunk-axndsymr.js.map +11 -0
- package/dist/{chunk-4zhmdsx6.js → chunk-b768c93y.js} +61 -23
- package/dist/{chunk-4zhmdsx6.js.map → chunk-b768c93y.js.map} +5 -5
- package/dist/{chunk-dz5h08xv.js → chunk-bbaa1fet.js} +24 -9
- package/dist/{chunk-dz5h08xv.js.map → chunk-bbaa1fet.js.map} +4 -4
- package/dist/{chunk-7apz6hg4.js → chunk-bet1rb9h.js} +8 -4
- package/dist/chunk-bet1rb9h.js.map +10 -0
- package/dist/{chunk-358caqf5.js → chunk-bfjv1adk.js} +2 -2
- package/dist/{chunk-g91qxjj0.js → chunk-bg2bs62d.js} +5 -5
- package/dist/{chunk-860dwwy0.js → chunk-cd234ba4.js} +22 -12
- package/dist/chunk-cd234ba4.js.map +14 -0
- package/dist/chunk-dmn70ztd.js.map +2 -2
- package/dist/{chunk-d63nnr5b.js → chunk-e1f1sqba.js} +39 -53
- package/dist/{chunk-d63nnr5b.js.map → chunk-e1f1sqba.js.map} +5 -6
- package/dist/{chunk-ap0g1g74.js → chunk-eyjzgav0.js} +39 -4
- package/dist/chunk-eyjzgav0.js.map +12 -0
- package/dist/{chunk-rb1xx120.js → chunk-f06sf7rr.js} +9 -5
- package/dist/chunk-f06sf7rr.js.map +11 -0
- package/dist/{chunk-g6cke204.js → chunk-f85hpqnm.js} +1 -1
- package/dist/{chunk-vsj3mdfj.js → chunk-fc5zfxy1.js} +1 -1
- package/dist/{chunk-38zv5rkr.js → chunk-g2gezsg5.js} +1 -1
- package/dist/{chunk-38zv5rkr.js.map → chunk-g2gezsg5.js.map} +2 -2
- package/dist/{chunk-01kj2pbh.js → chunk-g50nxqs5.js} +53 -66
- package/dist/chunk-g50nxqs5.js.map +18 -0
- package/dist/{chunk-1824gssz.js → chunk-gswwr35f.js} +4 -4
- package/dist/{chunk-92vk7gta.js → chunk-gzt6v1ja.js} +1 -1
- package/dist/{chunk-aa6z4a19.js → chunk-hgqpcmyr.js} +2 -1
- package/dist/chunk-hgqpcmyr.js.map +12 -0
- package/dist/{chunk-gqh45d2n.js → chunk-hkw8rykk.js} +2 -2
- package/dist/{chunk-f4w3yp4f.js → chunk-hzw7yv5g.js} +104 -21
- package/dist/chunk-hzw7yv5g.js.map +13 -0
- package/dist/{chunk-cfvakeax.js → chunk-jjwhy3rs.js} +5 -5
- package/dist/chunk-kept9cdd.js +29 -0
- package/dist/chunk-kept9cdd.js.map +10 -0
- package/dist/{chunk-ftv470j8.js → chunk-m7cx05vp.js} +247 -16
- package/dist/{chunk-ftv470j8.js.map → chunk-m7cx05vp.js.map} +14 -10
- package/dist/{chunk-z0271qkp.js → chunk-mdnw7nj8.js} +8 -6
- package/dist/chunk-mdnw7nj8.js.map +15 -0
- package/dist/{chunk-gq8vhakp.js → chunk-nzsy3xrp.js} +249 -86
- package/dist/{chunk-gq8vhakp.js.map → chunk-nzsy3xrp.js.map} +13 -11
- package/dist/chunk-p1683c0v.js +104 -0
- package/dist/chunk-p1683c0v.js.map +11 -0
- package/dist/chunk-p6r1ex7t.js +93 -0
- package/dist/chunk-p6r1ex7t.js.map +10 -0
- package/dist/{chunk-sepyxgpc.js → chunk-qm535afa.js} +10 -10
- package/dist/{chunk-sepyxgpc.js.map → chunk-qm535afa.js.map} +4 -4
- package/dist/chunk-r5zythxp.js +552 -0
- package/dist/chunk-r5zythxp.js.map +17 -0
- package/dist/{chunk-9qsh3p5y.js → chunk-rb143ggb.js} +1 -1
- package/dist/{chunk-653vwrzr.js → chunk-rdghfsss.js} +1 -1
- package/dist/{chunk-3ckk0xfj.js → chunk-sfypc7mk.js} +18 -13
- package/dist/{chunk-3ckk0xfj.js.map → chunk-sfypc7mk.js.map} +3 -3
- package/dist/{chunk-f0rwz2vh.js → chunk-t6f3tdnr.js} +2 -54
- package/dist/chunk-t6f3tdnr.js.map +10 -0
- package/dist/{chunk-x9m9x2eq.js → chunk-t7dzd1tm.js} +3 -3
- package/dist/{chunk-pr2h4bv4.js → chunk-tg4g4zh0.js} +3 -3
- package/dist/chunk-vpxss818.js +56 -0
- package/dist/chunk-vpxss818.js.map +10 -0
- package/dist/{chunk-ms2tmn1k.js → chunk-vsg0g7h9.js} +53 -57
- package/dist/chunk-vsg0g7h9.js.map +17 -0
- package/dist/{chunk-8vj0rjgs.js → chunk-wjffn5m4.js} +1 -1
- package/dist/{chunk-wf88w4kp.js → chunk-x9tmx3fc.js} +2 -2
- package/dist/{chunk-fh8kgex1.js → chunk-xn686q2e.js} +8 -8
- package/dist/{chunk-g53f0e4j.js → chunk-xnx96gfy.js} +45 -17
- package/dist/{chunk-g53f0e4j.js.map → chunk-xnx96gfy.js.map} +3 -3
- package/dist/{chunk-v2vcg0w6.js → chunk-xtfryrfb.js} +2 -2
- package/dist/chunk-y0v18c2j.js +363 -0
- package/dist/chunk-y0v18c2j.js.map +14 -0
- package/dist/{chunk-72w2pxk7.js → chunk-y1ahv8b7.js} +11 -3
- package/dist/{chunk-72w2pxk7.js.map → chunk-y1ahv8b7.js.map} +3 -3
- package/dist/chunk-y3ev53cq.js +84 -0
- package/dist/chunk-y3ev53cq.js.map +10 -0
- package/dist/{chunk-gqm76kse.js → chunk-ybhz3j9g.js} +342 -41
- package/dist/{chunk-gqm76kse.js.map → chunk-ybhz3j9g.js.map} +17 -12
- package/dist/{chunk-z30bv4ga.js → chunk-yxb4c62x.js} +3 -2
- package/dist/{chunk-z30bv4ga.js.map → chunk-yxb4c62x.js.map} +3 -3
- package/dist/chunk-z3y5kg1x.js +14 -0
- package/dist/chunk-z3y5kg1x.js.map +10 -0
- package/dist/datasets/validation.d.ts +4 -0
- package/dist/datasets/validation.d.ts.map +1 -1
- package/dist/datasets/write.d.ts.map +1 -1
- package/dist/datasets/write.js +5 -4
- package/dist/datasets/write.js.map +1 -1
- package/dist/error-reporting/capability.d.ts +3 -2
- package/dist/error-reporting/capability.d.ts.map +1 -1
- package/dist/error-reporting/internal.js +5 -4
- package/dist/error-reporting/internal.js.map +1 -1
- package/dist/error-reporting/reports.d.ts +10 -0
- package/dist/error-reporting/reports.d.ts.map +1 -1
- package/dist/error-reporting/types.d.ts +10 -2
- package/dist/error-reporting/types.d.ts.map +1 -1
- package/dist/errors/catalog.d.ts +12 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/failure-message.d.ts +8 -0
- package/dist/errors/failure-message.d.ts.map +1 -0
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +3 -2
- package/dist/errors/internal.js.map +1 -1
- package/dist/events/index.js +5 -4
- package/dist/events/index.js.map +1 -1
- package/dist/execution/agent.js +44 -41
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +3 -0
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/kernel-operation.d.ts +4 -0
- package/dist/execution/kernel-operation.d.ts.map +1 -0
- package/dist/execution/primitive.js +44 -41
- package/dist/execution/primitive.js.map +2 -2
- package/dist/execution/request.js +45 -42
- package/dist/execution/request.js.map +2 -2
- package/dist/execution/types.d.ts +6 -0
- package/dist/execution/types.d.ts.map +1 -1
- package/dist/index.d.ts +15 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -59
- package/dist/index.js.map +1 -1
- package/dist/lake-storage/in-memory.d.ts.map +1 -1
- package/dist/lake-storage/index.js +5 -4
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/materialization/errors.d.ts +1 -1
- package/dist/materialization/errors.d.ts.map +1 -1
- package/dist/materialization/index.d.ts +1 -0
- package/dist/materialization/index.d.ts.map +1 -1
- package/dist/materialization/index.js +3 -3
- package/dist/materialization/model.d.ts +2 -0
- package/dist/materialization/model.d.ts.map +1 -1
- package/dist/materialization/vectors.d.ts +19 -0
- package/dist/materialization/vectors.d.ts.map +1 -0
- package/dist/materializer/context.d.ts.map +1 -1
- package/dist/materializer/edits/commit.d.ts.map +1 -1
- package/dist/materializer/edits/vector-authority.d.ts +6 -0
- package/dist/materializer/edits/vector-authority.d.ts.map +1 -0
- package/dist/materializer/edits/vectors.d.ts +6 -0
- package/dist/materializer/edits/vectors.d.ts.map +1 -0
- package/dist/materializer/effective/validate.d.ts.map +1 -1
- package/dist/materializer/effective/vector-indexing.d.ts +7 -0
- package/dist/materializer/effective/vector-indexing.d.ts.map +1 -0
- package/dist/materializer/effective/vectors.d.ts +6 -0
- package/dist/materializer/effective/vectors.d.ts.map +1 -0
- package/dist/materializer/execution/work-executor.d.ts +2 -1
- package/dist/materializer/execution/work-executor.d.ts.map +1 -1
- package/dist/materializer/index.js +26 -25
- package/dist/materializer/index.js.map +1 -1
- package/dist/materializer/shared/normalize.d.ts.map +1 -1
- package/dist/models/catalog-index.d.ts +15 -0
- package/dist/models/catalog-index.d.ts.map +1 -0
- package/dist/models/catalog.d.ts +27 -6
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/decision/catalog.d.ts +12 -0
- package/dist/models/decision/catalog.d.ts.map +1 -0
- package/dist/models/decision/errors.d.ts +7 -0
- package/dist/models/decision/errors.d.ts.map +1 -0
- package/dist/models/decision/output.d.ts +50 -0
- package/dist/models/decision/output.d.ts.map +1 -0
- package/dist/models/decision/questions.d.ts +14 -0
- package/dist/models/decision/questions.d.ts.map +1 -0
- package/dist/models/decision/runtime.d.ts +7 -0
- package/dist/models/decision/runtime.d.ts.map +1 -0
- package/dist/models/decision/types.d.ts +92 -0
- package/dist/models/decision/types.d.ts.map +1 -0
- package/dist/models/decision/validation.d.ts +7 -0
- package/dist/models/decision/validation.d.ts.map +1 -0
- package/dist/models/definitions.d.ts +1 -1
- package/dist/models/definitions.d.ts.map +1 -1
- package/dist/models/embedding-model.d.ts +60 -0
- package/dist/models/embedding-model.d.ts.map +1 -0
- package/dist/models/execution/binding.d.ts +2 -0
- package/dist/models/execution/binding.d.ts.map +1 -1
- package/dist/models/execution/embedding.d.ts +5 -0
- package/dist/models/execution/embedding.d.ts.map +1 -0
- package/dist/models/execution/index.js +29 -26
- package/dist/models/execution/index.js.map +1 -1
- package/dist/models/execution/model-call-recorder.d.ts +5 -1
- package/dist/models/execution/model-call-recorder.d.ts.map +1 -1
- package/dist/models/execution/session.d.ts +21 -0
- package/dist/models/execution/session.d.ts.map +1 -0
- package/dist/models/execution.d.ts.map +1 -1
- package/dist/models/generation-types.d.ts +2 -0
- package/dist/models/generation-types.d.ts.map +1 -1
- package/dist/models/index.d.ts +9 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +17 -7
- package/dist/models/index.js.map +1 -1
- package/dist/models/pricing.d.ts +3 -2
- package/dist/models/pricing.d.ts.map +1 -1
- package/dist/objects/authorized-ontology-view.d.ts.map +1 -1
- package/dist/objects/execution.d.ts +1 -0
- package/dist/objects/execution.d.ts.map +1 -1
- package/dist/objects/index.js +29 -28
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/query/executor.d.ts +3 -0
- package/dist/objects/query/executor.d.ts.map +1 -1
- package/dist/objects/query/index.d.ts +2 -0
- package/dist/objects/query/index.d.ts.map +1 -1
- package/dist/objects/query/index.js +34 -24
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/ir.d.ts +6 -2
- package/dist/objects/query/ir.d.ts.map +1 -1
- package/dist/objects/query/normalize.d.ts.map +1 -1
- package/dist/objects/query/validate.d.ts.map +1 -1
- package/dist/objects/sdk/object-handle.d.ts +5 -0
- 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/query-executor.d.ts +2 -0
- package/dist/objects/sdk/query-executor.d.ts.map +1 -1
- package/dist/objects/sdk/runtime-query-executor.d.ts.map +1 -1
- package/dist/objects/vectors/handle.d.ts +4 -0
- package/dist/objects/vectors/handle.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-batch.d.ts +6 -0
- package/dist/objects/vectors/indexing-batch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-generate.d.ts +11 -0
- package/dist/objects/vectors/indexing-generate.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-runtime.d.ts +7 -0
- package/dist/objects/vectors/indexing-runtime.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-shared.d.ts +17 -0
- package/dist/objects/vectors/indexing-shared.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-single.d.ts +4 -0
- package/dist/objects/vectors/indexing-single.d.ts.map +1 -0
- package/dist/objects/vectors/indexing-store-batch.d.ts +6 -0
- package/dist/objects/vectors/indexing-store-batch.d.ts.map +1 -0
- package/dist/objects/vectors/indexing.d.ts +7 -0
- package/dist/objects/vectors/indexing.d.ts.map +1 -0
- package/dist/objects/vectors/profile.d.ts +13 -0
- package/dist/objects/vectors/profile.d.ts.map +1 -0
- package/dist/objects/vectors/query.d.ts +5 -0
- package/dist/objects/vectors/query.d.ts.map +1 -0
- package/dist/objects/vectors/resolve-query.d.ts +6 -0
- package/dist/objects/vectors/resolve-query.d.ts.map +1 -0
- package/dist/objects/vectors/types.d.ts +11 -0
- package/dist/objects/vectors/types.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 +5 -5
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/internal.js +5 -4
- package/dist/ontology/internal.js.map +1 -1
- package/dist/ontology/registry.d.ts.map +1 -1
- package/dist/ontology/types.d.ts +8 -9
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validation/definition.d.ts +3 -0
- package/dist/ontology/validation/definition.d.ts.map +1 -0
- package/dist/ontology/validation/properties.d.ts.map +1 -1
- package/dist/ontology/validation/query.d.ts.map +1 -1
- package/dist/ontology/validation/schema.d.ts +1 -1
- package/dist/ontology/validation/schema.d.ts.map +1 -1
- package/dist/ontology/vector-profiles.d.ts +4 -0
- package/dist/ontology/vector-profiles.d.ts.map +1 -0
- package/dist/pipelines/index.js +28 -27
- package/dist/pipelines/index.js.map +1 -1
- package/dist/projections/internal.js +24 -23
- package/dist/projections/internal.js.map +1 -1
- package/dist/query.js +2 -2
- package/dist/queues/in-memory.d.ts +2 -1
- package/dist/queues/in-memory.d.ts.map +1 -1
- package/dist/queues/index.d.ts +1 -1
- package/dist/queues/index.d.ts.map +1 -1
- package/dist/queues/index.js +1 -1
- package/dist/queues/types.d.ts +5 -0
- package/dist/queues/types.d.ts.map +1 -1
- package/dist/runtime/create.d.ts +4 -3
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +9 -6
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +3 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +47 -1
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +9 -4
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/runtime/types.d.ts +15 -3
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/sandboxes/auth.d.ts +16 -0
- package/dist/sandboxes/auth.d.ts.map +1 -0
- package/dist/sandboxes/config.d.ts +5 -0
- package/dist/sandboxes/config.d.ts.map +1 -0
- package/dist/sandboxes/configuration.d.ts +41 -0
- package/dist/sandboxes/configuration.d.ts.map +1 -0
- package/dist/sandboxes/environment.d.ts +13 -0
- package/dist/sandboxes/environment.d.ts.map +1 -0
- package/dist/sandboxes/errors.d.ts +1 -1
- package/dist/sandboxes/errors.d.ts.map +1 -1
- package/dist/sandboxes/index.d.ts +6 -1
- package/dist/sandboxes/index.d.ts.map +1 -1
- package/dist/sandboxes/index.js +16 -3
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/sandboxes/sandbox.d.ts +35 -3
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/shared/params/builders.d.ts +25 -0
- package/dist/shared/params/builders.d.ts.map +1 -0
- package/dist/shared/params/types.d.ts +47 -0
- package/dist/shared/params/types.d.ts.map +1 -0
- package/dist/shared/params/validation.d.ts +15 -0
- package/dist/shared/params/validation.d.ts.map +1 -0
- package/dist/shares/internal.js +23 -22
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +4 -3
- package/dist/storage/action-runs/failure.js.map +1 -1
- package/dist/storage/action-runs/provider.js +1 -1
- package/dist/storage/agents/in-memory.d.ts +2 -1
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/index.d.ts +1 -1
- package/dist/storage/agents/index.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts +5 -1
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +8 -4
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +49 -0
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-cost/analytics.d.ts +1 -0
- package/dist/storage/ai-cost/analytics.d.ts.map +1 -1
- package/dist/storage/ai-cost/index.d.ts +1 -1
- package/dist/storage/ai-cost/index.d.ts.map +1 -1
- package/dist/storage/ai-cost/provider.js +2 -2
- package/dist/storage/ai-cost/types.d.ts +14 -2
- package/dist/storage/ai-cost/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +4 -3
- package/dist/storage/ai-limits/enforcement.js.map +1 -1
- package/dist/storage/connector-connections/provider.js +3 -2
- package/dist/storage/connector-connections/provider.js.map +2 -2
- package/dist/storage/executions/provider.d.ts +3 -3
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +13 -11
- package/dist/storage/executions/provider.js.map +3 -3
- package/dist/storage/executions/types.d.ts +3 -0
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/executions/validation.d.ts.map +1 -1
- package/dist/storage/index.d.ts +5 -3
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +25 -22
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.js +2 -2
- package/dist/storage/objects/in-memory/query.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/read-source.d.ts +5 -0
- package/dist/storage/objects/in-memory/read-source.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/selected-reader.d.ts.map +1 -1
- package/dist/storage/objects/in-memory/storage.d.ts +7 -0
- package/dist/storage/objects/in-memory/storage.d.ts.map +1 -1
- package/dist/storage/objects/types.d.ts +2 -0
- package/dist/storage/objects/types.d.ts.map +1 -1
- package/dist/storage/ontology/commits.d.ts +1 -0
- package/dist/storage/ontology/commits.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/index.d.ts +4 -0
- package/dist/storage/ontology/in-memory/index.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/materializations.d.ts +2 -0
- package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/shared-state.d.ts +7 -0
- package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
- package/dist/storage/ontology/in-memory/vector-indexing.d.ts +44 -0
- package/dist/storage/ontology/in-memory/vector-indexing.d.ts.map +1 -0
- package/dist/storage/ontology/in-memory/vectors.d.ts +31 -0
- package/dist/storage/ontology/in-memory/vectors.d.ts.map +1 -0
- package/dist/storage/ontology/index.d.ts +6 -0
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/provider.js +2 -2
- package/dist/storage/ontology/vector-indexing.d.ts +94 -0
- package/dist/storage/ontology/vector-indexing.d.ts.map +1 -0
- package/dist/storage/ontology/vectors.d.ts +56 -0
- package/dist/storage/ontology/vectors.d.ts.map +1 -0
- package/dist/storage/operation-scope.d.ts.map +1 -1
- package/dist/storage/operation-scope.js +1 -1
- package/dist/storage/projection-runs/provider.js +4 -3
- package/dist/storage/projection-runs/provider.js.map +1 -1
- package/dist/storage/types.d.ts +1 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +9 -7
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/syncs/index.js +29 -28
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/ai-cost-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.js +448 -69
- package/dist/testing/index.js.map +7 -7
- package/dist/testing/object-query-contract.d.ts.map +1 -1
- package/dist/testing/object-read-scope-contract.d.ts.map +1 -1
- package/dist/testing/queues-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +24 -23
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +3 -2
- package/dist/workers/index.js.map +2 -2
- package/dist/workflows/failure.d.ts.map +1 -1
- package/dist/workflows/index.js +47 -43
- package/dist/workflows/index.js.map +1 -1
- package/package.json +1 -1
- package/src/actions/builders/params.ts +1 -48
- package/src/actions/types/params.ts +14 -74
- package/src/actions/validation.ts +7 -84
- package/src/agents/errors.ts +3 -0
- package/src/agents/execution.ts +67 -15
- package/src/agents/ids.ts +8 -0
- package/src/agents/index.ts +1 -0
- package/src/agents/request.ts +11 -0
- package/src/agents/sandbox.ts +44 -0
- package/src/agents/validation.ts +2 -108
- package/src/datasets/validation.ts +40 -11
- package/src/datasets/write.ts +8 -11
- package/src/error-reporting/capability.ts +11 -0
- package/src/error-reporting/reports.ts +23 -0
- package/src/error-reporting/types.ts +12 -1
- package/src/errors/catalog.ts +12 -0
- package/src/errors/failure-message.ts +15 -0
- package/src/errors/internal.ts +57 -25
- package/src/execution/authorization.ts +12 -5
- package/src/execution/authorized-object-reader.ts +37 -2
- package/src/execution/kernel-operation.ts +27 -0
- package/src/execution/scopes.ts +2 -0
- package/src/execution/types.ts +4 -4
- package/src/index.ts +60 -1
- package/src/lake-storage/in-memory.ts +5 -3
- package/src/materialization/errors.ts +2 -2
- package/src/materialization/index.ts +1 -0
- package/src/materialization/model.ts +2 -0
- package/src/materialization/vectors.ts +18 -0
- package/src/materializer/README.md +14 -0
- package/src/materializer/context.ts +10 -0
- package/src/materializer/edits/commit.ts +8 -1
- package/src/materializer/edits/vector-authority.ts +108 -0
- package/src/materializer/edits/vectors.ts +100 -0
- package/src/materializer/effective/validate.ts +10 -3
- package/src/materializer/effective/vector-indexing.ts +84 -0
- package/src/materializer/effective/vectors.ts +47 -0
- package/src/materializer/execution/work-executor.ts +11 -3
- package/src/materializer/projections/replace.ts +1 -1
- package/src/materializer/shared/normalize.ts +11 -0
- package/src/materializer/telemetry/append.ts +1 -1
- package/src/models/catalog-index.ts +38 -0
- package/src/models/catalog.ts +66 -38
- package/src/models/decision/catalog.ts +32 -0
- package/src/models/decision/errors.ts +18 -0
- package/src/models/decision/output.ts +101 -0
- package/src/models/decision/questions.ts +29 -0
- package/src/models/decision/runtime.ts +188 -0
- package/src/models/decision/types.ts +109 -0
- package/src/models/decision/validation.ts +335 -0
- package/src/models/definitions.ts +1 -1
- package/src/models/embedding-model.ts +129 -0
- package/src/models/execution/README.md +63 -0
- package/src/models/execution/binding.ts +2 -0
- package/src/models/execution/embedding.ts +133 -0
- package/src/models/execution/model-call-recorder.ts +42 -30
- package/src/models/execution/session.ts +81 -0
- package/src/models/execution.ts +10 -52
- package/src/models/generation-types.ts +2 -0
- package/src/models/index.ts +37 -0
- package/src/models/pricing.ts +1 -2
- package/src/objects/authorized-ontology-view.ts +12 -8
- package/src/objects/execution.ts +2 -0
- package/src/objects/query/executor.ts +13 -4
- package/src/objects/query/explain.ts +7 -2
- package/src/objects/query/index.ts +2 -0
- package/src/objects/query/ir.ts +6 -2
- package/src/objects/query/normalize.ts +5 -1
- package/src/objects/query/validate.ts +74 -73
- package/src/objects/sdk/object-handle.ts +3 -0
- package/src/objects/sdk/object-set.ts +1 -0
- package/src/objects/sdk/query-builder.ts +9 -3
- package/src/objects/sdk/query-executor.ts +2 -1
- package/src/objects/sdk/runtime-query-executor.ts +6 -2
- package/src/objects/vectors/README.md +59 -0
- package/src/objects/vectors/handle.ts +91 -0
- package/src/objects/vectors/indexing-batch.ts +163 -0
- package/src/objects/vectors/indexing-generate.ts +184 -0
- package/src/objects/vectors/indexing-runtime.ts +17 -0
- package/src/objects/vectors/indexing-shared.ts +188 -0
- package/src/objects/vectors/indexing-single.ts +51 -0
- package/src/objects/vectors/indexing-store-batch.ts +62 -0
- package/src/objects/vectors/indexing.ts +23 -0
- package/src/objects/vectors/profile.ts +64 -0
- package/src/objects/vectors/query.ts +16 -0
- package/src/objects/vectors/resolve-query.ts +89 -0
- package/src/objects/vectors/types.ts +10 -0
- package/src/ontology/index.ts +2 -0
- package/src/ontology/registry.ts +8 -0
- package/src/ontology/types.ts +9 -9
- package/src/ontology/validation/definition.ts +104 -0
- package/src/ontology/validation/properties.ts +14 -4
- package/src/ontology/validation/query.ts +34 -51
- package/src/ontology/validation/schema.ts +85 -23
- package/src/ontology/vector-profiles.ts +35 -0
- package/src/queues/in-memory.ts +5 -0
- package/src/queues/index.ts +1 -0
- package/src/queues/types.ts +10 -0
- package/src/runtime/create.ts +7 -6
- package/src/runtime/host.ts +42 -6
- package/src/runtime/internal.ts +3 -0
- package/src/runtime/resolve-definitions.ts +19 -1
- package/src/runtime/sixb.ts +27 -9
- package/src/runtime/types.ts +16 -4
- package/src/sandboxes/README.md +41 -0
- package/src/sandboxes/auth.ts +17 -0
- package/src/sandboxes/config.ts +37 -0
- package/src/sandboxes/configuration.ts +268 -0
- package/src/sandboxes/environment.ts +107 -0
- package/src/sandboxes/errors.ts +1 -1
- package/src/sandboxes/index.ts +15 -0
- package/src/sandboxes/sandbox.ts +38 -3
- package/src/shared/params/builders.ts +50 -0
- package/src/shared/params/types.ts +84 -0
- package/src/shared/params/validation.ts +114 -0
- package/src/storage/agents/in-memory.ts +25 -1
- package/src/storage/agents/index.ts +3 -0
- package/src/storage/agents/provider.ts +105 -0
- package/src/storage/agents/types.ts +54 -0
- package/src/storage/ai-cost/analytics.ts +59 -21
- package/src/storage/ai-cost/index.ts +1 -0
- package/src/storage/ai-cost/types.ts +19 -2
- package/src/storage/executions/provider.ts +24 -12
- package/src/storage/executions/types.ts +1 -0
- package/src/storage/executions/validation.ts +7 -3
- package/src/storage/index.ts +15 -1
- package/src/storage/objects/in-memory/query.ts +25 -11
- package/src/storage/objects/in-memory/read-scope.ts +9 -2
- package/src/storage/objects/in-memory/read-source.ts +5 -0
- package/src/storage/objects/in-memory/selected-reader.ts +5 -1
- package/src/storage/objects/in-memory/storage.ts +19 -1
- package/src/storage/objects/types.ts +2 -0
- package/src/storage/ontology/commits.ts +1 -0
- package/src/storage/ontology/in-memory/index.ts +20 -0
- package/src/storage/ontology/in-memory/materializations.ts +13 -0
- package/src/storage/ontology/in-memory/shared-state.ts +9 -0
- package/src/storage/ontology/in-memory/vector-indexing.ts +179 -0
- package/src/storage/ontology/in-memory/vectors.ts +73 -0
- package/src/storage/ontology/index.ts +14 -0
- package/src/storage/ontology/vector-indexing.ts +98 -0
- package/src/storage/ontology/vectors.ts +48 -0
- package/src/storage/operation-scope.ts +1 -0
- package/src/storage/types.ts +3 -0
- package/src/testing/agent-storage-contract.ts +246 -0
- package/src/testing/ai-cost-storage-contract.ts +134 -0
- package/src/testing/object-query-contract.ts +41 -25
- package/src/testing/object-read-scope-contract.ts +1 -5
- package/src/testing/queues-contract.ts +31 -0
- package/src/workflows/failure.ts +10 -4
- package/src/workflows/validation.ts +2 -2
- package/dist/chunk-01kj2pbh.js.map +0 -19
- package/dist/chunk-5hz0fnca.js.map +0 -12
- package/dist/chunk-7apz6hg4.js.map +0 -10
- package/dist/chunk-7bs40fe1.js.map +0 -12
- package/dist/chunk-860dwwy0.js.map +0 -14
- package/dist/chunk-93csa55g.js.map +0 -11
- package/dist/chunk-a0e6x5hd.js.map +0 -14
- package/dist/chunk-aa6z4a19.js.map +0 -12
- package/dist/chunk-ap0g1g74.js.map +0 -11
- package/dist/chunk-f0rwz2vh.js.map +0 -11
- package/dist/chunk-f4w3yp4f.js.map +0 -12
- package/dist/chunk-jsy70480.js.map +0 -15
- package/dist/chunk-mrp7k0pw.js.map +0 -10
- package/dist/chunk-ms2tmn1k.js.map +0 -17
- package/dist/chunk-rb1xx120.js.map +0 -11
- package/dist/chunk-yv79ncbv.js.map +0 -10
- package/dist/chunk-z0271qkp.js.map +0 -15
- package/dist/chunk-z3y411fq.js +0 -99
- package/dist/chunk-z3y411fq.js.map +0 -11
- /package/dist/{chunk-17kfctj6.js.map → chunk-0mza4xb2.js.map} +0 -0
- /package/dist/{chunk-1yefycb1.js.map → chunk-3bnt2wna.js.map} +0 -0
- /package/dist/{chunk-awbhdqyc.js.map → chunk-3ghw2t5q.js.map} +0 -0
- /package/dist/{chunk-b19g04jk.js.map → chunk-3h7ctayx.js.map} +0 -0
- /package/dist/{chunk-wjasrj67.js.map → chunk-3qpcrcj8.js.map} +0 -0
- /package/dist/{chunk-0y39rgsb.js.map → chunk-5tetw4hn.js.map} +0 -0
- /package/dist/{chunk-c5rkjrgp.js.map → chunk-7ytf06d3.js.map} +0 -0
- /package/dist/{chunk-358caqf5.js.map → chunk-bfjv1adk.js.map} +0 -0
- /package/dist/{chunk-g91qxjj0.js.map → chunk-bg2bs62d.js.map} +0 -0
- /package/dist/{chunk-g6cke204.js.map → chunk-f85hpqnm.js.map} +0 -0
- /package/dist/{chunk-vsj3mdfj.js.map → chunk-fc5zfxy1.js.map} +0 -0
- /package/dist/{chunk-1824gssz.js.map → chunk-gswwr35f.js.map} +0 -0
- /package/dist/{chunk-92vk7gta.js.map → chunk-gzt6v1ja.js.map} +0 -0
- /package/dist/{chunk-gqh45d2n.js.map → chunk-hkw8rykk.js.map} +0 -0
- /package/dist/{chunk-cfvakeax.js.map → chunk-jjwhy3rs.js.map} +0 -0
- /package/dist/{chunk-9qsh3p5y.js.map → chunk-rb143ggb.js.map} +0 -0
- /package/dist/{chunk-653vwrzr.js.map → chunk-rdghfsss.js.map} +0 -0
- /package/dist/{chunk-x9m9x2eq.js.map → chunk-t7dzd1tm.js.map} +0 -0
- /package/dist/{chunk-pr2h4bv4.js.map → chunk-tg4g4zh0.js.map} +0 -0
- /package/dist/{chunk-8vj0rjgs.js.map → chunk-wjffn5m4.js.map} +0 -0
- /package/dist/{chunk-wf88w4kp.js.map → chunk-x9tmx3fc.js.map} +0 -0
- /package/dist/{chunk-fh8kgex1.js.map → chunk-xn686q2e.js.map} +0 -0
- /package/dist/{chunk-v2vcg0w6.js.map → chunk-xtfryrfb.js.map} +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { EmbeddingModelCatalog } from "../../models/catalog"
|
|
2
|
+
import { type EmbeddingModel, sameEmbeddingModel } from "../../models/embedding-model"
|
|
3
|
+
import type { OntologyRegistry } from "../../ontology"
|
|
4
|
+
import { ObjectQueryExecutionError } from "../query/errors"
|
|
5
|
+
import type { ObjectQuery, ObjectQueryVector } from "../query/ir"
|
|
6
|
+
import { normalizeVector } from "./profile"
|
|
7
|
+
|
|
8
|
+
const QUERY_EMBEDDING_TIMEOUT_MS = 30_000
|
|
9
|
+
|
|
10
|
+
/** Called only after query validation, authorization and provider planning have succeeded. */
|
|
11
|
+
export async function resolveVectorSearchText(
|
|
12
|
+
query: ObjectQuery,
|
|
13
|
+
ontology: OntologyRegistry,
|
|
14
|
+
models: EmbeddingModelCatalog | undefined,
|
|
15
|
+
signal?: AbortSignal
|
|
16
|
+
): Promise<ObjectQuery> {
|
|
17
|
+
if (query.kind === "limit" || query.kind === "project") {
|
|
18
|
+
const input = await resolveVectorSearchText(query.input, ontology, models, signal)
|
|
19
|
+
return { ...query, input }
|
|
20
|
+
}
|
|
21
|
+
if (query.kind !== "vector" || typeof query.vector !== "string") return query
|
|
22
|
+
|
|
23
|
+
const model = resolveProfileEmbeddingModel(query, ontology, models)
|
|
24
|
+
const vector = await embedSearchText(query.vector, model, signal)
|
|
25
|
+
return { ...query, vector }
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function resolveProfileEmbeddingModel(
|
|
29
|
+
query: ObjectQueryVector,
|
|
30
|
+
ontology: OntologyRegistry,
|
|
31
|
+
models: EmbeddingModelCatalog | undefined
|
|
32
|
+
): EmbeddingModel {
|
|
33
|
+
let input = query.input
|
|
34
|
+
while (input.kind === "filter") input = input.input
|
|
35
|
+
if (input.kind !== "start" || !query.profile) {
|
|
36
|
+
throw new ObjectQueryExecutionError(
|
|
37
|
+
"embedding_model_unavailable",
|
|
38
|
+
"Vector search requires the embedding model registered for its profile."
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const profile = ontology.resolveObjectType(input.objectTypeId).search?.vectors?.[query.profile]
|
|
43
|
+
if (!profile) {
|
|
44
|
+
throw new ObjectQueryExecutionError(
|
|
45
|
+
"embedding_model_unavailable",
|
|
46
|
+
"Vector search requires the embedding model registered for its profile."
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const model = models?.getByRef({
|
|
51
|
+
provider: profile.model.providerId,
|
|
52
|
+
modelId: profile.model.modelId,
|
|
53
|
+
})?.model
|
|
54
|
+
if (!model || !sameEmbeddingModel(model, profile.model)) {
|
|
55
|
+
throw new ObjectQueryExecutionError(
|
|
56
|
+
"embedding_model_unavailable",
|
|
57
|
+
"Vector search requires the embedding model registered for its profile."
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
return model
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
async function embedSearchText(
|
|
64
|
+
text: string,
|
|
65
|
+
model: EmbeddingModel,
|
|
66
|
+
signal?: AbortSignal
|
|
67
|
+
): Promise<readonly number[]> {
|
|
68
|
+
const dimensions = model.definition.dimensions
|
|
69
|
+
const timeout = AbortSignal.timeout(QUERY_EMBEDDING_TIMEOUT_MS)
|
|
70
|
+
const requestSignal = signal ? AbortSignal.any([signal, timeout]) : timeout
|
|
71
|
+
requestSignal.throwIfAborted()
|
|
72
|
+
const result = await model.embed({ texts: [text], signal: requestSignal })
|
|
73
|
+
requestSignal.throwIfAborted()
|
|
74
|
+
|
|
75
|
+
if (!Array.isArray(result?.vectors) || result.vectors.length !== 1) {
|
|
76
|
+
throw new ObjectQueryExecutionError(
|
|
77
|
+
"invalid_embedding_response",
|
|
78
|
+
"Embedding model must return exactly one vector for the search text."
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
return normalizeVector(result.vectors[0]!, dimensions)
|
|
83
|
+
} catch {
|
|
84
|
+
throw new ObjectQueryExecutionError(
|
|
85
|
+
"invalid_embedding_response",
|
|
86
|
+
"Embedding model returned an invalid vector for the search profile."
|
|
87
|
+
)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ObjectType } from "../../ontology"
|
|
2
|
+
|
|
3
|
+
export type VectorProfileName<T extends ObjectType> = T extends { search: { vectors: infer P } }
|
|
4
|
+
? Extract<keyof P, string>
|
|
5
|
+
: never
|
|
6
|
+
|
|
7
|
+
export interface ObjectVectorHandle {
|
|
8
|
+
/** Generate and atomically store this profile using its configured model. Conflicts are not retried. */
|
|
9
|
+
index(): Promise<void>
|
|
10
|
+
}
|
package/src/ontology/index.ts
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
// ── Types ───────────────────────────────────────────────────
|
|
12
12
|
|
|
13
|
+
export type { EmbeddingModelDefinition, EmbeddingModelRef } from "../models/embedding-model"
|
|
13
14
|
export type { DecimalValue } from "./decimal"
|
|
14
15
|
export {
|
|
15
16
|
compareDecimalValues,
|
|
@@ -48,6 +49,7 @@ export type {
|
|
|
48
49
|
ObjectSchema,
|
|
49
50
|
ObjectType,
|
|
50
51
|
ObjectTypeSearchMetadata,
|
|
52
|
+
ObjectVectorSearchProfile,
|
|
51
53
|
Ontology,
|
|
52
54
|
PrimitiveSchema,
|
|
53
55
|
Property,
|
package/src/ontology/registry.ts
CHANGED
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
validatePropertyDefinitions,
|
|
20
20
|
validateQueryMetadata,
|
|
21
21
|
} from "./validation"
|
|
22
|
+
import { snapshotVectorProfiles } from "./vector-profiles"
|
|
22
23
|
|
|
23
24
|
// ── Input types ──────────────────────────────────────────────
|
|
24
25
|
|
|
@@ -197,6 +198,13 @@ export class OntologyRegistry implements OntologyDefinitionCatalog {
|
|
|
197
198
|
this.resolveInheritedProperties()
|
|
198
199
|
validatePropertyDefinitions(this.objectTypesById, this.valueTypesById)
|
|
199
200
|
validateQueryMetadata(this.objectTypesById, this.valueTypesById)
|
|
201
|
+
for (const [id, type] of this.objectTypesById) {
|
|
202
|
+
if (type.search?.vectors)
|
|
203
|
+
this.objectTypesById.set(id, {
|
|
204
|
+
...type,
|
|
205
|
+
search: { ...type.search, vectors: snapshotVectorProfiles(type.search.vectors) },
|
|
206
|
+
})
|
|
207
|
+
}
|
|
200
208
|
this.primaryByTypeId = validatePrimaryProperties(this.objectTypesById)
|
|
201
209
|
}
|
|
202
210
|
|
package/src/ontology/types.ts
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* This file defines the value-shape side of that model.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import type { EmbeddingModelRef } from "../models/embedding-model"
|
|
12
13
|
import type { QuantitativeTypeId } from "./units"
|
|
13
14
|
|
|
14
15
|
/**
|
|
@@ -190,8 +191,6 @@ export interface PropertyQueryMetadata {
|
|
|
190
191
|
exact?: boolean
|
|
191
192
|
/** Enables faceting/grouping in search results. */
|
|
192
193
|
facet?: boolean
|
|
193
|
-
/** Enables vector search when the property stores numeric embedding arrays. */
|
|
194
|
-
vector?: boolean
|
|
195
194
|
/** Relative text-search weight. Only meaningful with `text: true`. */
|
|
196
195
|
weight?: number
|
|
197
196
|
}
|
|
@@ -202,20 +201,21 @@ export interface PropertyQueryMetadata {
|
|
|
202
201
|
* Search profiles decide which fields a global or type-scoped search uses.
|
|
203
202
|
* Primary ids remain exact-matchable even if omitted here.
|
|
204
203
|
*/
|
|
204
|
+
export interface ObjectVectorSearchProfile {
|
|
205
|
+
/** Ordered text sources. Sixb prepares their input deterministically. */
|
|
206
|
+
readonly source: readonly string[]
|
|
207
|
+
readonly model: EmbeddingModelRef
|
|
208
|
+
}
|
|
209
|
+
|
|
205
210
|
export interface ObjectTypeSearchMetadata {
|
|
211
|
+
/** Independent named representations; each query targets exactly one profile. */
|
|
212
|
+
readonly vectors?: Readonly<Record<string, ObjectVectorSearchProfile>>
|
|
206
213
|
/** Display/title property used in search results. */
|
|
207
214
|
title?: string
|
|
208
215
|
/** Default keyword-search fields for this object type. */
|
|
209
216
|
defaultText?: readonly string[]
|
|
210
217
|
/** Exact-match fields such as external ids, slugs, or emails. */
|
|
211
218
|
exact?: readonly string[]
|
|
212
|
-
/** Vector-search configuration for semantic retrieval. */
|
|
213
|
-
vector?: {
|
|
214
|
-
/** Property that stores the embedding vector. */
|
|
215
|
-
property: string
|
|
216
|
-
/** Source text properties used to produce the embedding. */
|
|
217
|
-
source: readonly string[]
|
|
218
|
-
}
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
/**
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { isPlainRecord } from "../../json"
|
|
2
|
+
|
|
3
|
+
const PRIMITIVE_SCHEMAS = new Set([
|
|
4
|
+
"string",
|
|
5
|
+
"integer",
|
|
6
|
+
"double",
|
|
7
|
+
"decimal",
|
|
8
|
+
"boolean",
|
|
9
|
+
"date",
|
|
10
|
+
"timestamp",
|
|
11
|
+
"uuid",
|
|
12
|
+
"fileRef",
|
|
13
|
+
])
|
|
14
|
+
|
|
15
|
+
/** Validate a declarative schema's shape independently of the primitive that consumes it. */
|
|
16
|
+
export function assertValidSchema(
|
|
17
|
+
schema: unknown,
|
|
18
|
+
path: string,
|
|
19
|
+
invalid: (path: string) => Error,
|
|
20
|
+
visiting: Set<object> = new Set()
|
|
21
|
+
): void {
|
|
22
|
+
if (typeof schema === "string") {
|
|
23
|
+
if (PRIMITIVE_SCHEMAS.has(schema)) {
|
|
24
|
+
return
|
|
25
|
+
}
|
|
26
|
+
throw invalid(path)
|
|
27
|
+
}
|
|
28
|
+
if (!isPlainRecord(schema) || typeof schema.type !== "string" || visiting.has(schema)) {
|
|
29
|
+
throw invalid(path)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
visiting.add(schema)
|
|
33
|
+
switch (schema.type) {
|
|
34
|
+
case "enum": {
|
|
35
|
+
const values = schema.values
|
|
36
|
+
const validValues = isValidEnumValues(values, schema.valueType)
|
|
37
|
+
if (!validValues || new Set(values).size !== values.length) {
|
|
38
|
+
throw invalid(path)
|
|
39
|
+
}
|
|
40
|
+
break
|
|
41
|
+
}
|
|
42
|
+
case "array":
|
|
43
|
+
assertValidSchema(schema.items, `${path}.items`, invalid, visiting)
|
|
44
|
+
break
|
|
45
|
+
case "map":
|
|
46
|
+
if (schema.keySchema !== "string") {
|
|
47
|
+
throw invalid(path)
|
|
48
|
+
}
|
|
49
|
+
assertValidSchema(schema.valueSchema, `${path}.valueSchema`, invalid, visiting)
|
|
50
|
+
break
|
|
51
|
+
case "object": {
|
|
52
|
+
if (!isPlainRecord(schema.properties)) {
|
|
53
|
+
throw invalid(path)
|
|
54
|
+
}
|
|
55
|
+
for (const [fieldId, field] of Object.entries(schema.properties)) {
|
|
56
|
+
if (!fieldId.trim() || !isPlainRecord(field) || !("schema" in field)) {
|
|
57
|
+
throw invalid(`${path}.properties.${fieldId}`)
|
|
58
|
+
}
|
|
59
|
+
if (
|
|
60
|
+
(field.required !== undefined && typeof field.required !== "boolean") ||
|
|
61
|
+
(field.nullable !== undefined && typeof field.nullable !== "boolean") ||
|
|
62
|
+
(field.description !== undefined &&
|
|
63
|
+
(typeof field.description !== "string" || !field.description.trim()))
|
|
64
|
+
) {
|
|
65
|
+
throw invalid(`${path}.properties.${fieldId}`)
|
|
66
|
+
}
|
|
67
|
+
assertValidSchema(field.schema, `${path}.properties.${fieldId}.schema`, invalid, visiting)
|
|
68
|
+
}
|
|
69
|
+
break
|
|
70
|
+
}
|
|
71
|
+
case "valueTypeRef":
|
|
72
|
+
if (typeof schema.valueTypeId !== "string" || !schema.valueTypeId.trim()) {
|
|
73
|
+
throw invalid(path)
|
|
74
|
+
}
|
|
75
|
+
if (schema._resolved !== undefined) {
|
|
76
|
+
assertValidSchema(schema._resolved, `${path}._resolved`, invalid, visiting)
|
|
77
|
+
}
|
|
78
|
+
break
|
|
79
|
+
default:
|
|
80
|
+
throw invalid(path)
|
|
81
|
+
}
|
|
82
|
+
visiting.delete(schema)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function isValidEnumValues(values: unknown, valueType: unknown): values is unknown[] {
|
|
86
|
+
if (!Array.isArray(values) || values.length === 0) {
|
|
87
|
+
return false
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
for (let index = 0; index < values.length; index += 1) {
|
|
91
|
+
if (!Object.hasOwn(values, index)) {
|
|
92
|
+
return false
|
|
93
|
+
}
|
|
94
|
+
const value = values[index]
|
|
95
|
+
if (
|
|
96
|
+
valueType === "string"
|
|
97
|
+
? typeof value !== "string"
|
|
98
|
+
: valueType !== "integer" || typeof value !== "number" || !Number.isInteger(value)
|
|
99
|
+
) {
|
|
100
|
+
return false
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return true
|
|
104
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { withFailureMessage } from "../../errors/failure-message"
|
|
1
2
|
import type { ObjectLink, ObjectType, Property, Schema, ValueType } from ".."
|
|
2
3
|
import { OntologyValidationError } from "../errors"
|
|
3
4
|
import type { LinkToken, ObjectTypeWithPropertyTokens, PropertyToken } from "../tokens"
|
|
@@ -92,8 +93,11 @@ export function assertRequiredProperties(
|
|
|
92
93
|
): void {
|
|
93
94
|
for (const property of objectType.properties) {
|
|
94
95
|
if (property.required && properties[property.id] === undefined) {
|
|
95
|
-
throw
|
|
96
|
-
|
|
96
|
+
throw withFailureMessage(
|
|
97
|
+
new OntologyValidationError(
|
|
98
|
+
`[Sixb] Missing required property '${property.id}' for object type '${objectType.id}'`
|
|
99
|
+
),
|
|
100
|
+
`Missing required property '${objectType.id}.${property.id}'.`
|
|
97
101
|
)
|
|
98
102
|
}
|
|
99
103
|
}
|
|
@@ -181,14 +185,20 @@ export function validatePropertyValue(
|
|
|
181
185
|
valueTypesById: ReadonlyMap<string, ValueType>
|
|
182
186
|
): void {
|
|
183
187
|
if (value === undefined) {
|
|
184
|
-
throw
|
|
188
|
+
throw withFailureMessage(
|
|
189
|
+
new OntologyValidationError(`[Sixb] Property ${path} cannot be undefined`),
|
|
190
|
+
`Property ${path} cannot be undefined.`
|
|
191
|
+
)
|
|
185
192
|
}
|
|
186
193
|
|
|
187
194
|
if (value === null) {
|
|
188
195
|
if (property.nullable) {
|
|
189
196
|
return
|
|
190
197
|
}
|
|
191
|
-
throw
|
|
198
|
+
throw withFailureMessage(
|
|
199
|
+
new OntologyValidationError(`[Sixb] Property ${path} cannot be null`),
|
|
200
|
+
`Property ${path} cannot be null.`
|
|
201
|
+
)
|
|
192
202
|
}
|
|
193
203
|
|
|
194
204
|
validateSchemaValue(property.schema, value, path, valueTypesById)
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
+
import { assertEmbeddingModelRef } from "../../models/embedding-model"
|
|
1
2
|
import type { ObjectType, Property, Schema, ValueType } from ".."
|
|
2
3
|
import { OntologyValidationError } from "../errors"
|
|
3
4
|
|
|
4
|
-
type QueryFeature = "filterable" | "sortable" | "text" | "exact" | "facet"
|
|
5
|
+
type QueryFeature = "filterable" | "sortable" | "text" | "exact" | "facet"
|
|
5
6
|
|
|
6
|
-
const queryFeatures: readonly QueryFeature[] = [
|
|
7
|
-
"filterable",
|
|
8
|
-
"sortable",
|
|
9
|
-
"text",
|
|
10
|
-
"exact",
|
|
11
|
-
"facet",
|
|
12
|
-
"vector",
|
|
13
|
-
]
|
|
7
|
+
const queryFeatures: readonly QueryFeature[] = ["filterable", "sortable", "text", "exact", "facet"]
|
|
14
8
|
|
|
15
9
|
export function validateQueryMetadata(
|
|
16
10
|
objectTypesById: ReadonlyMap<string, ObjectType>,
|
|
@@ -46,6 +40,11 @@ function validatePropertyQueryMetadata(
|
|
|
46
40
|
): void {
|
|
47
41
|
const query = property.query
|
|
48
42
|
if (!query) return
|
|
43
|
+
if ("vector" in query) {
|
|
44
|
+
throw new OntologyValidationError(
|
|
45
|
+
`[Sixb] Property '${property.id}' on '${ownerPath}' uses removed query.vector metadata. Declare search.vectors on the object type instead.`
|
|
46
|
+
)
|
|
47
|
+
}
|
|
49
48
|
|
|
50
49
|
const enabledFeatures = queryFeatures.filter((feature) => query[feature] === true)
|
|
51
50
|
if ((enabledFeatures.length > 0 || query.weight !== undefined) && query.searchable !== true) {
|
|
@@ -100,12 +99,6 @@ function validatePropertyQueryMetadata(
|
|
|
100
99
|
`[Sixb] Query metadata for property '${property.id}' on '${ownerPath}' enables faceting, but its schema cannot be faceted`
|
|
101
100
|
)
|
|
102
101
|
}
|
|
103
|
-
|
|
104
|
-
if (query.vector && !isVectorSchema(schema, valueTypesById)) {
|
|
105
|
-
throw new OntologyValidationError(
|
|
106
|
-
`[Sixb] Query metadata for property '${property.id}' on '${ownerPath}' enables vector search, but its schema is not a numeric array`
|
|
107
|
-
)
|
|
108
|
-
}
|
|
109
102
|
}
|
|
110
103
|
|
|
111
104
|
function validateObjectSearchMetadata(
|
|
@@ -115,7 +108,33 @@ function validateObjectSearchMetadata(
|
|
|
115
108
|
): void {
|
|
116
109
|
const search = objectType.search
|
|
117
110
|
if (!search) return
|
|
111
|
+
if ("vector" in search) {
|
|
112
|
+
throw new OntologyValidationError(
|
|
113
|
+
`[Sixb] Object type '${typeId}' uses removed search.vector metadata. Declare named profiles in search.vectors instead.`
|
|
114
|
+
)
|
|
115
|
+
}
|
|
118
116
|
|
|
117
|
+
for (const [name, profile] of Object.entries(search.vectors ?? {})) {
|
|
118
|
+
if (!/^[a-zA-Z][a-zA-Z0-9_]*$/.test(name))
|
|
119
|
+
throw new OntologyValidationError(`[Sixb] Invalid vector profile name ${name}`)
|
|
120
|
+
assertEmbeddingModelRef(profile.model)
|
|
121
|
+
if (
|
|
122
|
+
!Array.isArray(profile.source) ||
|
|
123
|
+
profile.source.length === 0 ||
|
|
124
|
+
new Set(profile.source).size !== profile.source.length
|
|
125
|
+
) {
|
|
126
|
+
throw new OntologyValidationError(
|
|
127
|
+
`[Sixb] Vector profile ${name} requires unique, nonempty source fields.`
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
for (const id of profile.source) {
|
|
131
|
+
const property = requireObjectProperty(typeId, objectType, id, `search.vectors.${name}`)
|
|
132
|
+
assertStaticSearchProfileProperty(typeId, property, `search.vectors.${name}`)
|
|
133
|
+
if (!isTextSearchableSchema(resolveQueryableSchema(property, typeId, valueTypesById))) {
|
|
134
|
+
throw new OntologyValidationError(`[Sixb] Vector source must be text: ${typeId}.${id}`)
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
119
138
|
const primaryPropertyId = objectType.properties.find((property) => property.primary)?.id
|
|
120
139
|
|
|
121
140
|
if (search.title) {
|
|
@@ -142,34 +161,6 @@ function validateObjectSearchMetadata(
|
|
|
142
161
|
assertPropertyQueryFlag(typeId, property, "exact", "search.exact")
|
|
143
162
|
}
|
|
144
163
|
}
|
|
145
|
-
|
|
146
|
-
if (search.vector) {
|
|
147
|
-
const vectorProperty = requireObjectProperty(
|
|
148
|
-
typeId,
|
|
149
|
-
objectType,
|
|
150
|
-
search.vector.property,
|
|
151
|
-
"search.vector.property"
|
|
152
|
-
)
|
|
153
|
-
assertStaticSearchProfileProperty(typeId, vectorProperty, "search.vector.property")
|
|
154
|
-
assertPropertyQueryFlag(typeId, vectorProperty, "vector", "search.vector.property")
|
|
155
|
-
|
|
156
|
-
if (search.vector.source.length === 0) {
|
|
157
|
-
throw new OntologyValidationError(
|
|
158
|
-
`[Sixb] Object type '${typeId}' search.vector.source must include at least one source property`
|
|
159
|
-
)
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
for (const sourceId of search.vector.source) {
|
|
163
|
-
const sourceProperty = requireObjectProperty(
|
|
164
|
-
typeId,
|
|
165
|
-
objectType,
|
|
166
|
-
sourceId,
|
|
167
|
-
"search.vector.source"
|
|
168
|
-
)
|
|
169
|
-
assertStaticSearchProfileProperty(typeId, sourceProperty, "search.vector.source")
|
|
170
|
-
assertPropertyQueryFlag(typeId, sourceProperty, "text", "search.vector.source")
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
164
|
}
|
|
174
165
|
|
|
175
166
|
function requireObjectProperty(
|
|
@@ -290,11 +281,3 @@ function isSortableSchema(schema: Schema): boolean {
|
|
|
290
281
|
function isFacetSchema(schema: Schema): boolean {
|
|
291
282
|
return isExactSearchableSchema(schema)
|
|
292
283
|
}
|
|
293
|
-
|
|
294
|
-
function isVectorSchema(schema: Schema, valueTypesById: ReadonlyMap<string, ValueType>): boolean {
|
|
295
|
-
if (typeof schema === "string") return false
|
|
296
|
-
if (schema.type !== "array") return false
|
|
297
|
-
|
|
298
|
-
const itemSchema = resolveSchema(schema.items, valueTypesById, "vector item")
|
|
299
|
-
return itemSchema === "integer" || itemSchema === "double" || itemSchema === "decimal"
|
|
300
|
-
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { isFileRef } from "../../blob-storage/validation"
|
|
2
|
+
import { withFailureMessage } from "../../errors/failure-message"
|
|
2
3
|
import type { ObjectFieldSchema, Schema, ValueType, ValueTypeRefSchema } from ".."
|
|
3
4
|
import { isDecimalString } from "../decimal"
|
|
4
5
|
import { OntologyValidationError } from "../errors"
|
|
@@ -8,39 +9,53 @@ export function validateSchemaValue(
|
|
|
8
9
|
schema: Schema,
|
|
9
10
|
value: unknown,
|
|
10
11
|
path: string,
|
|
11
|
-
valueTypesById: ReadonlyMap<string, ValueType
|
|
12
|
+
valueTypesById: ReadonlyMap<string, ValueType>,
|
|
13
|
+
diagnosticPath = path
|
|
12
14
|
): void {
|
|
13
15
|
if (typeof schema === "string") {
|
|
14
16
|
switch (schema) {
|
|
15
17
|
case "string":
|
|
16
18
|
case "uuid": {
|
|
17
19
|
if (typeof value !== "string") {
|
|
18
|
-
throw
|
|
20
|
+
throw withFailureMessage(
|
|
21
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be a string`),
|
|
22
|
+
`Property ${diagnosticPath} must be a string.`
|
|
23
|
+
)
|
|
19
24
|
}
|
|
20
25
|
return
|
|
21
26
|
}
|
|
22
27
|
case "boolean": {
|
|
23
28
|
if (typeof value !== "boolean") {
|
|
24
|
-
throw
|
|
29
|
+
throw withFailureMessage(
|
|
30
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be a boolean`),
|
|
31
|
+
`Property ${diagnosticPath} must be a boolean.`
|
|
32
|
+
)
|
|
25
33
|
}
|
|
26
34
|
return
|
|
27
35
|
}
|
|
28
36
|
case "integer": {
|
|
29
37
|
if (typeof value !== "number" || !Number.isInteger(value)) {
|
|
30
|
-
throw
|
|
38
|
+
throw withFailureMessage(
|
|
39
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be an integer`),
|
|
40
|
+
`Property ${diagnosticPath} must be an integer.`
|
|
41
|
+
)
|
|
31
42
|
}
|
|
32
43
|
return
|
|
33
44
|
}
|
|
34
45
|
case "double": {
|
|
35
46
|
if (typeof value !== "number" || !Number.isFinite(value)) {
|
|
36
|
-
throw
|
|
47
|
+
throw withFailureMessage(
|
|
48
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be numeric`),
|
|
49
|
+
`Property ${diagnosticPath} must be numeric.`
|
|
50
|
+
)
|
|
37
51
|
}
|
|
38
52
|
return
|
|
39
53
|
}
|
|
40
54
|
case "decimal": {
|
|
41
55
|
if (!isDecimalString(value)) {
|
|
42
|
-
throw
|
|
43
|
-
`[Sixb] Property ${path} must be an exact decimal string`
|
|
56
|
+
throw withFailureMessage(
|
|
57
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be an exact decimal string`),
|
|
58
|
+
`Property ${diagnosticPath} must be an exact decimal string.`
|
|
44
59
|
)
|
|
45
60
|
}
|
|
46
61
|
return
|
|
@@ -48,13 +63,19 @@ export function validateSchemaValue(
|
|
|
48
63
|
case "date":
|
|
49
64
|
case "timestamp": {
|
|
50
65
|
if (!(value instanceof Date) && typeof value !== "string") {
|
|
51
|
-
throw
|
|
66
|
+
throw withFailureMessage(
|
|
67
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be a Date or ISO string`),
|
|
68
|
+
`Property ${diagnosticPath} must be a Date or ISO string.`
|
|
69
|
+
)
|
|
52
70
|
}
|
|
53
71
|
return
|
|
54
72
|
}
|
|
55
73
|
case "fileRef": {
|
|
56
74
|
if (!isFileRef(value)) {
|
|
57
|
-
throw
|
|
75
|
+
throw withFailureMessage(
|
|
76
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be a fileRef`),
|
|
77
|
+
`Property ${diagnosticPath} must be a fileRef.`
|
|
78
|
+
)
|
|
58
79
|
}
|
|
59
80
|
return
|
|
60
81
|
}
|
|
@@ -63,8 +84,11 @@ export function validateSchemaValue(
|
|
|
63
84
|
|
|
64
85
|
if (schema.type === "enum") {
|
|
65
86
|
if (!schema.values.includes(value as never)) {
|
|
66
|
-
throw
|
|
67
|
-
|
|
87
|
+
throw withFailureMessage(
|
|
88
|
+
new OntologyValidationError(
|
|
89
|
+
`[Sixb] Property ${path} must be one of: ${schema.values.join(", ")}`
|
|
90
|
+
),
|
|
91
|
+
`Property ${diagnosticPath} must match a declared enum value.`
|
|
68
92
|
)
|
|
69
93
|
}
|
|
70
94
|
return
|
|
@@ -72,34 +96,58 @@ export function validateSchemaValue(
|
|
|
72
96
|
|
|
73
97
|
if (schema.type === "array") {
|
|
74
98
|
if (!Array.isArray(value)) {
|
|
75
|
-
throw
|
|
99
|
+
throw withFailureMessage(
|
|
100
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be an array`),
|
|
101
|
+
`Property ${diagnosticPath} must be an array.`
|
|
102
|
+
)
|
|
76
103
|
}
|
|
77
104
|
for (let index = 0; index < value.length; index += 1) {
|
|
78
|
-
validateSchemaValue(
|
|
105
|
+
validateSchemaValue(
|
|
106
|
+
schema.items,
|
|
107
|
+
value[index],
|
|
108
|
+
`${path}[${index}]`,
|
|
109
|
+
valueTypesById,
|
|
110
|
+
`${diagnosticPath}[${index}]`
|
|
111
|
+
)
|
|
79
112
|
}
|
|
80
113
|
return
|
|
81
114
|
}
|
|
82
115
|
|
|
83
116
|
if (schema.type === "map") {
|
|
84
117
|
if (!isRecord(value)) {
|
|
85
|
-
throw
|
|
118
|
+
throw withFailureMessage(
|
|
119
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be an object map`),
|
|
120
|
+
`Property ${diagnosticPath} must be an object map.`
|
|
121
|
+
)
|
|
86
122
|
}
|
|
87
123
|
for (const [key, entry] of Object.entries(value)) {
|
|
88
|
-
validateSchemaValue(
|
|
124
|
+
validateSchemaValue(
|
|
125
|
+
schema.valueSchema,
|
|
126
|
+
entry,
|
|
127
|
+
`${path}.${key}`,
|
|
128
|
+
valueTypesById,
|
|
129
|
+
`${diagnosticPath}.*`
|
|
130
|
+
)
|
|
89
131
|
}
|
|
90
132
|
return
|
|
91
133
|
}
|
|
92
134
|
|
|
93
135
|
if (schema.type === "object") {
|
|
94
136
|
if (!isRecord(value)) {
|
|
95
|
-
throw
|
|
137
|
+
throw withFailureMessage(
|
|
138
|
+
new OntologyValidationError(`[Sixb] Property ${path} must be an object`),
|
|
139
|
+
`Property ${diagnosticPath} must be an object.`
|
|
140
|
+
)
|
|
96
141
|
}
|
|
97
142
|
|
|
98
143
|
const fields = schema.properties
|
|
99
144
|
const fieldIds = new Set(Object.keys(fields))
|
|
100
145
|
for (const fieldId of Object.keys(value)) {
|
|
101
146
|
if (!fieldIds.has(fieldId)) {
|
|
102
|
-
throw
|
|
147
|
+
throw withFailureMessage(
|
|
148
|
+
new OntologyValidationError(`[Sixb] Unknown field '${path}.${fieldId}'`),
|
|
149
|
+
`Object ${diagnosticPath} contains an undeclared field.`
|
|
150
|
+
)
|
|
103
151
|
}
|
|
104
152
|
}
|
|
105
153
|
|
|
@@ -107,12 +155,21 @@ export function validateSchemaValue(
|
|
|
107
155
|
const fieldValue = value[fieldId]
|
|
108
156
|
if (fieldValue === undefined) {
|
|
109
157
|
if (field.required) {
|
|
110
|
-
throw
|
|
158
|
+
throw withFailureMessage(
|
|
159
|
+
new OntologyValidationError(`[Sixb] Missing required field '${path}.${fieldId}'`),
|
|
160
|
+
`Missing required field '${diagnosticPath}.${fieldId}'.`
|
|
161
|
+
)
|
|
111
162
|
}
|
|
112
163
|
continue
|
|
113
164
|
}
|
|
114
165
|
|
|
115
|
-
validateFieldValue(
|
|
166
|
+
validateFieldValue(
|
|
167
|
+
field,
|
|
168
|
+
fieldValue,
|
|
169
|
+
`${path}.${fieldId}`,
|
|
170
|
+
valueTypesById,
|
|
171
|
+
`${diagnosticPath}.${fieldId}`
|
|
172
|
+
)
|
|
116
173
|
}
|
|
117
174
|
return
|
|
118
175
|
}
|
|
@@ -122,7 +179,8 @@ export function validateSchemaValue(
|
|
|
122
179
|
resolveValueTypeSchema(schema, valueTypesById, path),
|
|
123
180
|
value,
|
|
124
181
|
path,
|
|
125
|
-
valueTypesById
|
|
182
|
+
valueTypesById,
|
|
183
|
+
diagnosticPath
|
|
126
184
|
)
|
|
127
185
|
}
|
|
128
186
|
}
|
|
@@ -131,16 +189,20 @@ function validateFieldValue(
|
|
|
131
189
|
field: ObjectFieldSchema,
|
|
132
190
|
value: unknown,
|
|
133
191
|
path: string,
|
|
134
|
-
valueTypesById: ReadonlyMap<string, ValueType
|
|
192
|
+
valueTypesById: ReadonlyMap<string, ValueType>,
|
|
193
|
+
diagnosticPath = path
|
|
135
194
|
): void {
|
|
136
195
|
if (value === null) {
|
|
137
196
|
if (field.nullable) {
|
|
138
197
|
return
|
|
139
198
|
}
|
|
140
|
-
throw
|
|
199
|
+
throw withFailureMessage(
|
|
200
|
+
new OntologyValidationError(`[Sixb] Field ${path} cannot be null`),
|
|
201
|
+
`Field ${diagnosticPath} cannot be null.`
|
|
202
|
+
)
|
|
141
203
|
}
|
|
142
204
|
|
|
143
|
-
validateSchemaValue(field.schema, value, path, valueTypesById)
|
|
205
|
+
validateSchemaValue(field.schema, value, path, valueTypesById, diagnosticPath)
|
|
144
206
|
}
|
|
145
207
|
|
|
146
208
|
export function resolveValueTypeRef(schema: Schema): string | undefined {
|