fundus 0.0.3 → 0.0.4
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 +17 -2
- package/build/client/_app/immutable/assets/{2.wavcNhPC.css → 2.ohi-TClG.css} +1 -1
- package/build/client/_app/immutable/assets/2.ohi-TClG.css.br +0 -0
- package/build/client/_app/immutable/assets/2.ohi-TClG.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.JwgtcTEd.css +1 -0
- package/build/client/_app/immutable/assets/3.JwgtcTEd.css.br +0 -0
- package/build/client/_app/immutable/assets/3.JwgtcTEd.css.gz +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css +1 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css.br +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css.gz +0 -0
- package/build/client/_app/immutable/chunks/DOpBpjxS.js +108 -0
- package/build/client/_app/immutable/chunks/DOpBpjxS.js.br +0 -0
- package/build/client/_app/immutable/chunks/DOpBpjxS.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DQ8SXFaX.js → DVEQFclp.js} +1 -1
- package/build/client/_app/immutable/chunks/DVEQFclp.js.br +1 -0
- package/build/client/_app/immutable/chunks/DVEQFclp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{CvY6YsFE.js → DiFoWL2c.js} +1 -1
- package/build/client/_app/immutable/chunks/DiFoWL2c.js.br +0 -0
- package/build/client/_app/immutable/chunks/DiFoWL2c.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BiIto6ft.js → DkADHpZF.js} +1 -1
- package/build/client/_app/immutable/chunks/DkADHpZF.js.br +0 -0
- package/build/client/_app/immutable/chunks/DkADHpZF.js.gz +0 -0
- package/build/client/_app/immutable/entry/{app.ubN0v9bN.js → app.CKgtYXQb.js} +2 -2
- package/build/client/_app/immutable/entry/app.CKgtYXQb.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CKgtYXQb.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CYZu5qE1.js +1 -0
- package/build/client/_app/immutable/entry/start.CYZu5qE1.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CYZu5qE1.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{0.Dr5ijCIl.js → 0.I_1SApYQ.js} +1 -1
- package/build/client/_app/immutable/nodes/0.I_1SApYQ.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.I_1SApYQ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.DiIGIRAb.js → 1.v6eUTnWq.js} +1 -1
- package/build/client/_app/immutable/nodes/1.v6eUTnWq.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.v6eUTnWq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DoA7Dfl-.js +3 -0
- package/build/client/_app/immutable/nodes/2.DoA7Dfl-.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DoA7Dfl-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.C-DO70Bs.js +1 -0
- package/build/client/_app/immutable/nodes/3.C-DO70Bs.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.C-DO70Bs.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CALOuSyz.js +2 -0
- package/build/client/_app/immutable/nodes/4.CALOuSyz.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CALOuSyz.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-Bw4WWLhG.js → context.js-BUZqFfWG.js} +19 -33
- package/build/server/chunks/chunks/context.js-BUZqFfWG.js.map +1 -0
- package/build/server/chunks/chunks/{core.js-DDntpb72.js → core.js-xfrkaQpS.js} +97 -48
- package/build/server/chunks/chunks/core.js-xfrkaQpS.js.map +1 -0
- package/build/server/chunks/chunks/{exports.js-CLTzaOxn.js → exports.js-C0rwMMtk.js} +2 -2
- package/build/server/chunks/chunks/{exports.js-CLTzaOxn.js.map → exports.js-C0rwMMtk.js.map} +1 -1
- package/build/server/chunks/chunks/{http.js-Dxoa-jtP.js → http.js-DvopzwKh.js} +2 -2
- package/build/server/chunks/chunks/{http.js-Dxoa-jtP.js.map → http.js-DvopzwKh.js.map} +1 -1
- package/build/server/chunks/chunks/{internal.js-BDBSzJId.js → internal.js-DGo2jPcg.js} +3 -3
- package/build/server/chunks/chunks/{internal.js-BDBSzJId.js.map → internal.js-DGo2jPcg.js.map} +1 -1
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
- package/build/server/chunks/chunks/{library-store.js-BP8cL-qD.js → library-store.js-ZLudCJlT.js} +135 -64
- package/build/server/chunks/chunks/library-store.js-ZLudCJlT.js.map +1 -0
- package/build/server/chunks/chunks/{shared.js-BWXgl1Xf.js → shared.js-B1gC9MiJ.js} +2 -2
- package/build/server/chunks/chunks/{shared.js-BWXgl1Xf.js.map → shared.js-B1gC9MiJ.js.map} +1 -1
- package/build/server/chunks/chunks/{utils.js-9oI5Oz0w.js → utils.js-DnEJ3UjO.js} +3 -3
- package/build/server/chunks/chunks/{utils.js-9oI5Oz0w.js.map → utils.js-DnEJ3UjO.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-WknZVW_S.js → _server.ts.js-Cq5gXVQT.js} +5 -5
- package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-WknZVW_S.js.map → _server.ts.js-Cq5gXVQT.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BrZ__-HZ.js → _server.ts.js-RXbedi8q.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BrZ__-HZ.js.map → _server.ts.js-RXbedi8q.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-PqADGPXc.js → _server.ts.js-D7Qae9vU.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-PqADGPXc.js.map → _server.ts.js-D7Qae9vU.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-OqoE5PN-.js → _server.ts.js-DtO20kgB.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-OqoE5PN-.js.map → _server.ts.js-DtO20kgB.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-CJ08e1ho.js → _server.ts.js-BUebPbd5.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-CJ08e1ho.js.map → _server.ts.js-BUebPbd5.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DdF3eK2I.js → _server.ts.js-BjT2qPMT.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DdF3eK2I.js.map → _server.ts.js-BjT2qPMT.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-Cxt6jsJ5.js → _server.ts.js-DYRLsoT7.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-Cxt6jsJ5.js.map → _server.ts.js-DYRLsoT7.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-BWVM2Ntl.js → _server.ts.js-BbN2fGNN.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-BWVM2Ntl.js.map → _server.ts.js-BbN2fGNN.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-Z2bM-qHM.js → _server.ts.js-b_MKZ41b.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-Z2bM-qHM.js.map → _server.ts.js-b_MKZ41b.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BX9H2Z34.js → _server.ts.js-evEfMpvn.js} +6 -6
- package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BX9H2Z34.js.map → _server.ts.js-evEfMpvn.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BWHDZ8mz.js → _server.ts.js-C04XE_1w.js} +5 -5
- package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BWHDZ8mz.js.map → _server.ts.js-C04XE_1w.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-CR_7mndO.js → _server.ts.js-DB8TdoEv.js} +6 -6
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-CR_7mndO.js.map → _server.ts.js-DB8TdoEv.js.map} +1 -1
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Cw1PDBvb.js → _server.ts.js-BrpaijZO.js} +6 -6
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Cw1PDBvb.js.map → _server.ts.js-BrpaijZO.js.map} +1 -1
- package/build/server/chunks/entries/{hooks.server.js-BHoE0yBi.js → hooks.server.js-BJJwZW_I.js} +5 -5
- package/build/server/chunks/entries/{hooks.server.js-BHoE0yBi.js.map → hooks.server.js-BJJwZW_I.js.map} +1 -1
- package/build/server/chunks/{handler-10cx4zHn.js → handler-DnbS2t1B.js} +5 -5
- package/build/server/chunks/{handler-10cx4zHn.js.map → handler-DnbS2t1B.js.map} +1 -1
- package/build/server/chunks/{index.js-DvPfiC00.js → index.js-g77q3Boj.js} +5 -5
- package/build/server/chunks/{index.js-DvPfiC00.js.map → index.js-g77q3Boj.js.map} +1 -1
- package/build/server/chunks/{manifest.js-DoPjUnzD.js → manifest.js-qmEXbstS.js} +20 -20
- package/build/server/chunks/{manifest.js-DoPjUnzD.js.map → manifest.js-qmEXbstS.js.map} +1 -1
- package/build/server/chunks/nodes/0.js-Bk6IZ-vD.js +11 -0
- package/build/server/chunks/nodes/{0.js-Di3qgAtW.js.map → 0.js-Bk6IZ-vD.js.map} +1 -1
- package/build/server/chunks/nodes/1.js-H-qwo4GJ.js +7 -0
- package/build/server/chunks/nodes/{1.js-BlWSFIA8.js.map → 1.js-H-qwo4GJ.js.map} +1 -1
- package/build/server/chunks/nodes/2.js-DRpXVLwp.js +7 -0
- package/build/server/chunks/nodes/{2.js-CO9nSPUN.js.map → 2.js-DRpXVLwp.js.map} +1 -1
- package/build/server/chunks/nodes/3.js-CDEzNFeU.js +7 -0
- package/build/server/chunks/nodes/3.js-CDEzNFeU.js.map +1 -0
- package/build/server/chunks/nodes/{4.js-B3IuagJW.js → 4.js-BKL7LSSm.js} +2 -2
- package/build/server/chunks/nodes/4.js-BKL7LSSm.js.map +1 -0
- package/dist/cli.js +9 -6
- package/dist/core/ingest.d.ts +7 -1
- package/dist/core/ingest.js +3 -19
- package/dist/core/plugins/registry.d.ts +16 -0
- package/dist/core/plugins/registry.js +52 -0
- package/dist/runtime/kind-handlers.d.ts +0 -6
- package/dist/runtime/kind-handlers.js +16 -7
- package/dist/server/config-loader.d.ts +3 -2
- package/dist/server/config-loader.js +24 -48
- package/dist/server/index.d.ts +1 -0
- package/dist/server/plugins/audio.d.ts +2 -1
- package/dist/server/plugins/audio.js +15 -1
- package/dist/server/plugins/chroma-key-video.js +2 -0
- package/dist/server/plugins/config.d.ts +13 -0
- package/dist/server/plugins/config.js +32 -0
- package/dist/server/plugins/contract.d.ts +17 -3
- package/dist/server/plugins/image.d.ts +2 -1
- package/dist/server/plugins/image.js +14 -1
- package/dist/server/plugins/slice.d.ts +2 -1
- package/dist/server/plugins/slice.js +14 -1
- package/dist/server/plugins/video.d.ts +2 -1
- package/dist/server/plugins/video.js +26 -1
- package/dist/server/plugins.d.ts +6 -6
- package/dist/server/plugins.js +3 -1
- package/dist/server/start.d.ts +13 -1
- package/dist/server/start.js +51 -4
- package/package.json +3 -1
- package/build/client/_app/immutable/assets/2.wavcNhPC.css.br +0 -0
- package/build/client/_app/immutable/assets/2.wavcNhPC.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.Cjh_fXPY.css +0 -1
- package/build/client/_app/immutable/assets/3.Cjh_fXPY.css.br +0 -0
- package/build/client/_app/immutable/assets/3.Cjh_fXPY.css.gz +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css +0 -1
- package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css.br +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BiIto6ft.js.br +0 -0
- package/build/client/_app/immutable/chunks/BiIto6ft.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CvY6YsFE.js.br +0 -0
- package/build/client/_app/immutable/chunks/CvY6YsFE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DL0_39Ys.js +0 -5
- package/build/client/_app/immutable/chunks/DL0_39Ys.js.br +0 -0
- package/build/client/_app/immutable/chunks/DL0_39Ys.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DQ8SXFaX.js.br +0 -0
- package/build/client/_app/immutable/chunks/DQ8SXFaX.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjdrdRzT.js +0 -1
- package/build/client/_app/immutable/chunks/DjdrdRzT.js.br +0 -0
- package/build/client/_app/immutable/chunks/DjdrdRzT.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.ubN0v9bN.js.br +0 -0
- package/build/client/_app/immutable/entry/app.ubN0v9bN.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BW8dBDh6.js +0 -1
- package/build/client/_app/immutable/entry/start.BW8dBDh6.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BW8dBDh6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.Dr5ijCIl.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Dr5ijCIl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.br +0 -3
- package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.B8KYmQcV.js +0 -3
- package/build/client/_app/immutable/nodes/2.B8KYmQcV.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.B8KYmQcV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.B1jc7arT.js +0 -104
- package/build/client/_app/immutable/nodes/3.B1jc7arT.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.B1jc7arT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BPK9n1mH.js +0 -2
- package/build/client/_app/immutable/nodes/4.BPK9n1mH.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BPK9n1mH.js.gz +0 -0
- package/build/server/chunks/chunks/context.js-Bw4WWLhG.js.map +0 -1
- package/build/server/chunks/chunks/core.js-DDntpb72.js.map +0 -1
- package/build/server/chunks/chunks/library-store.js-BP8cL-qD.js.map +0 -1
- package/build/server/chunks/nodes/0.js-Di3qgAtW.js +0 -11
- package/build/server/chunks/nodes/1.js-BlWSFIA8.js +0 -7
- package/build/server/chunks/nodes/2.js-CO9nSPUN.js +0 -7
- package/build/server/chunks/nodes/3.js-C2D6xpEO.js +0 -7
- package/build/server/chunks/nodes/3.js-C2D6xpEO.js.map +0 -1
- package/build/server/chunks/nodes/4.js-B3IuagJW.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal2.js-BlXt2rfE.js","sources":["../../../../.svelte-kit/output/server/chunks/internal2.js"],"sourcesContent":["//#region node_modules/@sveltejs/kit/src/runtime/app/paths/internal/server.js\nvar base = \"\";\nvar assets = base;\nvar app_dir = \"_app\";\nvar initial = {\n\tbase,\n\tassets\n};\n/**\n* `base` could be overridden during rendering to be relative;\n* this one's the original non-relative base path\n*/\nvar initial_base = initial.base;\n/**\n* @param {{ base: string, assets: string }} paths\n*/\nfunction override(paths) {\n\tbase = paths.base;\n\tassets = paths.assets;\n}\nfunction reset() {\n\tbase = initial.base;\n\tassets = initial.assets;\n}\n/** @param {string} path */\nfunction set_assets(path) {\n\tassets = initial.assets = path;\n}\n//#endregion\n//#region node_modules/@sveltejs/kit/src/runtime/app/env/internal.js\nvar version = \"
|
|
1
|
+
{"version":3,"file":"internal2.js-BlXt2rfE.js","sources":["../../../../.svelte-kit/output/server/chunks/internal2.js"],"sourcesContent":["//#region node_modules/@sveltejs/kit/src/runtime/app/paths/internal/server.js\nvar base = \"\";\nvar assets = base;\nvar app_dir = \"_app\";\nvar initial = {\n\tbase,\n\tassets\n};\n/**\n* `base` could be overridden during rendering to be relative;\n* this one's the original non-relative base path\n*/\nvar initial_base = initial.base;\n/**\n* @param {{ base: string, assets: string }} paths\n*/\nfunction override(paths) {\n\tbase = paths.base;\n\tassets = paths.assets;\n}\nfunction reset() {\n\tbase = initial.base;\n\tassets = initial.assets;\n}\n/** @param {string} path */\nfunction set_assets(path) {\n\tassets = initial.assets = path;\n}\n//#endregion\n//#region node_modules/@sveltejs/kit/src/runtime/app/env/internal.js\nvar version = \"1783982340628\";\nvar prerendering = false;\nfunction set_building() {}\nfunction set_prerendering() {\n\tprerendering = true;\n}\n//#endregion\nexport { app_dir as a, initial_base as c, set_assets as d, version as i, override as l, set_building as n, assets as o, set_prerendering as r, base as s, prerendering as t, reset as u };\n"],"names":[],"mappings":"AAAA;AACG,IAAC,IAAI,GAAG;AACR,IAAC,MAAM,GAAG;AACV,IAAC,OAAO,GAAG;AACd,IAAI,OAAO,GAAG;AACd,CAAC,IAAI;AACL,CAAC;AACD,CAAC;AAMD;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AAClB,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;AACtB;AACA,SAAS,KAAK,GAAG;AACjB,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AACpB,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;AACxB;;;;"}
|
package/build/server/chunks/chunks/{library-store.js-BP8cL-qD.js → library-store.js-ZLudCJlT.js}
RENAMED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
+
import { p as plugins, a as audioPlugin, c as chromaKeyVideoPlugin, v as videoPlugin, s as slicePlugin, i as imagePlugin, b as assetIdError, d as defaultInsetsForSize, m as manifestNameError, e as isAssetReference, f as validateVideoPreset, V as VIDEO_BUILT_IN_PRESETS, g as validateAudioPreset, A as AUDIO_BUILT_IN_PRESETS, h as validateImagePreset, I as IMAGE_BUILT_IN_PRESETS, S as SLICE_BUILT_IN_PRESETS } from './core.js-xfrkaQpS.js';
|
|
1
2
|
import { n as normalizeFolderPath, f as folderOfRawPath, r as rawFileNameOfPath, a as folderPathError, p as parentFolderPath, b as folderNameError, j as joinFolderPath, c as folderNameOf, i as isFolderOrDescendant, d as replaceFolderPrefix, e as portableFolderPathKey, F as FOLDER_SENTINEL } from './folder-path.js-ytx9ucgg.js';
|
|
2
|
-
import { a as audioPlugin, c as chromaKeyVideoPlugin, v as videoPlugin, s as slicePlugin, i as imagePlugin, d as defaultInsetsForSize, b as assetIdError, m as manifestNameError, e as isAssetReference } from './core.js-DDntpb72.js';
|
|
3
3
|
import { m as manifestColorError, a as manifestEmojiError } from './manifest-appearance.js-DTk355LQ.js';
|
|
4
|
-
import { join, extname, dirname, basename } from 'node:path';
|
|
4
|
+
import { join, extname, dirname, basename, isAbsolute, resolve } from 'node:path';
|
|
5
5
|
import { existsSync } from 'node:fs';
|
|
6
6
|
import { readFile, mkdir, writeFile, rename, rm, unlink, stat, readdir } from 'node:fs/promises';
|
|
7
|
-
import { createHash } from 'node:crypto';
|
|
8
7
|
import ffmpegStaticPath from 'ffmpeg-static';
|
|
9
8
|
import { path } from 'ffprobe-static';
|
|
10
9
|
import { execFile } from 'node:child_process';
|
|
11
10
|
import { promisify } from 'node:util';
|
|
12
11
|
import sharp from 'sharp';
|
|
12
|
+
import { createHash } from 'node:crypto';
|
|
13
13
|
|
|
14
14
|
//#region src/lib/core/library.ts
|
|
15
15
|
/** A fresh, empty library. */
|
|
@@ -21,7 +21,7 @@ function createEmptyLibrary() {
|
|
|
21
21
|
manifests: {}
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
function isRecord(value) {
|
|
24
|
+
function isRecord$1(value) {
|
|
25
25
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
26
26
|
}
|
|
27
27
|
/**
|
|
@@ -39,7 +39,7 @@ function assertSafeKey(kind, key) {
|
|
|
39
39
|
if (DANGEROUS_KEYS.includes(key)) throw new Error(`Library ${kind} key "${key}" is not allowed.`);
|
|
40
40
|
}
|
|
41
41
|
function parseAssetRecord(id, value) {
|
|
42
|
-
if (!isRecord(value)) throw new Error(`Library asset "${id}" must be an object.`);
|
|
42
|
+
if (!isRecord$1(value)) throw new Error(`Library asset "${id}" must be an object.`);
|
|
43
43
|
if (typeof value.type !== "string" || value.type.length === 0) throw new Error(`Library asset "${id}" is missing a string "type".`);
|
|
44
44
|
if (typeof value.raw !== "string" || value.raw.length === 0) throw new Error(`Library asset "${id}" is missing a string "raw" file name.`);
|
|
45
45
|
if (typeof value.rawHash !== "string" || value.rawHash.length === 0) throw new Error(`Library asset "${id}" is missing a string "rawHash".`);
|
|
@@ -77,10 +77,10 @@ function parseLibrary(json) {
|
|
|
77
77
|
} catch (cause) {
|
|
78
78
|
throw new Error(`Library file is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
79
79
|
}
|
|
80
|
-
if (!isRecord(value)) throw new Error("Library file must contain a JSON object.");
|
|
80
|
+
if (!isRecord$1(value)) throw new Error("Library file must contain a JSON object.");
|
|
81
81
|
if (value.version !== 1) throw new Error(`Unsupported library version ${JSON.stringify(value.version)} (expected 1).`);
|
|
82
|
-
if (!isRecord(value.assets)) throw new Error("Library \"assets\" must be an object.");
|
|
83
|
-
if (!isRecord(value.manifests)) throw new Error("Library \"manifests\" must be an object.");
|
|
82
|
+
if (!isRecord$1(value.assets)) throw new Error("Library \"assets\" must be an object.");
|
|
83
|
+
if (!isRecord$1(value.manifests)) throw new Error("Library \"manifests\" must be an object.");
|
|
84
84
|
if (value.folders !== void 0 && (!Array.isArray(value.folders) || value.folders.some((entry) => typeof entry !== "string"))) throw new Error("Library \"folders\" must be an array of strings.");
|
|
85
85
|
const folders = value.folders === void 0 ? [] : value.folders;
|
|
86
86
|
for (const folder of folders) {
|
|
@@ -95,7 +95,7 @@ function parseLibrary(json) {
|
|
|
95
95
|
const manifests = {};
|
|
96
96
|
for (const [name, record] of Object.entries(value.manifests)) {
|
|
97
97
|
assertSafeKey("manifest", name);
|
|
98
|
-
if (!isRecord(record)) throw new Error(`Library manifest "${name}" must be an object.`);
|
|
98
|
+
if (!isRecord$1(record)) throw new Error(`Library manifest "${name}" must be an object.`);
|
|
99
99
|
manifests[name] = parseManifestRecord(name, record);
|
|
100
100
|
}
|
|
101
101
|
return {
|
|
@@ -430,6 +430,28 @@ async function processAudioFile(options) {
|
|
|
430
430
|
return { durationMs: (await probeMedia(options.targetPath, options.config)).durationMs };
|
|
431
431
|
}
|
|
432
432
|
//#endregion
|
|
433
|
+
//#region src/lib/server/plugins/config.ts
|
|
434
|
+
function isRecord(value) {
|
|
435
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
436
|
+
}
|
|
437
|
+
function mergePresets(options) {
|
|
438
|
+
const { label, builtIn, pluginConfig, validatePreset } = options;
|
|
439
|
+
const merged = { ...builtIn };
|
|
440
|
+
if (pluginConfig === void 0) return merged;
|
|
441
|
+
if (!isRecord(pluginConfig)) throw new Error(`fundus.config: "plugins.${label}" must be an object.`);
|
|
442
|
+
if (pluginConfig.presets === void 0) return merged;
|
|
443
|
+
if (!isRecord(pluginConfig.presets)) throw new Error(`fundus.config: "plugins.${label}.presets" must be an object.`);
|
|
444
|
+
for (const [name, preset] of Object.entries(pluginConfig.presets)) merged[name] = validatePreset(name, preset);
|
|
445
|
+
return merged;
|
|
446
|
+
}
|
|
447
|
+
function binaryPathOverride(options) {
|
|
448
|
+
const { projectRoot, pluginConfig, label, key } = options;
|
|
449
|
+
if (!isRecord(pluginConfig) || pluginConfig[key] === void 0) return null;
|
|
450
|
+
const value = pluginConfig[key];
|
|
451
|
+
if (typeof value !== "string" || value.length === 0) throw new Error(`fundus.config: "plugins.${label}.${key}" must be a non-empty string.`);
|
|
452
|
+
return isAbsolute(value) ? value : resolve(projectRoot, value);
|
|
453
|
+
}
|
|
454
|
+
//#endregion
|
|
433
455
|
//#region src/lib/server/plugins/contract.ts
|
|
434
456
|
/** Resolve a named preset out of a plugin's merged preset map, or throw listing the known names. */
|
|
435
457
|
function resolveNamedPreset(label, presetName, presets) {
|
|
@@ -444,31 +466,6 @@ function requireProxyField(proxy, field) {
|
|
|
444
466
|
return value;
|
|
445
467
|
}
|
|
446
468
|
//#endregion
|
|
447
|
-
//#region src/lib/server/plugins/audio.ts
|
|
448
|
-
/**
|
|
449
|
-
* Audio plugin (server part): one ffmpeg transcode per preset.
|
|
450
|
-
* No dimensions — the proxy's only output metadata is its duration.
|
|
451
|
-
*/
|
|
452
|
-
var audioServerPlugin = {
|
|
453
|
-
descriptor: audioPlugin,
|
|
454
|
-
pluginConfig: (config) => config.plugins.audio,
|
|
455
|
-
presets: (config) => config.plugins.audio.presets,
|
|
456
|
-
resolvePreset: (parameters, config) => resolveNamedPreset("audio", parameters.preset, config.plugins.audio.presets),
|
|
457
|
-
proxyExtension: (preset) => preset.container,
|
|
458
|
-
process: (job) => processAudioFile({
|
|
459
|
-
sourcePath: job.sourcePath,
|
|
460
|
-
targetPath: job.targetPath,
|
|
461
|
-
preset: job.preset,
|
|
462
|
-
config: job.config
|
|
463
|
-
}),
|
|
464
|
-
readProxyInfo: (proxyPath, config) => probeMedia(proxyPath, config),
|
|
465
|
-
buildManifestEntry: ({ src, proxy }) => ({
|
|
466
|
-
kind: "audio",
|
|
467
|
-
src,
|
|
468
|
-
durationMs: requireProxyField(proxy, "durationMs")
|
|
469
|
-
})
|
|
470
|
-
};
|
|
471
|
-
//#endregion
|
|
472
469
|
//#region src/lib/server/processing/video-processing.ts
|
|
473
470
|
/**
|
|
474
471
|
* The ffmpeg transcode step shared by the video and chroma-key-video plugins
|
|
@@ -552,6 +549,85 @@ async function processVideoFile(options) {
|
|
|
552
549
|
};
|
|
553
550
|
}
|
|
554
551
|
//#endregion
|
|
552
|
+
//#region src/lib/server/plugins/video.ts
|
|
553
|
+
/**
|
|
554
|
+
* Video plugin (server part): one ffmpeg transcode per preset.
|
|
555
|
+
*/
|
|
556
|
+
var videoConfigDefinition = {
|
|
557
|
+
namespace: "video",
|
|
558
|
+
resolve: ({ projectRoot, value }) => ({
|
|
559
|
+
presets: mergePresets({
|
|
560
|
+
label: "video",
|
|
561
|
+
builtIn: VIDEO_BUILT_IN_PRESETS,
|
|
562
|
+
pluginConfig: value,
|
|
563
|
+
validatePreset: validateVideoPreset
|
|
564
|
+
}),
|
|
565
|
+
ffmpegPath: binaryPathOverride({
|
|
566
|
+
projectRoot,
|
|
567
|
+
pluginConfig: value,
|
|
568
|
+
label: "video",
|
|
569
|
+
key: "ffmpegPath"
|
|
570
|
+
}),
|
|
571
|
+
ffprobePath: binaryPathOverride({
|
|
572
|
+
projectRoot,
|
|
573
|
+
pluginConfig: value,
|
|
574
|
+
label: "video",
|
|
575
|
+
key: "ffprobePath"
|
|
576
|
+
})
|
|
577
|
+
})
|
|
578
|
+
};
|
|
579
|
+
var videoServerPlugin = {
|
|
580
|
+
descriptor: videoPlugin,
|
|
581
|
+
configDefinitions: [videoConfigDefinition],
|
|
582
|
+
pluginConfig: (config) => config.plugins.video,
|
|
583
|
+
presets: (config) => config.plugins.video.presets,
|
|
584
|
+
resolvePreset: (parameters, config) => resolveNamedPreset("video", parameters.preset, config.plugins.video.presets),
|
|
585
|
+
proxyExtension: (preset) => preset.container,
|
|
586
|
+
process: (job) => processVideoFile({
|
|
587
|
+
sourcePath: job.sourcePath,
|
|
588
|
+
targetPath: job.targetPath,
|
|
589
|
+
preset: job.preset,
|
|
590
|
+
maxWidth: job.parameters.maxWidth,
|
|
591
|
+
config: job.config
|
|
592
|
+
}),
|
|
593
|
+
readProxyInfo: (proxyPath, config) => probeMedia(proxyPath, config),
|
|
594
|
+
buildManifestEntry: ({ src, proxy }) => ({
|
|
595
|
+
kind: "video",
|
|
596
|
+
src,
|
|
597
|
+
width: requireProxyField(proxy, "width"),
|
|
598
|
+
height: requireProxyField(proxy, "height"),
|
|
599
|
+
durationMs: requireProxyField(proxy, "durationMs")
|
|
600
|
+
})
|
|
601
|
+
};
|
|
602
|
+
var audioServerPlugin = {
|
|
603
|
+
descriptor: audioPlugin,
|
|
604
|
+
configDefinitions: [{
|
|
605
|
+
namespace: "audio",
|
|
606
|
+
resolve: ({ value }) => ({ presets: mergePresets({
|
|
607
|
+
label: "audio",
|
|
608
|
+
builtIn: AUDIO_BUILT_IN_PRESETS,
|
|
609
|
+
pluginConfig: value,
|
|
610
|
+
validatePreset: validateAudioPreset
|
|
611
|
+
}) })
|
|
612
|
+
}, videoConfigDefinition],
|
|
613
|
+
pluginConfig: (config) => config.plugins.audio,
|
|
614
|
+
presets: (config) => config.plugins.audio.presets,
|
|
615
|
+
resolvePreset: (parameters, config) => resolveNamedPreset("audio", parameters.preset, config.plugins.audio.presets),
|
|
616
|
+
proxyExtension: (preset) => preset.container,
|
|
617
|
+
process: (job) => processAudioFile({
|
|
618
|
+
sourcePath: job.sourcePath,
|
|
619
|
+
targetPath: job.targetPath,
|
|
620
|
+
preset: job.preset,
|
|
621
|
+
config: job.config
|
|
622
|
+
}),
|
|
623
|
+
readProxyInfo: (proxyPath, config) => probeMedia(proxyPath, config),
|
|
624
|
+
buildManifestEntry: ({ src, proxy }) => ({
|
|
625
|
+
kind: "audio",
|
|
626
|
+
src,
|
|
627
|
+
durationMs: requireProxyField(proxy, "durationMs")
|
|
628
|
+
})
|
|
629
|
+
};
|
|
630
|
+
//#endregion
|
|
555
631
|
//#region src/lib/server/plugins/chroma-key-video.ts
|
|
556
632
|
/**
|
|
557
633
|
* Chroma-key-video plugin (server part): shares the video plugin's transcode
|
|
@@ -561,6 +637,7 @@ async function processVideoFile(options) {
|
|
|
561
637
|
*/
|
|
562
638
|
var chromaKeyVideoServerPlugin = {
|
|
563
639
|
descriptor: chromaKeyVideoPlugin,
|
|
640
|
+
configDefinitions: [videoConfigDefinition],
|
|
564
641
|
pluginConfig: (config) => config.plugins.video,
|
|
565
642
|
presets: (config) => config.plugins.video.presets,
|
|
566
643
|
resolvePreset: (parameters, config) => resolveNamedPreset("video", parameters.preset, config.plugins.video.presets),
|
|
@@ -616,12 +693,22 @@ async function readImageDimensions(filePath) {
|
|
|
616
693
|
/**
|
|
617
694
|
* Image plugin (server part): sharp scale + convert per preset.
|
|
618
695
|
*/
|
|
696
|
+
var imageConfigDefinition = {
|
|
697
|
+
namespace: "image",
|
|
698
|
+
resolve: ({ value }) => ({ presets: mergePresets({
|
|
699
|
+
label: "image",
|
|
700
|
+
builtIn: IMAGE_BUILT_IN_PRESETS,
|
|
701
|
+
pluginConfig: value,
|
|
702
|
+
validatePreset: validateImagePreset
|
|
703
|
+
}) })
|
|
704
|
+
};
|
|
619
705
|
/** The delivered file extension of an image-preset format. */
|
|
620
706
|
function extensionForImageFormat(format) {
|
|
621
707
|
return format === "jpeg" ? "jpg" : format;
|
|
622
708
|
}
|
|
623
709
|
var imageServerPlugin = {
|
|
624
710
|
descriptor: imagePlugin,
|
|
711
|
+
configDefinitions: [imageConfigDefinition],
|
|
625
712
|
pluginConfig: (config) => config.plugins.image,
|
|
626
713
|
presets: (config) => config.plugins.image.presets,
|
|
627
714
|
resolvePreset: (parameters, config) => resolveNamedPreset("image", parameters.preset, config.plugins.image.presets),
|
|
@@ -647,6 +734,15 @@ var imageServerPlugin = {
|
|
|
647
734
|
* never resized — insets are authored in source pixels, so the delivered proxy
|
|
648
735
|
* keeps the source dimensions. The slicing data is entry-only.
|
|
649
736
|
*/
|
|
737
|
+
var sliceConfigDefinition = {
|
|
738
|
+
namespace: "slice",
|
|
739
|
+
resolve: ({ value }) => ({ presets: mergePresets({
|
|
740
|
+
label: "slice",
|
|
741
|
+
builtIn: SLICE_BUILT_IN_PRESETS,
|
|
742
|
+
pluginConfig: value,
|
|
743
|
+
validatePreset: validateImagePreset
|
|
744
|
+
}) })
|
|
745
|
+
};
|
|
650
746
|
function hasAnySide(insets) {
|
|
651
747
|
if (!insets) return false;
|
|
652
748
|
return insets.top > 0 || insets.right > 0 || insets.bottom > 0 || insets.left > 0;
|
|
@@ -663,6 +759,7 @@ function detectPixelRatio(fileName) {
|
|
|
663
759
|
}
|
|
664
760
|
var sliceServerPlugin = {
|
|
665
761
|
descriptor: slicePlugin,
|
|
762
|
+
configDefinitions: [sliceConfigDefinition],
|
|
666
763
|
pluginConfig: (config) => config.plugins.slice,
|
|
667
764
|
presets: (config) => config.plugins.slice.presets,
|
|
668
765
|
resolvePreset: (parameters, config) => resolveNamedPreset("slice", parameters.preset, config.plugins.slice.presets),
|
|
@@ -697,41 +794,15 @@ var sliceServerPlugin = {
|
|
|
697
794
|
}
|
|
698
795
|
};
|
|
699
796
|
//#endregion
|
|
700
|
-
//#region src/lib/server/plugins/video.ts
|
|
701
|
-
/**
|
|
702
|
-
* Video plugin (server part): one ffmpeg transcode per preset.
|
|
703
|
-
*/
|
|
704
|
-
var videoServerPlugin = {
|
|
705
|
-
descriptor: videoPlugin,
|
|
706
|
-
pluginConfig: (config) => config.plugins.video,
|
|
707
|
-
presets: (config) => config.plugins.video.presets,
|
|
708
|
-
resolvePreset: (parameters, config) => resolveNamedPreset("video", parameters.preset, config.plugins.video.presets),
|
|
709
|
-
proxyExtension: (preset) => preset.container,
|
|
710
|
-
process: (job) => processVideoFile({
|
|
711
|
-
sourcePath: job.sourcePath,
|
|
712
|
-
targetPath: job.targetPath,
|
|
713
|
-
preset: job.preset,
|
|
714
|
-
maxWidth: job.parameters.maxWidth,
|
|
715
|
-
config: job.config
|
|
716
|
-
}),
|
|
717
|
-
readProxyInfo: (proxyPath, config) => probeMedia(proxyPath, config),
|
|
718
|
-
buildManifestEntry: ({ src, proxy }) => ({
|
|
719
|
-
kind: "video",
|
|
720
|
-
src,
|
|
721
|
-
width: requireProxyField(proxy, "width"),
|
|
722
|
-
height: requireProxyField(proxy, "height"),
|
|
723
|
-
durationMs: requireProxyField(proxy, "durationMs")
|
|
724
|
-
})
|
|
725
|
-
};
|
|
726
|
-
//#endregion
|
|
727
797
|
//#region src/lib/server/plugins.ts
|
|
728
|
-
var
|
|
798
|
+
var serverPluginCatalogue = {
|
|
729
799
|
[imageServerPlugin.descriptor.type]: imageServerPlugin,
|
|
730
800
|
[sliceServerPlugin.descriptor.type]: sliceServerPlugin,
|
|
731
801
|
[videoServerPlugin.descriptor.type]: videoServerPlugin,
|
|
732
802
|
[chromaKeyVideoServerPlugin.descriptor.type]: chromaKeyVideoServerPlugin,
|
|
733
803
|
[audioServerPlugin.descriptor.type]: audioServerPlugin
|
|
734
804
|
};
|
|
805
|
+
var serverPluginsByType = plugins.project(serverPluginCatalogue, "server implementation");
|
|
735
806
|
function serverPluginForType(type, registry = serverPluginsByType) {
|
|
736
807
|
const plugin = registry[type];
|
|
737
808
|
if (!plugin) throw new Error(`Unknown asset type "${type}" (known: ${Object.keys(registry).sort().join(", ")}).`);
|
|
@@ -1693,5 +1764,5 @@ var LibraryStore = class {
|
|
|
1693
1764
|
}
|
|
1694
1765
|
};
|
|
1695
1766
|
|
|
1696
|
-
export { LibraryStore as L, serverPluginForType as a, computeLibraryMembership as b, collectAllReferences as c, descriptorsByType as d, allDeliveredAssetIds as e, compareCodeUnits as f, generateManifestModules as g, encodeRelativePathForUrl as h,
|
|
1697
|
-
//# sourceMappingURL=library-store.js-
|
|
1767
|
+
export { LibraryStore as L, serverPluginForType as a, computeLibraryMembership as b, collectAllReferences as c, descriptorsByType as d, allDeliveredAssetIds as e, compareCodeUnits as f, generateManifestModules as g, encodeRelativePathForUrl as h, isRecord as i, assertSafeRelativeFilePath as j, processAssets as p, readCurrentProxy as r, serverPluginsByType as s };
|
|
1768
|
+
//# sourceMappingURL=library-store.js-ZLudCJlT.js.map
|