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.
Files changed (300) hide show
  1. package/README.md +58 -0
  2. package/build/client/_app/immutable/assets/0.DLhIsYA_.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.DLhIsYA_.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/2.wavcNhPC.css +1 -0
  5. package/build/client/_app/immutable/assets/2.wavcNhPC.css.br +0 -0
  6. package/build/client/_app/immutable/assets/2.wavcNhPC.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css +1 -0
  8. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css.br +0 -0
  9. package/build/client/_app/immutable/assets/3.Cjh_fXPY.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/4.p004hmEN.css +1 -0
  11. package/build/client/_app/immutable/assets/4.p004hmEN.css.br +0 -0
  12. package/build/client/_app/immutable/assets/4.p004hmEN.css.gz +0 -0
  13. package/build/client/_app/immutable/assets/ConfirmDialog.BdKlitwi.css +1 -0
  14. package/build/client/_app/immutable/assets/ConfirmDialog.BdKlitwi.css.br +0 -0
  15. package/build/client/_app/immutable/assets/ConfirmDialog.BdKlitwi.css.gz +0 -0
  16. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css +1 -0
  17. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css.br +0 -0
  18. package/build/client/_app/immutable/assets/LibraryContextMenu.zyZtpKzC.css.gz +0 -0
  19. package/build/client/_app/immutable/chunks/BiIto6ft.js +1 -0
  20. package/build/client/_app/immutable/chunks/BiIto6ft.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/BiIto6ft.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/Bjy-W4x2.js.br +0 -0
  23. package/build/client/_app/immutable/chunks/Bjy-W4x2.js.gz +0 -0
  24. package/build/client/_app/immutable/chunks/CNRz3sSw.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/CNRz3sSw.js.gz +0 -0
  26. package/build/client/_app/immutable/chunks/CO4RBJfa.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/CO4RBJfa.js.gz +0 -0
  28. package/{dist/editor/_app/immutable/chunks/DjvOiDmq.js → build/client/_app/immutable/chunks/CvY6YsFE.js} +1 -1
  29. package/build/client/_app/immutable/chunks/CvY6YsFE.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/CvY6YsFE.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/DL0_39Ys.js +5 -0
  32. package/build/client/_app/immutable/chunks/DL0_39Ys.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/DL0_39Ys.js.gz +0 -0
  34. package/{dist/editor/_app/immutable/chunks/BfPE5wdt.js → build/client/_app/immutable/chunks/DQ8SXFaX.js} +1 -1
  35. package/build/client/_app/immutable/chunks/DQ8SXFaX.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/DQ8SXFaX.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/DjdrdRzT.js.br +0 -0
  38. package/build/client/_app/immutable/chunks/DjdrdRzT.js.gz +0 -0
  39. package/build/client/_app/immutable/chunks/xihTtKlq.js.br +1 -0
  40. package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
  41. package/{dist/editor/_app/immutable/entry/app.BkqbfI8n.js → build/client/_app/immutable/entry/app.ubN0v9bN.js} +2 -2
  42. package/build/client/_app/immutable/entry/app.ubN0v9bN.js.br +0 -0
  43. package/build/client/_app/immutable/entry/app.ubN0v9bN.js.gz +0 -0
  44. package/build/client/_app/immutable/entry/start.BW8dBDh6.js +1 -0
  45. package/build/client/_app/immutable/entry/start.BW8dBDh6.js.br +0 -0
  46. package/build/client/_app/immutable/entry/start.BW8dBDh6.js.gz +0 -0
  47. package/{dist/editor/_app/immutable/nodes/0.xdMI5GEU.js → build/client/_app/immutable/nodes/0.Dr5ijCIl.js} +1 -1
  48. package/build/client/_app/immutable/nodes/0.Dr5ijCIl.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/0.Dr5ijCIl.js.gz +0 -0
  50. package/{dist/editor/_app/immutable/nodes/1.D9p2tfoJ.js → build/client/_app/immutable/nodes/1.DiIGIRAb.js} +1 -1
  51. package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.br +3 -0
  52. package/build/client/_app/immutable/nodes/1.DiIGIRAb.js.gz +0 -0
  53. package/{dist/editor/_app/immutable/nodes/2.BrA0Hyzu.js → build/client/_app/immutable/nodes/2.B8KYmQcV.js} +3 -3
  54. package/build/client/_app/immutable/nodes/2.B8KYmQcV.js.br +0 -0
  55. package/build/client/_app/immutable/nodes/2.B8KYmQcV.js.gz +0 -0
  56. package/build/client/_app/immutable/nodes/3.B1jc7arT.js +104 -0
  57. package/build/client/_app/immutable/nodes/3.B1jc7arT.js.br +0 -0
  58. package/build/client/_app/immutable/nodes/3.B1jc7arT.js.gz +0 -0
  59. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js +2 -0
  60. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js.br +0 -0
  61. package/build/client/_app/immutable/nodes/4.BPK9n1mH.js.gz +0 -0
  62. package/build/client/_app/version.json +1 -0
  63. package/build/client/_app/version.json.br +0 -0
  64. package/build/client/_app/version.json.gz +0 -0
  65. package/build/env.js +100 -0
  66. package/build/env.js.map +1 -0
  67. package/build/handler.js +22 -0
  68. package/build/handler.js.map +1 -0
  69. package/build/index.js +145 -0
  70. package/build/index.js.map +1 -0
  71. package/build/server/chunks/chunks/context.js-Bw4WWLhG.js +443 -0
  72. package/build/server/chunks/chunks/context.js-Bw4WWLhG.js.map +1 -0
  73. package/build/server/chunks/chunks/core.js-DDntpb72.js +409 -0
  74. package/build/server/chunks/chunks/core.js-DDntpb72.js.map +1 -0
  75. package/build/server/chunks/chunks/env.js-l0sNRNKZ.js +2 -0
  76. package/build/server/chunks/chunks/env.js-l0sNRNKZ.js.map +1 -0
  77. package/build/server/chunks/chunks/exports.js-CLTzaOxn.js +152 -0
  78. package/build/server/chunks/chunks/exports.js-CLTzaOxn.js.map +1 -0
  79. package/build/server/chunks/chunks/folder-path.js-ytx9ucgg.js +64 -0
  80. package/build/server/chunks/chunks/folder-path.js-ytx9ucgg.js.map +1 -0
  81. package/build/server/chunks/chunks/http.js-Dxoa-jtP.js +100 -0
  82. package/build/server/chunks/chunks/http.js-Dxoa-jtP.js.map +1 -0
  83. package/build/server/chunks/chunks/internal.js-BDBSzJId.js +5753 -0
  84. package/build/server/chunks/chunks/internal.js-BDBSzJId.js.map +1 -0
  85. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js +22 -0
  86. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -0
  87. package/{dist/operations-DYM-5KVl.js → build/server/chunks/chunks/library-store.js-BP8cL-qD.js} +344 -444
  88. package/build/server/chunks/chunks/library-store.js-BP8cL-qD.js.map +1 -0
  89. package/build/server/chunks/chunks/manifest-appearance.js-DTk355LQ.js +146 -0
  90. package/build/server/chunks/chunks/manifest-appearance.js-DTk355LQ.js.map +1 -0
  91. package/build/server/chunks/chunks/routing.js-y-tryuip.js +213 -0
  92. package/build/server/chunks/chunks/routing.js-y-tryuip.js.map +1 -0
  93. package/build/server/chunks/chunks/shared.js-BWXgl1Xf.js +255 -0
  94. package/build/server/chunks/chunks/shared.js-BWXgl1Xf.js.map +1 -0
  95. package/build/server/chunks/chunks/utils.js-9oI5Oz0w.js +1048 -0
  96. package/build/server/chunks/chunks/utils.js-9oI5Oz0w.js.map +1 -0
  97. package/build/server/chunks/entries/endpoints/api/_...path_/_server.ts.js-WknZVW_S.js +27 -0
  98. package/build/server/chunks/entries/endpoints/api/_...path_/_server.ts.js-WknZVW_S.js.map +1 -0
  99. package/build/server/chunks/entries/endpoints/api/assets/_id_/_server.ts.js-BrZ__-HZ.js +24 -0
  100. package/build/server/chunks/entries/endpoints/api/assets/_id_/_server.ts.js-BrZ__-HZ.js.map +1 -0
  101. package/build/server/chunks/entries/endpoints/api/assets/_server.ts.js-PqADGPXc.js +45 -0
  102. package/build/server/chunks/entries/endpoints/api/assets/_server.ts.js-PqADGPXc.js.map +1 -0
  103. package/build/server/chunks/entries/endpoints/api/assets/delete/_server.ts.js-OqoE5PN-.js +31 -0
  104. package/build/server/chunks/entries/endpoints/api/assets/delete/_server.ts.js-OqoE5PN-.js.map +1 -0
  105. package/build/server/chunks/entries/endpoints/api/assets/move/_server.ts.js-CJ08e1ho.js +31 -0
  106. package/build/server/chunks/entries/endpoints/api/assets/move/_server.ts.js-CJ08e1ho.js.map +1 -0
  107. package/build/server/chunks/entries/endpoints/api/folders/_path_/_server.ts.js-DdF3eK2I.js +38 -0
  108. package/build/server/chunks/entries/endpoints/api/folders/_path_/_server.ts.js-DdF3eK2I.js.map +1 -0
  109. package/build/server/chunks/entries/endpoints/api/folders/_server.ts.js-Cxt6jsJ5.js +31 -0
  110. package/build/server/chunks/entries/endpoints/api/folders/_server.ts.js-Cxt6jsJ5.js.map +1 -0
  111. package/build/server/chunks/entries/endpoints/api/manifests/_name_/_server.ts.js-BWVM2Ntl.js +24 -0
  112. package/build/server/chunks/entries/endpoints/api/manifests/_name_/_server.ts.js-BWVM2Ntl.js.map +1 -0
  113. package/build/server/chunks/entries/endpoints/api/manifests/_server.ts.js-Z2bM-qHM.js +31 -0
  114. package/build/server/chunks/entries/endpoints/api/manifests/_server.ts.js-Z2bM-qHM.js.map +1 -0
  115. package/build/server/chunks/entries/endpoints/api/state/_server.ts.js-BX9H2Z34.js +24 -0
  116. package/build/server/chunks/entries/endpoints/api/state/_server.ts.js-BX9H2Z34.js.map +1 -0
  117. package/build/server/chunks/entries/endpoints/files/_...path_/_server.ts.js-BWHDZ8mz.js +27 -0
  118. package/build/server/chunks/entries/endpoints/files/_...path_/_server.ts.js-BWHDZ8mz.js.map +1 -0
  119. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/_server.ts.js-CR_7mndO.js +24 -0
  120. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/_server.ts.js-CR_7mndO.js.map +1 -0
  121. package/build/server/chunks/entries/endpoints/files/raw/_...path_/_server.ts.js-Cw1PDBvb.js +24 -0
  122. package/build/server/chunks/entries/endpoints/files/raw/_...path_/_server.ts.js-Cw1PDBvb.js.map +1 -0
  123. package/build/server/chunks/entries/hooks.server.js-BHoE0yBi.js +23 -0
  124. package/build/server/chunks/entries/hooks.server.js-BHoE0yBi.js.map +1 -0
  125. package/build/server/chunks/handler-10cx4zHn.js +1475 -0
  126. package/build/server/chunks/handler-10cx4zHn.js.map +1 -0
  127. package/build/server/chunks/index.js-DvPfiC00.js +3789 -0
  128. package/build/server/chunks/index.js-DvPfiC00.js.map +1 -0
  129. package/build/server/chunks/manifest.js-DoPjUnzD.js +149 -0
  130. package/build/server/chunks/manifest.js-DoPjUnzD.js.map +1 -0
  131. package/build/server/chunks/nodes/0.js-Di3qgAtW.js +11 -0
  132. package/build/server/chunks/nodes/0.js-Di3qgAtW.js.map +1 -0
  133. package/build/server/chunks/nodes/1.js-BlWSFIA8.js +7 -0
  134. package/build/server/chunks/nodes/1.js-BlWSFIA8.js.map +1 -0
  135. package/build/server/chunks/nodes/2.js-CO9nSPUN.js +7 -0
  136. package/build/server/chunks/nodes/2.js-CO9nSPUN.js.map +1 -0
  137. package/build/server/chunks/nodes/3.js-C2D6xpEO.js +7 -0
  138. package/build/server/chunks/nodes/3.js-C2D6xpEO.js.map +1 -0
  139. package/build/server/chunks/nodes/4.js-B3IuagJW.js +7 -0
  140. package/build/server/chunks/nodes/4.js-B3IuagJW.js.map +1 -0
  141. package/build/shims.js +33 -0
  142. package/build/shims.js.map +1 -0
  143. package/dist/cli.d.ts +2 -1
  144. package/dist/cli.js +109 -1332
  145. package/dist/config.d.ts +3 -2
  146. package/dist/config.js +2 -2
  147. package/dist/core/api-types.d.ts +141 -0
  148. package/dist/core/api-types.js +1 -0
  149. package/dist/core/asset-id.d.ts +28 -0
  150. package/dist/core/asset-id.js +59 -0
  151. package/dist/core/asset-reference.d.ts +23 -0
  152. package/dist/core/asset-reference.js +15 -0
  153. package/dist/core/canonicalize.d.ts +9 -0
  154. package/dist/core/canonicalize.js +36 -0
  155. package/dist/core/chroma-key.d.ts +30 -0
  156. package/dist/core/chroma-key.js +55 -0
  157. package/dist/core/config.d.ts +35 -0
  158. package/dist/core/config.js +4 -0
  159. package/dist/core/folder-path.d.ts +19 -0
  160. package/dist/core/folder-path.js +86 -0
  161. package/dist/core/index.d.ts +33 -499
  162. package/dist/core/index.js +17 -962
  163. package/dist/core/ingest.d.ts +18 -0
  164. package/dist/core/ingest.js +58 -0
  165. package/dist/core/library.d.ts +54 -0
  166. package/dist/core/library.js +138 -0
  167. package/dist/core/manifest-appearance.d.ts +35 -0
  168. package/dist/core/manifest-appearance.js +123 -0
  169. package/dist/core/manifest-entry.d.ts +104 -0
  170. package/dist/core/manifest-entry.js +1 -0
  171. package/dist/core/manifest-membership.d.ts +56 -0
  172. package/dist/core/manifest-membership.js +54 -0
  173. package/dist/core/plugins/audio.d.ts +26 -0
  174. package/dist/core/plugins/audio.js +44 -0
  175. package/dist/core/plugins/chroma-key-video.d.ts +29 -0
  176. package/dist/core/plugins/chroma-key-video.js +69 -0
  177. package/dist/core/plugins/contract.d.ts +35 -0
  178. package/dist/core/plugins/contract.js +1 -0
  179. package/dist/core/plugins/image.d.ts +30 -0
  180. package/dist/core/plugins/image.js +45 -0
  181. package/dist/core/plugins/slice.d.ts +22 -0
  182. package/dist/core/plugins/slice.js +60 -0
  183. package/dist/core/plugins/video.d.ts +45 -0
  184. package/dist/core/plugins/video.js +77 -0
  185. package/dist/core/reference-graph.d.ts +41 -0
  186. package/dist/core/reference-graph.js +138 -0
  187. package/dist/core/slice-data.d.ts +61 -0
  188. package/dist/core/slice-data.js +49 -0
  189. package/dist/runtime/chroma-key-gl.d.ts +40 -22
  190. package/dist/runtime/chroma-key-gl.js +189 -183
  191. package/dist/runtime/components/ChromaKeyVideo.svelte +3 -3
  192. package/dist/runtime/components/ChromaKeyVideo.svelte.d.ts +21 -0
  193. package/dist/runtime/components/Image.svelte +1 -1
  194. package/dist/runtime/components/Image.svelte.d.ts +9 -0
  195. package/dist/runtime/components/Slice.svelte +1 -1
  196. package/dist/runtime/components/Slice.svelte.d.ts +19 -0
  197. package/dist/runtime/components/SliceCanvas.svelte +3 -3
  198. package/dist/runtime/components/SliceCanvas.svelte.d.ts +10 -0
  199. package/dist/runtime/components/SliceDom.svelte +3 -3
  200. package/dist/runtime/components/SliceDom.svelte.d.ts +10 -0
  201. package/dist/runtime/components/Video.svelte +2 -2
  202. package/dist/runtime/components/Video.svelte.d.ts +18 -0
  203. package/dist/runtime/geometry.d.ts +55 -35
  204. package/dist/runtime/geometry.js +186 -191
  205. package/dist/runtime/index.d.ts +9 -9
  206. package/dist/runtime/index.js +9 -9
  207. package/dist/runtime/kind-handlers.d.ts +33 -24
  208. package/dist/runtime/kind-handlers.js +74 -65
  209. package/dist/runtime/manifest.d.ts +53 -47
  210. package/dist/runtime/manifest.js +133 -113
  211. package/dist/runtime/observe-border-box-size.d.ts +1 -4
  212. package/dist/runtime/observe-border-box-size.js +9 -10
  213. package/dist/runtime/preload-registry.d.ts +22 -8
  214. package/dist/runtime/preload-registry.js +65 -62
  215. package/dist/server/build.d.ts +8 -0
  216. package/dist/server/build.js +25 -0
  217. package/dist/server/check.d.ts +24 -0
  218. package/dist/server/check.js +199 -0
  219. package/dist/server/cli-commands.d.ts +25 -0
  220. package/dist/server/cli-commands.js +1178 -0
  221. package/dist/server/cli-init.d.ts +3 -0
  222. package/dist/server/cli-init.js +53 -0
  223. package/dist/server/cli-io.d.ts +46 -0
  224. package/dist/server/cli-io.js +105 -0
  225. package/dist/server/codegen.d.ts +58 -0
  226. package/dist/server/codegen.js +185 -0
  227. package/dist/server/config-loader.d.ts +34 -0
  228. package/dist/server/config-loader.js +103 -0
  229. package/dist/server/context.d.ts +8 -0
  230. package/dist/server/context.js +19 -0
  231. package/dist/server/folder-filesystem.d.ts +7 -0
  232. package/dist/server/folder-filesystem.js +39 -0
  233. package/dist/server/http.d.ts +12 -0
  234. package/dist/server/http.js +100 -0
  235. package/dist/server/index.d.ts +16 -0
  236. package/dist/server/index.js +9 -0
  237. package/dist/server/job-hash.d.ts +10 -0
  238. package/dist/server/job-hash.js +23 -0
  239. package/dist/server/library-store.d.ts +82 -0
  240. package/dist/server/library-store.js +763 -0
  241. package/dist/server/operations.d.ts +87 -0
  242. package/dist/server/operations.js +427 -0
  243. package/dist/server/plugins/audio.d.ts +7 -0
  244. package/dist/server/plugins/audio.js +27 -0
  245. package/dist/server/plugins/chroma-key-video.d.ts +9 -0
  246. package/dist/server/plugins/chroma-key-video.js +38 -0
  247. package/dist/server/plugins/contract.d.ts +100 -0
  248. package/dist/server/plugins/contract.js +16 -0
  249. package/dist/server/plugins/image.d.ts +8 -0
  250. package/dist/server/plugins/image.js +30 -0
  251. package/dist/server/plugins/slice.d.ts +14 -0
  252. package/dist/server/plugins/slice.js +63 -0
  253. package/dist/server/plugins/video.d.ts +6 -0
  254. package/dist/server/plugins/video.js +29 -0
  255. package/dist/server/plugins.d.ts +23 -0
  256. package/dist/server/plugins.js +33 -0
  257. package/dist/server/processing/audio-processing.d.ts +17 -0
  258. package/dist/server/processing/audio-processing.js +46 -0
  259. package/dist/server/processing/ffmpeg.d.ts +9 -0
  260. package/dist/server/processing/ffmpeg.js +50 -0
  261. package/dist/server/processing/image-processing.d.ts +16 -0
  262. package/dist/server/processing/image-processing.js +26 -0
  263. package/dist/server/processing/media-probe.d.ts +15 -0
  264. package/dist/server/processing/media-probe.js +27 -0
  265. package/dist/server/processing/processor.d.ts +50 -0
  266. package/dist/server/processing/processor.js +158 -0
  267. package/dist/server/processing/video-processing.d.ts +35 -0
  268. package/dist/server/processing/video-processing.js +87 -0
  269. package/dist/server/server.d.ts +13 -0
  270. package/dist/server/server.js +57 -0
  271. package/dist/server/start.d.ts +1 -0
  272. package/dist/server/start.js +33 -0
  273. package/package.json +29 -16
  274. package/dist/build-CZYFLLvl.js +0 -191
  275. package/dist/core/image-Dqmz8FXS.js +0 -54
  276. package/dist/core/reference-graph-CjuHbLDw.d.ts +0 -280
  277. package/dist/core/testing.d.ts +0 -27
  278. package/dist/core/testing.js +0 -80
  279. package/dist/editor/200.html +0 -37
  280. package/dist/editor/_app/immutable/assets/2.DIbbW7U1.css +0 -1
  281. package/dist/editor/_app/immutable/assets/3.C-9vFQ9A.css +0 -1
  282. package/dist/editor/_app/immutable/assets/4.BS8ElpOV.css +0 -1
  283. package/dist/editor/_app/immutable/assets/ConfirmDialog.CHEISE-L.css +0 -1
  284. package/dist/editor/_app/immutable/assets/LibraryContextMenu.CDjCmdV-.css +0 -1
  285. package/dist/editor/_app/immutable/chunks/Cx6qtxJg.js +0 -1
  286. package/dist/editor/_app/immutable/chunks/n7mvYc42.js +0 -5
  287. package/dist/editor/_app/immutable/entry/start.C8HHOLly.js +0 -1
  288. package/dist/editor/_app/immutable/nodes/3.WO7tZH_d.js +0 -104
  289. package/dist/editor/_app/immutable/nodes/4.DQtx17aW.js +0 -2
  290. package/dist/editor/_app/version.json +0 -1
  291. package/dist/index.d.ts +0 -370
  292. package/dist/index.js +0 -4
  293. package/dist/start-Bhnqt9Dc.js +0 -279
  294. package/dist/start-D2IXOrni.js +0 -2
  295. /package/{dist/editor → build/client}/_app/immutable/assets/0.DLhIsYA_.css +0 -0
  296. /package/{dist/editor → build/client}/_app/immutable/chunks/Bjy-W4x2.js +0 -0
  297. /package/{dist/editor → build/client}/_app/immutable/chunks/CNRz3sSw.js +0 -0
  298. /package/{dist/editor → build/client}/_app/immutable/chunks/CO4RBJfa.js +0 -0
  299. /package/{dist/editor → build/client}/_app/immutable/chunks/DjdrdRzT.js +0 -0
  300. /package/{dist/editor → build/client}/_app/immutable/chunks/xihTtKlq.js +0 -0
