fundus 0.0.2 → 0.0.3
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 +58 -0
- package/build/client/_app/immutable/assets/0.DLhIsYA_.css.br +0 -0
- package/build/client/_app/immutable/assets/0.DLhIsYA_.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.wavcNhPC.css +1 -0
- 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 +1 -0
- 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/4.p004hmEN.css +1 -0
- 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/ConfirmDialog.BdKlitwi.css +1 -0
- package/build/client/_app/immutable/assets/ConfirmDialog.BdKlitwi.css.br +0 -0
- package/build/client/_app/immutable/assets/ConfirmDialog.BdKlitwi.css.gz +0 -0
- package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css +1 -0
- 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 +1 -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/Bjy-W4x2.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bjy-W4x2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CNRz3sSw.js.br +0 -0
- package/build/client/_app/immutable/chunks/CNRz3sSw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CO4RBJfa.js.br +0 -0
- package/build/client/_app/immutable/chunks/CO4RBJfa.js.gz +0 -0
- package/{dist/editor/_app/immutable/chunks/DjvOiDmq.js → build/client/_app/immutable/chunks/CvY6YsFE.js} +1 -1
- 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 +5 -0
- 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/{dist/editor/_app/immutable/chunks/BfPE5wdt.js → build/client/_app/immutable/chunks/DQ8SXFaX.js} +1 -1
- 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.br +0 -0
- package/build/client/_app/immutable/chunks/DjdrdRzT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/xihTtKlq.js.br +1 -0
- package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
- package/{dist/editor/_app/immutable/entry/app.BkqbfI8n.js → build/client/_app/immutable/entry/app.ubN0v9bN.js} +2 -2
- 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 +1 -0
- 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/{dist/editor/_app/immutable/nodes/0.xdMI5GEU.js → build/client/_app/immutable/nodes/0.Dr5ijCIl.js} +1 -1
- 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/{dist/editor/_app/immutable/nodes/1.D9p2tfoJ.js → build/client/_app/immutable/nodes/1.DiIGIRAb.js} +1 -1
- package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.br +3 -0
- package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.gz +0 -0
- package/{dist/editor/_app/immutable/nodes/2.BrA0Hyzu.js → build/client/_app/immutable/nodes/2.B8KYmQcV.js} +3 -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 +104 -0
- 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 +2 -0
- 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/client/_app/version.json +1 -0
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/env.js +100 -0
- package/build/env.js.map +1 -0
- package/build/handler.js +22 -0
- package/build/handler.js.map +1 -0
- package/build/index.js +145 -0
- package/build/index.js.map +1 -0
- package/build/server/chunks/chunks/context.js-Bw4WWLhG.js +443 -0
- package/build/server/chunks/chunks/context.js-Bw4WWLhG.js.map +1 -0
- package/build/server/chunks/chunks/core.js-DDntpb72.js +409 -0
- package/build/server/chunks/chunks/core.js-DDntpb72.js.map +1 -0
- package/build/server/chunks/chunks/env.js-l0sNRNKZ.js +2 -0
- package/build/server/chunks/chunks/env.js-l0sNRNKZ.js.map +1 -0
- package/build/server/chunks/chunks/exports.js-CLTzaOxn.js +152 -0
- package/build/server/chunks/chunks/exports.js-CLTzaOxn.js.map +1 -0
- package/build/server/chunks/chunks/folder-path.js-ytx9ucgg.js +64 -0
- package/build/server/chunks/chunks/folder-path.js-ytx9ucgg.js.map +1 -0
- package/build/server/chunks/chunks/http.js-Dxoa-jtP.js +100 -0
- package/build/server/chunks/chunks/http.js-Dxoa-jtP.js.map +1 -0
- package/build/server/chunks/chunks/internal.js-BDBSzJId.js +5753 -0
- package/build/server/chunks/chunks/internal.js-BDBSzJId.js.map +1 -0
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js +22 -0
- package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -0
- package/{dist/operations-DYM-5KVl.js → build/server/chunks/chunks/library-store.js-BP8cL-qD.js} +344 -444
- package/build/server/chunks/chunks/library-store.js-BP8cL-qD.js.map +1 -0
- package/build/server/chunks/chunks/manifest-appearance.js-DTk355LQ.js +146 -0
- package/build/server/chunks/chunks/manifest-appearance.js-DTk355LQ.js.map +1 -0
- package/build/server/chunks/chunks/routing.js-y-tryuip.js +213 -0
- package/build/server/chunks/chunks/routing.js-y-tryuip.js.map +1 -0
- package/build/server/chunks/chunks/shared.js-BWXgl1Xf.js +255 -0
- package/build/server/chunks/chunks/shared.js-BWXgl1Xf.js.map +1 -0
- package/build/server/chunks/chunks/utils.js-9oI5Oz0w.js +1048 -0
- package/build/server/chunks/chunks/utils.js-9oI5Oz0w.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/_...path_/_server.ts.js-WknZVW_S.js +27 -0
- package/build/server/chunks/entries/endpoints/api/_...path_/_server.ts.js-WknZVW_S.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/assets/_id_/_server.ts.js-BrZ__-HZ.js +24 -0
- package/build/server/chunks/entries/endpoints/api/assets/_id_/_server.ts.js-BrZ__-HZ.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/assets/_server.ts.js-PqADGPXc.js +45 -0
- package/build/server/chunks/entries/endpoints/api/assets/_server.ts.js-PqADGPXc.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/assets/delete/_server.ts.js-OqoE5PN-.js +31 -0
- package/build/server/chunks/entries/endpoints/api/assets/delete/_server.ts.js-OqoE5PN-.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/assets/move/_server.ts.js-CJ08e1ho.js +31 -0
- package/build/server/chunks/entries/endpoints/api/assets/move/_server.ts.js-CJ08e1ho.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/folders/_path_/_server.ts.js-DdF3eK2I.js +38 -0
- package/build/server/chunks/entries/endpoints/api/folders/_path_/_server.ts.js-DdF3eK2I.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/folders/_server.ts.js-Cxt6jsJ5.js +31 -0
- package/build/server/chunks/entries/endpoints/api/folders/_server.ts.js-Cxt6jsJ5.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/_server.ts.js-BWVM2Ntl.js +24 -0
- package/build/server/chunks/entries/endpoints/api/manifests/_name_/_server.ts.js-BWVM2Ntl.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/manifests/_server.ts.js-Z2bM-qHM.js +31 -0
- package/build/server/chunks/entries/endpoints/api/manifests/_server.ts.js-Z2bM-qHM.js.map +1 -0
- package/build/server/chunks/entries/endpoints/api/state/_server.ts.js-BX9H2Z34.js +24 -0
- package/build/server/chunks/entries/endpoints/api/state/_server.ts.js-BX9H2Z34.js.map +1 -0
- package/build/server/chunks/entries/endpoints/files/_...path_/_server.ts.js-BWHDZ8mz.js +27 -0
- package/build/server/chunks/entries/endpoints/files/_...path_/_server.ts.js-BWHDZ8mz.js.map +1 -0
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/_server.ts.js-CR_7mndO.js +24 -0
- package/build/server/chunks/entries/endpoints/files/proxy/_...path_/_server.ts.js-CR_7mndO.js.map +1 -0
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/_server.ts.js-Cw1PDBvb.js +24 -0
- package/build/server/chunks/entries/endpoints/files/raw/_...path_/_server.ts.js-Cw1PDBvb.js.map +1 -0
- package/build/server/chunks/entries/hooks.server.js-BHoE0yBi.js +23 -0
- package/build/server/chunks/entries/hooks.server.js-BHoE0yBi.js.map +1 -0
- package/build/server/chunks/handler-10cx4zHn.js +1475 -0
- package/build/server/chunks/handler-10cx4zHn.js.map +1 -0
- package/build/server/chunks/index.js-DvPfiC00.js +3789 -0
- package/build/server/chunks/index.js-DvPfiC00.js.map +1 -0
- package/build/server/chunks/manifest.js-DoPjUnzD.js +149 -0
- package/build/server/chunks/manifest.js-DoPjUnzD.js.map +1 -0
- package/build/server/chunks/nodes/0.js-Di3qgAtW.js +11 -0
- package/build/server/chunks/nodes/0.js-Di3qgAtW.js.map +1 -0
- package/build/server/chunks/nodes/1.js-BlWSFIA8.js +7 -0
- package/build/server/chunks/nodes/1.js-BlWSFIA8.js.map +1 -0
- package/build/server/chunks/nodes/2.js-CO9nSPUN.js +7 -0
- package/build/server/chunks/nodes/2.js-CO9nSPUN.js.map +1 -0
- package/build/server/chunks/nodes/3.js-C2D6xpEO.js +7 -0
- package/build/server/chunks/nodes/3.js-C2D6xpEO.js.map +1 -0
- package/build/server/chunks/nodes/4.js-B3IuagJW.js +7 -0
- package/build/server/chunks/nodes/4.js-B3IuagJW.js.map +1 -0
- package/build/shims.js +33 -0
- package/build/shims.js.map +1 -0
- package/dist/cli.d.ts +2 -1
- package/dist/cli.js +109 -1332
- package/dist/config.d.ts +3 -2
- package/dist/config.js +2 -2
- package/dist/core/api-types.d.ts +141 -0
- package/dist/core/api-types.js +1 -0
- package/dist/core/asset-id.d.ts +28 -0
- package/dist/core/asset-id.js +59 -0
- package/dist/core/asset-reference.d.ts +23 -0
- package/dist/core/asset-reference.js +15 -0
- package/dist/core/canonicalize.d.ts +9 -0
- package/dist/core/canonicalize.js +36 -0
- package/dist/core/chroma-key.d.ts +30 -0
- package/dist/core/chroma-key.js +55 -0
- package/dist/core/config.d.ts +35 -0
- package/dist/core/config.js +4 -0
- package/dist/core/folder-path.d.ts +19 -0
- package/dist/core/folder-path.js +86 -0
- package/dist/core/index.d.ts +33 -499
- package/dist/core/index.js +17 -962
- package/dist/core/ingest.d.ts +18 -0
- package/dist/core/ingest.js +58 -0
- package/dist/core/library.d.ts +54 -0
- package/dist/core/library.js +138 -0
- package/dist/core/manifest-appearance.d.ts +35 -0
- package/dist/core/manifest-appearance.js +123 -0
- package/dist/core/manifest-entry.d.ts +104 -0
- package/dist/core/manifest-entry.js +1 -0
- package/dist/core/manifest-membership.d.ts +56 -0
- package/dist/core/manifest-membership.js +54 -0
- package/dist/core/plugins/audio.d.ts +26 -0
- package/dist/core/plugins/audio.js +44 -0
- package/dist/core/plugins/chroma-key-video.d.ts +29 -0
- package/dist/core/plugins/chroma-key-video.js +69 -0
- package/dist/core/plugins/contract.d.ts +35 -0
- package/dist/core/plugins/contract.js +1 -0
- package/dist/core/plugins/image.d.ts +30 -0
- package/dist/core/plugins/image.js +45 -0
- package/dist/core/plugins/slice.d.ts +22 -0
- package/dist/core/plugins/slice.js +60 -0
- package/dist/core/plugins/video.d.ts +45 -0
- package/dist/core/plugins/video.js +77 -0
- package/dist/core/reference-graph.d.ts +41 -0
- package/dist/core/reference-graph.js +138 -0
- package/dist/core/slice-data.d.ts +61 -0
- package/dist/core/slice-data.js +49 -0
- package/dist/runtime/chroma-key-gl.d.ts +40 -22
- package/dist/runtime/chroma-key-gl.js +189 -183
- package/dist/runtime/components/ChromaKeyVideo.svelte +3 -3
- package/dist/runtime/components/ChromaKeyVideo.svelte.d.ts +21 -0
- package/dist/runtime/components/Image.svelte +1 -1
- package/dist/runtime/components/Image.svelte.d.ts +9 -0
- package/dist/runtime/components/Slice.svelte +1 -1
- package/dist/runtime/components/Slice.svelte.d.ts +19 -0
- package/dist/runtime/components/SliceCanvas.svelte +3 -3
- package/dist/runtime/components/SliceCanvas.svelte.d.ts +10 -0
- package/dist/runtime/components/SliceDom.svelte +3 -3
- package/dist/runtime/components/SliceDom.svelte.d.ts +10 -0
- package/dist/runtime/components/Video.svelte +2 -2
- package/dist/runtime/components/Video.svelte.d.ts +18 -0
- package/dist/runtime/geometry.d.ts +55 -35
- package/dist/runtime/geometry.js +186 -191
- package/dist/runtime/index.d.ts +9 -9
- package/dist/runtime/index.js +9 -9
- package/dist/runtime/kind-handlers.d.ts +33 -24
- package/dist/runtime/kind-handlers.js +74 -65
- package/dist/runtime/manifest.d.ts +53 -47
- package/dist/runtime/manifest.js +133 -113
- package/dist/runtime/observe-border-box-size.d.ts +1 -4
- package/dist/runtime/observe-border-box-size.js +9 -10
- package/dist/runtime/preload-registry.d.ts +22 -8
- package/dist/runtime/preload-registry.js +65 -62
- package/dist/server/build.d.ts +8 -0
- package/dist/server/build.js +25 -0
- package/dist/server/check.d.ts +24 -0
- package/dist/server/check.js +199 -0
- package/dist/server/cli-commands.d.ts +25 -0
- package/dist/server/cli-commands.js +1178 -0
- package/dist/server/cli-init.d.ts +3 -0
- package/dist/server/cli-init.js +53 -0
- package/dist/server/cli-io.d.ts +46 -0
- package/dist/server/cli-io.js +105 -0
- package/dist/server/codegen.d.ts +58 -0
- package/dist/server/codegen.js +185 -0
- package/dist/server/config-loader.d.ts +34 -0
- package/dist/server/config-loader.js +103 -0
- package/dist/server/context.d.ts +8 -0
- package/dist/server/context.js +19 -0
- package/dist/server/folder-filesystem.d.ts +7 -0
- package/dist/server/folder-filesystem.js +39 -0
- package/dist/server/http.d.ts +12 -0
- package/dist/server/http.js +100 -0
- package/dist/server/index.d.ts +16 -0
- package/dist/server/index.js +9 -0
- package/dist/server/job-hash.d.ts +10 -0
- package/dist/server/job-hash.js +23 -0
- package/dist/server/library-store.d.ts +82 -0
- package/dist/server/library-store.js +763 -0
- package/dist/server/operations.d.ts +87 -0
- package/dist/server/operations.js +427 -0
- package/dist/server/plugins/audio.d.ts +7 -0
- package/dist/server/plugins/audio.js +27 -0
- package/dist/server/plugins/chroma-key-video.d.ts +9 -0
- package/dist/server/plugins/chroma-key-video.js +38 -0
- package/dist/server/plugins/contract.d.ts +100 -0
- package/dist/server/plugins/contract.js +16 -0
- package/dist/server/plugins/image.d.ts +8 -0
- package/dist/server/plugins/image.js +30 -0
- package/dist/server/plugins/slice.d.ts +14 -0
- package/dist/server/plugins/slice.js +63 -0
- package/dist/server/plugins/video.d.ts +6 -0
- package/dist/server/plugins/video.js +29 -0
- package/dist/server/plugins.d.ts +23 -0
- package/dist/server/plugins.js +33 -0
- package/dist/server/processing/audio-processing.d.ts +17 -0
- package/dist/server/processing/audio-processing.js +46 -0
- package/dist/server/processing/ffmpeg.d.ts +9 -0
- package/dist/server/processing/ffmpeg.js +50 -0
- package/dist/server/processing/image-processing.d.ts +16 -0
- package/dist/server/processing/image-processing.js +26 -0
- package/dist/server/processing/media-probe.d.ts +15 -0
- package/dist/server/processing/media-probe.js +27 -0
- package/dist/server/processing/processor.d.ts +50 -0
- package/dist/server/processing/processor.js +158 -0
- package/dist/server/processing/video-processing.d.ts +35 -0
- package/dist/server/processing/video-processing.js +87 -0
- package/dist/server/server.d.ts +13 -0
- package/dist/server/server.js +57 -0
- package/dist/server/start.d.ts +1 -0
- package/dist/server/start.js +33 -0
- package/package.json +29 -16
- package/dist/build-CZYFLLvl.js +0 -191
- package/dist/core/image-Dqmz8FXS.js +0 -54
- package/dist/core/reference-graph-CjuHbLDw.d.ts +0 -280
- package/dist/core/testing.d.ts +0 -27
- package/dist/core/testing.js +0 -80
- package/dist/editor/200.html +0 -37
- package/dist/editor/_app/immutable/assets/2.DIbbW7U1.css +0 -1
- package/dist/editor/_app/immutable/assets/3.C-9vFQ9A.css +0 -1
- package/dist/editor/_app/immutable/assets/4.BS8ElpOV.css +0 -1
- package/dist/editor/_app/immutable/assets/ConfirmDialog.CHEISE-L.css +0 -1
- package/dist/editor/_app/immutable/assets/LibraryContextMenu.CDjCmdV-.css +0 -1
- package/dist/editor/_app/immutable/chunks/Cx6qtxJg.js +0 -1
- package/dist/editor/_app/immutable/chunks/n7mvYc42.js +0 -5
- package/dist/editor/_app/immutable/entry/start.C8HHOLly.js +0 -1
- package/dist/editor/_app/immutable/nodes/3.WO7tZH_d.js +0 -104
- package/dist/editor/_app/immutable/nodes/4.DQtx17aW.js +0 -2
- package/dist/editor/_app/version.json +0 -1
- package/dist/index.d.ts +0 -370
- package/dist/index.js +0 -4
- package/dist/start-Bhnqt9Dc.js +0 -279
- package/dist/start-D2IXOrni.js +0 -2
- /package/{dist/editor → build/client}/_app/immutable/assets/0.DLhIsYA_.css +0 -0
- /package/{dist/editor → build/client}/_app/immutable/chunks/Bjy-W4x2.js +0 -0
- /package/{dist/editor → build/client}/_app/immutable/chunks/CNRz3sSw.js +0 -0
- /package/{dist/editor → build/client}/_app/immutable/chunks/CO4RBJfa.js +0 -0
- /package/{dist/editor → build/client}/_app/immutable/chunks/DjdrdRzT.js +0 -0
- /package/{dist/editor → build/client}/_app/immutable/chunks/xihTtKlq.js +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/** Fundus-owned file that preserves explicit empty folders in source control. */
|
|
2
|
+
var FOLDER_SENTINEL = ".gitkeep";
|
|
3
|
+
var CONTROL_CHARACTERS = /[\u0000-\u001f\u007f]/;
|
|
4
|
+
var WINDOWS_FORBIDDEN_CHARACTERS = /[<>:"|?*]/;
|
|
5
|
+
var WINDOWS_RESERVED_NAME = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\..*)?$/i;
|
|
6
|
+
/** Validate one human-facing folder name (a single path segment). */
|
|
7
|
+
function folderNameError(name) {
|
|
8
|
+
if (name.length === 0) return "Folder names must not be empty.";
|
|
9
|
+
if (name !== name.trim()) return "Folder names must not start or end with whitespace.";
|
|
10
|
+
if (name === "." || name === "..") return `"${name}" is not a valid folder name.`;
|
|
11
|
+
if (name.includes("/") || name.includes("\\")) return "Folder names must not contain path separators.";
|
|
12
|
+
if (CONTROL_CHARACTERS.test(name)) return "Folder names must not contain control characters.";
|
|
13
|
+
if (WINDOWS_FORBIDDEN_CHARACTERS.test(name)) return "Folder names must not contain Windows-reserved characters (: * ? \" < > |).";
|
|
14
|
+
if (name.endsWith(".")) return "Folder names must not end with a dot.";
|
|
15
|
+
if (name.toLocaleLowerCase("en-US") === "root") return `"${name}" is reserved for the implicit Fundus root folder.`;
|
|
16
|
+
if (name.toLocaleLowerCase("en-US") === ".gitkeep") return `"${name}" is reserved for Fundus folder management.`;
|
|
17
|
+
if (WINDOWS_RESERVED_NAME.test(name)) return `"${name}" is a reserved filesystem name.`;
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
/** Normalize a validated, portable relative folder path to NFC + POSIX separators. */
|
|
21
|
+
function normalizeFolderPath(path) {
|
|
22
|
+
return path.split("/").map((segment) => segment.normalize("NFC")).join("/");
|
|
23
|
+
}
|
|
24
|
+
/** Validate a non-root, POSIX-relative folder path. */
|
|
25
|
+
function folderPathError(path) {
|
|
26
|
+
if (path.length === 0) return "The root is implicit and cannot be registered as a folder.";
|
|
27
|
+
if (path.startsWith("/") || path.endsWith("/")) return "Folder paths must be relative and must not start or end with a slash.";
|
|
28
|
+
for (const segment of path.split("/")) {
|
|
29
|
+
const problem = folderNameError(segment);
|
|
30
|
+
if (problem) return `Invalid folder path "${path}": ${problem}`;
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/** Case-insensitive, Unicode-normalized key used to prevent portable path collisions. */
|
|
35
|
+
function portableFolderPathKey(path) {
|
|
36
|
+
return normalizeFolderPath(path).toLocaleLowerCase("en-US");
|
|
37
|
+
}
|
|
38
|
+
function parentFolderPath(path) {
|
|
39
|
+
const separator = path.lastIndexOf("/");
|
|
40
|
+
return separator === -1 ? "" : path.slice(0, separator);
|
|
41
|
+
}
|
|
42
|
+
function folderNameOf(path) {
|
|
43
|
+
const separator = path.lastIndexOf("/");
|
|
44
|
+
return separator === -1 ? path : path.slice(separator + 1);
|
|
45
|
+
}
|
|
46
|
+
function joinFolderPath(parent, name) {
|
|
47
|
+
return parent === "" ? name : `${parent}/${name}`;
|
|
48
|
+
}
|
|
49
|
+
function folderOfRawPath(rawPath) {
|
|
50
|
+
return parentFolderPath(rawPath);
|
|
51
|
+
}
|
|
52
|
+
function rawFileNameOfPath(rawPath) {
|
|
53
|
+
return folderNameOf(rawPath);
|
|
54
|
+
}
|
|
55
|
+
function isFolderOrDescendant(path, ancestor) {
|
|
56
|
+
return path === ancestor || path.startsWith(`${ancestor}/`);
|
|
57
|
+
}
|
|
58
|
+
function replaceFolderPrefix(path, from, to) {
|
|
59
|
+
if (path === from) return to;
|
|
60
|
+
return `${to}${path.slice(from.length)}`;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export { FOLDER_SENTINEL as F, folderPathError as a, folderNameError as b, folderNameOf as c, replaceFolderPrefix as d, portableFolderPathKey as e, folderOfRawPath as f, isFolderOrDescendant as i, joinFolderPath as j, normalizeFolderPath as n, parentFolderPath as p, rawFileNameOfPath as r };
|
|
64
|
+
//# sourceMappingURL=folder-path.js-ytx9ucgg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-path.js-ytx9ucgg.js","sources":["../../../../.svelte-kit/output/server/chunks/folder-path.js"],"sourcesContent":["/** Fundus-owned file that preserves explicit empty folders in source control. */\nvar FOLDER_SENTINEL = \".gitkeep\";\nvar CONTROL_CHARACTERS = /[\\u0000-\\u001f\\u007f]/;\nvar WINDOWS_FORBIDDEN_CHARACTERS = /[<>:\"|?*]/;\nvar WINDOWS_RESERVED_NAME = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\\..*)?$/i;\n/** Validate one human-facing folder name (a single path segment). */\nfunction folderNameError(name) {\n\tif (name.length === 0) return \"Folder names must not be empty.\";\n\tif (name !== name.trim()) return \"Folder names must not start or end with whitespace.\";\n\tif (name === \".\" || name === \"..\") return `\"${name}\" is not a valid folder name.`;\n\tif (name.includes(\"/\") || name.includes(\"\\\\\")) return \"Folder names must not contain path separators.\";\n\tif (CONTROL_CHARACTERS.test(name)) return \"Folder names must not contain control characters.\";\n\tif (WINDOWS_FORBIDDEN_CHARACTERS.test(name)) return \"Folder names must not contain Windows-reserved characters (: * ? \\\" < > |).\";\n\tif (name.endsWith(\".\")) return \"Folder names must not end with a dot.\";\n\tif (name.toLocaleLowerCase(\"en-US\") === \"root\") return `\"${name}\" is reserved for the implicit Fundus root folder.`;\n\tif (name.toLocaleLowerCase(\"en-US\") === \".gitkeep\") return `\"${name}\" is reserved for Fundus folder management.`;\n\tif (WINDOWS_RESERVED_NAME.test(name)) return `\"${name}\" is a reserved filesystem name.`;\n\treturn null;\n}\n/** Normalize a validated, portable relative folder path to NFC + POSIX separators. */\nfunction normalizeFolderPath(path) {\n\treturn path.split(\"/\").map((segment) => segment.normalize(\"NFC\")).join(\"/\");\n}\n/** Validate a non-root, POSIX-relative folder path. */\nfunction folderPathError(path) {\n\tif (path.length === 0) return \"The root is implicit and cannot be registered as a folder.\";\n\tif (path.startsWith(\"/\") || path.endsWith(\"/\")) return \"Folder paths must be relative and must not start or end with a slash.\";\n\tfor (const segment of path.split(\"/\")) {\n\t\tconst problem = folderNameError(segment);\n\t\tif (problem) return `Invalid folder path \"${path}\": ${problem}`;\n\t}\n\treturn null;\n}\n/** Case-insensitive, Unicode-normalized key used to prevent portable path collisions. */\nfunction portableFolderPathKey(path) {\n\treturn normalizeFolderPath(path).toLocaleLowerCase(\"en-US\");\n}\nfunction parentFolderPath(path) {\n\tconst separator = path.lastIndexOf(\"/\");\n\treturn separator === -1 ? \"\" : path.slice(0, separator);\n}\nfunction folderNameOf(path) {\n\tconst separator = path.lastIndexOf(\"/\");\n\treturn separator === -1 ? path : path.slice(separator + 1);\n}\nfunction joinFolderPath(parent, name) {\n\treturn parent === \"\" ? name : `${parent}/${name}`;\n}\nfunction folderOfRawPath(rawPath) {\n\treturn parentFolderPath(rawPath);\n}\nfunction rawFileNameOfPath(rawPath) {\n\treturn folderNameOf(rawPath);\n}\nfunction isFolderOrDescendant(path, ancestor) {\n\treturn path === ancestor || path.startsWith(`${ancestor}/`);\n}\nfunction replaceFolderPrefix(path, from, to) {\n\tif (path === from) return to;\n\treturn `${to}${path.slice(from.length)}`;\n}\n//#endregion\nexport { folderPathError as a, normalizeFolderPath as c, rawFileNameOfPath as d, replaceFolderPrefix as f, folderOfRawPath as i, parentFolderPath as l, folderNameError as n, isFolderOrDescendant as o, folderNameOf as r, joinFolderPath as s, FOLDER_SENTINEL as t, portableFolderPathKey as u };\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { i as assertSafeRelativeFilePath } from './library-store.js-BP8cL-qD.js';
|
|
2
|
+
import { join, extname } from 'node:path';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
|
|
6
|
+
//#region src/lib/server/http.ts
|
|
7
|
+
var CONTENT_TYPES = {
|
|
8
|
+
".png": "image/png",
|
|
9
|
+
".jpg": "image/jpeg",
|
|
10
|
+
".jpeg": "image/jpeg",
|
|
11
|
+
".webp": "image/webp",
|
|
12
|
+
".gif": "image/gif",
|
|
13
|
+
".avif": "image/avif",
|
|
14
|
+
".svg": "image/svg+xml",
|
|
15
|
+
".mp4": "video/mp4",
|
|
16
|
+
".m4v": "video/mp4",
|
|
17
|
+
".mov": "video/quicktime",
|
|
18
|
+
".webm": "video/webm",
|
|
19
|
+
".mp3": "audio/mpeg",
|
|
20
|
+
".wav": "audio/wav",
|
|
21
|
+
".m4a": "audio/mp4",
|
|
22
|
+
".ogg": "audio/ogg",
|
|
23
|
+
".flac": "audio/flac"
|
|
24
|
+
};
|
|
25
|
+
function errorResponse(cause, status) {
|
|
26
|
+
const body = { error: { message: cause instanceof Error ? cause.message : String(cause) } };
|
|
27
|
+
return Response.json(body, { status });
|
|
28
|
+
}
|
|
29
|
+
function routeNotFound(event) {
|
|
30
|
+
return errorResponse(/* @__PURE__ */ new Error(`No route for ${event.request.method.toUpperCase()} ${event.url.pathname}.`), 404);
|
|
31
|
+
}
|
|
32
|
+
async function apiResponse(run) {
|
|
33
|
+
try {
|
|
34
|
+
return Response.json(await run());
|
|
35
|
+
} catch (cause) {
|
|
36
|
+
return errorResponse(cause, 400);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function parseByteRange(rangeHeader, size) {
|
|
40
|
+
if (!rangeHeader) return null;
|
|
41
|
+
const match = /^bytes=(\d*)-(\d*)$/.exec(rangeHeader.trim());
|
|
42
|
+
if (!match || match[1] === "" && match[2] === "") return null;
|
|
43
|
+
if (size === 0) return "unsatisfiable";
|
|
44
|
+
let start;
|
|
45
|
+
let end;
|
|
46
|
+
if (match[1] === "") {
|
|
47
|
+
start = Math.max(0, size - Number(match[2]));
|
|
48
|
+
end = size - 1;
|
|
49
|
+
} else {
|
|
50
|
+
start = Number(match[1]);
|
|
51
|
+
end = match[2] === "" ? size - 1 : Math.min(Number(match[2]), size - 1);
|
|
52
|
+
}
|
|
53
|
+
if (start > end || start >= size) return "unsatisfiable";
|
|
54
|
+
return {
|
|
55
|
+
start,
|
|
56
|
+
end
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async function serveFundusFile(config, kind, fileName, request) {
|
|
60
|
+
try {
|
|
61
|
+
assertSafeRelativeFilePath(fileName);
|
|
62
|
+
} catch (cause) {
|
|
63
|
+
return errorResponse(cause, 400);
|
|
64
|
+
}
|
|
65
|
+
const filePath = join(kind === "raw" ? config.rawDir : config.proxyDir, fileName);
|
|
66
|
+
if (!existsSync(filePath)) return errorResponse(/* @__PURE__ */ new Error(`File "${fileName}" not found.`), 404);
|
|
67
|
+
const bytes = new Uint8Array(await readFile(filePath));
|
|
68
|
+
const size = bytes.byteLength;
|
|
69
|
+
const headers = {
|
|
70
|
+
"Content-Type": CONTENT_TYPES[extname(fileName).toLowerCase()] ?? "application/octet-stream",
|
|
71
|
+
"Cache-Control": "no-store",
|
|
72
|
+
"Accept-Ranges": "bytes"
|
|
73
|
+
};
|
|
74
|
+
const range = parseByteRange(request.headers.get("Range"), size);
|
|
75
|
+
if (range === "unsatisfiable") return new Response(null, {
|
|
76
|
+
status: 416,
|
|
77
|
+
headers: {
|
|
78
|
+
...headers,
|
|
79
|
+
"Content-Range": `bytes */${size}`
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
if (range) {
|
|
83
|
+
const slice = bytes.subarray(range.start, range.end + 1);
|
|
84
|
+
return new Response(slice, {
|
|
85
|
+
status: 206,
|
|
86
|
+
headers: {
|
|
87
|
+
...headers,
|
|
88
|
+
"Content-Range": `bytes ${range.start}-${range.end}/${size}`,
|
|
89
|
+
"Content-Length": String(slice.byteLength)
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return new Response(bytes, { headers: {
|
|
94
|
+
...headers,
|
|
95
|
+
"Content-Length": String(size)
|
|
96
|
+
} });
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export { apiResponse as a, errorResponse as e, routeNotFound as r, serveFundusFile as s };
|
|
100
|
+
//# sourceMappingURL=http.js-Dxoa-jtP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js-Dxoa-jtP.js","sources":["../../../../.svelte-kit/output/server/chunks/http.js"],"sourcesContent":["import { n as assertSafeRelativeFilePath } from \"./library-store.js\";\nimport { extname, join } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\n//#region src/lib/server/http.ts\nvar CONTENT_TYPES = {\n\t\".png\": \"image/png\",\n\t\".jpg\": \"image/jpeg\",\n\t\".jpeg\": \"image/jpeg\",\n\t\".webp\": \"image/webp\",\n\t\".gif\": \"image/gif\",\n\t\".avif\": \"image/avif\",\n\t\".svg\": \"image/svg+xml\",\n\t\".mp4\": \"video/mp4\",\n\t\".m4v\": \"video/mp4\",\n\t\".mov\": \"video/quicktime\",\n\t\".webm\": \"video/webm\",\n\t\".mp3\": \"audio/mpeg\",\n\t\".wav\": \"audio/wav\",\n\t\".m4a\": \"audio/mp4\",\n\t\".ogg\": \"audio/ogg\",\n\t\".flac\": \"audio/flac\"\n};\nfunction errorResponse(cause, status) {\n\tconst body = { error: { message: cause instanceof Error ? cause.message : String(cause) } };\n\treturn Response.json(body, { status });\n}\nfunction routeNotFound(event) {\n\treturn errorResponse(/* @__PURE__ */ new Error(`No route for ${event.request.method.toUpperCase()} ${event.url.pathname}.`), 404);\n}\nasync function apiResponse(run) {\n\ttry {\n\t\treturn Response.json(await run());\n\t} catch (cause) {\n\t\treturn errorResponse(cause, 400);\n\t}\n}\nfunction parseByteRange(rangeHeader, size) {\n\tif (!rangeHeader) return null;\n\tconst match = /^bytes=(\\d*)-(\\d*)$/.exec(rangeHeader.trim());\n\tif (!match || match[1] === \"\" && match[2] === \"\") return null;\n\tif (size === 0) return \"unsatisfiable\";\n\tlet start;\n\tlet end;\n\tif (match[1] === \"\") {\n\t\tstart = Math.max(0, size - Number(match[2]));\n\t\tend = size - 1;\n\t} else {\n\t\tstart = Number(match[1]);\n\t\tend = match[2] === \"\" ? size - 1 : Math.min(Number(match[2]), size - 1);\n\t}\n\tif (start > end || start >= size) return \"unsatisfiable\";\n\treturn {\n\t\tstart,\n\t\tend\n\t};\n}\nasync function serveFundusFile(config, kind, fileName, request) {\n\ttry {\n\t\tassertSafeRelativeFilePath(fileName);\n\t} catch (cause) {\n\t\treturn errorResponse(cause, 400);\n\t}\n\tconst filePath = join(kind === \"raw\" ? config.rawDir : config.proxyDir, fileName);\n\tif (!existsSync(filePath)) return errorResponse(/* @__PURE__ */ new Error(`File \"${fileName}\" not found.`), 404);\n\tconst bytes = new Uint8Array(await readFile(filePath));\n\tconst size = bytes.byteLength;\n\tconst headers = {\n\t\t\"Content-Type\": CONTENT_TYPES[extname(fileName).toLowerCase()] ?? \"application/octet-stream\",\n\t\t\"Cache-Control\": \"no-store\",\n\t\t\"Accept-Ranges\": \"bytes\"\n\t};\n\tconst range = parseByteRange(request.headers.get(\"Range\"), size);\n\tif (range === \"unsatisfiable\") return new Response(null, {\n\t\tstatus: 416,\n\t\theaders: {\n\t\t\t...headers,\n\t\t\t\"Content-Range\": `bytes */${size}`\n\t\t}\n\t});\n\tif (range) {\n\t\tconst slice = bytes.subarray(range.start, range.end + 1);\n\t\treturn new Response(slice, {\n\t\t\tstatus: 206,\n\t\t\theaders: {\n\t\t\t\t...headers,\n\t\t\t\t\"Content-Range\": `bytes ${range.start}-${range.end}/${size}`,\n\t\t\t\t\"Content-Length\": String(slice.byteLength)\n\t\t\t}\n\t\t});\n\t}\n\treturn new Response(bytes, { headers: {\n\t\t...headers,\n\t\t\"Content-Length\": String(size)\n\t} });\n}\n//#endregion\nexport { serveFundusFile as i, errorResponse as n, routeNotFound as r, apiResponse as t };\n"],"names":[],"mappings":"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"}
|