fundus 0.10.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -3
- package/build/client/_app/immutable/assets/3.BuCXJbRG.css +1 -0
- package/build/client/_app/immutable/assets/3.BuCXJbRG.css.br +0 -0
- package/build/client/_app/immutable/assets/3.BuCXJbRG.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.C0QkCMQ4.css +1 -0
- package/build/client/_app/immutable/assets/4.C0QkCMQ4.css.br +0 -0
- package/build/client/_app/immutable/assets/4.C0QkCMQ4.css.gz +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.B6By2-yb.css +1 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.B6By2-yb.css.br +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.B6By2-yb.css.gz +0 -0
- package/build/client/_app/immutable/assets/Popover.Et4sBRbI.css +1 -0
- package/build/client/_app/immutable/assets/Popover.Et4sBRbI.css.br +0 -0
- package/build/client/_app/immutable/assets/Popover.Et4sBRbI.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B9HdDE5n.js +1 -0
- package/build/client/_app/immutable/chunks/B9HdDE5n.js.br +0 -0
- package/build/client/_app/immutable/chunks/B9HdDE5n.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CAQ5okPf.js +2 -0
- package/build/client/_app/immutable/chunks/CAQ5okPf.js.br +0 -0
- package/build/client/_app/immutable/chunks/CAQ5okPf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Ccz62-Hi.js +1 -0
- package/build/client/_app/immutable/chunks/Ccz62-Hi.js.br +0 -0
- package/build/client/_app/immutable/chunks/Ccz62-Hi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ChVOZl2x.js +1 -0
- package/build/client/_app/immutable/chunks/ChVOZl2x.js.br +0 -0
- package/build/client/_app/immutable/chunks/ChVOZl2x.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CiBv7EZv.js +108 -0
- package/build/client/_app/immutable/chunks/CiBv7EZv.js.br +0 -0
- package/build/client/_app/immutable/chunks/CiBv7EZv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/UFAWUL-4.js +1 -0
- package/build/client/_app/immutable/chunks/UFAWUL-4.js.br +0 -0
- package/build/client/_app/immutable/chunks/UFAWUL-4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/YWIvyYJl.js +1 -0
- package/build/client/_app/immutable/chunks/YWIvyYJl.js.br +0 -0
- package/build/client/_app/immutable/chunks/YWIvyYJl.js.gz +0 -0
- package/build/client/_app/immutable/chunks/YpiA5Xry.js +3 -0
- package/build/client/_app/immutable/chunks/YpiA5Xry.js.br +0 -0
- package/build/client/_app/immutable/chunks/YpiA5Xry.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CliRE4wo.js → jjXOSnwf.js} +1 -1
- package/build/client/_app/immutable/chunks/jjXOSnwf.js.br +0 -0
- package/build/client/_app/immutable/chunks/jjXOSnwf.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.Rv8f5zSo.js +2 -0
- package/build/client/_app/immutable/entry/app.Rv8f5zSo.js.br +0 -0
- package/build/client/_app/immutable/entry/app.Rv8f5zSo.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.C5jRg_CF.js +1 -0
- package/build/client/_app/immutable/entry/start.C5jRg_CF.js.br +1 -0
- package/build/client/_app/immutable/entry/start.C5jRg_CF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.Gv5d6CcW.js +1 -0
- package/build/client/_app/immutable/nodes/0.Gv5d6CcW.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Gv5d6CcW.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.8J9y5zyF.js +1 -0
- package/build/client/_app/immutable/nodes/1.8J9y5zyF.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.8J9y5zyF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BNvTqsKZ.js +3 -0
- package/build/client/_app/immutable/nodes/2.BNvTqsKZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BNvTqsKZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CmlRI2XA.js +1 -0
- package/build/client/_app/immutable/nodes/3.CmlRI2XA.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CmlRI2XA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CHTKk5QR.js +2 -0
- package/build/client/_app/immutable/nodes/4.CHTKk5QR.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CHTKk5QR.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/handler.js +7 -7
- package/build/index.js +7 -7
- package/build/server/chunks/chunks/{context.js-Cg-Pih8x.js → context.js-BJfk3ZiR.js} +440 -6
- package/build/server/chunks/chunks/context.js-BJfk3ZiR.js.map +1 -0
- package/build/server/chunks/chunks/{contract.js-C6yL03Hj.js → contract.js-DRcxzb4o.js} +17 -3
- package/build/server/chunks/chunks/contract.js-DRcxzb4o.js.map +1 -0
- package/build/server/chunks/chunks/{exports.js-CKLcHEPO.js → exports.js-BcB5q0h5.js} +2 -2
- package/build/server/chunks/chunks/{exports.js-CKLcHEPO.js.map → exports.js-BcB5q0h5.js.map} +1 -1
- package/build/server/chunks/chunks/{http.js-B2joT3YT.js → http.js-DMkgmpI5.js} +2 -2
- package/build/server/chunks/chunks/{http.js-B2joT3YT.js.map → http.js-DMkgmpI5.js.map} +1 -1
- package/build/server/chunks/chunks/{internal.js-ByCfjWgU.js → internal.js-B6eePlP4.js} +3 -3
- package/build/server/chunks/chunks/{internal.js-ByCfjWgU.js.map → internal.js-B6eePlP4.js.map} +1 -1
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
- package/build/server/chunks/chunks/{shared.js-BDdrmPL3.js → shared.js-BO7vJlPc.js} +2 -2
- package/build/server/chunks/chunks/{shared.js-BDdrmPL3.js.map → shared.js-BO7vJlPc.js.map} +1 -1
- package/build/server/chunks/chunks/{utils.js-CD_wf0ka.js → utils.js-BTV5xnNv.js} +3 -3
- package/build/server/chunks/chunks/{utils.js-CD_wf0ka.js.map → utils.js-BTV5xnNv.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-Cn8Ztaiw.js → _server.ts.js-m2QGyBiV.js} +3 -3
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-Cn8Ztaiw.js.map → _server.ts.js-m2QGyBiV.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-CrOiDQG8.js → _server.ts.js-eMNgdaf4.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-CrOiDQG8.js.map → _server.ts.js-eMNgdaf4.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-CpJ_OzDV.js → _server.ts.js-CEQd4Wxn.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-CpJ_OzDV.js.map → _server.ts.js-CEQd4Wxn.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-BCZRAtqn.js → _server.ts.js-B2JoGCzy.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-BCZRAtqn.js.map → _server.ts.js-B2JoGCzy.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-CwyV_AMP.js → _server.ts.js-DTpkVywC.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-CwyV_AMP.js.map → _server.ts.js-DTpkVywC.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-BZAM3HSB.js → _server.ts.js-D6Z_pGEZ.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-BZAM3HSB.js.map → _server.ts.js-D6Z_pGEZ.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-CPNISyB1.js → _server.ts.js-CnDi9p0a.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-CPNISyB1.js.map → _server.ts.js-CnDi9p0a.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-5R7ywd4H.js → _server.ts.js-BCzuPX5Z.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-5R7ywd4H.js.map → _server.ts.js-BCzuPX5Z.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-ZQiaSMNA.js → _server.ts.js-CGbYyJ6S.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-ZQiaSMNA.js.map → _server.ts.js-CGbYyJ6S.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-CE29dwBF.js → _server.ts.js-CL_89klb.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-CE29dwBF.js.map → _server.ts.js-CL_89klb.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-CU3gpNeg.js → _server.ts.js-DZUKtjz9.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-CU3gpNeg.js.map → _server.ts.js-DZUKtjz9.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-BhJDoTAq.js → _server.ts.js-Dz25LG_P.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-BhJDoTAq.js.map → _server.ts.js-Dz25LG_P.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-B72NkhD1.js → _server.ts.js-C-NuN3JJ.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-B72NkhD1.js.map → _server.ts.js-C-NuN3JJ.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-CWK5em43.js → _server.ts.js-CwL9UPh3.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-CWK5em43.js.map → _server.ts.js-CwL9UPh3.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-BBxmYiE6.js → _server.ts.js-DanXYrj1.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-BBxmYiE6.js.map → _server.ts.js-DanXYrj1.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DR4xHt0w.js → _server.ts.js-BZrun0up.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DR4xHt0w.js.map → _server.ts.js-BZrun0up.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-CfiypExu.js → _server.ts.js-DQOabHbS.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-CfiypExu.js.map → _server.ts.js-DQOabHbS.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-DjmTUX8d.js → _server.ts.js-k8Ueydx1.js} +4 -4
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-DjmTUX8d.js.map → _server.ts.js-k8Ueydx1.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/usage/_server.ts.js-DmMmiFiu.js +82 -0
- package/build/server/chunks/entries/endpoints/api/usage/_server.ts.js-DmMmiFiu.js.map +1 -0
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-qfzdfNHQ.js → _server.ts.js-CT7yOdDS.js} +3 -3
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-qfzdfNHQ.js.map → _server.ts.js-CT7yOdDS.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-CS_5SEL-.js → _server.ts.js-BQTC0OSC.js} +4 -4
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-CS_5SEL-.js.map → _server.ts.js-BQTC0OSC.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Cv-y3Nqu.js → _server.ts.js-mv9cqSuS.js} +4 -4
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Cv-y3Nqu.js.map → _server.ts.js-mv9cqSuS.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-WOShZElI.js → hooks.server.js-BNQO3cZr.js} +3 -3
- package/build/server/chunks/entries/{hooks.server.js-WOShZElI.js.map → hooks.server.js-BNQO3cZr.js.map} +1 -1
- package/build/server/chunks/{handler-CIOnH690.js → handler-DQdjBhko.js} +5 -5
- package/build/server/chunks/{handler-CIOnH690.js.map → handler-DQdjBhko.js.map} +1 -1
- package/build/server/chunks/{index.js-nSuivP3M.js → index.js-DtKY5QD2.js} +5 -5
- package/build/server/chunks/{index.js-nSuivP3M.js.map → index.js-DtKY5QD2.js.map} +1 -1
- package/build/server/chunks/{manifest.js-CIFnCWGv.js → manifest.js-CJMiboeI.js} +35 -28
- package/build/server/chunks/manifest.js-CJMiboeI.js.map +1 -0
- package/build/server/chunks/nodes/{0.js-BSbmgTIm.js → 0.js-Ce__dNtc.js} +2 -2
- package/build/server/chunks/nodes/{0.js-BSbmgTIm.js.map → 0.js-Ce__dNtc.js.map} +1 -1
- package/build/server/chunks/nodes/1.js-BIwe5V8L.js +7 -0
- package/build/server/chunks/nodes/{1.js-kvz4iUXK.js.map → 1.js-BIwe5V8L.js.map} +1 -1
- package/build/server/chunks/nodes/2.js-Bj7c0eH1.js +7 -0
- package/build/server/chunks/nodes/{2.js-B9ILHJtB.js.map → 2.js-Bj7c0eH1.js.map} +1 -1
- package/build/server/chunks/nodes/3.js-BMOf9FTK.js +7 -0
- package/build/server/chunks/nodes/3.js-BMOf9FTK.js.map +1 -0
- package/build/server/chunks/nodes/4.js-CNLb7Xc5.js +7 -0
- package/build/server/chunks/nodes/4.js-CNLb7Xc5.js.map +1 -0
- package/dist/cli.js +6 -1
- package/dist/config.d.ts +1 -1
- package/dist/core/api-types.d.ts +36 -1
- package/dist/core/config.d.ts +35 -0
- package/dist/core/index.d.ts +2 -2
- package/dist/runtime/chroma-key-video-lifecycle.d.ts +2 -2
- package/dist/runtime/chroma-key-video-lifecycle.js +221 -124
- package/dist/runtime/components/ChromaKeyVideo.svelte +13 -2
- package/dist/runtime/components/Slice.svelte +22 -12
- package/dist/runtime/components/Slice.svelte.d.ts +3 -6
- package/dist/runtime/components/SliceCanvas.svelte +51 -40
- package/dist/runtime/components/SliceCanvas.svelte.d.ts +2 -2
- package/dist/runtime/components/SliceDom.svelte +96 -42
- package/dist/runtime/components/SliceDom.svelte.d.ts +2 -2
- package/dist/runtime/slice-source-lifecycle.d.ts +14 -0
- package/dist/runtime/slice-source-lifecycle.js +70 -0
- package/dist/server/check.d.ts +6 -0
- package/dist/server/check.js +4 -1
- package/dist/server/cli-commands.d.ts +3 -1
- package/dist/server/cli-commands.js +117 -2
- package/dist/server/codegen.d.ts +3 -0
- package/dist/server/codegen.js +19 -2
- package/dist/server/config-loader.d.ts +3 -1
- package/dist/server/config-loader.js +13 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +1 -1
- package/dist/server/operations.d.ts +7 -1
- package/dist/server/operations.js +85 -2
- package/dist/server/start.d.ts +8 -0
- package/dist/server/start.js +24 -0
- package/dist/server/usage.d.ts +24 -0
- package/dist/server/usage.js +441 -0
- package/package.json +4 -1
- package/build/client/_app/immutable/assets/3.CmXD8k9d.css +0 -1
- package/build/client/_app/immutable/assets/3.CmXD8k9d.css.br +0 -0
- package/build/client/_app/immutable/assets/3.CmXD8k9d.css.gz +0 -0
- package/build/client/_app/immutable/assets/4.p004hmEN.css +0 -1
- package/build/client/_app/immutable/assets/4.p004hmEN.css.br +0 -0
- package/build/client/_app/immutable/assets/4.p004hmEN.css.gz +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.BSnKt_Is.css +0 -1
- package/build/client/_app/immutable/assets/LibraryContextMenu.BSnKt_Is.css.br +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.BSnKt_Is.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BD3hQKzV.js +0 -1
- package/build/client/_app/immutable/chunks/BD3hQKzV.js.br +0 -0
- package/build/client/_app/immutable/chunks/BD3hQKzV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C3HGm51f.js +0 -1
- package/build/client/_app/immutable/chunks/C3HGm51f.js.br +0 -0
- package/build/client/_app/immutable/chunks/C3HGm51f.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C7OUKWnm.js +0 -1
- package/build/client/_app/immutable/chunks/C7OUKWnm.js.br +0 -0
- package/build/client/_app/immutable/chunks/C7OUKWnm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CaKQ_luf.js +0 -1
- package/build/client/_app/immutable/chunks/CaKQ_luf.js.br +0 -0
- package/build/client/_app/immutable/chunks/CaKQ_luf.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CliRE4wo.js.br +0 -1
- package/build/client/_app/immutable/chunks/CliRE4wo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DPZDGjcn.js +0 -1
- package/build/client/_app/immutable/chunks/DPZDGjcn.js.br +0 -0
- package/build/client/_app/immutable/chunks/DPZDGjcn.js.gz +0 -0
- package/build/client/_app/immutable/chunks/JSnjcoVL.js +0 -108
- package/build/client/_app/immutable/chunks/JSnjcoVL.js.br +0 -0
- package/build/client/_app/immutable/chunks/JSnjcoVL.js.gz +0 -0
- package/build/client/_app/immutable/chunks/NblqapDQ.js +0 -3
- package/build/client/_app/immutable/chunks/NblqapDQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/NblqapDQ.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.p0Th9Q3c.js +0 -2
- package/build/client/_app/immutable/entry/app.p0Th9Q3c.js.br +0 -0
- package/build/client/_app/immutable/entry/app.p0Th9Q3c.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.p06L3A6u.js +0 -1
- package/build/client/_app/immutable/entry/start.p06L3A6u.js.br +0 -0
- package/build/client/_app/immutable/entry/start.p06L3A6u.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.D2yDRY2E.js +0 -2
- package/build/client/_app/immutable/nodes/0.D2yDRY2E.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.D2yDRY2E.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.nLMgahSZ.js +0 -1
- package/build/client/_app/immutable/nodes/1.nLMgahSZ.js.br +0 -3
- package/build/client/_app/immutable/nodes/1.nLMgahSZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.Cr-DsqQM.js +0 -3
- package/build/client/_app/immutable/nodes/2.Cr-DsqQM.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Cr-DsqQM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.CmsMY1VJ.js +0 -1
- package/build/client/_app/immutable/nodes/3.CmsMY1VJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.CmsMY1VJ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CeeDVfsm.js +0 -2
- package/build/client/_app/immutable/nodes/4.CeeDVfsm.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CeeDVfsm.js.gz +0 -0
- package/build/server/chunks/chunks/context.js-Cg-Pih8x.js.map +0 -1
- package/build/server/chunks/chunks/contract.js-C6yL03Hj.js.map +0 -1
- package/build/server/chunks/manifest.js-CIFnCWGv.js.map +0 -1
- package/build/server/chunks/nodes/1.js-kvz4iUXK.js +0 -7
- package/build/server/chunks/nodes/2.js-B9ILHJtB.js +0 -7
- package/build/server/chunks/nodes/3.js-YAjQeV5C.js +0 -7
- package/build/server/chunks/nodes/3.js-YAjQeV5C.js.map +0 -1
- package/build/server/chunks/nodes/4.js-7My4KJNM.js +0 -7
- package/build/server/chunks/nodes/4.js-7My4KJNM.js.map +0 -1
package/dist/server/codegen.js
CHANGED
|
@@ -6,10 +6,27 @@
|
|
|
6
6
|
* for deleted manifests are removed (only files carrying the fundus header).
|
|
7
7
|
*/
|
|
8
8
|
import { mkdir, readdir, readFile, unlink, writeFile } from 'node:fs/promises';
|
|
9
|
-
import { join } from 'node:path';
|
|
10
|
-
import { collectAllReferences, compareCodeUnits, computeLibraryMembership, isAssetReference, topologicalReferenceOrder } from '../core/index.js';
|
|
9
|
+
import { isAbsolute, join } from 'node:path';
|
|
10
|
+
import { assetIdError, collectAllReferences, compareCodeUnits, computeLibraryMembership, isAssetReference, topologicalReferenceOrder } from '../core/index.js';
|
|
11
11
|
import { descriptorsByType, serverPluginForType, serverPluginsByType } from './plugins.js';
|
|
12
12
|
export const GENERATED_HEADER = '// generated by fundus — do not edit\n';
|
|
13
|
+
/** Locate a generated top-level manifest member in frozen module source. */
|
|
14
|
+
export function locateGeneratedAssetDeclaration(file, source, assetId) {
|
|
15
|
+
if (!isAbsolute(file))
|
|
16
|
+
throw new Error('Generated manifest path must be absolute.');
|
|
17
|
+
if (assetIdError(assetId))
|
|
18
|
+
throw new Error(`Cannot locate invalid asset id "${assetId}".`);
|
|
19
|
+
if (!source.startsWith(GENERATED_HEADER))
|
|
20
|
+
return null;
|
|
21
|
+
const lines = source.split('\n');
|
|
22
|
+
const prefix = `\t${assetId}:`;
|
|
23
|
+
for (let index = 0; index < lines.length; index++) {
|
|
24
|
+
if (lines[index].startsWith(prefix)) {
|
|
25
|
+
return { file, line: index + 1, column: 2 };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
13
30
|
/** `mainCatalog` → `main-catalog`. */
|
|
14
31
|
export function kebabCaseFromCamel(name) {
|
|
15
32
|
return name.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AudioPreset, FigmaImportScale, ImagePreset, ResolvedVideoPreset } from '../core/index.js';
|
|
1
|
+
import type { AudioPreset, FigmaImportScale, ImagePreset, ResolvedVideoPreset, UsageConfig } from '../core/index.js';
|
|
2
2
|
import type { ServerPluginRegistry } from './plugins/contract.js';
|
|
3
3
|
export interface ResolvedPresetPluginConfig {
|
|
4
4
|
presets: Record<string, ImagePreset>;
|
|
@@ -38,7 +38,9 @@ export interface ResolvedFundusConfig {
|
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
40
|
};
|
|
41
|
+
usage: UsageConfig | null;
|
|
41
42
|
}
|
|
43
|
+
export declare const USAGE_NOT_CONFIGURED_MESSAGE = "Usage analysis is not configured; add usage.referenceProvider and usage.openLocation to fundus.config.ts.";
|
|
42
44
|
/** Pure resolution step (testable without a config file on disk). */
|
|
43
45
|
export declare function resolveConfig(projectRoot: string, value: unknown, registry?: ServerPluginRegistry): ResolvedFundusConfig;
|
|
44
46
|
/** Load `fundus.config.ts` from the host project root. */
|
|
@@ -8,6 +8,7 @@ import { resolve } from 'node:path';
|
|
|
8
8
|
import { createJiti } from 'jiti';
|
|
9
9
|
import { serverPluginsByType } from './plugins.js';
|
|
10
10
|
import { isRecord } from './plugins/config.js';
|
|
11
|
+
export const USAGE_NOT_CONFIGURED_MESSAGE = 'Usage analysis is not configured; add usage.referenceProvider and usage.openLocation to fundus.config.ts.';
|
|
11
12
|
function requiredString(config, key) {
|
|
12
13
|
const value = config[key];
|
|
13
14
|
if (typeof value !== 'string' || value.length === 0) {
|
|
@@ -70,6 +71,16 @@ export function resolveConfig(projectRoot, value, registry = serverPluginsByType
|
|
|
70
71
|
if (scale !== 1 && scale !== 2 && scale !== 3 && scale !== 4) {
|
|
71
72
|
throw new Error('fundus.config: "import.figma.defaults.scale" must be 1, 2, 3, or 4.');
|
|
72
73
|
}
|
|
74
|
+
const usage = value.usage;
|
|
75
|
+
if (usage !== undefined && !isRecord(usage)) {
|
|
76
|
+
throw new Error('fundus.config: "usage" must be an object.');
|
|
77
|
+
}
|
|
78
|
+
if (usage !== undefined && typeof usage.referenceProvider !== 'function') {
|
|
79
|
+
throw new Error('fundus.config: "usage.referenceProvider" must be a function.');
|
|
80
|
+
}
|
|
81
|
+
if (usage !== undefined && typeof usage.openLocation !== 'function') {
|
|
82
|
+
throw new Error('fundus.config: "usage.openLocation" must be a function.');
|
|
83
|
+
}
|
|
73
84
|
return {
|
|
74
85
|
projectRoot: resolve(projectRoot),
|
|
75
86
|
rawDir: resolvePath(projectRoot, requiredString(value, 'rawDir')),
|
|
@@ -83,7 +94,8 @@ export function resolveConfig(projectRoot, value, registry = serverPluginsByType
|
|
|
83
94
|
...(figma.token !== undefined ? { token: figma.token } : {}),
|
|
84
95
|
defaults: { scale }
|
|
85
96
|
}
|
|
86
|
-
}
|
|
97
|
+
},
|
|
98
|
+
usage: usage === undefined ? null : usage
|
|
87
99
|
};
|
|
88
100
|
}
|
|
89
101
|
/** Load `fundus.config.ts` from the host project root. */
|
package/dist/server/index.d.ts
CHANGED
|
@@ -6,10 +6,10 @@ export type { AssetProxyInfo, ProxyOutputInfo, ProcessingReport } from './proces
|
|
|
6
6
|
export { processAssets, expectedProxyFileName, expectedProxyRelativePath, deliveredAssetIds, isProxyFileName, readProxyOutputInfo } from './processing/processor.js';
|
|
7
7
|
export { ffmpegBinaryPath, runToolchainBinary } from './processing/ffmpeg.js';
|
|
8
8
|
export type { CodegenReport } from './codegen.js';
|
|
9
|
-
export { generateManifestModules } from './codegen.js';
|
|
9
|
+
export { generateManifestModules, locateGeneratedAssetDeclaration, manifestModuleFileName } from './codegen.js';
|
|
10
10
|
export type { BuildReport } from './build.js';
|
|
11
11
|
export { runBuild } from './build.js';
|
|
12
|
-
export type { CheckFinding, CheckReport } from './check.js';
|
|
12
|
+
export type { CheckFinding, CheckAdvisory, CheckReport } from './check.js';
|
|
13
13
|
export { formatCheckFinding, runCheck } from './check.js';
|
|
14
14
|
export type { AssetChangeOptions } from './operations.js';
|
|
15
15
|
export { FundusOperations } from './operations.js';
|
package/dist/server/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export { loadConfig, resolveConfig } from './config-loader.js';
|
|
|
2
2
|
export { LibraryStore } from './library-store.js';
|
|
3
3
|
export { processAssets, expectedProxyFileName, expectedProxyRelativePath, deliveredAssetIds, isProxyFileName, readProxyOutputInfo } from './processing/processor.js';
|
|
4
4
|
export { ffmpegBinaryPath, runToolchainBinary } from './processing/ffmpeg.js';
|
|
5
|
-
export { generateManifestModules } from './codegen.js';
|
|
5
|
+
export { generateManifestModules, locateGeneratedAssetDeclaration, manifestModuleFileName } from './codegen.js';
|
|
6
6
|
export { runBuild } from './build.js';
|
|
7
7
|
export { formatCheckFinding, runCheck } from './check.js';
|
|
8
8
|
export { FundusOperations } from './operations.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type FundusStateDto, type PatchAssetRequestDto, type PatchManifestRequestDto } from '../core/index.js';
|
|
1
|
+
import { type FundusStateDto, type PatchAssetRequestDto, type PatchManifestRequestDto, type UsageAnalysisDto } from '../core/index.js';
|
|
2
2
|
import type { ResolvedFundusConfig } from './config-loader.js';
|
|
3
3
|
import { LibraryStore, type IngestOptions, type ReplaceRawFileOptions } from './library-store.js';
|
|
4
4
|
import type { ServerPluginRegistry } from './plugins/contract.js';
|
|
@@ -30,6 +30,12 @@ export declare class FundusOperations {
|
|
|
30
30
|
constructor(config: ResolvedFundusConfig, registry?: ServerPluginRegistry, importerRegistry?: SourceImporterRegistry);
|
|
31
31
|
get config(): ResolvedFundusConfig;
|
|
32
32
|
get store(): LibraryStore;
|
|
33
|
+
get usageAvailable(): boolean;
|
|
34
|
+
analyzeUsage(options?: {
|
|
35
|
+
assetId?: string;
|
|
36
|
+
forceFresh?: boolean;
|
|
37
|
+
}): Promise<UsageAnalysisDto>;
|
|
38
|
+
openUsageLocation(token: unknown): Promise<void>;
|
|
33
39
|
/** Read-only state snapshot, serialized with mutations but never processing or writing. */
|
|
34
40
|
state(): Promise<FundusStateDto>;
|
|
35
41
|
/** Reconcile only changes that are safe without a user decision: unique moves and deletions. */
|
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
* and the CLI consume this class, so every
|
|
6
6
|
* operation has exactly one implementation and there is no other save path.
|
|
7
7
|
*/
|
|
8
|
+
import { readFile } from 'node:fs/promises';
|
|
8
9
|
import { join } from 'node:path';
|
|
9
|
-
import { assetIdError, allDeliveredAssetIds, canonicalizeParameters, collectAllReferences, compareCodeUnits, computeLibraryMembership, folderOfRawPath, normalizeFolderPath, parentFolderPath, portableFolderPathKey, proposeAssetId, rawFileNameOfPath, typesForFileName } from '../core/index.js';
|
|
10
|
+
import { assetIdError, allDeliveredAssetIds, canonicalizeParameters, collectAllReferences, compareCodeUnits, computeLibraryMembership, folderOfRawPath, normalizeFolderPath, parentFolderPath, portableFolderPathKey, proposeAssetId, rawFileNameOfPath, serializeLibrary, typesForFileName } from '../core/index.js';
|
|
10
11
|
import { LibraryStore } from './library-store.js';
|
|
11
|
-
import { generateManifestModules } from './codegen.js';
|
|
12
|
+
import { generateManifestModules, locateGeneratedAssetDeclaration, manifestModuleFileName } from './codegen.js';
|
|
12
13
|
import { descriptorsByType, serverPluginForType, serverPluginsByType } from './plugins.js';
|
|
13
14
|
import { processAssets, readCurrentProxy } from './processing/processor.js';
|
|
14
15
|
import { encodeRelativePathForUrl } from './folder-filesystem.js';
|
|
@@ -18,6 +19,7 @@ import { serverImporters } from './importers.js';
|
|
|
18
19
|
import { SourceImportError } from './importers/contract.js';
|
|
19
20
|
import { validateFigmaSourceParameters } from './importers/figma.js';
|
|
20
21
|
import { currentGitBranch, gitAssetChanges } from './git.js';
|
|
22
|
+
import { FundusUsageAnalyzer, usageSnapshotRevision } from './usage.js';
|
|
21
23
|
/**
|
|
22
24
|
* The CLI's `--parameters` merge semantics (M7): a SHALLOW merge at the top
|
|
23
25
|
* level onto the current parameters — a nested object value replaces the whole
|
|
@@ -54,6 +56,7 @@ export class FundusOperations {
|
|
|
54
56
|
#registry;
|
|
55
57
|
#store;
|
|
56
58
|
#importers;
|
|
59
|
+
#usageAnalyzer;
|
|
57
60
|
#operationQueue = Promise.resolve();
|
|
58
61
|
#pipelineQueue = Promise.resolve();
|
|
59
62
|
constructor(config, registry = serverPluginsByType, importerRegistry = serverImporters) {
|
|
@@ -61,6 +64,7 @@ export class FundusOperations {
|
|
|
61
64
|
this.#registry = registry;
|
|
62
65
|
this.#store = new LibraryStore(config, registry);
|
|
63
66
|
this.#importers = importerRegistry;
|
|
67
|
+
this.#usageAnalyzer = config.usage ? new FundusUsageAnalyzer(config.usage) : null;
|
|
64
68
|
}
|
|
65
69
|
get config() {
|
|
66
70
|
return this.#config;
|
|
@@ -68,11 +72,90 @@ export class FundusOperations {
|
|
|
68
72
|
get store() {
|
|
69
73
|
return this.#store;
|
|
70
74
|
}
|
|
75
|
+
get usageAvailable() {
|
|
76
|
+
return this.#usageAnalyzer !== null;
|
|
77
|
+
}
|
|
78
|
+
async analyzeUsage(options = {}) {
|
|
79
|
+
const analyzer = this.#usageAnalyzer;
|
|
80
|
+
if (!analyzer)
|
|
81
|
+
throw new Error('Usage analysis is not configured.');
|
|
82
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
83
|
+
const snapshot = await this.#enqueueOperation(() => this.#usageSnapshot());
|
|
84
|
+
const report = await analyzer.analyze(snapshot, {
|
|
85
|
+
...options,
|
|
86
|
+
forceFresh: options.forceFresh === true || attempt > 0
|
|
87
|
+
});
|
|
88
|
+
const current = await this.#enqueueOperation(() => this.#usageSnapshot());
|
|
89
|
+
if (current.revision === snapshot.revision)
|
|
90
|
+
return report;
|
|
91
|
+
}
|
|
92
|
+
const current = await this.#enqueueOperation(() => this.#usageSnapshot());
|
|
93
|
+
if (options.assetId && !Object.hasOwn(current.library.assets, options.assetId)) {
|
|
94
|
+
throw new Error(`Unknown asset "${options.assetId}".`);
|
|
95
|
+
}
|
|
96
|
+
return analyzer.stale(current, options.assetId);
|
|
97
|
+
}
|
|
98
|
+
async openUsageLocation(token) {
|
|
99
|
+
if (!this.#usageAnalyzer)
|
|
100
|
+
throw new Error('Usage analysis is not configured.');
|
|
101
|
+
await this.#usageAnalyzer.open(token);
|
|
102
|
+
}
|
|
71
103
|
#enqueueOperation(operation) {
|
|
72
104
|
const run = this.#operationQueue.then(operation, operation);
|
|
73
105
|
this.#operationQueue = run.then(() => { }, () => { });
|
|
74
106
|
return run;
|
|
75
107
|
}
|
|
108
|
+
async #usageSnapshot() {
|
|
109
|
+
await this.#pipelineQueue;
|
|
110
|
+
const library = structuredClone(await this.#store.read());
|
|
111
|
+
const referencesByAsset = collectAllReferences(library, descriptorsByType(this.#registry));
|
|
112
|
+
const modules = new Map();
|
|
113
|
+
const roots = [];
|
|
114
|
+
for (const manifest of Object.keys(library.manifests).sort(compareCodeUnits)) {
|
|
115
|
+
const rootAssetIds = Object.keys(library.assets)
|
|
116
|
+
.filter((assetId) => library.assets[assetId].manifests.includes(manifest))
|
|
117
|
+
.sort(compareCodeUnits);
|
|
118
|
+
if (rootAssetIds.length === 0)
|
|
119
|
+
continue;
|
|
120
|
+
const path = join(this.#config.manifestsDir, manifestModuleFileName(manifest));
|
|
121
|
+
let content;
|
|
122
|
+
try {
|
|
123
|
+
content = await readFile(path, 'utf8');
|
|
124
|
+
}
|
|
125
|
+
catch (cause) {
|
|
126
|
+
if (cause.code !== 'ENOENT')
|
|
127
|
+
throw cause;
|
|
128
|
+
content = null;
|
|
129
|
+
}
|
|
130
|
+
modules.set(manifest, { content, path });
|
|
131
|
+
for (const assetId of rootAssetIds) {
|
|
132
|
+
const declaration = content === null ? null : locateGeneratedAssetDeclaration(path, content, assetId);
|
|
133
|
+
roots.push({
|
|
134
|
+
manifest,
|
|
135
|
+
assetId,
|
|
136
|
+
declaration,
|
|
137
|
+
...(declaration
|
|
138
|
+
? {}
|
|
139
|
+
: {
|
|
140
|
+
declarationError: content === null
|
|
141
|
+
? `Generated manifest module is missing: ${path}.`
|
|
142
|
+
: `Generated declaration ${manifest}.${assetId} was not found in ${path}.`
|
|
143
|
+
})
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const revisionParts = [serializeLibrary(library)];
|
|
148
|
+
for (const manifest of [...modules.keys()].sort(compareCodeUnits)) {
|
|
149
|
+
const module = modules.get(manifest);
|
|
150
|
+
revisionParts.push(manifest, module.path, module.content ?? '<missing>');
|
|
151
|
+
}
|
|
152
|
+
return {
|
|
153
|
+
revision: usageSnapshotRevision(revisionParts),
|
|
154
|
+
library,
|
|
155
|
+
referencesByAsset,
|
|
156
|
+
roots
|
|
157
|
+
};
|
|
158
|
+
}
|
|
76
159
|
/** Read-only state snapshot, serialized with mutations but never processing or writing. */
|
|
77
160
|
state() {
|
|
78
161
|
return this.#enqueueOperation(() => this.#state());
|
package/dist/server/start.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FundusServer } from './server.js';
|
|
1
2
|
export declare const DEFAULT_PORT = 7583;
|
|
2
3
|
interface StartBannerOptions {
|
|
3
4
|
port: number;
|
|
@@ -9,6 +10,13 @@ export interface RunStartOptions {
|
|
|
9
10
|
openBrowser?: boolean;
|
|
10
11
|
port?: number;
|
|
11
12
|
}
|
|
13
|
+
/** Bootstrap the real server context and distinguish optional absence from route failure. */
|
|
14
|
+
export declare function probeUsageCapability(editorUrl: string, fetcher?: typeof fetch): Promise<boolean>;
|
|
15
|
+
/** Probe the started server, warning on optional absence and cleaning up on failure. */
|
|
16
|
+
export declare function bootstrapUsageCapability(editorUrl: string, server: FundusServer, options?: {
|
|
17
|
+
fetcher?: typeof fetch;
|
|
18
|
+
warn?: (message: string) => void;
|
|
19
|
+
}): Promise<void>;
|
|
12
20
|
/** Format the human startup summary without pulling a terminal UI dependency into the CLI. */
|
|
13
21
|
export declare function formatStartBanner({ port, projectRoot, color, terminalWidth }: StartBannerOptions): string;
|
|
14
22
|
export declare function runStart(projectRoot: string, { openBrowser, port }?: RunStartOptions): Promise<void>;
|
package/dist/server/start.js
CHANGED
|
@@ -4,7 +4,30 @@ import { resolve } from 'node:path';
|
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import open from 'open';
|
|
6
6
|
import { startServer } from './server.js';
|
|
7
|
+
import { USAGE_NOT_CONFIGURED_MESSAGE } from './config-loader.js';
|
|
7
8
|
export const DEFAULT_PORT = 7583;
|
|
9
|
+
/** Bootstrap the real server context and distinguish optional absence from route failure. */
|
|
10
|
+
export async function probeUsageCapability(editorUrl, fetcher = fetch) {
|
|
11
|
+
const response = await fetcher(`${editorUrl}/api/usage`, { method: 'HEAD' });
|
|
12
|
+
const header = response.headers.get('x-fundus-usage-capability');
|
|
13
|
+
if (response.status === 204 && header === 'available')
|
|
14
|
+
return true;
|
|
15
|
+
if (response.status === 404 && header === 'unavailable')
|
|
16
|
+
return false;
|
|
17
|
+
throw new Error(`Fundus usage capability bootstrap failed (${response.status}, capability ${header ?? 'missing'}).`);
|
|
18
|
+
}
|
|
19
|
+
/** Probe the started server, warning on optional absence and cleaning up on failure. */
|
|
20
|
+
export async function bootstrapUsageCapability(editorUrl, server, options = {}) {
|
|
21
|
+
try {
|
|
22
|
+
if (!(await probeUsageCapability(editorUrl, options.fetcher))) {
|
|
23
|
+
(options.warn ?? console.warn)(USAGE_NOT_CONFIGURED_MESSAGE);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (cause) {
|
|
27
|
+
await server.stop();
|
|
28
|
+
throw cause;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
8
31
|
function ansi(code, value, enabled) {
|
|
9
32
|
return enabled ? `\u001b[${code}m${value}\u001b[0m` : value;
|
|
10
33
|
}
|
|
@@ -81,6 +104,7 @@ export async function runStart(projectRoot, { openBrowser = true, port = DEFAULT
|
|
|
81
104
|
}
|
|
82
105
|
const server = await startServer({ handler: module.handler, port });
|
|
83
106
|
const editorUrl = `http://127.0.0.1:${server.port}`;
|
|
107
|
+
await bootstrapUsageCapability(editorUrl, server);
|
|
84
108
|
console.log(formatStartBanner({
|
|
85
109
|
port: server.port,
|
|
86
110
|
projectRoot: resolvedProjectRoot,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Library, ReferencesByAsset, SourceLocation, UsageAnalysisDto, UsageConfig } from '../core/index.js';
|
|
2
|
+
export interface UsageSnapshotRoot {
|
|
3
|
+
manifest: string;
|
|
4
|
+
assetId: string;
|
|
5
|
+
declaration: SourceLocation | null;
|
|
6
|
+
declarationError?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface UsageAnalysisSnapshot {
|
|
9
|
+
revision: string;
|
|
10
|
+
library: Library;
|
|
11
|
+
referencesByAsset: ReferencesByAsset;
|
|
12
|
+
roots: UsageSnapshotRoot[];
|
|
13
|
+
}
|
|
14
|
+
export declare class FundusUsageAnalyzer {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(usage: UsageConfig);
|
|
17
|
+
analyze(snapshot: UsageAnalysisSnapshot, options?: {
|
|
18
|
+
assetId?: string;
|
|
19
|
+
forceFresh?: boolean;
|
|
20
|
+
}): Promise<UsageAnalysisDto>;
|
|
21
|
+
stale(snapshot: UsageAnalysisSnapshot, assetId?: string): UsageAnalysisDto;
|
|
22
|
+
open(token: unknown): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export declare function usageSnapshotRevision(parts: readonly string[]): string;
|