@@ -1,12 +1,11 @@
1
- //#region src/observe-border-box-size.ts
2
1
  /** Observe an element's layout border-box size in whole CSS pixels. */
3
- function observeBorderBoxSize(element, onSize) {
4
- const observer = new ResizeObserver((entries) => {
5
- const size = entries[0]?.borderBoxSize?.[0];
6
- onSize(Math.round(size?.inlineSize ?? element.offsetWidth), Math.round(size?.blockSize ?? element.offsetHeight));
7
- });
8
- observer.observe(element);
9
- return () => observer.disconnect();
2
+ export function observeBorderBoxSize(element, onSize) {
3
+ const observer = new ResizeObserver((entries) => {
4
+ // Measure layout, not getBoundingClientRect(): transforms must not freeze
5
+ // render geometry after an animation because they do not retrigger resize.
6
+ const size = entries[0]?.borderBoxSize?.[0];
7
+ onSize(Math.round(size?.inlineSize ?? element.offsetWidth), Math.round(size?.blockSize ?? element.offsetHeight));
8
+ });
9
+ observer.observe(element);
10
+ return () => observer.disconnect();
10
11
  }
11
- //#endregion
12
- export { observeBorderBoxSize };
@@ -1,6 +1,22 @@
1
- import { PreloadOptions } from "#fundus/core";
2
-
3
- //#region src/preload-registry.d.ts
1
+ /**
2
+ * The module-wide refcounted source registry: one entry per
3
+ * URL — reference count, in-flight promise, loaded handler resources.
4
+ *
5
+ * Guarantees:
6
+ * - **Once-per-URL fetches across manifests, all kinds** — a URL in flight or
7
+ * loaded is never fetched again while held, including image and slice.
8
+ * - **The reference count counts holding manifests, not calls** — each
9
+ * `Manifest` acquires a URL at most once per hold (its held-URL set guards
10
+ * idempotent `preload()` calls).
11
+ * - **Release at zero disposes via the kind handler** — the object URL is
12
+ * revoked and the entry cleared, so releasing one of two holders keeps the
13
+ * resource fully alive for the other, and a released URL can be re-acquired
14
+ * with a fresh fetch.
15
+ * - **No leak on release-during-in-flight** — dropping the last hold while
16
+ * the fetch is still running lets the acquisition complete, then disposes
17
+ * immediately (no cancellation, no throw).
18
+ */
19
+ import type { PreloadOptions } from '../core/index.js';
4
20
  /**
5
21
  * Acquire one hold on `url` for a manifest: increments the reference count
6
22
  * immediately, then loads via the kind handler unless the URL is already
@@ -8,19 +24,17 @@ import { PreloadOptions } from "#fundus/core";
8
24
  * load clears the in-flight state so the URL stays retryable; the caller
9
25
  * rolls back its own hold via `releaseSource`.
10
26
  */
11
- declare function acquireSource(url: string, kind: string, options: PreloadOptions): Promise<void>;
27
+ export declare function acquireSource(url: string, kind: string, options: PreloadOptions): Promise<void>;
12
28
  /**
13
29
  * Drop one hold on `url`. At zero holds the kind handler's release strategy
14
30
  * runs (object URL revoked) and the entry is cleared — unless the load is
15
31
  * still in flight, in which case its completion disposes. Releasing an
16
32
  * unknown URL is a no-op.
17
33
  */
18
- declare function releaseSource(url: string): void;
34
+ export declare function releaseSource(url: string): void;
19
35
  /**
20
36
  * The retained object URL of a source while some manifest holds it, or the
21
37
  * source itself when not (or no longer) preloaded — after a full release a
22
38
  * consumer falls back to the network URL and simply streams.
23
39
  */
24
- declare function resolveRetainedSource(url: string): string;
25
- //#endregion
26
- export { acquireSource, releaseSource, resolveRetainedSource };
40
+ export declare function resolveRetainedSource(url: string): string;
@@ -1,68 +1,71 @@
1
- import { runtimeHandlerFor } from "./kind-handlers.js";
2
- //#region src/preload-registry.ts
3
- const registryByUrl = /* @__PURE__ */ new Map();
1
+ import { runtimeHandlerFor } from './kind-handlers.js';
2
+ const registryByUrl = new Map();
4
3
  /**
5
- * Acquire one hold on `url` for a manifest: increments the reference count
6
- * immediately, then loads via the kind handler unless the URL is already
7
- * loaded (resolves at once) or in flight (joins the pending load). A failed
8
- * load clears the in-flight state so the URL stays retryable; the caller
9
- * rolls back its own hold via `releaseSource`.
10
- */
11
- function acquireSource(url, kind, options) {
12
- let entry = registryByUrl.get(url);
13
- if (!entry) {
14
- entry = {
15
- kind,
16
- referenceCount: 0,
17
- pending: null,
18
- resources: null
19
- };
20
- registryByUrl.set(url, entry);
21
- }
22
- entry.referenceCount += 1;
23
- if (entry.resources !== null) return Promise.resolve();
24
- let pending = entry.pending;
25
- if (!pending) {
26
- const acquired = entry;
27
- pending = runtimeHandlerFor(kind).preload(url, options).then((resources) => {
28
- acquired.pending = null;
29
- if (acquired.referenceCount === 0) {
30
- runtimeHandlerFor(acquired.kind).release?.(resources);
31
- registryByUrl.delete(url);
32
- return;
33
- }
34
- acquired.resources = resources;
35
- }, (cause) => {
36
- acquired.pending = null;
37
- if (acquired.referenceCount === 0) registryByUrl.delete(url);
38
- throw cause;
39
- });
40
- acquired.pending = pending;
41
- }
42
- return pending;
4
+ * Acquire one hold on `url` for a manifest: increments the reference count
5
+ * immediately, then loads via the kind handler unless the URL is already
6
+ * loaded (resolves at once) or in flight (joins the pending load). A failed
7
+ * load clears the in-flight state so the URL stays retryable; the caller
8
+ * rolls back its own hold via `releaseSource`.
9
+ */
10
+ export function acquireSource(url, kind, options) {
11
+ let entry = registryByUrl.get(url);
12
+ if (!entry) {
13
+ entry = { kind, referenceCount: 0, pending: null, resources: null };
14
+ registryByUrl.set(url, entry);
15
+ }
16
+ entry.referenceCount += 1;
17
+ if (entry.resources !== null)
18
+ return Promise.resolve();
19
+ let pending = entry.pending;
20
+ if (!pending) {
21
+ const acquired = entry;
22
+ pending = runtimeHandlerFor(kind)
23
+ .preload(url, options)
24
+ .then((resources) => {
25
+ acquired.pending = null;
26
+ if (acquired.referenceCount === 0) {
27
+ // Every holder released while the fetch was in flight:
28
+ // dispose immediately no leak, no throw.
29
+ runtimeHandlerFor(acquired.kind).release?.(resources);
30
+ registryByUrl.delete(url);
31
+ return;
32
+ }
33
+ acquired.resources = resources;
34
+ }, (cause) => {
35
+ acquired.pending = null;
36
+ if (acquired.referenceCount === 0)
37
+ registryByUrl.delete(url);
38
+ throw cause;
39
+ });
40
+ acquired.pending = pending;
41
+ }
42
+ return pending;
43
43
  }
44
44
  /**
45
- * Drop one hold on `url`. At zero holds the kind handler's release strategy
46
- * runs (object URL revoked) and the entry is cleared — unless the load is
47
- * still in flight, in which case its completion disposes. Releasing an
48
- * unknown URL is a no-op.
49
- */
50
- function releaseSource(url) {
51
- const entry = registryByUrl.get(url);
52
- if (!entry) return;
53
- if (entry.referenceCount > 0) entry.referenceCount -= 1;
54
- if (entry.referenceCount > 0) return;
55
- if (entry.pending) return;
56
- if (entry.resources !== null) runtimeHandlerFor(entry.kind).release?.(entry.resources);
57
- registryByUrl.delete(url);
45
+ * Drop one hold on `url`. At zero holds the kind handler's release strategy
46
+ * runs (object URL revoked) and the entry is cleared — unless the load is
47
+ * still in flight, in which case its completion disposes. Releasing an
48
+ * unknown URL is a no-op.
49
+ */
50
+ export function releaseSource(url) {
51
+ const entry = registryByUrl.get(url);
52
+ if (!entry)
53
+ return;
54
+ if (entry.referenceCount > 0)
55
+ entry.referenceCount -= 1;
56
+ if (entry.referenceCount > 0)
57
+ return;
58
+ if (entry.pending)
59
+ return;
60
+ if (entry.resources !== null)
61
+ runtimeHandlerFor(entry.kind).release?.(entry.resources);
62
+ registryByUrl.delete(url);
58
63
  }
59
64
  /**
60
- * The retained object URL of a source while some manifest holds it, or the
61
- * source itself when not (or no longer) preloaded — after a full release a
62
- * consumer falls back to the network URL and simply streams.
63
- */
64
- function resolveRetainedSource(url) {
65
- return registryByUrl.get(url)?.resources?.objectUrl ?? url;
65
+ * The retained object URL of a source while some manifest holds it, or the
66
+ * source itself when not (or no longer) preloaded — after a full release a
67
+ * consumer falls back to the network URL and simply streams.
68
+ */
69
+ export function resolveRetainedSource(url) {
70
+ return registryByUrl.get(url)?.resources?.objectUrl ?? url;
66
71
  }
67
- //#endregion
68
- export { acquireSource, releaseSource, resolveRetainedSource };
@@ -0,0 +1,8 @@
1
+ import { type ProcessingReport } from './processing/processor.js';
2
+ import { type CodegenReport } from './codegen.js';
3
+ import type { ServerPluginRegistry } from './plugins/contract.js';
4
+ export interface BuildReport {
5
+ processing: ProcessingReport;
6
+ codegen: CodegenReport;
7
+ }
8
+ export declare function runBuild(projectRoot: string, registry?: ServerPluginRegistry): Promise<BuildReport>;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * `fundus build` — headless pipeline run: validate the library, process all
3
+ * stale/missing proxies, prune orphans, regenerate every manifest module.
4
+ * Throws on validation errors (the CLI exits non-zero).
5
+ */
6
+ import { loadConfig } from './config-loader.js';
7
+ import { LibraryStore } from './library-store.js';
8
+ import { processAssets } from './processing/processor.js';
9
+ import { generateManifestModules } from './codegen.js';
10
+ import { serverPluginsByType } from './plugins.js';
11
+ import { formatCheckFinding } from './check.js';
12
+ export async function runBuild(projectRoot, registry = serverPluginsByType) {
13
+ const config = await loadConfig(projectRoot);
14
+ const store = new LibraryStore(config, registry);
15
+ const library = await store.read();
16
+ await store.syncFolders(library);
17
+ const issues = await store.validate(library);
18
+ if (issues.length > 0) {
19
+ const lines = issues.map((issue) => ` - ${formatCheckFinding({ kind: 'validation', assetId: issue.assetId, message: issue.message })}`);
20
+ throw new Error(`Library validation failed:\n${lines.join('\n')}`);
21
+ }
22
+ const processing = await processAssets(config, library, registry);
23
+ const codegen = await generateManifestModules(config, library, processing.proxies, registry);
24
+ return { processing, codegen };
25
+ }
@@ -0,0 +1,24 @@
1
+ import type { ServerPluginRegistry } from './plugins/contract.js';
2
+ /** One machine-readable check finding (the `--json` failure-list shape, M9). */
3
+ export interface CheckFinding {
4
+ /** The failure category. */
5
+ kind: 'validation' | 'proxy-missing' | 'proxy-unresolvable' | 'proxy-orphaned' | 'module-missing' | 'module-out-of-sync' | 'module-stray' | 'module-regeneration-failed' | 'unreachable-asset' | 'raw-hash-drift';
6
+ message: string;
7
+ /** The asset the finding concerns, where applicable. */
8
+ assetId?: string;
9
+ /** The manifest whose generated module the finding concerns, where applicable. */
10
+ manifest?: string;
11
+ /** The concrete file (proxy or generated module), where applicable. */
12
+ fileName?: string;
13
+ }
14
+ /** The human rendering of a finding — `[assetId] message`, as `fundus check` prints it. */
15
+ export declare function formatCheckFinding(finding: CheckFinding): string;
16
+ export interface CheckReport {
17
+ /** Hard failures — always fatal. */
18
+ errors: CheckFinding[];
19
+ /** Advisory findings — fatal unless the caller allows warnings. */
20
+ warnings: CheckFinding[];
21
+ assetCount: number;
22
+ manifestCount: number;
23
+ }
24
+ export declare function runCheck(projectRoot: string, registry?: ServerPluginRegistry): Promise<CheckReport>;
@@ -0,0 +1,199 @@
1
+ /**
2
+ * `fundus check` — the verify-only CI gate: no writes, ever. It
3
+ * fails when the library does not validate, when a committed proxy is stale,
4
+ * missing, or orphaned, or when a generated manifest module differs from an
5
+ * in-memory regeneration. Warnings (unreachable asset, raw-hash drift) are
6
+ * treated as errors unless `--allow-warnings` downgrades them — errors are
7
+ * never downgradable.
8
+ */
9
+ import { existsSync } from 'node:fs';
10
+ import { readFile } from 'node:fs/promises';
11
+ import { join } from 'node:path';
12
+ import { collectAllReferences, compareCodeUnits, computeLibraryMembership, rawFileNameOfPath } from '../core/index.js';
13
+ import { loadConfig } from './config-loader.js';
14
+ import { LibraryStore, sha256Hex } from './library-store.js';
15
+ import { buildManifestEntries, manifestModuleFileName, renderManifestModule, strayGeneratedModuleNames } from './codegen.js';
16
+ import { descriptorsByType, serverPluginsByType } from './plugins.js';
17
+ import { deliveredAssetIds, expectedProxyRelativePath, isProxyFileName, readCurrentProxy } from './processing/processor.js';
18
+ import { listRelativeFiles } from './folder-filesystem.js';
19
+ /** The human rendering of a finding — `[assetId] message`, as `fundus check` prints it. */
20
+ export function formatCheckFinding(finding) {
21
+ return `${finding.assetId ? `[${finding.assetId}] ` : ''}${finding.message}`;
22
+ }
23
+ export async function runCheck(projectRoot, registry = serverPluginsByType) {
24
+ const config = await loadConfig(projectRoot);
25
+ const store = new LibraryStore(config, registry);
26
+ const library = await store.read();
27
+ const report = {
28
+ errors: [],
29
+ warnings: [],
30
+ assetCount: Object.keys(library.assets).length,
31
+ manifestCount: Object.keys(library.manifests).length
32
+ };
33
+ // 1. Library validation (structure, parameters, raw pointers, references).
34
+ const issues = await store.validate(library);
35
+ for (const issue of issues) {
36
+ report.errors.push({
37
+ kind: 'validation',
38
+ message: issue.message,
39
+ ...(issue.assetId !== undefined ? { assetId: issue.assetId } : {})
40
+ });
41
+ }
42
+ // 2. Proxies: every delivered asset's expected proxy exists (staleness is a
43
+ // name check), and the proxy directory holds no orphans.
44
+ const delivered = deliveredAssetIds(library, registry);
45
+ const expectedProxyPaths = new Set();
46
+ const proxies = {};
47
+ let proxiesComplete = true;
48
+ for (const assetId of [...delivered].sort(compareCodeUnits)) {
49
+ const record = library.assets[assetId];
50
+ let proxy;
51
+ try {
52
+ proxy = await readCurrentProxy(assetId, record, config, registry);
53
+ }
54
+ catch (cause) {
55
+ if (!issues.some((issue) => issue.assetId === assetId)) {
56
+ report.errors.push({
57
+ kind: 'proxy-unresolvable',
58
+ message: cause instanceof Error ? cause.message : String(cause),
59
+ assetId
60
+ });
61
+ }
62
+ proxiesComplete = false;
63
+ continue;
64
+ }
65
+ if (!proxy) {
66
+ const relativePath = expectedProxyRelativePath(assetId, record, config, registry);
67
+ expectedProxyPaths.add(relativePath);
68
+ report.errors.push({
69
+ kind: 'proxy-missing',
70
+ message: `Proxy "${relativePath}" is missing or stale — run \`fundus build\` and commit the result.`,
71
+ assetId,
72
+ fileName: relativePath
73
+ });
74
+ proxiesComplete = false;
75
+ continue;
76
+ }
77
+ expectedProxyPaths.add(proxy.relativePath);
78
+ proxies[assetId] = proxy;
79
+ }
80
+ if (existsSync(config.proxyDir)) {
81
+ for (const relativePath of (await listRelativeFiles(config.proxyDir)).sort()) {
82
+ if (!isProxyFileName(rawFileNameOfPath(relativePath)) ||
83
+ expectedProxyPaths.has(relativePath)) {
84
+ continue;
85
+ }
86
+ report.errors.push({
87
+ kind: 'proxy-orphaned',
88
+ message: `Orphaned proxy "${relativePath}" — no asset expects it; run \`fundus build\` and commit the result.`,
89
+ fileName: relativePath
90
+ });
91
+ }
92
+ }
93
+ // 3. Generated manifest modules must be byte-identical to an in-memory
94
+ // regeneration. Only meaningful when validation passed and every proxy
95
+ // exists — otherwise regeneration is impossible and already reported.
96
+ if (issues.length === 0 && proxiesComplete) {
97
+ await checkGeneratedModules(report, library, config, proxies, registry);
98
+ await checkStrayModules(report, library, config);
99
+ }
100
+ // 4. Warnings: unreachable assets, raw-hash drift.
101
+ collectUnreachableAssets(report, library, delivered);
102
+ await collectRawHashDrift(report, library, config);
103
+ return report;
104
+ }
105
+ async function checkGeneratedModules(report, library, config, proxies, registry) {
106
+ const referencesByAsset = collectAllReferences(library, descriptorsByType(registry));
107
+ const membershipByManifest = computeLibraryMembership(library, referencesByAsset);
108
+ for (const manifestName of Object.keys(library.manifests).sort(compareCodeUnits)) {
109
+ const fileName = manifestModuleFileName(manifestName);
110
+ const modulePath = join(config.manifestsDir, fileName);
111
+ let expectedContent;
112
+ try {
113
+ expectedContent = renderManifestModule(manifestName, buildManifestEntries({
114
+ membership: membershipByManifest[manifestName],
115
+ library,
116
+ proxies,
117
+ config,
118
+ referencesByAsset,
119
+ registry
120
+ }));
121
+ }
122
+ catch (cause) {
123
+ report.errors.push({
124
+ kind: 'module-regeneration-failed',
125
+ message: `Cannot regenerate module "${fileName}": ${cause instanceof Error ? cause.message : String(cause)}`,
126
+ manifest: manifestName,
127
+ fileName
128
+ });
129
+ continue;
130
+ }
131
+ if (!existsSync(modulePath)) {
132
+ report.errors.push({
133
+ kind: 'module-missing',
134
+ message: `Generated module "${fileName}" is missing — run \`fundus build\` and commit the result.`,
135
+ manifest: manifestName,
136
+ fileName
137
+ });
138
+ continue;
139
+ }
140
+ const currentContent = await readFile(modulePath, 'utf8');
141
+ if (currentContent !== expectedContent) {
142
+ report.errors.push({
143
+ kind: 'module-out-of-sync',
144
+ message: `Generated module "${fileName}" is out of sync with the library — run \`fundus build\` and commit the result.`,
145
+ manifest: manifestName,
146
+ fileName
147
+ });
148
+ }
149
+ }
150
+ }
151
+ async function checkStrayModules(report, library, config) {
152
+ const expectedFileNames = new Set(Object.keys(library.manifests).map((manifestName) => manifestModuleFileName(manifestName)));
153
+ for (const fileName of await strayGeneratedModuleNames(config.manifestsDir, expectedFileNames)) {
154
+ report.errors.push({
155
+ kind: 'module-stray',
156
+ message: `Stray generated module "${fileName}" — its manifest no longer exists; run \`fundus build\`.`,
157
+ fileName
158
+ });
159
+ }
160
+ }
161
+ /**
162
+ * The unreachable-asset warning: fires only when nothing delivers the asset —
163
+ * no explicit membership AND no passive membership in any manifest. An asset
164
+ * that is only passively delivered (referenced by a delivered asset) is fine.
165
+ */
166
+ function collectUnreachableAssets(report, library, delivered) {
167
+ for (const [assetId, record] of Object.entries(library.assets)) {
168
+ if (record.manifests.length === 0 && !delivered.has(assetId)) {
169
+ report.warnings.push({
170
+ kind: 'unreachable-asset',
171
+ message: 'In no manifest and not referenced by any delivered asset — ' +
172
+ 'nothing is processed or generated for it.',
173
+ assetId
174
+ });
175
+ }
176
+ }
177
+ }
178
+ /**
179
+ * Raw-hash drift: a raw file replaced on disk while the library still pins the
180
+ * old content hash. The proxy name derives from the *recorded* hash, so the
181
+ * name check alone would keep passing while the delivered pixels are outdated.
182
+ */
183
+ async function collectRawHashDrift(report, library, config) {
184
+ for (const [assetId, record] of Object.entries(library.assets)) {
185
+ const rawPath = join(config.rawDir, record.raw);
186
+ if (!existsSync(rawPath))
187
+ continue; // A missing raw file is a validation error already.
188
+ const currentHash = sha256Hex(new Uint8Array(await readFile(rawPath)));
189
+ if (currentHash !== record.rawHash) {
190
+ report.warnings.push({
191
+ kind: 'raw-hash-drift',
192
+ message: `Raw file "${record.raw}" changed since it was ingested (hash drift) — ` +
193
+ `re-ingest or update it through the editor, then run \`fundus build\`.`,
194
+ assetId,
195
+ fileName: record.raw
196
+ });
197
+ }
198
+ }
199
+ }
@@ -0,0 +1,25 @@
1
+ export declare const STATE_HELP = "fundus state \u2014 the full project state in one document\n\nUsage: fundus state [--json]\n\nThe agent's one-stop overview: every asset (type, raw file, parameters,\nexplicit + passive manifest memberships, proxy status, reference edges,\nwarnings), every manifest (members, delivered bytes), library-level\nvalidation issues, and the available preset names per asset type.\n\nFlags:\n --json print {\"ok\": true, \"state\": <FundusStateDto>} on stdout\n --help this help\n\nRead-only: nothing is processed or written.\n\nExample:\n fundus state --json | jq '.state.assets[].id'\n";
2
+ export declare function runStateCommand(argumentList: string[]): Promise<void>;
3
+ export declare const ASSET_HELP = "fundus asset \u2014 inspect and mutate assets\n\nUsage: fundus asset <subcommand> \u2026\n\nEvery mutation runs the full editor autosave chain: write library \u2192\nprocess affected assets \u2192 regenerate manifest modules. There is no\nseparate apply/sync step. All subcommands accept --json (a single JSON\ndocument on stdout) and --help.\n\nSubcommands:\n list list assets (--manifest, --type, --warnings-only)\n show one asset in detail\n ingest copy a file into the raw dir as a typed asset\n set merge parameters and/or replace manifest membership\n rename rename an asset id\n move move an asset to a folder or root\n delete delete an asset (record, raw file, proxies)\n\nRun `fundus asset <subcommand> --help` for the focused page (flags,\nsemantics, an example) \u2014 e.g. `fundus asset set --help` documents the\n--parameters merge rules.\n";
4
+ export declare const ASSET_LIST_HELP: string;
5
+ export declare const ASSET_SHOW_HELP = "fundus asset show \u2014 one asset in detail\n\nUsage: fundus asset show <id> [--json]\n\nPrints the asset's raw file, content hash, parameters, explicit +\npassive manifest memberships, proxy status, reference edges (outgoing\nand incoming), and warnings.\n\nFlags:\n --json print {\"ok\": true, \"asset\": <AssetStateDto>}\n --help this help\n\nRead-only: nothing is processed or written.\n\nExample:\n fundus asset show navigationPanel --json\n";
6
+ export declare const ASSET_INGEST_HELP: string;
7
+ export declare const ASSET_SET_HELP = "fundus asset set \u2014 update an asset's parameters and/or memberships\n\nUsage: fundus asset set <id> [--parameters <json>] [--manifests <a,b>] [--json]\n\nAt least one of --parameters/--manifests is required. Runs the full\nautosave chain (write library \u2192 process \u2192 regenerate manifest modules).\n\nFlags:\n --parameters <json> SHALLOW MERGE at the top level onto the current\n parameters, then plugin validation:\n {\"preset\": \"webp-hq\"} sets one field,\n keeps the others\n {\"chromaKey\": {\u2026}} replaces the whole\n chromaKey object\n {\"mask\": null} clears an optional\n field\n {\"mask\": {\"$asset\": \"someImage\"}}\n sets an asset\n reference\n --manifests <a,b> REPLACES the explicit membership set (declarative,\n idempotent); --manifests \"\" clears it\n --json print {\"ok\": true, \"asset\": <AssetStateDto>, \"issues\": [\u2026]}\n --help this help\n\nThe mutation is validated first and rejected (exit 1, nothing written)\nif it would leave the library invalid \u2014 e.g. a reference to a missing\nasset, a reference cycle, or an unknown manifest name. Ingest reference\ntargets before pointing at them.\n\nExample:\n fundus asset set characterIdle \\\n --parameters '{\"mask\": {\"$asset\": \"characterIdleMask\"}}' --json\n";
8
+ export declare const ASSET_RENAME_HELP = "fundus asset rename \u2014 rename an asset id\n\nUsage: fundus asset rename <id> <newId> [--json]\n\nRenames the asset's id (the raw file keeps its name \u2014 ids are the\nstable key) and re-hashes its proxy under the new id via the autosave\nchain. Fails if another asset references <id> \u2014 update the referrers\nfirst \u2014 or if <newId> is taken or invalid.\n\nFlags:\n --json print {\"ok\": true, \"asset\": <AssetStateDto>, \"issues\": [\u2026]}\n --help this help\n\nExample:\n fundus asset rename sidebarPanel navigationPanel --json\n";
9
+ export declare const ASSET_DELETE_HELP = "fundus asset delete \u2014 delete an asset\n\nUsage: fundus asset delete <id> [--json]\n\nDeletes the library record, its raw file, and its proxies, then\nregenerates the affected manifest modules. Fails if another asset\nreferences it \u2014 remove the references first.\n\nFlags:\n --json print {\"ok\": true, \"deletedAssetId\": \"<id>\", \"issues\": [\u2026]}\n --help this help\n\nExample:\n fundus asset delete obsoleteBanner --json\n";
10
+ export declare const ASSET_MOVE_HELP = "fundus asset move \u2014 move an asset between folders\n\nUsage: fundus asset move <id> <folder|root> [--json]\n\nMoves the raw file and its current proxy without changing the stable asset id,\nthen runs the autosave chain. The destination folder must already exist; use\nthe literal \"root\" for the implicit root.\n\nFlags:\n --json print {\"ok\": true, \"asset\": <AssetStateDto>, \"issues\": [\u2026]}\n --help this help\n\nExample:\n fundus asset move navigationPanel \"UI/Buttons\" --json\n";
11
+ export declare function runAssetCommand(argumentList: string[]): Promise<void>;
12
+ export declare const FOLDER_HELP = "fundus folder \u2014 manage the mirrored raw/proxy folder tree\n\nUsage: fundus folder <subcommand> \u2026\n\nSubcommands:\n list list registered folders and their direct assets\n create create a persisted folder (fundus folder create <path>)\n rename rename one folder segment and its subtree\n move move a complete folder subtree below another folder\n delete recursively delete a folder subtree and its assets\n\nAll mutations update rawDir and proxyDir together, maintain .gitkeep files,\nand run the full autosave chain. All subcommands accept --json and --help.\n";
13
+ export declare function runFolderCommand(argumentList: string[]): Promise<void>;
14
+ export declare const MANIFEST_HELP = "fundus manifest \u2014 manage manifests (delivery units & preload groups)\n\nUsage: fundus manifest <subcommand> \u2026\n\nA manifest is a delivery unit and a preload group: only assets in at\nleast one manifest (explicitly, or passively via the reference closure)\nare processed into proxies and reachable from host code. Assets join and\nleave manifests via `fundus asset set <id> --manifests <a,b>`. All\nsubcommands accept --json and --help.\n\nSubcommands:\n list list manifests with members and delivered bytes\n create create an empty manifest (fundus manifest create <name>)\n set set a manifest's editor color / emoji appearance\n palette list the selectable appearance colors and emojis\n rename rename a manifest (fundus manifest rename <name> <newName>)\n delete delete a manifest and strip its memberships\n\nRun `fundus manifest <subcommand> --help` for the focused page.\n";
15
+ export declare const MANIFEST_LIST_HELP = "fundus manifest list \u2014 list manifests\n\nUsage: fundus manifest list [--json]\n\nOne line per manifest: name, delivered bytes (the preload-budget\nnumber, over the full delivery set), explicit members, and passive\nmembers (assets pulled in via the reference closure, with via-\nattribution in the JSON output).\n\nFlags:\n --json print {\"ok\": true, \"manifests\": [{\"name\", \"color\", \"emoji\",\n \"explicitMemberIds\", \"passiveMembers\", \"deliveredBytes\"}, \u2026]}\n --help this help\n\nRead-only: nothing is processed or written.\n\nExample:\n fundus manifest list --json\n";
16
+ export declare const MANIFEST_CREATE_HELP = "fundus manifest create \u2014 create an empty manifest\n\nUsage: fundus manifest create <name> [--json]\n\n<name> must be a camelCase identifier; its kebab-case form names the\ngenerated module (mainCatalog \u2192 main-catalog.generated.ts). Mutations run\nthe autosave chain, so the module is generated immediately.\n\nFlags:\n --json print {\"ok\": true, \"manifest\": {\u2026}, \"issues\": [\u2026]}\n --help this help\n\nExample:\n fundus manifest create mainCatalog --json\n";
17
+ export declare const MANIFEST_RENAME_HELP = "fundus manifest rename \u2014 rename a manifest\n\nUsage: fundus manifest rename <name> <newName> [--json]\n\n<newName> must be a camelCase identifier whose kebab-case form is\ndistinct from every other manifest's. The rename keeps the manifest's\nappearance, rewrites every asset's membership, and replaces the\ngenerated module (the old file is removed, the new one written). Host\ncode importing the module must be updated by hand \u2014 both the module\nfile name and the exported const change with the manifest name\n(mainCatalog \u2192 main-catalog.generated.ts / `mainCatalog`).\n\nFlags:\n --json print {\"ok\": true, \"manifest\": {\u2026}, \"issues\": [\u2026]}\n --help this help\n\nExample:\n fundus manifest rename mainCatalog primaryCatalog --json\n";
18
+ export declare const MANIFEST_DELETE_HELP = "fundus manifest delete \u2014 delete a manifest\n\nUsage: fundus manifest delete <name> [--json]\n\nDeletes the manifest, strips it from every asset's membership, and\nremoves its generated module. Assets left in no manifest stop being\ndelivered (they warn as unreachable).\n\nFlags:\n --json print {\"ok\": true, \"deletedManifestName\": \"<name>\", \"issues\": [\u2026]}\n --help this help\n\nExample:\n fundus manifest delete obsoleteShelf --json\n";
19
+ export declare const MANIFEST_SET_HELP: string;
20
+ export declare const MANIFEST_PALETTE_HELP = "fundus manifest palette \u2014 list the selectable appearance colors and emojis\n\nUsage: fundus manifest palette [--json]\n\nThe closed sets `fundus manifest set` validates against. Read this first\nto discover valid --color / --emoji values programmatically instead of\nguessing.\n\nFlags:\n --json print {\"ok\": true, \"colors\": [{\"name\", \"value\"}, \u2026], \"emojis\": [\u2026]}\n --help this help\n\nRead-only: nothing is processed or written.\n\nExample:\n fundus manifest palette --json | jq '.emojis'\n";
21
+ export declare function runManifestCommand(argumentList: string[]): Promise<void>;
22
+ export declare const BUILD_HELP = "fundus build \u2014 run the headless pipeline\n\nUsage: fundus build [--json]\n\nValidates the library, processes every stale or missing proxy, prunes\norphaned proxies, and regenerates all manifest modules. Deterministic\nand idempotent: a second run on an unchanged project processes nothing\nand rewrites byte-identical modules. Run it in CI, postinstall, or\nbefore the host build; commit the result.\n\nFlags:\n --json print {\"ok\": true, \"processed\": [\u2026], \"upToDate\": [\u2026],\n \"prunedProxies\": [\u2026], \"modulesWritten\": [\u2026],\n \"modulesRemoved\": [\u2026]} \u2014 asset ids for processing,\n file names for pruning/codegen\n --help this help\n\nA validation failure processes nothing and exits 1 (with --json:\n{\"error\": {\"message\": \u2026}}).\n\nExample:\n fundus build --json | jq '.processed'\n";
23
+ export declare function runBuildCommand(argumentList: string[]): Promise<void>;
24
+ export declare const CHECK_HELP = "fundus check \u2014 verify the committed state (the CI gate)\n\nUsage: fundus check [--allow-warnings] [--json]\n\nVerify-only, no writes: the library must validate, every delivered\nasset's committed proxy must exist under its expected name (staleness\nis a name check), the proxy directory must hold no orphans, and every\ngenerated manifest module must be byte-identical to an in-memory\nregeneration. Warnings (unreachable asset, raw-hash drift) fail the\ncheck too unless --allow-warnings downgrades them; errors never\ndowngrade.\n\nFlags:\n --allow-warnings exit 0 despite warnings (errors still fail)\n --json print one report document:\n {\"ok\": <pass/fail>, \"assetCount\": \u2026, \"manifestCount\": \u2026,\n \"errors\": [<finding>, \u2026], \"warnings\": [<finding>, \u2026]}\n where a finding is {\"kind\", \"message\"} plus\n \"assetId\" / \"manifest\" / \"fileName\" where applicable\n --help this help\n\nExit codes: 0 = clean (or warnings allowed), 1 = failed. A failure to\neven run the check (e.g. no fundus.config.ts) exits 1 with the usual\n{\"error\": {\"message\": \u2026}} envelope under --json.\n\nExample:\n fundus check --json | jq '.errors[].kind'\n";
25
+ export declare function runCheckCommand(argumentList: string[]): Promise<void>;