@sixb/core 0.1.20 → 0.1.21
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/execution.d.ts.map +1 -1
- package/dist/actions/index.js +54 -47
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/request.d.ts.map +1 -1
- package/dist/actions/run-authorization.d.ts +9 -0
- package/dist/actions/run-authorization.d.ts.map +1 -1
- package/dist/activity/connection.d.ts +62 -0
- package/dist/activity/connection.d.ts.map +1 -0
- package/dist/activity/device.d.ts +8 -0
- package/dist/activity/device.d.ts.map +1 -0
- package/dist/activity/execution.d.ts +48 -0
- package/dist/activity/execution.d.ts.map +1 -0
- package/dist/activity/service.d.ts +79 -0
- package/dist/activity/service.d.ts.map +1 -0
- package/dist/activity/shares.d.ts +24 -0
- package/dist/activity/shares.d.ts.map +1 -0
- package/dist/activity/timeline.d.ts +96 -0
- package/dist/activity/timeline.d.ts.map +1 -0
- package/dist/agents/index.d.ts +2 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +63 -50
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/request.d.ts.map +1 -1
- package/dist/agents/skills.d.ts.map +1 -1
- package/dist/agents/streams/index.js +3 -3
- package/dist/agents/streams/internal.js +3 -3
- package/dist/agents/types.d.ts +8 -8
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/validation.d.ts +1 -1
- package/dist/agents/validation.d.ts.map +1 -1
- package/dist/artifacts/address.d.ts +48 -0
- package/dist/artifacts/address.d.ts.map +1 -0
- package/dist/artifacts/csv.d.ts +22 -0
- package/dist/artifacts/csv.d.ts.map +1 -0
- package/dist/artifacts/errors.d.ts +11 -0
- package/dist/artifacts/errors.d.ts.map +1 -0
- package/dist/artifacts/execution.d.ts +43 -0
- package/dist/artifacts/execution.d.ts.map +1 -0
- package/dist/artifacts/frames/assets.d.ts +28 -0
- package/dist/artifacts/frames/assets.d.ts.map +1 -0
- package/dist/artifacts/frames/grants.d.ts +37 -0
- package/dist/artifacts/frames/grants.d.ts.map +1 -0
- package/dist/artifacts/frames/index.d.ts +10 -0
- package/dist/artifacts/frames/index.d.ts.map +1 -0
- package/dist/artifacts/frames/index.js +892 -0
- package/dist/artifacts/frames/index.js.map +14 -0
- package/dist/artifacts/frames/kit.d.ts +66 -0
- package/dist/artifacts/frames/kit.d.ts.map +1 -0
- package/dist/artifacts/frames/probe.d.ts +41 -0
- package/dist/artifacts/frames/probe.d.ts.map +1 -0
- package/dist/artifacts/frames/protocol.d.ts +98 -0
- package/dist/artifacts/frames/protocol.d.ts.map +1 -0
- package/dist/artifacts/frames/runtime.d.ts +13 -0
- package/dist/artifacts/frames/runtime.d.ts.map +1 -0
- package/dist/artifacts/html.d.ts +6 -0
- package/dist/artifacts/html.d.ts.map +1 -0
- package/dist/artifacts/ids.d.ts +5 -0
- package/dist/artifacts/ids.d.ts.map +1 -0
- package/dist/artifacts/index.d.ts +16 -0
- package/dist/artifacts/index.d.ts.map +1 -0
- package/dist/artifacts/index.js +125 -0
- package/dist/artifacts/index.js.map +10 -0
- package/dist/artifacts/kinds.d.ts +5 -0
- package/dist/artifacts/kinds.d.ts.map +1 -0
- package/dist/artifacts/limits.d.ts +28 -0
- package/dist/artifacts/limits.d.ts.map +1 -0
- package/dist/artifacts/outline.d.ts +44 -0
- package/dist/artifacts/outline.d.ts.map +1 -0
- package/dist/artifacts/publish/files.d.ts +15 -0
- package/dist/artifacts/publish/files.d.ts.map +1 -0
- package/dist/artifacts/publish/index.d.ts +5 -0
- package/dist/artifacts/publish/index.d.ts.map +1 -0
- package/dist/artifacts/publish/index.js +36 -0
- package/dist/artifacts/publish/index.js.map +9 -0
- package/dist/artifacts/publish/publish.d.ts +52 -0
- package/dist/artifacts/publish/publish.d.ts.map +1 -0
- package/dist/artifacts/publish/references.d.ts +27 -0
- package/dist/artifacts/publish/references.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/document.d.ts +17 -0
- package/dist/artifacts/publish/validate/document.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/file.d.ts +8 -0
- package/dist/artifacts/publish/validate/file.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/sheet.d.ts +15 -0
- package/dist/artifacts/publish/validate/sheet.d.ts.map +1 -0
- package/dist/artifacts/publish/validate/slides.d.ts +21 -0
- package/dist/artifacts/publish/validate/slides.d.ts.map +1 -0
- package/dist/artifacts/references.d.ts +12 -0
- package/dist/artifacts/references.d.ts.map +1 -0
- package/dist/artifacts/resolve.d.ts +41 -0
- package/dist/artifacts/resolve.d.ts.map +1 -0
- package/dist/artifacts/theme.d.ts +19 -0
- package/dist/artifacts/theme.d.ts.map +1 -0
- package/dist/artifacts/warnings.d.ts +11 -0
- package/dist/artifacts/warnings.d.ts.map +1 -0
- package/dist/artifacts/workbook.d.ts +64 -0
- package/dist/artifacts/workbook.d.ts.map +1 -0
- package/dist/auth/index.js +10 -10
- package/dist/authorization/decision.d.ts +2 -0
- package/dist/authorization/decision.d.ts.map +1 -1
- package/dist/authorization/grant-kinds.d.ts +2 -2
- package/dist/authorization/grant-kinds.d.ts.map +1 -1
- package/dist/authorization/index.js +6 -6
- package/dist/blob-storage/browser.js +1 -1
- package/dist/blob-storage/index.js +2 -2
- package/dist/blob-storage/internal.d.ts +1 -1
- package/dist/blob-storage/internal.d.ts.map +1 -1
- package/dist/blob-storage/internal.js +11 -5
- package/dist/blob-storage/internal.js.map +1 -1
- package/dist/blob-storage/media-type.d.ts +12 -0
- package/dist/blob-storage/media-type.d.ts.map +1 -1
- package/dist/bootstrap/index.js +53 -47
- package/dist/bootstrap/index.js.map +2 -2
- package/dist/{chunk-xfs8x8m9.js → chunk-0bphap9y.js} +5 -5
- package/dist/{chunk-1zq2p6g0.js → chunk-1cc1xaf3.js} +3 -3
- package/dist/chunk-3jms7je7.js +14 -0
- package/dist/chunk-3jms7je7.js.map +10 -0
- package/dist/{chunk-s54c868q.js → chunk-3qct2mdc.js} +3 -13
- package/dist/chunk-3qct2mdc.js.map +12 -0
- package/dist/{chunk-t7x8dmn0.js → chunk-431pyp2c.js} +3 -3
- package/dist/{chunk-c85m1hyj.js → chunk-447a5c0p.js} +2 -2
- package/dist/chunk-48qjhh6v.js +185 -0
- package/dist/chunk-48qjhh6v.js.map +13 -0
- package/dist/{chunk-ren4kg2j.js → chunk-561r0yc9.js} +8 -8
- package/dist/{chunk-5e43w60z.js → chunk-5948n82c.js} +2 -2
- package/dist/{chunk-yzwja0mj.js → chunk-5hx48dnn.js} +2 -2
- package/dist/{chunk-x6m907x7.js → chunk-5vems3nx.js} +5 -6
- package/dist/{chunk-x6m907x7.js.map → chunk-5vems3nx.js.map} +3 -3
- package/dist/{chunk-0rbyz4qy.js → chunk-61y5xs4p.js} +560 -164
- package/dist/{chunk-0rbyz4qy.js.map → chunk-61y5xs4p.js.map} +12 -9
- package/dist/chunk-65abf64x.js +13 -0
- package/dist/chunk-65abf64x.js.map +10 -0
- package/dist/{chunk-z3y5kg1x.js → chunk-6eqsgvxk.js} +3 -3
- package/dist/{chunk-z3y5kg1x.js.map → chunk-6eqsgvxk.js.map} +2 -2
- package/dist/chunk-6rqgmkde.js +2028 -0
- package/dist/chunk-6rqgmkde.js.map +29 -0
- package/dist/{chunk-d0bqz29d.js → chunk-6vb4st8k.js} +8 -4
- package/dist/{chunk-d0bqz29d.js.map → chunk-6vb4st8k.js.map} +3 -3
- package/dist/chunk-7q8t23v4.js +467 -0
- package/dist/chunk-7q8t23v4.js.map +14 -0
- package/dist/{chunk-5j58wjct.js → chunk-858emn8m.js} +6 -6
- package/dist/{chunk-hvsb78a1.js → chunk-8frc8a4j.js} +26 -26
- package/dist/{chunk-hvsb78a1.js.map → chunk-8frc8a4j.js.map} +2 -2
- package/dist/{chunk-3zxk45er.js → chunk-8ncg20rd.js} +3 -68
- package/dist/{chunk-3zxk45er.js.map → chunk-8ncg20rd.js.map} +4 -5
- package/dist/{chunk-n33z5bjw.js → chunk-918wwnaa.js} +490 -24
- package/dist/{chunk-n33z5bjw.js.map → chunk-918wwnaa.js.map} +13 -11
- package/dist/{chunk-rrzt8jdy.js → chunk-9j4jw7as.js} +103 -110
- package/dist/chunk-9j4jw7as.js.map +14 -0
- package/dist/chunk-9kgkfg6v.js +502 -0
- package/dist/chunk-9kgkfg6v.js.map +14 -0
- package/dist/chunk-a3faa34j.js +74 -0
- package/dist/chunk-a3faa34j.js.map +10 -0
- package/dist/{chunk-6c6sn0bh.js → chunk-akzryx9h.js} +335 -1167
- package/dist/{chunk-6c6sn0bh.js.map → chunk-akzryx9h.js.map} +18 -24
- package/dist/chunk-arns890k.js +10 -0
- package/dist/chunk-arns890k.js.map +10 -0
- package/dist/{chunk-hjzdd750.js → chunk-bk9svbcq.js} +11 -11
- package/dist/{chunk-hjzdd750.js.map → chunk-bk9svbcq.js.map} +2 -2
- package/dist/{chunk-hkc3jct7.js → chunk-c06hmxyy.js} +2 -10
- package/dist/chunk-c06hmxyy.js.map +10 -0
- package/dist/{chunk-6p49a5cq.js → chunk-c1rxbz5y.js} +3 -3
- package/dist/chunk-cfj9dfbb.js +288 -0
- package/dist/chunk-cfj9dfbb.js.map +12 -0
- package/dist/{chunk-bx9q3cwv.js → chunk-cn0fwwhy.js} +7 -7
- package/dist/{chunk-bx9q3cwv.js.map → chunk-cn0fwwhy.js.map} +1 -1
- package/dist/{chunk-gc4ntf7d.js → chunk-cwdzcv37.js} +1 -1
- package/dist/{chunk-fa02jy15.js → chunk-cy4mbddw.js} +1 -1
- package/dist/{chunk-9w055r5b.js → chunk-d09e3rax.js} +1 -1
- package/dist/chunk-d5rjr8c0.js +176 -0
- package/dist/chunk-d5rjr8c0.js.map +12 -0
- package/dist/{chunk-dk8tkk5f.js → chunk-d7dnxdep.js} +3 -3
- package/dist/{chunk-b38szspf.js → chunk-dhcv7yxc.js} +1 -1
- package/dist/{chunk-b38szspf.js.map → chunk-dhcv7yxc.js.map} +1 -1
- package/dist/{chunk-gsjm1wms.js → chunk-dhdha526.js} +8 -2
- package/dist/chunk-dhdha526.js.map +10 -0
- package/dist/{chunk-8mx7qw3y.js → chunk-dvd2fp9q.js} +2 -2
- package/dist/{chunk-8mx7qw3y.js.map → chunk-dvd2fp9q.js.map} +3 -3
- package/dist/{chunk-way52z4h.js → chunk-e17zdm62.js} +6 -12
- package/dist/{chunk-way52z4h.js.map → chunk-e17zdm62.js.map} +3 -4
- package/dist/{chunk-tpn40322.js → chunk-e6k4thh5.js} +11 -10
- package/dist/{chunk-tpn40322.js.map → chunk-e6k4thh5.js.map} +3 -3
- package/dist/{chunk-tw03bsmb.js → chunk-eptrvnby.js} +224 -3
- package/dist/chunk-eptrvnby.js.map +12 -0
- package/dist/{chunk-es1gxsbf.js → chunk-f4pamkt9.js} +8 -10
- package/dist/chunk-f4pamkt9.js.map +12 -0
- package/dist/chunk-ff5xkv0p.js +211 -0
- package/dist/chunk-ff5xkv0p.js.map +10 -0
- package/dist/{chunk-d09tj99x.js → chunk-g257jwnc.js} +10 -4
- package/dist/{chunk-d09tj99x.js.map → chunk-g257jwnc.js.map} +3 -3
- package/dist/chunk-g5bvzyyr.js +32 -0
- package/dist/chunk-g5bvzyyr.js.map +10 -0
- package/dist/chunk-hke9aeen.js +9 -0
- package/dist/chunk-hke9aeen.js.map +10 -0
- package/dist/{chunk-1sr8ryzk.js → chunk-hwksyjks.js} +122 -1
- package/dist/{chunk-1sr8ryzk.js.map → chunk-hwksyjks.js.map} +3 -3
- package/dist/chunk-jcfw4h7m.js +9 -0
- package/dist/chunk-jcfw4h7m.js.map +10 -0
- package/dist/{chunk-k6q3n2sc.js → chunk-k43ct2ke.js} +20 -11
- package/dist/chunk-k43ct2ke.js.map +12 -0
- package/dist/{chunk-3t2hgbgd.js → chunk-kge7k6ey.js} +40 -8
- package/dist/chunk-kge7k6ey.js.map +15 -0
- package/dist/{chunk-tg2cw67r.js → chunk-ky3j490c.js} +2 -2
- package/dist/chunk-mjddfa7k.js +129 -0
- package/dist/chunk-mjddfa7k.js.map +12 -0
- package/dist/{chunk-vpq4shxz.js → chunk-nn5xnx3s.js} +45 -10
- package/dist/{chunk-vpq4shxz.js.map → chunk-nn5xnx3s.js.map} +7 -6
- package/dist/{chunk-0yh890a4.js → chunk-q5e5tv4b.js} +35 -7
- package/dist/{chunk-0yh890a4.js.map → chunk-q5e5tv4b.js.map} +3 -3
- package/dist/{chunk-vyf9kfqf.js → chunk-q7gn29y3.js} +1 -1
- package/dist/{chunk-yevzdx4y.js → chunk-rmakanzx.js} +10 -12
- package/dist/{chunk-yevzdx4y.js.map → chunk-rmakanzx.js.map} +3 -4
- package/dist/{chunk-v9xd5wzd.js → chunk-s7jg7pmn.js} +1 -1
- package/dist/chunk-tbc1ngpd.js +642 -0
- package/dist/chunk-tbc1ngpd.js.map +18 -0
- package/dist/chunk-twe4dx8p.js +676 -0
- package/dist/chunk-twe4dx8p.js.map +15 -0
- package/dist/{chunk-9dmt152s.js → chunk-vf57cr4t.js} +2 -2
- package/dist/{chunk-9ybhtmg4.js → chunk-vvxtn22d.js} +1 -1
- package/dist/{chunk-jhm3zsa7.js → chunk-wkv3h3q7.js} +64 -2
- package/dist/{chunk-jhm3zsa7.js.map → chunk-wkv3h3q7.js.map} +3 -3
- package/dist/chunk-x0v3jd47.js +124 -0
- package/dist/chunk-x0v3jd47.js.map +10 -0
- package/dist/{chunk-7t429e3f.js → chunk-xvsc5m8n.js} +1 -1
- package/dist/{chunk-z4m0yz8c.js → chunk-y5tah2kf.js} +1 -1
- package/dist/{chunk-fkgc1wt8.js → chunk-z58tm0hm.js} +2 -2
- package/dist/datasets/builders.d.ts +15 -2
- package/dist/datasets/builders.d.ts.map +1 -1
- package/dist/datasets/column-index.d.ts +7 -0
- package/dist/datasets/column-index.d.ts.map +1 -0
- package/dist/datasets/execution.d.ts +3 -2
- package/dist/datasets/execution.d.ts.map +1 -1
- package/dist/datasets/write.js +8 -8
- package/dist/error-reporting/internal.js +4 -4
- package/dist/errors/internal.d.ts +1 -0
- package/dist/errors/internal.d.ts.map +1 -1
- package/dist/errors/internal.js +7 -4
- package/dist/errors/internal.js.map +1 -1
- package/dist/events/execution.d.ts +12 -2
- package/dist/events/execution.d.ts.map +1 -1
- package/dist/events/index.js +4 -4
- package/dist/execution/agent.js +56 -49
- package/dist/execution/agent.js.map +1 -1
- package/dist/execution/authorized-object-reader.d.ts +52 -11
- package/dist/execution/authorized-object-reader.d.ts.map +1 -1
- package/dist/execution/object-reader-clearance.d.ts +41 -0
- package/dist/execution/object-reader-clearance.d.ts.map +1 -0
- package/dist/execution/object-reader-ontology.d.ts +12 -0
- package/dist/execution/object-reader-ontology.d.ts.map +1 -0
- package/dist/execution/object-reader-security.d.ts +45 -0
- package/dist/execution/object-reader-security.d.ts.map +1 -0
- package/dist/execution/primitive.js +54 -47
- package/dist/execution/primitive.js.map +1 -1
- package/dist/execution/request.js +48 -41
- package/dist/execution/request.js.map +2 -2
- package/dist/http/api-routes.d.ts.map +1 -1
- package/dist/http/index.js +1 -1
- package/dist/index.d.ts +20 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +112 -97
- package/dist/index.js.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 -3
- package/dist/lake-storage/index.d.ts.map +1 -1
- package/dist/lake-storage/index.js +21 -13
- package/dist/lake-storage/index.js.map +1 -1
- package/dist/lake-storage/lineage.d.ts +94 -0
- package/dist/lake-storage/lineage.d.ts.map +1 -0
- package/dist/lake-storage/sql-transforms.d.ts +45 -0
- package/dist/lake-storage/sql-transforms.d.ts.map +1 -1
- package/dist/lake-storage/types.d.ts +55 -1
- package/dist/lake-storage/types.d.ts.map +1 -1
- package/dist/lake-storage/version-inputs.d.ts +14 -3
- package/dist/lake-storage/version-inputs.d.ts.map +1 -1
- package/dist/maintenance/ontology-maintenance.d.ts.map +1 -1
- package/dist/materializer/index.js +31 -30
- package/dist/materializer/index.js.map +1 -1
- package/dist/models/execution/index.js +25 -24
- package/dist/models/execution/index.js.map +1 -1
- package/dist/objects/clearance-redaction.d.ts +27 -0
- package/dist/objects/clearance-redaction.d.ts.map +1 -0
- package/dist/objects/index.js +54 -47
- package/dist/objects/index.js.map +1 -1
- package/dist/objects/link/authorization.d.ts +8 -5
- package/dist/objects/link/authorization.d.ts.map +1 -1
- package/dist/objects/link/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/delete.d.ts.map +1 -1
- package/dist/objects/object/upsert-batch.d.ts.map +1 -1
- package/dist/objects/object/upsert.d.ts.map +1 -1
- package/dist/objects/property-clearance.d.ts +47 -24
- package/dist/objects/property-clearance.d.ts.map +1 -1
- package/dist/objects/query/clearance-admission.d.ts +10 -0
- package/dist/objects/query/clearance-admission.d.ts.map +1 -0
- package/dist/objects/query/index.js +29 -28
- package/dist/objects/query/index.js.map +1 -1
- package/dist/objects/query/link-query-clearance.d.ts +21 -0
- package/dist/objects/query/link-query-clearance.d.ts.map +1 -0
- package/dist/ontology/builders.d.ts.map +1 -1
- package/dist/ontology/docs-markdown.d.ts +1 -1
- package/dist/ontology/docs-markdown.d.ts.map +1 -1
- package/dist/ontology/index.js +7 -7
- package/dist/ontology/internal.js +4 -4
- package/dist/ontology/internal.js.map +1 -1
- package/dist/pipelines/index.d.ts +2 -0
- package/dist/pipelines/index.d.ts.map +1 -1
- package/dist/pipelines/index.js +47 -35
- package/dist/pipelines/index.js.map +1 -1
- package/dist/pipelines/lineage.d.ts +17 -0
- package/dist/pipelines/lineage.d.ts.map +1 -0
- package/dist/projections/internal.d.ts +2 -2
- package/dist/projections/internal.js +30 -29
- package/dist/projections/internal.js.map +1 -1
- package/dist/runtime/create.d.ts +3 -0
- package/dist/runtime/create.d.ts.map +1 -1
- package/dist/runtime/host.d.ts +6 -0
- package/dist/runtime/host.d.ts.map +1 -1
- package/dist/runtime/internal.d.ts +2 -0
- package/dist/runtime/internal.d.ts.map +1 -1
- package/dist/runtime/internal.js +46 -42
- package/dist/runtime/internal.js.map +1 -1
- package/dist/runtime/ontology-mutations.d.ts +2 -0
- package/dist/runtime/ontology-mutations.d.ts.map +1 -1
- package/dist/runtime/resolve-definitions.d.ts.map +1 -1
- package/dist/runtime/sixb.d.ts +8 -0
- package/dist/runtime/sixb.d.ts.map +1 -1
- package/dist/sandboxes/auth.d.ts +16 -0
- package/dist/sandboxes/auth.d.ts.map +1 -1
- package/dist/sandboxes/config.d.ts.map +1 -1
- package/dist/sandboxes/configuration.d.ts +26 -0
- package/dist/sandboxes/configuration.d.ts.map +1 -1
- package/dist/sandboxes/index.d.ts +1 -1
- package/dist/sandboxes/index.d.ts.map +1 -1
- package/dist/sandboxes/index.js +14 -13
- package/dist/sandboxes/index.js.map +1 -1
- package/dist/sandboxes/sandbox.d.ts +28 -5
- package/dist/sandboxes/sandbox.d.ts.map +1 -1
- package/dist/security/applied-markings-contribution.d.ts +58 -0
- package/dist/security/applied-markings-contribution.d.ts.map +1 -0
- package/dist/security/applied-markings-host.d.ts +10 -0
- package/dist/security/applied-markings-host.d.ts.map +1 -0
- package/dist/security/applied-markings-snapshot.d.ts +67 -0
- package/dist/security/applied-markings-snapshot.d.ts.map +1 -0
- package/dist/security/applied-markings.d.ts +73 -0
- package/dist/security/applied-markings.d.ts.map +1 -0
- package/dist/security/dataset-version-markings.d.ts +47 -0
- package/dist/security/dataset-version-markings.d.ts.map +1 -0
- package/dist/security/grants.d.ts +3 -2
- package/dist/security/grants.d.ts.map +1 -1
- package/dist/security/index.d.ts +2 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/internal.d.ts +15 -0
- package/dist/security/internal.d.ts.map +1 -0
- package/dist/security/internal.js +135 -0
- package/dist/security/internal.js.map +10 -0
- package/dist/security/marking-propagation.d.ts +62 -0
- package/dist/security/marking-propagation.d.ts.map +1 -0
- package/dist/security/marking-sets.d.ts +14 -0
- package/dist/security/marking-sets.d.ts.map +1 -0
- package/dist/security/markings.d.ts +6 -3
- package/dist/security/markings.d.ts.map +1 -1
- package/dist/security/pipeline-markings.d.ts +20 -0
- package/dist/security/pipeline-markings.d.ts.map +1 -0
- package/dist/security/project.d.ts +4 -0
- package/dist/security/project.d.ts.map +1 -0
- package/dist/security/projection-markings.d.ts +71 -0
- package/dist/security/projection-markings.d.ts.map +1 -0
- package/dist/security/public.js +2 -2
- package/dist/security/redactions.d.ts +4 -1
- package/dist/security/redactions.d.ts.map +1 -1
- package/dist/security/types.d.ts +22 -2
- package/dist/security/types.d.ts.map +1 -1
- package/dist/security/validation.d.ts.map +1 -1
- package/dist/shares/internal.js +24 -23
- package/dist/shares/internal.js.map +2 -2
- package/dist/storage/action-runs/failure.js +3 -3
- package/dist/storage/action-runs/in-memory.d.ts +4 -0
- package/dist/storage/action-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/action-runs/types.d.ts +8 -0
- package/dist/storage/action-runs/types.d.ts.map +1 -1
- package/dist/storage/activity/in-memory.d.ts +55 -0
- package/dist/storage/activity/in-memory.d.ts.map +1 -0
- package/dist/storage/activity/index.d.ts +3 -0
- package/dist/storage/activity/index.d.ts.map +1 -0
- package/dist/storage/activity/policy.d.ts +96 -0
- package/dist/storage/activity/policy.d.ts.map +1 -0
- package/dist/storage/activity/types.d.ts +191 -0
- package/dist/storage/activity/types.d.ts.map +1 -0
- package/dist/storage/agents/in-memory.d.ts +4 -0
- package/dist/storage/agents/in-memory.d.ts.map +1 -1
- package/dist/storage/agents/provider.d.ts.map +1 -1
- package/dist/storage/agents/provider.js +2 -5
- package/dist/storage/agents/provider.js.map +1 -1
- package/dist/storage/agents/types.d.ts +9 -8
- package/dist/storage/agents/types.d.ts.map +1 -1
- package/dist/storage/ai-limits/enforcement.js +3 -3
- package/dist/storage/artifacts/errors.d.ts +8 -0
- package/dist/storage/artifacts/errors.d.ts.map +1 -0
- package/dist/storage/artifacts/in-memory.d.ts +34 -0
- package/dist/storage/artifacts/in-memory.d.ts.map +1 -0
- package/dist/storage/artifacts/index.d.ts +5 -0
- package/dist/storage/artifacts/index.d.ts.map +1 -0
- package/dist/storage/artifacts/record.d.ts +17 -0
- package/dist/storage/artifacts/record.d.ts.map +1 -0
- package/dist/storage/artifacts/types.d.ts +184 -0
- package/dist/storage/artifacts/types.d.ts.map +1 -0
- package/dist/storage/auth/in-memory/sessions.d.ts +2 -1
- package/dist/storage/auth/in-memory/sessions.d.ts.map +1 -1
- package/dist/storage/auth/index.d.ts +1 -1
- package/dist/storage/auth/index.d.ts.map +1 -1
- package/dist/storage/auth/types.d.ts +19 -0
- package/dist/storage/auth/types.d.ts.map +1 -1
- package/dist/storage/connector-connections/provider.js +2 -2
- package/dist/storage/executions/in-memory.d.ts +2 -1
- package/dist/storage/executions/in-memory.d.ts.map +1 -1
- package/dist/storage/executions/index.d.ts +1 -1
- package/dist/storage/executions/index.d.ts.map +1 -1
- package/dist/storage/executions/provider.d.ts +2 -0
- package/dist/storage/executions/provider.d.ts.map +1 -1
- package/dist/storage/executions/provider.js +9 -223
- package/dist/storage/executions/provider.js.map +3 -4
- package/dist/storage/executions/types.d.ts +31 -0
- package/dist/storage/executions/types.d.ts.map +1 -1
- package/dist/storage/file-upload-sessions/provider.js +11 -11
- 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 +6 -4
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +54 -53
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/internal.d.ts +3 -0
- package/dist/storage/internal.d.ts.map +1 -1
- package/dist/storage/internal.js +66 -16
- package/dist/storage/internal.js.map +1 -1
- package/dist/storage/ontology/in-memory/sources.d.ts +2 -1
- package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
- package/dist/storage/ontology/index.d.ts +1 -1
- package/dist/storage/ontology/index.d.ts.map +1 -1
- package/dist/storage/ontology/sources.d.ts +15 -0
- package/dist/storage/ontology/sources.d.ts.map +1 -1
- package/dist/storage/projection-runs/provider.js +3 -3
- package/dist/storage/share-grants/in-memory.d.ts +2 -1
- package/dist/storage/share-grants/in-memory.d.ts.map +1 -1
- package/dist/storage/share-grants/index.d.ts +1 -1
- package/dist/storage/share-grants/index.d.ts.map +1 -1
- package/dist/storage/share-grants/types.d.ts +6 -0
- package/dist/storage/share-grants/types.d.ts.map +1 -1
- package/dist/storage/types.d.ts +4 -0
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/workflow-runs/in-memory.d.ts +4 -0
- package/dist/storage/workflow-runs/in-memory.d.ts.map +1 -1
- package/dist/storage/workflow-runs/provider.js +13 -12
- package/dist/storage/workflow-runs/provider.js.map +1 -1
- package/dist/storage/workflow-runs/types.d.ts +5 -0
- package/dist/storage/workflow-runs/types.d.ts.map +1 -1
- package/dist/syncs/index.js +35 -34
- package/dist/syncs/index.js.map +1 -1
- package/dist/testing/action-run-storage-contract.d.ts.map +1 -1
- package/dist/testing/activity-storage-contract.d.ts +14 -0
- package/dist/testing/activity-storage-contract.d.ts.map +1 -0
- package/dist/testing/agent-storage-contract.d.ts.map +1 -1
- package/dist/testing/artifact-storage-contract.d.ts +13 -0
- package/dist/testing/artifact-storage-contract.d.ts.map +1 -0
- package/dist/testing/auth-storage-contract.d.ts.map +1 -1
- package/dist/testing/execution-storage-contract.d.ts.map +1 -1
- package/dist/testing/index.d.ts +2 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4488 -3137
- package/dist/testing/index.js.map +14 -12
- package/dist/testing/lake-merge-storage-contract.d.ts.map +1 -1
- package/dist/testing/lake-storage-contract.d.ts +2 -0
- package/dist/testing/lake-storage-contract.d.ts.map +1 -1
- package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
- package/dist/testing/share-grant-storage-contract.d.ts.map +1 -1
- package/dist/webhooks/internal.js +27 -26
- package/dist/webhooks/internal.js.map +2 -2
- package/dist/workers/index.js +2 -2
- package/dist/workflows/builders.d.ts.map +1 -1
- package/dist/workflows/index.js +57 -51
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/types.d.ts +9 -0
- package/dist/workflows/types.d.ts.map +1 -1
- package/dist/workflows/validation.d.ts +7 -0
- package/dist/workflows/validation.d.ts.map +1 -1
- package/package.json +25 -1
- package/src/actions/execution.ts +18 -13
- package/src/actions/request.ts +18 -3
- package/src/actions/run-authorization.ts +23 -0
- package/src/activity/README.md +155 -0
- package/src/activity/connection.ts +217 -0
- package/src/activity/device.ts +41 -0
- package/src/activity/execution.ts +210 -0
- package/src/activity/service.ts +274 -0
- package/src/activity/shares.ts +62 -0
- package/src/activity/timeline.ts +424 -0
- package/src/agents/index.ts +8 -3
- package/src/agents/request.ts +5 -0
- package/src/agents/skills.ts +6 -0
- package/src/agents/types.ts +8 -8
- package/src/agents/validation.ts +2 -0
- package/src/artifacts/address.ts +132 -0
- package/src/artifacts/csv.ts +108 -0
- package/src/artifacts/errors.ts +21 -0
- package/src/artifacts/execution.ts +153 -0
- package/src/artifacts/frames/assets.ts +88 -0
- package/src/artifacts/frames/grants.ts +124 -0
- package/src/artifacts/frames/index.ts +15 -0
- package/src/artifacts/frames/kit.ts +392 -0
- package/src/artifacts/frames/probe.ts +309 -0
- package/src/artifacts/frames/protocol.ts +174 -0
- package/src/artifacts/frames/runtime.ts +213 -0
- package/src/artifacts/html.ts +25 -0
- package/src/artifacts/ids.ts +18 -0
- package/src/artifacts/index.ts +61 -0
- package/src/artifacts/kinds.ts +8 -0
- package/src/artifacts/limits.ts +27 -0
- package/src/artifacts/outline.ts +62 -0
- package/src/artifacts/publish/files.ts +87 -0
- package/src/artifacts/publish/index.ts +12 -0
- package/src/artifacts/publish/publish.ts +250 -0
- package/src/artifacts/publish/references.ts +130 -0
- package/src/artifacts/publish/validate/document.ts +114 -0
- package/src/artifacts/publish/validate/file.ts +19 -0
- package/src/artifacts/publish/validate/sheet.ts +251 -0
- package/src/artifacts/publish/validate/slides.ts +134 -0
- package/src/artifacts/references.ts +11 -0
- package/src/artifacts/resolve.ts +97 -0
- package/src/artifacts/theme.ts +116 -0
- package/src/artifacts/warnings.ts +10 -0
- package/src/artifacts/workbook.ts +315 -0
- package/src/authorization/decision.ts +5 -0
- package/src/authorization/grant-kinds.ts +14 -2
- package/src/blob-storage/internal.ts +1 -1
- package/src/blob-storage/media-type.ts +69 -0
- package/src/datasets/builders.ts +66 -2
- package/src/datasets/column-index.ts +19 -0
- package/src/datasets/execution.ts +23 -9
- package/src/errors/internal.ts +1 -0
- package/src/events/execution.ts +134 -21
- package/src/execution/authorized-object-reader.ts +270 -256
- package/src/execution/object-reader-clearance.ts +91 -0
- package/src/execution/object-reader-ontology.ts +63 -0
- package/src/execution/object-reader-security.ts +146 -0
- package/src/http/api-routes.ts +125 -0
- package/src/index.ts +71 -3
- package/src/lake-storage/in-memory.ts +26 -3
- package/src/lake-storage/index.ts +13 -1
- package/src/lake-storage/lineage.ts +385 -0
- package/src/lake-storage/sql-transforms.ts +45 -0
- package/src/lake-storage/types.ts +59 -1
- package/src/lake-storage/version-inputs.ts +35 -6
- package/src/maintenance/ontology-maintenance.ts +15 -0
- package/src/objects/clearance-redaction.ts +138 -0
- package/src/objects/link/authorization.ts +27 -7
- package/src/objects/link/remove.ts +2 -2
- package/src/objects/link/upsert-batch.ts +7 -5
- package/src/objects/link/upsert.ts +2 -2
- package/src/objects/object/delete.ts +2 -0
- package/src/objects/object/upsert-batch.ts +2 -4
- package/src/objects/object/upsert.ts +2 -3
- package/src/objects/property-clearance.ts +171 -152
- package/src/objects/query/clearance-admission.ts +112 -0
- package/src/objects/query/link-query-clearance.ts +73 -0
- package/src/ontology/builders.ts +12 -1
- package/src/ontology/docs-markdown.ts +1 -1
- package/src/pipelines/index.ts +2 -0
- package/src/pipelines/lineage.ts +45 -0
- package/src/projections/internal.ts +2 -2
- package/src/runtime/create.ts +4 -0
- package/src/runtime/host.ts +55 -0
- package/src/runtime/internal.ts +2 -0
- package/src/runtime/ontology-mutations.ts +19 -4
- package/src/runtime/resolve-definitions.ts +66 -3
- package/src/runtime/sixb.ts +18 -1
- package/src/sandboxes/README.md +29 -7
- package/src/sandboxes/auth.ts +16 -0
- package/src/sandboxes/config.ts +2 -7
- package/src/sandboxes/configuration.ts +61 -7
- package/src/sandboxes/index.ts +1 -0
- package/src/sandboxes/sandbox.ts +27 -5
- package/src/security/applied-markings-contribution.ts +277 -0
- package/src/security/applied-markings-host.ts +41 -0
- package/src/security/applied-markings-snapshot.ts +235 -0
- package/src/security/applied-markings.ts +405 -0
- package/src/security/dataset-version-markings.ts +163 -0
- package/src/security/grants.ts +39 -4
- package/src/security/index.ts +3 -0
- package/src/security/internal.ts +18 -0
- package/src/security/marking-propagation.ts +255 -0
- package/src/security/marking-sets.ts +42 -0
- package/src/security/markings.ts +29 -178
- package/src/security/pipeline-markings.ts +175 -0
- package/src/security/project.ts +8 -0
- package/src/security/projection-markings.ts +421 -0
- package/src/security/redactions.ts +7 -2
- package/src/security/types.ts +20 -2
- package/src/security/validation.ts +11 -4
- package/src/storage/action-runs/in-memory.ts +18 -0
- package/src/storage/action-runs/types.ts +8 -0
- package/src/storage/activity/in-memory.ts +374 -0
- package/src/storage/activity/index.ts +27 -0
- package/src/storage/activity/policy.ts +430 -0
- package/src/storage/activity/types.ts +211 -0
- package/src/storage/agents/in-memory.ts +10 -0
- package/src/storage/agents/provider.ts +2 -13
- package/src/storage/agents/types.ts +9 -16
- package/src/storage/artifacts/errors.ts +16 -0
- package/src/storage/artifacts/in-memory.ts +240 -0
- package/src/storage/artifacts/index.ts +30 -0
- package/src/storage/artifacts/record.ts +200 -0
- package/src/storage/artifacts/types.ts +209 -0
- package/src/storage/auth/in-memory/sessions.ts +21 -0
- package/src/storage/auth/index.ts +2 -0
- package/src/storage/auth/types.ts +18 -0
- package/src/storage/executions/in-memory.ts +61 -1
- package/src/storage/executions/index.ts +3 -0
- package/src/storage/executions/provider.ts +12 -0
- package/src/storage/executions/types.ts +30 -0
- package/src/storage/in-memory/index.ts +16 -0
- package/src/storage/index.ts +63 -0
- package/src/storage/internal.ts +30 -0
- package/src/storage/ontology/in-memory/sources.ts +23 -0
- package/src/storage/ontology/index.ts +2 -0
- package/src/storage/ontology/sources.ts +17 -0
- package/src/storage/share-grants/in-memory.ts +8 -0
- package/src/storage/share-grants/index.ts +1 -0
- package/src/storage/share-grants/types.ts +8 -0
- package/src/storage/types.ts +4 -0
- package/src/storage/workflow-runs/in-memory.ts +16 -0
- package/src/storage/workflow-runs/types.ts +5 -0
- package/src/testing/action-run-storage-contract.ts +25 -0
- package/src/testing/activity-storage-contract.ts +840 -0
- package/src/testing/agent-storage-contract.ts +22 -21
- package/src/testing/artifact-storage-contract.ts +517 -0
- package/src/testing/auth-storage-contract.ts +47 -0
- package/src/testing/execution-storage-contract.ts +147 -1
- package/src/testing/index.ts +9 -0
- package/src/testing/lake-merge-storage-contract.ts +38 -0
- package/src/testing/lake-storage-contract.ts +247 -2
- package/src/testing/materializer-storage-contract.ts +1 -0
- package/src/testing/ontology-storage-contract.ts +57 -2
- package/src/testing/share-grant-storage-contract.ts +15 -0
- package/src/workflows/builders.ts +14 -0
- package/src/workflows/types.ts +9 -0
- package/src/workflows/validation.ts +72 -0
- package/dist/chunk-1k89ecfr.js +0 -85
- package/dist/chunk-1k89ecfr.js.map +0 -10
- package/dist/chunk-3t2hgbgd.js.map +0 -15
- package/dist/chunk-4vyr1j8f.js +0 -128
- package/dist/chunk-4vyr1j8f.js.map +0 -11
- package/dist/chunk-9gyp8hg1.js +0 -363
- package/dist/chunk-9gyp8hg1.js.map +0 -14
- package/dist/chunk-es1gxsbf.js.map +0 -13
- package/dist/chunk-gsjm1wms.js.map +0 -10
- package/dist/chunk-hkc3jct7.js.map +0 -10
- package/dist/chunk-k6q3n2sc.js.map +0 -12
- package/dist/chunk-rrzt8jdy.js.map +0 -14
- package/dist/chunk-s16apyk9.js +0 -256
- package/dist/chunk-s16apyk9.js.map +0 -16
- package/dist/chunk-s54c868q.js.map +0 -12
- package/dist/chunk-tw03bsmb.js.map +0 -11
- /package/dist/{chunk-xfs8x8m9.js.map → chunk-0bphap9y.js.map} +0 -0
- /package/dist/{chunk-1zq2p6g0.js.map → chunk-1cc1xaf3.js.map} +0 -0
- /package/dist/{chunk-t7x8dmn0.js.map → chunk-431pyp2c.js.map} +0 -0
- /package/dist/{chunk-c85m1hyj.js.map → chunk-447a5c0p.js.map} +0 -0
- /package/dist/{chunk-ren4kg2j.js.map → chunk-561r0yc9.js.map} +0 -0
- /package/dist/{chunk-5e43w60z.js.map → chunk-5948n82c.js.map} +0 -0
- /package/dist/{chunk-yzwja0mj.js.map → chunk-5hx48dnn.js.map} +0 -0
- /package/dist/{chunk-5j58wjct.js.map → chunk-858emn8m.js.map} +0 -0
- /package/dist/{chunk-6p49a5cq.js.map → chunk-c1rxbz5y.js.map} +0 -0
- /package/dist/{chunk-gc4ntf7d.js.map → chunk-cwdzcv37.js.map} +0 -0
- /package/dist/{chunk-fa02jy15.js.map → chunk-cy4mbddw.js.map} +0 -0
- /package/dist/{chunk-9w055r5b.js.map → chunk-d09e3rax.js.map} +0 -0
- /package/dist/{chunk-dk8tkk5f.js.map → chunk-d7dnxdep.js.map} +0 -0
- /package/dist/{chunk-tg2cw67r.js.map → chunk-ky3j490c.js.map} +0 -0
- /package/dist/{chunk-vyf9kfqf.js.map → chunk-q7gn29y3.js.map} +0 -0
- /package/dist/{chunk-v9xd5wzd.js.map → chunk-s7jg7pmn.js.map} +0 -0
- /package/dist/{chunk-9dmt152s.js.map → chunk-vf57cr4t.js.map} +0 -0
- /package/dist/{chunk-9ybhtmg4.js.map → chunk-vvxtn22d.js.map} +0 -0
- /package/dist/{chunk-7t429e3f.js.map → chunk-xvsc5m8n.js.map} +0 -0
- /package/dist/{chunk-z4m0yz8c.js.map → chunk-y5tah2kf.js.map} +0 -0
- /package/dist/{chunk-fkgc1wt8.js.map → chunk-z58tm0hm.js.map} +0 -0
package/src/sandboxes/sandbox.ts
CHANGED
|
@@ -78,13 +78,33 @@ export interface SandboxNetworkTarget {
|
|
|
78
78
|
readonly origin: string
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
/**
|
|
82
|
-
|
|
81
|
+
/** HTTP methods a request credential can be injected into. HEAD and OPTIONS never are. */
|
|
82
|
+
export type SandboxRequestMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE"
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Host-only credentials injected outside the guest into matching HTTPS requests.
|
|
86
|
+
*
|
|
87
|
+
* A credential selects which requests receive its Authorization header. It does not decide what
|
|
88
|
+
* the guest can reach, which is the network policy, nor which resources the token can act on:
|
|
89
|
+
* the token's own permissions are the boundary, so issue it with the narrowest scope that works.
|
|
90
|
+
*
|
|
91
|
+
* Providers apply the same rules so that a credential means the same thing everywhere:
|
|
92
|
+
* - `origin` is one `https://` domain: no port, path, user info, IP address, loopback host or
|
|
93
|
+
* `*` wildcard.
|
|
94
|
+
* - A path is matched case-sensitively against the raw request path. It starts with a single
|
|
95
|
+
* "/" and is printable ASCII without spaces, control characters, "?", "#", "%", "\\", or "."
|
|
96
|
+
* and ".." segments. A prefix also ends with "/", so it stops at a segment boundary.
|
|
97
|
+
* - Two credentials must not match the same request: one credential per request, so providers
|
|
98
|
+
* reject the overlap instead of picking one.
|
|
99
|
+
* - Only Authorization can be set, and the provider forces the request's Host header to
|
|
100
|
+
* `origin`'s domain.
|
|
83
101
|
*/
|
|
84
102
|
export interface SandboxRequestCredential {
|
|
85
103
|
readonly origin: string
|
|
86
|
-
|
|
87
|
-
readonly
|
|
104
|
+
/** One exact path, or every path under `prefix`. */
|
|
105
|
+
readonly path: string | { readonly prefix: string }
|
|
106
|
+
/** One method, or a non-empty list of distinct methods. */
|
|
107
|
+
readonly method: SandboxRequestMethod | readonly SandboxRequestMethod[]
|
|
88
108
|
readonly headers: { readonly Authorization: string }
|
|
89
109
|
}
|
|
90
110
|
|
|
@@ -123,6 +143,8 @@ export interface Sandbox {
|
|
|
123
143
|
/** Optional secure injection capability. Replaces all credentials on this session only.
|
|
124
144
|
* An empty list removes injection. Secrets must never enter guest files, env or snapshots.
|
|
125
145
|
* Must not resume a stopped session or change defaults inherited by future sessions.
|
|
146
|
+
* Renewal, ephemeral or persistent, targets the handle's session; after stop() it rejects.
|
|
147
|
+
* A thrown error is reported to onError: it and its causes must never contain a credential.
|
|
126
148
|
*/
|
|
127
149
|
readonly setRequestCredentials?: (
|
|
128
150
|
credentials: readonly SandboxRequestCredential[]
|
|
@@ -166,7 +188,7 @@ export interface Sandbox {
|
|
|
166
188
|
* Credentials and current authority must be supplied again, never inferred from saved files.
|
|
167
189
|
*/
|
|
168
190
|
export interface SandboxFactory<in out TParams extends ParamsConfig = ParamsConfig> {
|
|
169
|
-
/** Supports initial and renewable host-only credentials on named
|
|
191
|
+
/** Supports initial and renewable host-only credentials on ephemeral and named sessions. */
|
|
170
192
|
readonly supportsRequestCredentials?: boolean
|
|
171
193
|
/** Common host-side environment recipe. Never a discovered Agent definition. */
|
|
172
194
|
readonly configuration?: SandboxConfig<TParams>
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import type { ProjectionEventOrigin } from "../events/envelope"
|
|
2
|
+
import type { DatasetVersion } from "../lake-storage/types"
|
|
3
|
+
import type { OntologyDefinitionCatalog } from "../ontology/registry"
|
|
4
|
+
import type { PipelineDefinition } from "../pipelines/types"
|
|
5
|
+
import type { LinkProjectionDefinition, ObjectProjectionDefinition } from "../projections/types"
|
|
6
|
+
import type { ActiveOntologySource } from "../storage/ontology"
|
|
7
|
+
import { type AppliedContribution, NO_CONTRIBUTION } from "./applied-markings-snapshot"
|
|
8
|
+
import type { VersionClassification } from "./dataset-version-markings"
|
|
9
|
+
import { registeredSteps } from "./marking-propagation"
|
|
10
|
+
import { type ProjectionKeyTarget, projectionSurplus } from "./projection-markings"
|
|
11
|
+
|
|
12
|
+
export type SourceProjection = ObjectProjectionDefinition | LinkProjectionDefinition
|
|
13
|
+
|
|
14
|
+
/** What reading a projection's applied version from the lake gave. */
|
|
15
|
+
export type AppliedVersionRead =
|
|
16
|
+
| {
|
|
17
|
+
readonly kind: "read"
|
|
18
|
+
readonly version: DatasetVersion
|
|
19
|
+
readonly classification: VersionClassification
|
|
20
|
+
}
|
|
21
|
+
| { readonly kind: "missing" }
|
|
22
|
+
| { readonly kind: "failed"; readonly error: unknown }
|
|
23
|
+
|
|
24
|
+
export interface AppliedContributionContext {
|
|
25
|
+
readonly ontology: Pick<OntologyDefinitionCatalog, "getObjectTypeById">
|
|
26
|
+
/** The revision of a projection's current definition. */
|
|
27
|
+
readonly revisionOf: (projectionId: string) => string
|
|
28
|
+
/** What a version that cannot be read may carry. */
|
|
29
|
+
readonly everyMarking: ReadonlySet<string>
|
|
30
|
+
/** The pipeline that writes a dataset in the current code, for messages. */
|
|
31
|
+
readonly pipelineOf: (datasetId: string) => string | undefined
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* What one projection's applied version adds to the code's markings, with the notice that explains
|
|
36
|
+
* it. It reads nothing: the caller reads and classifies the version.
|
|
37
|
+
*
|
|
38
|
+
* - A version that could not be read seals the projection's target with every marking.
|
|
39
|
+
* - Objects written by an earlier definition, which may have mapped any column, seal it with every
|
|
40
|
+
* marking of the version.
|
|
41
|
+
* - Otherwise a property keeps the markings its column carries beyond its declaration, and a key
|
|
42
|
+
* column that carries markings seals what it keys.
|
|
43
|
+
*/
|
|
44
|
+
export function appliedContribution(
|
|
45
|
+
projection: SourceProjection,
|
|
46
|
+
source: ActiveOntologySource,
|
|
47
|
+
read: AppliedVersionRead,
|
|
48
|
+
context: AppliedContributionContext
|
|
49
|
+
): AppliedContribution {
|
|
50
|
+
const { datasetId, versionId } = source.datasetVersion
|
|
51
|
+
const subject = `version '${versionId}' of '${datasetId}'`
|
|
52
|
+
const target = projectionTarget(projection)
|
|
53
|
+
const hint = rerunHint(datasetId, read.kind === "read" ? read.version : undefined, context)
|
|
54
|
+
const every = [...context.everyMarking].sort()
|
|
55
|
+
|
|
56
|
+
if (read.kind === "failed") {
|
|
57
|
+
return sealed(projection.id, target, every, hint, {
|
|
58
|
+
reason: `the ${subject} it applied, which could not be read from the lake,`,
|
|
59
|
+
detail: `applied ${subject}, which could not be read from the lake: ${sentence(errorMessage(read.error))}`,
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (read.kind === "missing") {
|
|
64
|
+
return sealed(projection.id, target, every, hint, {
|
|
65
|
+
reason: `the ${subject} it applied, which the lake no longer has,`,
|
|
66
|
+
detail: `applied ${subject}, which the lake no longer has.`,
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const { columns, conservative } = read.classification
|
|
71
|
+
const because =
|
|
72
|
+
conservative === undefined
|
|
73
|
+
? ""
|
|
74
|
+
: ` The version was classified with every marking its sources could hold, because ${conservative}.`
|
|
75
|
+
|
|
76
|
+
if (
|
|
77
|
+
datasetId !== projection.datasetId ||
|
|
78
|
+
source.projectionRevision !== context.revisionOf(projection.id)
|
|
79
|
+
) {
|
|
80
|
+
const markings = appliedVersionMarkings(read, context.everyMarking)
|
|
81
|
+
return sealed(projection.id, target, markings, hint, {
|
|
82
|
+
reason: `the ${subject} it applied under an earlier definition of the projection`,
|
|
83
|
+
detail: `applied ${subject} under an earlier definition of the projection, and that version carries ${markingList(markings)}.${because}`,
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const markingsOf = (column: string) => [...(columns.get(column) ?? [])].sort()
|
|
88
|
+
const surplus = projectionSurplus(projection, context.ontology, markingsOf)
|
|
89
|
+
if (surplus.properties.length === 0 && surplus.keys.length === 0) return NO_CONTRIBUTION
|
|
90
|
+
|
|
91
|
+
const column = (name: string) => `'${datasetId}.${name}'`
|
|
92
|
+
const seals = surplus.keys.map((key) => ({
|
|
93
|
+
target: key.target,
|
|
94
|
+
seal: {
|
|
95
|
+
projectionId: projection.id,
|
|
96
|
+
markings: key.markings,
|
|
97
|
+
reason: `in the version '${versionId}' it applied, column ${column(key.column)}, which ${key.role},`,
|
|
98
|
+
},
|
|
99
|
+
}))
|
|
100
|
+
|
|
101
|
+
const details = [
|
|
102
|
+
...surplus.keys.map(
|
|
103
|
+
(key) => `column ${column(key.column)} ${key.role} and carries ${markingList(key.markings)}`
|
|
104
|
+
),
|
|
105
|
+
...surplus.properties.map(
|
|
106
|
+
(property) =>
|
|
107
|
+
`property '${property.objectTypeId}.${property.propertyId}' is projected from column ${column(property.column)}, which carries ${markingList(property.markings)}`
|
|
108
|
+
),
|
|
109
|
+
]
|
|
110
|
+
|
|
111
|
+
const consequences: string[] = []
|
|
112
|
+
if (seals.length > 0) {
|
|
113
|
+
const markings = [...new Set(seals.flatMap(({ seal }) => seal.markings))].sort()
|
|
114
|
+
consequences.push(
|
|
115
|
+
`${describeTargets(seals.map(({ target }) => target))} cannot be read without clearance for ${markingList(markings)}`
|
|
116
|
+
)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (surplus.properties.length > 0) {
|
|
120
|
+
const names = surplus.properties.map((p) => `'${p.objectTypeId}.${p.propertyId}'`)
|
|
121
|
+
const verb = surplus.properties.length === 1 ? "keeps" : "keep"
|
|
122
|
+
consequences.push(`${describeNames(names)} ${verb} these markings`)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
properties: surplus.properties.map(({ objectTypeId, propertyId, markings }) => ({
|
|
127
|
+
objectTypeId,
|
|
128
|
+
propertyId,
|
|
129
|
+
markings,
|
|
130
|
+
})),
|
|
131
|
+
seals,
|
|
132
|
+
notice: {
|
|
133
|
+
projectionId: projection.id,
|
|
134
|
+
sealed: seals.length > 0,
|
|
135
|
+
message: `[Sixb] Projection '${projection.id}' applied ${subject}, in which ${details.join("; ")}.${because} ${capitalize(consequences.join(", and "))} until the projection applies a version the code allows. ${hint}`,
|
|
136
|
+
},
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Every marking the version carries in any column; every marking when it could not be read. */
|
|
141
|
+
export function appliedVersionMarkings(
|
|
142
|
+
read: AppliedVersionRead,
|
|
143
|
+
everyMarking: ReadonlySet<string>
|
|
144
|
+
): readonly string[] {
|
|
145
|
+
if (read.kind !== "read") return [...everyMarking].sort()
|
|
146
|
+
|
|
147
|
+
const { columns } = read.classification
|
|
148
|
+
return [...new Set([...columns.values()].flatMap((set) => [...set]))].sort()
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** An object event a projection emitted: the version its values came from, and its type. */
|
|
152
|
+
export type EventOriginRef = Pick<
|
|
153
|
+
ProjectionEventOrigin,
|
|
154
|
+
"projectionId" | "datasetId" | "datasetVersionId"
|
|
155
|
+
> & { readonly objectTypeId: string }
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The markings an object event's origin version carries on each property its projection maps.
|
|
159
|
+
* When the projection now maps another dataset or type, or the version cannot be read, every
|
|
160
|
+
* property but the primary one carries every marking it could, as objects written under an
|
|
161
|
+
* earlier definition do.
|
|
162
|
+
*/
|
|
163
|
+
export function eventOriginMarkings(
|
|
164
|
+
projection: ObjectProjectionDefinition,
|
|
165
|
+
origin: EventOriginRef,
|
|
166
|
+
read: AppliedVersionRead,
|
|
167
|
+
context: Pick<AppliedContributionContext, "ontology" | "everyMarking">
|
|
168
|
+
): AppliedContribution["properties"] {
|
|
169
|
+
const { objectTypeId } = origin
|
|
170
|
+
|
|
171
|
+
if (
|
|
172
|
+
read.kind === "read" &&
|
|
173
|
+
projection.datasetId === origin.datasetId &&
|
|
174
|
+
projection.objectTypeId === objectTypeId
|
|
175
|
+
) {
|
|
176
|
+
const { columns } = read.classification
|
|
177
|
+
return Object.entries(projection.properties).flatMap(([propertyId, column]) => {
|
|
178
|
+
const markings = [...(columns.get(column) ?? [])].sort()
|
|
179
|
+
return markings.length === 0 ? [] : [{ objectTypeId, propertyId, markings }]
|
|
180
|
+
})
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const markings = appliedVersionMarkings(read, context.everyMarking)
|
|
184
|
+
if (markings.length === 0) return []
|
|
185
|
+
|
|
186
|
+
return (context.ontology.getObjectTypeById(objectTypeId)?.properties ?? [])
|
|
187
|
+
.filter((property) => !property.primary)
|
|
188
|
+
.map((property) => ({ objectTypeId, propertyId: property.id, markings }))
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** The pipeline that writes each dataset in the current code. */
|
|
192
|
+
export function producingPipelines(
|
|
193
|
+
pipelines: readonly PipelineDefinition[]
|
|
194
|
+
): (datasetId: string) => string | undefined {
|
|
195
|
+
const byDataset = new Map<string, string>()
|
|
196
|
+
for (const { pipelineId, step } of registeredSteps(pipelines)) {
|
|
197
|
+
if (!byDataset.has(step.output.id)) byDataset.set(step.output.id, pipelineId)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return (datasetId) => byDataset.get(datasetId)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** Seal the projection's whole target: its object type, or its link. */
|
|
204
|
+
function sealed(
|
|
205
|
+
projectionId: string,
|
|
206
|
+
target: ProjectionKeyTarget,
|
|
207
|
+
markings: readonly string[],
|
|
208
|
+
hint: string,
|
|
209
|
+
text: { readonly reason: string; readonly detail: string }
|
|
210
|
+
): AppliedContribution {
|
|
211
|
+
if (markings.length === 0) return NO_CONTRIBUTION
|
|
212
|
+
return {
|
|
213
|
+
properties: [],
|
|
214
|
+
seals: [{ target, seal: { projectionId, markings, reason: text.reason } }],
|
|
215
|
+
notice: {
|
|
216
|
+
projectionId,
|
|
217
|
+
sealed: true,
|
|
218
|
+
message: `[Sixb] Projection '${projectionId}' ${text.detail} ${describeTargets([target])} cannot be read without clearance for ${markingList(markings)} until the projection applies a version the code allows. ${hint}`,
|
|
219
|
+
},
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function projectionTarget(projection: SourceProjection): ProjectionKeyTarget {
|
|
224
|
+
return projection._tag === "ObjectProjectionDefinition"
|
|
225
|
+
? { kind: "type", objectTypeId: projection.objectTypeId }
|
|
226
|
+
: {
|
|
227
|
+
kind: "link",
|
|
228
|
+
objectTypeId: projection.sourceObjectTypeId,
|
|
229
|
+
linkId: projection.linkId,
|
|
230
|
+
targetObjectTypeId: projection.targetObjectTypeId,
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function rerunHint(
|
|
235
|
+
datasetId: string,
|
|
236
|
+
version: DatasetVersion | undefined,
|
|
237
|
+
context: AppliedContributionContext
|
|
238
|
+
): string {
|
|
239
|
+
const pipelineId =
|
|
240
|
+
context.pipelineOf(datasetId) ??
|
|
241
|
+
(version?.producer?.kind === "pipeline" ? version.producer.id : undefined)
|
|
242
|
+
return pipelineId === undefined
|
|
243
|
+
? `Write a new version of '${datasetId}' to replace it.`
|
|
244
|
+
: `Rerun pipeline '${pipelineId}' to replace it.`
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function describeTargets(targets: readonly ProjectionKeyTarget[]): string {
|
|
248
|
+
return describeNames(
|
|
249
|
+
targets.map((target) =>
|
|
250
|
+
target.kind === "type"
|
|
251
|
+
? `'${target.objectTypeId}'`
|
|
252
|
+
: `link '${target.objectTypeId}.${target.linkId}'`
|
|
253
|
+
)
|
|
254
|
+
)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
function describeNames(names: readonly string[]): string {
|
|
258
|
+
const unique = [...new Set(names)]
|
|
259
|
+
const last = unique.pop() ?? ""
|
|
260
|
+
return unique.length === 0 ? last : `${unique.join(", ")} and ${last}`
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
function capitalize(text: string): string {
|
|
264
|
+
return text.charAt(0).toUpperCase() + text.slice(1)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export function sentence(text: string): string {
|
|
268
|
+
return text.endsWith(".") ? text : `${text}.`
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function markingList(markings: readonly string[]): string {
|
|
272
|
+
return `[${markings.join(", ")}]`
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
export function errorMessage(error: unknown): string {
|
|
276
|
+
return error instanceof Error ? error.message : String(error)
|
|
277
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { AppliedMarkings } from "./applied-markings"
|
|
2
|
+
import { errorMessage } from "./applied-markings-contribution"
|
|
3
|
+
|
|
4
|
+
const appliedMarkingsKey: unique symbol = Symbol("sixb.appliedMarkings")
|
|
5
|
+
|
|
6
|
+
interface AppliedMarkingsOwner {
|
|
7
|
+
readonly [appliedMarkingsKey]?: AppliedMarkings
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** One snapshot per host, so every reader shares it and its resolved clearances. */
|
|
11
|
+
export function registerAppliedMarkings(owner: object, markings: AppliedMarkings): void {
|
|
12
|
+
const registered = (owner as AppliedMarkingsOwner)[appliedMarkingsKey]
|
|
13
|
+
if (registered && registered !== markings) {
|
|
14
|
+
throw new Error("[Sixb] Applied markings are already registered for this owner.")
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
Object.defineProperty(owner, appliedMarkingsKey, {
|
|
18
|
+
configurable: false,
|
|
19
|
+
enumerable: false,
|
|
20
|
+
value: markings,
|
|
21
|
+
writable: false,
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function getAppliedMarkings(owner: object): AppliedMarkings {
|
|
26
|
+
const markings = (owner as AppliedMarkingsOwner)[appliedMarkingsKey]
|
|
27
|
+
if (markings) return markings
|
|
28
|
+
throw new Error("[Sixb] Applied markings are not registered for this runtime.")
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Read the applied versions ahead of the first request that needs them. A failure is only
|
|
33
|
+
* reported here: that request reads them again, and fails closed if it cannot.
|
|
34
|
+
*/
|
|
35
|
+
export function warmAppliedMarkings(owner: object): void {
|
|
36
|
+
getAppliedMarkings(owner)
|
|
37
|
+
.current()
|
|
38
|
+
.catch((error: unknown) => {
|
|
39
|
+
console.warn(errorMessage(error))
|
|
40
|
+
})
|
|
41
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import type { ProjectionKeyTarget } from "./projection-markings"
|
|
2
|
+
|
|
3
|
+
/** Why readers lacking some markings cannot read an object type or a link. */
|
|
4
|
+
export interface AppliedSeal {
|
|
5
|
+
readonly projectionId: string
|
|
6
|
+
readonly markings: ReadonlySet<string>
|
|
7
|
+
/** What carries the marking, completed by "carries marking 'm'" in messages. */
|
|
8
|
+
readonly reason: string
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface AppliedLinkSeals {
|
|
12
|
+
readonly objectTypeId: string
|
|
13
|
+
readonly linkId: string
|
|
14
|
+
readonly targetObjectTypeId: string
|
|
15
|
+
readonly seals: readonly AppliedSeal[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface AppliedMarkingsNotice {
|
|
19
|
+
readonly projectionId: string
|
|
20
|
+
/** Whether the projection makes an object type or a link unreadable, not only properties. */
|
|
21
|
+
readonly sealed: boolean
|
|
22
|
+
readonly message: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* What the applied versions add to the ontology's markings.
|
|
27
|
+
*
|
|
28
|
+
* Every reader of a host shares one snapshot and the clearances resolved for it, so a snapshot is
|
|
29
|
+
* immutable all the way down: its maps and sets refuse writes.
|
|
30
|
+
*/
|
|
31
|
+
export interface AppliedMarkingsSnapshot {
|
|
32
|
+
/** Surplus markings by object type, then property. */
|
|
33
|
+
readonly properties: ReadonlyMap<string, ReadonlyMap<string, ReadonlySet<string>>>
|
|
34
|
+
/** Object types readers lacking a seal's markings cannot read. */
|
|
35
|
+
readonly types: ReadonlyMap<string, readonly AppliedSeal[]>
|
|
36
|
+
/** Links, by {@link appliedLinkKey}, readers lacking a seal's markings cannot read. */
|
|
37
|
+
readonly links: ReadonlyMap<string, AppliedLinkSeals>
|
|
38
|
+
/** Every marking above: a reader cleared for all of them reads what the code allows. */
|
|
39
|
+
readonly markings: ReadonlySet<string>
|
|
40
|
+
/** One per projection whose applied version adds markings, for diagnostics. */
|
|
41
|
+
readonly notices: readonly AppliedMarkingsNotice[]
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function appliedLinkKey(objectTypeId: string, linkId: string): string {
|
|
45
|
+
return `${objectTypeId}\0${linkId}`
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** What one applied version adds, as plain data so that equal results serialize equally. */
|
|
49
|
+
export interface AppliedContribution {
|
|
50
|
+
readonly properties: readonly {
|
|
51
|
+
readonly objectTypeId: string
|
|
52
|
+
readonly propertyId: string
|
|
53
|
+
readonly markings: readonly string[]
|
|
54
|
+
}[]
|
|
55
|
+
readonly seals: readonly {
|
|
56
|
+
readonly target: ProjectionKeyTarget
|
|
57
|
+
readonly seal: {
|
|
58
|
+
readonly projectionId: string
|
|
59
|
+
readonly markings: readonly string[]
|
|
60
|
+
readonly reason: string
|
|
61
|
+
}
|
|
62
|
+
}[]
|
|
63
|
+
readonly notice?: AppliedMarkingsNotice
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** An applied version that adds nothing. */
|
|
67
|
+
export const NO_CONTRIBUTION: AppliedContribution = Object.freeze({
|
|
68
|
+
properties: Object.freeze([]),
|
|
69
|
+
seals: Object.freeze([]),
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
export const NO_APPLIED_MARKINGS: AppliedMarkingsSnapshot = Object.freeze({
|
|
73
|
+
properties: readonlyMap(new Map()),
|
|
74
|
+
types: readonlyMap(new Map()),
|
|
75
|
+
links: readonlyMap(new Map()),
|
|
76
|
+
markings: readonlySet(new Set<string>()),
|
|
77
|
+
notices: Object.freeze([]),
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
/** One snapshot from the contributions of every applied version, in projection order. */
|
|
81
|
+
export function assembleAppliedMarkings(
|
|
82
|
+
contributions: readonly AppliedContribution[]
|
|
83
|
+
): AppliedMarkingsSnapshot {
|
|
84
|
+
if (contributions.length === 0) return NO_APPLIED_MARKINGS
|
|
85
|
+
|
|
86
|
+
const properties = new Map<string, Map<string, Set<string>>>()
|
|
87
|
+
const types = new Map<string, AppliedSeal[]>()
|
|
88
|
+
const links = new Map<string, AppliedLinkSeals & { seals: AppliedSeal[] }>()
|
|
89
|
+
const markings = new Set<string>()
|
|
90
|
+
const notices: AppliedMarkingsNotice[] = []
|
|
91
|
+
|
|
92
|
+
for (const contribution of contributions) {
|
|
93
|
+
for (const { objectTypeId, propertyId, markings: added } of contribution.properties) {
|
|
94
|
+
const byProperty = properties.get(objectTypeId) ?? new Map<string, Set<string>>()
|
|
95
|
+
properties.set(objectTypeId, byProperty)
|
|
96
|
+
|
|
97
|
+
const set = byProperty.get(propertyId) ?? new Set<string>()
|
|
98
|
+
byProperty.set(propertyId, set)
|
|
99
|
+
|
|
100
|
+
for (const markingId of added) {
|
|
101
|
+
set.add(markingId)
|
|
102
|
+
markings.add(markingId)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
for (const { target, seal: data } of contribution.seals) {
|
|
107
|
+
const seal: AppliedSeal = Object.freeze({
|
|
108
|
+
...data,
|
|
109
|
+
markings: readonlySet(new Set(data.markings)),
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
for (const markingId of data.markings) markings.add(markingId)
|
|
113
|
+
|
|
114
|
+
if (target.kind === "type") {
|
|
115
|
+
types.set(target.objectTypeId, [...(types.get(target.objectTypeId) ?? []), seal])
|
|
116
|
+
continue
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const key = appliedLinkKey(target.objectTypeId, target.linkId)
|
|
120
|
+
const existing = links.get(key)
|
|
121
|
+
if (existing) existing.seals.push(seal)
|
|
122
|
+
else {
|
|
123
|
+
links.set(key, {
|
|
124
|
+
objectTypeId: target.objectTypeId,
|
|
125
|
+
linkId: target.linkId,
|
|
126
|
+
targetObjectTypeId: target.targetObjectTypeId,
|
|
127
|
+
seals: [seal],
|
|
128
|
+
})
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
if (contribution.notice) notices.push(Object.freeze({ ...contribution.notice }))
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return Object.freeze({
|
|
136
|
+
properties: readonlyMap(
|
|
137
|
+
new Map(
|
|
138
|
+
[...properties].map(([objectTypeId, byProperty]) => [
|
|
139
|
+
objectTypeId,
|
|
140
|
+
readonlyMap(
|
|
141
|
+
new Map([...byProperty].map(([propertyId, set]) => [propertyId, readonlySet(set)]))
|
|
142
|
+
),
|
|
143
|
+
])
|
|
144
|
+
)
|
|
145
|
+
),
|
|
146
|
+
types: readonlyMap(
|
|
147
|
+
new Map([...types].map(([objectTypeId, seals]) => [objectTypeId, Object.freeze(seals)]))
|
|
148
|
+
),
|
|
149
|
+
links: readonlyMap(
|
|
150
|
+
new Map(
|
|
151
|
+
[...links].map(([key, link]) => [
|
|
152
|
+
key,
|
|
153
|
+
Object.freeze({ ...link, seals: Object.freeze(link.seals) }),
|
|
154
|
+
])
|
|
155
|
+
)
|
|
156
|
+
),
|
|
157
|
+
markings: readonlySet(markings),
|
|
158
|
+
notices: Object.freeze(notices),
|
|
159
|
+
})
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The snapshot with these properties' markings added: what an object event reads under, given the
|
|
164
|
+
* markings its origin version carries on them.
|
|
165
|
+
*/
|
|
166
|
+
export function withPropertyMarkings(
|
|
167
|
+
snapshot: AppliedMarkingsSnapshot,
|
|
168
|
+
added: AppliedContribution["properties"]
|
|
169
|
+
): AppliedMarkingsSnapshot {
|
|
170
|
+
if (added.length === 0) return snapshot
|
|
171
|
+
|
|
172
|
+
const properties = new Map<string, Map<string, Set<string>>>(
|
|
173
|
+
[...snapshot.properties].map(([objectTypeId, byProperty]) => [
|
|
174
|
+
objectTypeId,
|
|
175
|
+
new Map([...byProperty].map(([propertyId, set]) => [propertyId, new Set(set)])),
|
|
176
|
+
])
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
const markings = new Set(snapshot.markings)
|
|
180
|
+
for (const { objectTypeId, propertyId, markings: ids } of added) {
|
|
181
|
+
const byProperty = properties.get(objectTypeId) ?? new Map<string, Set<string>>()
|
|
182
|
+
properties.set(objectTypeId, byProperty)
|
|
183
|
+
|
|
184
|
+
const set = byProperty.get(propertyId) ?? new Set<string>()
|
|
185
|
+
byProperty.set(propertyId, set)
|
|
186
|
+
|
|
187
|
+
for (const markingId of ids) {
|
|
188
|
+
set.add(markingId)
|
|
189
|
+
markings.add(markingId)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return Object.freeze({
|
|
194
|
+
...snapshot,
|
|
195
|
+
properties: readonlyMap(
|
|
196
|
+
new Map(
|
|
197
|
+
[...properties].map(([objectTypeId, byProperty]) => [
|
|
198
|
+
objectTypeId,
|
|
199
|
+
readonlyMap(
|
|
200
|
+
new Map([...byProperty].map(([propertyId, set]) => [propertyId, readonlySet(set)]))
|
|
201
|
+
),
|
|
202
|
+
])
|
|
203
|
+
)
|
|
204
|
+
),
|
|
205
|
+
markings: readonlySet(markings),
|
|
206
|
+
})
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* A map that refuses writes. `Object.freeze` alone leaves a map's entries writable through its
|
|
211
|
+
* methods, so they are shadowed by ones that throw, and then frozen.
|
|
212
|
+
*/
|
|
213
|
+
function readonlyMap<TKey, TValue>(map: Map<TKey, TValue>): ReadonlyMap<TKey, TValue> {
|
|
214
|
+
return Object.freeze(
|
|
215
|
+
Object.defineProperties(map, {
|
|
216
|
+
set: { value: refuseWrite },
|
|
217
|
+
delete: { value: refuseWrite },
|
|
218
|
+
clear: { value: refuseWrite },
|
|
219
|
+
})
|
|
220
|
+
)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
function readonlySet<TValue>(set: Set<TValue>): ReadonlySet<TValue> {
|
|
224
|
+
return Object.freeze(
|
|
225
|
+
Object.defineProperties(set, {
|
|
226
|
+
add: { value: refuseWrite },
|
|
227
|
+
delete: { value: refuseWrite },
|
|
228
|
+
clear: { value: refuseWrite },
|
|
229
|
+
})
|
|
230
|
+
)
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
function refuseWrite(): never {
|
|
234
|
+
throw new TypeError("[Sixb] Applied markings are immutable.")
|
|
235
|
+
}
|