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.
Files changed (183) hide show
  1. package/README.md +17 -2
  2. package/build/client/_app/immutable/assets/{2.wavcNhPC.css → 2.ohi-TClG.css} +1 -1
  3. package/build/client/_app/immutable/assets/2.ohi-TClG.css.br +0 -0
  4. package/build/client/_app/immutable/assets/2.ohi-TClG.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/3.JwgtcTEd.css +1 -0
  6. package/build/client/_app/immutable/assets/3.JwgtcTEd.css.br +0 -0
  7. package/build/client/_app/immutable/assets/3.JwgtcTEd.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css +1 -0
  9. package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css.br +0 -0
  10. package/build/client/_app/immutable/assets/LibraryContextMenu.CMefGNE2.css.gz +0 -0
  11. package/build/client/_app/immutable/chunks/DOpBpjxS.js +108 -0
  12. package/build/client/_app/immutable/chunks/DOpBpjxS.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/DOpBpjxS.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{DQ8SXFaX.js → DVEQFclp.js} +1 -1
  15. package/build/client/_app/immutable/chunks/DVEQFclp.js.br +1 -0
  16. package/build/client/_app/immutable/chunks/DVEQFclp.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{CvY6YsFE.js → DiFoWL2c.js} +1 -1
  18. package/build/client/_app/immutable/chunks/DiFoWL2c.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/DiFoWL2c.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{BiIto6ft.js → DkADHpZF.js} +1 -1
  21. package/build/client/_app/immutable/chunks/DkADHpZF.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/DkADHpZF.js.gz +0 -0
  23. package/build/client/_app/immutable/entry/{app.ubN0v9bN.js → app.CKgtYXQb.js} +2 -2
  24. package/build/client/_app/immutable/entry/app.CKgtYXQb.js.br +0 -0
  25. package/build/client/_app/immutable/entry/app.CKgtYXQb.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/start.CYZu5qE1.js +1 -0
  27. package/build/client/_app/immutable/entry/start.CYZu5qE1.js.br +0 -0
  28. package/build/client/_app/immutable/entry/start.CYZu5qE1.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{0.Dr5ijCIl.js → 0.I_1SApYQ.js} +1 -1
  30. package/build/client/_app/immutable/nodes/0.I_1SApYQ.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/0.I_1SApYQ.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{1.DiIGIRAb.js → 1.v6eUTnWq.js} +1 -1
  33. package/build/client/_app/immutable/nodes/1.v6eUTnWq.js.br +2 -0
  34. package/build/client/_app/immutable/nodes/1.v6eUTnWq.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/2.DoA7Dfl-.js +3 -0
  36. package/build/client/_app/immutable/nodes/2.DoA7Dfl-.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/2.DoA7Dfl-.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/3.C-DO70Bs.js +1 -0
  39. package/build/client/_app/immutable/nodes/3.C-DO70Bs.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/3.C-DO70Bs.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/4.CALOuSyz.js +2 -0
  42. package/build/client/_app/immutable/nodes/4.CALOuSyz.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/4.CALOuSyz.js.gz +0 -0
  44. package/build/client/_app/version.json +1 -1
  45. package/build/client/_app/version.json.br +0 -0
  46. package/build/client/_app/version.json.gz +0 -0
  47. package/build/handler.js +7 -7
  48. package/build/index.js +7 -7
  49. package/build/server/chunks/chunks/{context.js-Bw4WWLhG.js → context.js-BUZqFfWG.js} +19 -33
  50. package/build/server/chunks/chunks/context.js-BUZqFfWG.js.map +1 -0
  51. package/build/server/chunks/chunks/{core.js-DDntpb72.js → core.js-xfrkaQpS.js} +97 -48
  52. package/build/server/chunks/chunks/core.js-xfrkaQpS.js.map +1 -0
  53. package/build/server/chunks/chunks/{exports.js-CLTzaOxn.js → exports.js-C0rwMMtk.js} +2 -2
  54. package/build/server/chunks/chunks/{exports.js-CLTzaOxn.js.map → exports.js-C0rwMMtk.js.map} +1 -1
  55. package/build/server/chunks/chunks/{http.js-Dxoa-jtP.js → http.js-DvopzwKh.js} +2 -2
  56. package/build/server/chunks/chunks/{http.js-Dxoa-jtP.js.map → http.js-DvopzwKh.js.map} +1 -1
  57. package/build/server/chunks/chunks/{internal.js-BDBSzJId.js → internal.js-DGo2jPcg.js} +3 -3
  58. package/build/server/chunks/chunks/{internal.js-BDBSzJId.js.map → internal.js-DGo2jPcg.js.map} +1 -1
  59. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  60. package/build/server/chunks/chunks/{library-store.js-BP8cL-qD.js → library-store.js-ZLudCJlT.js} +135 -64
  61. package/build/server/chunks/chunks/library-store.js-ZLudCJlT.js.map +1 -0
  62. package/build/server/chunks/chunks/{shared.js-BWXgl1Xf.js → shared.js-B1gC9MiJ.js} +2 -2
  63. package/build/server/chunks/chunks/{shared.js-BWXgl1Xf.js.map → shared.js-B1gC9MiJ.js.map} +1 -1
  64. package/build/server/chunks/chunks/{utils.js-9oI5Oz0w.js → utils.js-DnEJ3UjO.js} +3 -3
  65. package/build/server/chunks/chunks/{utils.js-9oI5Oz0w.js.map → utils.js-DnEJ3UjO.js.map} +1 -1
  66. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-WknZVW_S.js → _server.ts.js-Cq5gXVQT.js} +5 -5
  67. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-WknZVW_S.js.map → _server.ts.js-Cq5gXVQT.js.map} +1 -1
  68. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BrZ__-HZ.js → _server.ts.js-RXbedi8q.js} +6 -6
  69. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-BrZ__-HZ.js.map → _server.ts.js-RXbedi8q.js.map} +1 -1
  70. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-PqADGPXc.js → _server.ts.js-D7Qae9vU.js} +6 -6
  71. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-PqADGPXc.js.map → _server.ts.js-D7Qae9vU.js.map} +1 -1
  72. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-OqoE5PN-.js → _server.ts.js-DtO20kgB.js} +6 -6
  73. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-OqoE5PN-.js.map → _server.ts.js-DtO20kgB.js.map} +1 -1
  74. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-CJ08e1ho.js → _server.ts.js-BUebPbd5.js} +6 -6
  75. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-CJ08e1ho.js.map → _server.ts.js-BUebPbd5.js.map} +1 -1
  76. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DdF3eK2I.js → _server.ts.js-BjT2qPMT.js} +6 -6
  77. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DdF3eK2I.js.map → _server.ts.js-BjT2qPMT.js.map} +1 -1
  78. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-Cxt6jsJ5.js → _server.ts.js-DYRLsoT7.js} +6 -6
  79. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-Cxt6jsJ5.js.map → _server.ts.js-DYRLsoT7.js.map} +1 -1
  80. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-BWVM2Ntl.js → _server.ts.js-BbN2fGNN.js} +6 -6
  81. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-BWVM2Ntl.js.map → _server.ts.js-BbN2fGNN.js.map} +1 -1
  82. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-Z2bM-qHM.js → _server.ts.js-b_MKZ41b.js} +6 -6
  83. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-Z2bM-qHM.js.map → _server.ts.js-b_MKZ41b.js.map} +1 -1
  84. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BX9H2Z34.js → _server.ts.js-evEfMpvn.js} +6 -6
  85. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BX9H2Z34.js.map → _server.ts.js-evEfMpvn.js.map} +1 -1
  86. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BWHDZ8mz.js → _server.ts.js-C04XE_1w.js} +5 -5
  87. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-BWHDZ8mz.js.map → _server.ts.js-C04XE_1w.js.map} +1 -1
  88. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-CR_7mndO.js → _server.ts.js-DB8TdoEv.js} +6 -6
  89. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-CR_7mndO.js.map → _server.ts.js-DB8TdoEv.js.map} +1 -1
  90. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Cw1PDBvb.js → _server.ts.js-BrpaijZO.js} +6 -6
  91. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-Cw1PDBvb.js.map → _server.ts.js-BrpaijZO.js.map} +1 -1
  92. package/build/server/chunks/entries/{hooks.server.js-BHoE0yBi.js → hooks.server.js-BJJwZW_I.js} +5 -5
  93. package/build/server/chunks/entries/{hooks.server.js-BHoE0yBi.js.map → hooks.server.js-BJJwZW_I.js.map} +1 -1
  94. package/build/server/chunks/{handler-10cx4zHn.js → handler-DnbS2t1B.js} +5 -5
  95. package/build/server/chunks/{handler-10cx4zHn.js.map → handler-DnbS2t1B.js.map} +1 -1
  96. package/build/server/chunks/{index.js-DvPfiC00.js → index.js-g77q3Boj.js} +5 -5
  97. package/build/server/chunks/{index.js-DvPfiC00.js.map → index.js-g77q3Boj.js.map} +1 -1
  98. package/build/server/chunks/{manifest.js-DoPjUnzD.js → manifest.js-qmEXbstS.js} +20 -20
  99. package/build/server/chunks/{manifest.js-DoPjUnzD.js.map → manifest.js-qmEXbstS.js.map} +1 -1
  100. package/build/server/chunks/nodes/0.js-Bk6IZ-vD.js +11 -0
  101. package/build/server/chunks/nodes/{0.js-Di3qgAtW.js.map → 0.js-Bk6IZ-vD.js.map} +1 -1
  102. package/build/server/chunks/nodes/1.js-H-qwo4GJ.js +7 -0
  103. package/build/server/chunks/nodes/{1.js-BlWSFIA8.js.map → 1.js-H-qwo4GJ.js.map} +1 -1
  104. package/build/server/chunks/nodes/2.js-DRpXVLwp.js +7 -0
  105. package/build/server/chunks/nodes/{2.js-CO9nSPUN.js.map → 2.js-DRpXVLwp.js.map} +1 -1
  106. package/build/server/chunks/nodes/3.js-CDEzNFeU.js +7 -0
  107. package/build/server/chunks/nodes/3.js-CDEzNFeU.js.map +1 -0
  108. package/build/server/chunks/nodes/{4.js-B3IuagJW.js → 4.js-BKL7LSSm.js} +2 -2
  109. package/build/server/chunks/nodes/4.js-BKL7LSSm.js.map +1 -0
  110. package/dist/cli.js +9 -6
  111. package/dist/core/ingest.d.ts +7 -1
  112. package/dist/core/ingest.js +3 -19
  113. package/dist/core/plugins/registry.d.ts +16 -0
  114. package/dist/core/plugins/registry.js +52 -0
  115. package/dist/runtime/kind-handlers.d.ts +0 -6
  116. package/dist/runtime/kind-handlers.js +16 -7
  117. package/dist/server/config-loader.d.ts +3 -2
  118. package/dist/server/config-loader.js +24 -48
  119. package/dist/server/index.d.ts +1 -0
  120. package/dist/server/plugins/audio.d.ts +2 -1
  121. package/dist/server/plugins/audio.js +15 -1
  122. package/dist/server/plugins/chroma-key-video.js +2 -0
  123. package/dist/server/plugins/config.d.ts +13 -0
  124. package/dist/server/plugins/config.js +32 -0
  125. package/dist/server/plugins/contract.d.ts +17 -3
  126. package/dist/server/plugins/image.d.ts +2 -1
  127. package/dist/server/plugins/image.js +14 -1
  128. package/dist/server/plugins/slice.d.ts +2 -1
  129. package/dist/server/plugins/slice.js +14 -1
  130. package/dist/server/plugins/video.d.ts +2 -1
  131. package/dist/server/plugins/video.js +26 -1
  132. package/dist/server/plugins.d.ts +6 -6
  133. package/dist/server/plugins.js +3 -1
  134. package/dist/server/start.d.ts +13 -1
  135. package/dist/server/start.js +51 -4
  136. package/package.json +3 -1
  137. package/build/client/_app/immutable/assets/2.wavcNhPC.css.br +0 -0
  138. package/build/client/_app/immutable/assets/2.wavcNhPC.css.gz +0 -0
  139. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css +0 -1
  140. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css.br +0 -0
  141. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css.gz +0 -0
  142. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css +0 -1
  143. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css.br +0 -0
  144. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css.gz +0 -0
  145. package/build/client/_app/immutable/chunks/BiIto6ft.js.br +0 -0
  146. package/build/client/_app/immutable/chunks/BiIto6ft.js.gz +0 -0
  147. package/build/client/_app/immutable/chunks/CvY6YsFE.js.br +0 -0
  148. package/build/client/_app/immutable/chunks/CvY6YsFE.js.gz +0 -0
  149. package/build/client/_app/immutable/chunks/DL0_39Ys.js +0 -5
  150. package/build/client/_app/immutable/chunks/DL0_39Ys.js.br +0 -0
  151. package/build/client/_app/immutable/chunks/DL0_39Ys.js.gz +0 -0
  152. package/build/client/_app/immutable/chunks/DQ8SXFaX.js.br +0 -0
  153. package/build/client/_app/immutable/chunks/DQ8SXFaX.js.gz +0 -0
  154. package/build/client/_app/immutable/chunks/DjdrdRzT.js +0 -1
  155. package/build/client/_app/immutable/chunks/DjdrdRzT.js.br +0 -0
  156. package/build/client/_app/immutable/chunks/DjdrdRzT.js.gz +0 -0
  157. package/build/client/_app/immutable/entry/app.ubN0v9bN.js.br +0 -0
  158. package/build/client/_app/immutable/entry/app.ubN0v9bN.js.gz +0 -0
  159. package/build/client/_app/immutable/entry/start.BW8dBDh6.js +0 -1
  160. package/build/client/_app/immutable/entry/start.BW8dBDh6.js.br +0 -0
  161. package/build/client/_app/immutable/entry/start.BW8dBDh6.js.gz +0 -0
  162. package/build/client/_app/immutable/nodes/0.Dr5ijCIl.js.br +0 -0
  163. package/build/client/_app/immutable/nodes/0.Dr5ijCIl.js.gz +0 -0
  164. package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.br +0 -3
  165. package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.gz +0 -0
  166. package/build/client/_app/immutable/nodes/2.B8KYmQcV.js +0 -3
  167. package/build/client/_app/immutable/nodes/2.B8KYmQcV.js.br +0 -0
  168. package/build/client/_app/immutable/nodes/2.B8KYmQcV.js.gz +0 -0
  169. package/build/client/_app/immutable/nodes/3.B1jc7arT.js +0 -104
  170. package/build/client/_app/immutable/nodes/3.B1jc7arT.js.br +0 -0
  171. package/build/client/_app/immutable/nodes/3.B1jc7arT.js.gz +0 -0
  172. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js +0 -2
  173. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js.br +0 -0
  174. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js.gz +0 -0
  175. package/build/server/chunks/chunks/context.js-Bw4WWLhG.js.map +0 -1
  176. package/build/server/chunks/chunks/core.js-DDntpb72.js.map +0 -1
  177. package/build/server/chunks/chunks/library-store.js-BP8cL-qD.js.map +0 -1
  178. package/build/server/chunks/nodes/0.js-Di3qgAtW.js +0 -11
  179. package/build/server/chunks/nodes/1.js-BlWSFIA8.js +0 -7
  180. package/build/server/chunks/nodes/2.js-CO9nSPUN.js +0 -7
  181. package/build/server/chunks/nodes/3.js-C2D6xpEO.js +0 -7
  182. package/build/server/chunks/nodes/3.js-C2D6xpEO.js.map +0 -1
  183. 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 = \"1783974395374\";\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;;;;"}
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;;;;"}
@@ -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 serverPluginsByType = {
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, assertSafeRelativeFilePath as i, processAssets as p, readCurrentProxy as r, serverPluginsByType as s };
1697
- //# sourceMappingURL=library-store.js-BP8cL-qD.js.map
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