fundus 0.15.0 → 0.17.0

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 (231) hide show
  1. package/README.md +158 -1
  2. package/build/client/_app/immutable/assets/2.X44Wyac-.css +1 -0
  3. package/build/client/_app/immutable/assets/2.X44Wyac-.css.br +0 -0
  4. package/build/client/_app/immutable/assets/2.X44Wyac-.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/{3.C6xo25uI.css → 3.66PJT3JC.css} +1 -1
  6. package/build/client/_app/immutable/assets/3.66PJT3JC.css.br +0 -0
  7. package/build/client/_app/immutable/assets/3.66PJT3JC.css.gz +0 -0
  8. package/build/client/_app/immutable/assets/{AssetSourceMenu.IjDdjx3o.css → AssetSourceMenu.Buj2UxUg.css} +1 -1
  9. package/build/client/_app/immutable/assets/AssetSourceMenu.Buj2UxUg.css.br +0 -0
  10. package/build/client/_app/immutable/assets/AssetSourceMenu.Buj2UxUg.css.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{VX-Uq_b9.js → 5fq8ySvR.js} +1 -1
  12. package/build/client/_app/immutable/chunks/5fq8ySvR.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/5fq8ySvR.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/BcVZHIBD.js +1 -0
  15. package/build/client/_app/immutable/chunks/BcVZHIBD.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BcVZHIBD.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/DXiUbZ9S.js +2 -0
  18. package/build/client/_app/immutable/chunks/DXiUbZ9S.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/DXiUbZ9S.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/H5KnxQLQ.js +108 -0
  21. package/build/client/_app/immutable/chunks/H5KnxQLQ.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/H5KnxQLQ.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/{-8MKoIIe.js → jEVVu5G9.js} +1 -1
  24. package/build/client/_app/immutable/chunks/jEVVu5G9.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/jEVVu5G9.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/{app.CJpgt8H5.js → app.Z9n2k33I.js} +2 -2
  27. package/build/client/_app/immutable/entry/app.Z9n2k33I.js.br +0 -0
  28. package/build/client/_app/immutable/entry/app.Z9n2k33I.js.gz +0 -0
  29. package/build/client/_app/immutable/entry/start.DGo1uhI2.js +1 -0
  30. package/build/client/_app/immutable/entry/start.DGo1uhI2.js.br +0 -0
  31. package/build/client/_app/immutable/entry/start.DGo1uhI2.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/0.DiZpkhxP.js +1 -0
  33. package/build/client/_app/immutable/nodes/0.DiZpkhxP.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/0.DiZpkhxP.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{1.D6OhgXcC.js → 1.rgoSlmPu.js} +1 -1
  36. package/build/client/_app/immutable/nodes/1.rgoSlmPu.js.br +2 -0
  37. package/build/client/_app/immutable/nodes/1.rgoSlmPu.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/2.Dzp3a3be.js +3 -0
  39. package/build/client/_app/immutable/nodes/2.Dzp3a3be.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/2.Dzp3a3be.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/3.mSsa2TDI.js +1 -0
  42. package/build/client/_app/immutable/nodes/3.mSsa2TDI.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/3.mSsa2TDI.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/4.4oRGPYr4.js +2 -0
  45. package/build/client/_app/immutable/nodes/4.4oRGPYr4.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/4.4oRGPYr4.js.gz +0 -0
  47. package/build/client/_app/version.json +1 -1
  48. package/build/client/_app/version.json.br +0 -0
  49. package/build/client/_app/version.json.gz +0 -0
  50. package/build/handler.js +8 -7
  51. package/build/handler.js.map +1 -1
  52. package/build/index.js +8 -7
  53. package/build/index.js.map +1 -1
  54. package/build/server/chunks/chunks/{context.js-CVuTSPjH.js → context.js-Dh0ibRIF.js} +818 -136
  55. package/build/server/chunks/chunks/context.js-Dh0ibRIF.js.map +1 -0
  56. package/build/server/chunks/chunks/{contract.js-itFN0Gon.js → contract.js-_LTMZBo2.js} +156 -58
  57. package/build/server/chunks/chunks/contract.js-_LTMZBo2.js.map +1 -0
  58. package/build/server/chunks/chunks/{core.js-CABVXpby.js → core.js-CTyKR4bu.js} +145 -156
  59. package/build/server/chunks/chunks/core.js-CTyKR4bu.js.map +1 -0
  60. package/build/server/chunks/chunks/{exports.js-VRV1_yEb.js → exports.js-gz2aNXzz.js} +2 -2
  61. package/build/server/chunks/chunks/{exports.js-VRV1_yEb.js.map → exports.js-gz2aNXzz.js.map} +1 -1
  62. package/build/server/chunks/chunks/{http.js-ChQRRKfZ.js → http.js-BiqUcAuu.js} +3 -2
  63. package/build/server/chunks/chunks/http.js-BiqUcAuu.js.map +1 -0
  64. package/build/server/chunks/chunks/{internal.js-qXxDe7VN.js → internal.js-DoH0cN5N.js} +5 -3
  65. package/build/server/chunks/chunks/internal.js-DoH0cN5N.js.map +1 -0
  66. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  67. package/build/server/chunks/chunks/{manifest-membership.js-BnSECWpJ.js → manifest-membership.js-at1ixQdW.js} +10 -3
  68. package/build/server/chunks/chunks/manifest-membership.js-at1ixQdW.js.map +1 -0
  69. package/build/server/chunks/chunks/{raw-reconciliation.js-ZEOCk_jA.js → raw-reconciliation.js-CUH8IIJx.js} +3 -3
  70. package/build/server/chunks/chunks/raw-reconciliation.js-CUH8IIJx.js.map +1 -0
  71. package/build/server/chunks/chunks/{raw-reconciliation2.js-CscuoBC2.js → raw-reconciliation2.js-z4xl5zw2.js} +2 -2
  72. package/build/server/chunks/chunks/{raw-reconciliation2.js-CscuoBC2.js.map → raw-reconciliation2.js-z4xl5zw2.js.map} +1 -1
  73. package/build/server/chunks/chunks/{shared.js-DnEOHbgT.js → shared.js-CI-ZkPQn.js} +2 -2
  74. package/build/server/chunks/chunks/{shared.js-DnEOHbgT.js.map → shared.js-CI-ZkPQn.js.map} +1 -1
  75. package/build/server/chunks/chunks/{utils.js-lNH0hKSx.js → utils.js-gXYLxRG9.js} +3 -3
  76. package/build/server/chunks/chunks/{utils.js-lNH0hKSx.js.map → utils.js-gXYLxRG9.js.map} +1 -1
  77. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-z988EDp2.js → _server.ts.js-CdDjuW0r.js} +6 -6
  78. package/build/server/chunks/entries/endpoints/api/_...path_/{_server.ts.js-z988EDp2.js.map → _server.ts.js-CdDjuW0r.js.map} +1 -1
  79. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-C68ru6gS.js → _server.ts.js-OWM1eORG.js} +9 -7
  80. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-C68ru6gS.js.map → _server.ts.js-OWM1eORG.js.map} +1 -1
  81. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-C0tk6RFk.js → _server.ts.js-DoG-7ZpZ.js} +9 -7
  82. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-C0tk6RFk.js.map → _server.ts.js-DoG-7ZpZ.js.map} +1 -1
  83. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-I03oZuo8.js → _server.ts.js-CAWjVeGd.js} +9 -7
  84. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-I03oZuo8.js.map → _server.ts.js-CAWjVeGd.js.map} +1 -1
  85. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/_server.ts.js-CqS4aALY.js +38 -0
  86. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/_server.ts.js-CqS4aALY.js.map +1 -0
  87. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-BsQB8YDq.js → _server.ts.js-Bo_EsYXJ.js} +9 -7
  88. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-BsQB8YDq.js.map → _server.ts.js-Bo_EsYXJ.js.map} +1 -1
  89. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CJuFE6Fb.js → _server.ts.js-DW4w0XAr.js} +9 -7
  90. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CJuFE6Fb.js.map → _server.ts.js-DW4w0XAr.js.map} +1 -1
  91. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DuOZRRiA.js → _server.ts.js-_MiNPnSy.js} +9 -7
  92. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-DuOZRRiA.js.map → _server.ts.js-_MiNPnSy.js.map} +1 -1
  93. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DGzYpQbv.js → _server.ts.js-DwbrQnBc.js} +9 -7
  94. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-DGzYpQbv.js.map → _server.ts.js-DwbrQnBc.js.map} +1 -1
  95. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-B045QoCA.js → _server.ts.js-CEnHQf3b.js} +9 -7
  96. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-B045QoCA.js.map → _server.ts.js-CEnHQf3b.js.map} +1 -1
  97. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-HUkVdz19.js → _server.ts.js-BZDuJZtF.js} +9 -7
  98. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-HUkVdz19.js.map → _server.ts.js-BZDuJZtF.js.map} +1 -1
  99. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-ry509mom.js → _server.ts.js-DRgdpKKd.js} +9 -7
  100. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-ry509mom.js.map → _server.ts.js-DRgdpKKd.js.map} +1 -1
  101. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DU0J7U25.js → _server.ts.js-CP5QyIhz.js} +9 -7
  102. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-DU0J7U25.js.map → _server.ts.js-CP5QyIhz.js.map} +1 -1
  103. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-AZIV2PIn.js → _server.ts.js-BKEvt065.js} +9 -7
  104. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-AZIV2PIn.js.map → _server.ts.js-BKEvt065.js.map} +1 -1
  105. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-CDL0hCfM.js → _server.ts.js-C_zihkDS.js} +9 -7
  106. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-CDL0hCfM.js.map → _server.ts.js-C_zihkDS.js.map} +1 -1
  107. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-B13c17fq.js → _server.ts.js-watkBmy6.js} +9 -7
  108. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js-B13c17fq.js.map → _server.ts.js-watkBmy6.js.map} +1 -1
  109. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-BCxjyAGC.js → _server.ts.js-YtumLIou.js} +9 -7
  110. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-BCxjyAGC.js.map → _server.ts.js-YtumLIou.js.map} +1 -1
  111. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BveeMZc2.js → _server.ts.js-Dkouuu-M.js} +9 -7
  112. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-BveeMZc2.js.map → _server.ts.js-Dkouuu-M.js.map} +1 -1
  113. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BZjTd9a0.js → _server.ts.js-DwsEQeuf.js} +9 -7
  114. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-BZjTd9a0.js.map → _server.ts.js-DwsEQeuf.js.map} +1 -1
  115. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-BbTfPvC9.js → _server.ts.js-CdQxfhV3.js} +9 -7
  116. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-BbTfPvC9.js.map → _server.ts.js-CdQxfhV3.js.map} +1 -1
  117. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-8VPJMLBk.js → _server.ts.js-DDdMocWj.js} +6 -6
  118. package/build/server/chunks/entries/endpoints/files/_...path_/{_server.ts.js-8VPJMLBk.js.map → _server.ts.js-DDdMocWj.js.map} +1 -1
  119. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BqR2J2sB.js → _server.ts.js-DbzjbH32.js} +9 -7
  120. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-BqR2J2sB.js.map → _server.ts.js-DbzjbH32.js.map} +1 -1
  121. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-DbA28dCY.js → _server.ts.js-K_JbXZsU.js} +9 -7
  122. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-DbA28dCY.js.map → _server.ts.js-K_JbXZsU.js.map} +1 -1
  123. package/build/server/chunks/entries/{hooks.server.js-9PBc_3Jh.js → hooks.server.js-DgZAVFbQ.js} +8 -6
  124. package/build/server/chunks/entries/{hooks.server.js-9PBc_3Jh.js.map → hooks.server.js-DgZAVFbQ.js.map} +1 -1
  125. package/build/server/chunks/{handler-BHt7eOOX.js → handler-CFkKak8t.js} +5 -5
  126. package/build/server/chunks/{handler-BHt7eOOX.js.map → handler-CFkKak8t.js.map} +1 -1
  127. package/build/server/chunks/{index.js-DcVaL-Ja.js → index.js-B1IroJH5.js} +5 -5
  128. package/build/server/chunks/{index.js-DcVaL-Ja.js.map → index.js-B1IroJH5.js.map} +1 -1
  129. package/build/server/chunks/{manifest.js-DgjSU4wg.js → manifest.js-DNDBsrEU.js} +36 -29
  130. package/build/server/chunks/manifest.js-DNDBsrEU.js.map +1 -0
  131. package/build/server/chunks/nodes/{0.js-BgTB-_Zt.js → 0.js-CZ3mZUZl.js} +2 -2
  132. package/build/server/chunks/nodes/{0.js-BgTB-_Zt.js.map → 0.js-CZ3mZUZl.js.map} +1 -1
  133. package/build/server/chunks/nodes/1.js-BmDzLKxV.js +7 -0
  134. package/build/server/chunks/nodes/{1.js-DNabcIPP.js.map → 1.js-BmDzLKxV.js.map} +1 -1
  135. package/build/server/chunks/nodes/2.js-Dirm-bY-.js +7 -0
  136. package/build/server/chunks/nodes/2.js-Dirm-bY-.js.map +1 -0
  137. package/build/server/chunks/nodes/3.js-DOqHmSWt.js +7 -0
  138. package/build/server/chunks/nodes/3.js-DOqHmSWt.js.map +1 -0
  139. package/build/server/chunks/nodes/4.js-C8pmF8IP.js +7 -0
  140. package/build/server/chunks/nodes/{4.js-BE7ZG9vA.js.map → 4.js-C8pmF8IP.js.map} +1 -1
  141. package/dist/config.d.ts +3 -3
  142. package/dist/config.js +2 -2
  143. package/dist/core/api-types.d.ts +24 -3
  144. package/dist/core/config.d.ts +84 -0
  145. package/dist/core/config.js +9 -0
  146. package/dist/core/index.d.ts +10 -5
  147. package/dist/core/index.js +5 -2
  148. package/dist/core/ingest.d.ts +1 -6
  149. package/dist/core/ingest.js +4 -21
  150. package/dist/core/library-validation.d.ts +13 -0
  151. package/dist/core/library-validation.js +48 -0
  152. package/dist/core/library.d.ts +19 -0
  153. package/dist/core/library.js +4 -4
  154. package/dist/core/manifest-membership.d.ts +2 -2
  155. package/dist/core/package-declaration.d.ts +43 -0
  156. package/dist/core/package-declaration.js +80 -0
  157. package/dist/core/package-merge.d.ts +65 -0
  158. package/dist/core/package-merge.js +173 -0
  159. package/dist/core/propose-asset-id.d.ts +10 -0
  160. package/dist/core/propose-asset-id.js +25 -0
  161. package/dist/core/reference-graph.d.ts +3 -3
  162. package/dist/server/build.js +26 -11
  163. package/dist/server/check.d.ts +13 -3
  164. package/dist/server/check.js +112 -24
  165. package/dist/server/cli-commands.d.ts +2 -2
  166. package/dist/server/cli-commands.js +213 -29
  167. package/dist/server/codegen.d.ts +3 -1
  168. package/dist/server/codegen.js +18 -0
  169. package/dist/server/config-loader.d.ts +36 -1
  170. package/dist/server/config-loader.js +190 -4
  171. package/dist/server/http.js +1 -0
  172. package/dist/server/importers/figma.d.ts +26 -3
  173. package/dist/server/importers/figma.js +114 -1
  174. package/dist/server/library-store.d.ts +20 -1
  175. package/dist/server/library-store.js +121 -60
  176. package/dist/server/operations.d.ts +12 -0
  177. package/dist/server/operations.js +283 -48
  178. package/package.json +1 -1
  179. package/build/client/_app/immutable/assets/2.C-1MfvLQ.css +0 -1
  180. package/build/client/_app/immutable/assets/2.C-1MfvLQ.css.br +0 -0
  181. package/build/client/_app/immutable/assets/2.C-1MfvLQ.css.gz +0 -0
  182. package/build/client/_app/immutable/assets/3.C6xo25uI.css.br +0 -0
  183. package/build/client/_app/immutable/assets/3.C6xo25uI.css.gz +0 -0
  184. package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css.br +0 -0
  185. package/build/client/_app/immutable/assets/AssetSourceMenu.IjDdjx3o.css.gz +0 -0
  186. package/build/client/_app/immutable/chunks/-8MKoIIe.js.br +0 -0
  187. package/build/client/_app/immutable/chunks/-8MKoIIe.js.gz +0 -0
  188. package/build/client/_app/immutable/chunks/D1wFzWdi.js +0 -108
  189. package/build/client/_app/immutable/chunks/D1wFzWdi.js.br +0 -0
  190. package/build/client/_app/immutable/chunks/D1wFzWdi.js.gz +0 -0
  191. package/build/client/_app/immutable/chunks/DmQb0SN8.js +0 -2
  192. package/build/client/_app/immutable/chunks/DmQb0SN8.js.br +0 -0
  193. package/build/client/_app/immutable/chunks/DmQb0SN8.js.gz +0 -0
  194. package/build/client/_app/immutable/chunks/N1X6Qzcl.js +0 -1
  195. package/build/client/_app/immutable/chunks/N1X6Qzcl.js.br +0 -0
  196. package/build/client/_app/immutable/chunks/N1X6Qzcl.js.gz +0 -0
  197. package/build/client/_app/immutable/chunks/VX-Uq_b9.js.br +0 -1
  198. package/build/client/_app/immutable/chunks/VX-Uq_b9.js.gz +0 -0
  199. package/build/client/_app/immutable/entry/app.CJpgt8H5.js.br +0 -0
  200. package/build/client/_app/immutable/entry/app.CJpgt8H5.js.gz +0 -0
  201. package/build/client/_app/immutable/entry/start.DToPJitz.js +0 -1
  202. package/build/client/_app/immutable/entry/start.DToPJitz.js.br +0 -1
  203. package/build/client/_app/immutable/entry/start.DToPJitz.js.gz +0 -0
  204. package/build/client/_app/immutable/nodes/0.Co4Hh8k6.js +0 -1
  205. package/build/client/_app/immutable/nodes/0.Co4Hh8k6.js.br +0 -0
  206. package/build/client/_app/immutable/nodes/0.Co4Hh8k6.js.gz +0 -0
  207. package/build/client/_app/immutable/nodes/1.D6OhgXcC.js.br +0 -3
  208. package/build/client/_app/immutable/nodes/1.D6OhgXcC.js.gz +0 -0
  209. package/build/client/_app/immutable/nodes/2.sBDjyIQu.js +0 -3
  210. package/build/client/_app/immutable/nodes/2.sBDjyIQu.js.br +0 -0
  211. package/build/client/_app/immutable/nodes/2.sBDjyIQu.js.gz +0 -0
  212. package/build/client/_app/immutable/nodes/3.DDt73kMC.js +0 -1
  213. package/build/client/_app/immutable/nodes/3.DDt73kMC.js.br +0 -0
  214. package/build/client/_app/immutable/nodes/3.DDt73kMC.js.gz +0 -0
  215. package/build/client/_app/immutable/nodes/4.FsXXhVSP.js +0 -2
  216. package/build/client/_app/immutable/nodes/4.FsXXhVSP.js.br +0 -0
  217. package/build/client/_app/immutable/nodes/4.FsXXhVSP.js.gz +0 -0
  218. package/build/server/chunks/chunks/context.js-CVuTSPjH.js.map +0 -1
  219. package/build/server/chunks/chunks/contract.js-itFN0Gon.js.map +0 -1
  220. package/build/server/chunks/chunks/core.js-CABVXpby.js.map +0 -1
  221. package/build/server/chunks/chunks/http.js-ChQRRKfZ.js.map +0 -1
  222. package/build/server/chunks/chunks/internal.js-qXxDe7VN.js.map +0 -1
  223. package/build/server/chunks/chunks/manifest-membership.js-BnSECWpJ.js.map +0 -1
  224. package/build/server/chunks/chunks/raw-reconciliation.js-ZEOCk_jA.js.map +0 -1
  225. package/build/server/chunks/manifest.js-DgjSU4wg.js.map +0 -1
  226. package/build/server/chunks/nodes/1.js-DNabcIPP.js +0 -7
  227. package/build/server/chunks/nodes/2.js-CcVBvLSR.js +0 -7
  228. package/build/server/chunks/nodes/2.js-CcVBvLSR.js.map +0 -1
  229. package/build/server/chunks/nodes/3.js-DreG5rig.js +0 -7
  230. package/build/server/chunks/nodes/3.js-DreG5rig.js.map +0 -1
  231. package/build/server/chunks/nodes/4.js-BE7ZG9vA.js +0 -7
@@ -1,7 +1,7 @@
1
- import { a as plugins, b as audioPlugin, d as chromaKeyVideoPlugin, v as videoPlugin, s as slicePlugin, e as imagePlugin, n as normalizeFolderPath, g as canonicalizeParameters, h as folderOfRawPath, j as rawFileNameOfPath, f as folderPathError, k as parentFolderPath, l as folderNameError, m as joinFolderPath, o as folderNameOf, q as isFolderOrDescendant, t as replaceFolderPrefix, u as portableFolderPathKey, c as compareCodeUnits, w as isCustomFfmpegVideoPreset, x as processedSliceInsets, y as defaultInsetsForSize, F as FOLDER_SENTINEL, r as rawFilePathError, z as materializeFfmpegCommand, A as slicedAxesFor, B as isAssetReference, C as validateVideoPreset, V as VIDEO_BUILT_IN_PRESETS, D as validateAudioPreset, E as AUDIO_BUILT_IN_PRESETS, G as validateImagePreset, I as IMAGE_BUILT_IN_PRESETS, S as SLICE_BUILT_IN_PRESETS } from './core.js-CABVXpby.js';
2
- import { a as assetIdError, r as referenceErrors, c as collectAllReferences, b as computeLibraryMembership, m as manifestNameError, d as allDeliveredAssetIds, t as topologicalReferenceOrder } from './manifest-membership.js-BnSECWpJ.js';
1
+ import { a as plugins, b as audioPlugin, d as chromaKeyVideoPlugin, v as videoPlugin, s as slicePlugin, e as imagePlugin, n as normalizeFolderPath, g as canonicalizeParameters, h as folderOfRawPath, j as rawFileNameOfPath, f as folderPathError, k as parentFolderPath, l as folderNameError, m as joinFolderPath, o as folderNameOf, q as isFolderOrDescendant, t as replaceFolderPrefix, u as portableFolderPathKey, c as compareCodeUnits, w as isCustomFfmpegVideoPreset, x as processedSliceInsets, y as defaultInsetsForSize, F as FOLDER_SENTINEL, r as rawFilePathError, z as materializeFfmpegCommand, A as slicedAxesFor, B as isAssetReference, C as validateVideoPreset, V as VIDEO_BUILT_IN_PRESETS, D as validateAudioPreset, E as AUDIO_BUILT_IN_PRESETS, G as validateImagePreset, I as IMAGE_BUILT_IN_PRESETS, S as SLICE_BUILT_IN_PRESETS } from './core.js-CTyKR4bu.js';
2
+ import { a as assetIdError, c as collectAllReferences, b as computeLibraryMembership, r as referenceErrors, m as manifestNameError, d as allDeliveredAssetIds, t as topologicalReferenceOrder } from './manifest-membership.js-at1ixQdW.js';
3
3
  import { m as manifestColorError, a as manifestEmojiError } from './manifest-appearance.js-DTk355LQ.js';
4
- import { v as verifyStableRawFile } from './raw-reconciliation2.js-CscuoBC2.js';
4
+ import { v as verifyStableRawFile } from './raw-reconciliation2.js-z4xl5zw2.js';
5
5
  import { join, extname, dirname, isAbsolute, basename, resolve } from 'node:path';
6
6
  import { existsSync } from 'node:fs';
7
7
  import { readFile, mkdir, writeFile, rename, unlink, rm, stat, readdir, mkdtemp } from 'node:fs/promises';
@@ -148,6 +148,49 @@ function serializeLibrary(library) {
148
148
  }), null, " ")}\n`;
149
149
  }
150
150
  //#endregion
151
+ //#region src/lib/core/library-validation.ts
152
+ function flatLibraryIssues(library, plugins) {
153
+ const issues = [];
154
+ for (const [name, record] of Object.entries(library.manifests)) {
155
+ const nameProblem = manifestNameError(name);
156
+ if (nameProblem) issues.push({ message: nameProblem });
157
+ if (record.color !== void 0) {
158
+ const colorProblem = manifestColorError(record.color);
159
+ if (colorProblem) issues.push({ message: `Manifest "${name}": ${colorProblem}` });
160
+ }
161
+ if (record.emoji !== void 0) {
162
+ const emojiProblem = manifestEmojiError(record.emoji);
163
+ if (emojiProblem) issues.push({ message: `Manifest "${name}": ${emojiProblem}` });
164
+ }
165
+ }
166
+ for (const [assetId, record] of Object.entries(library.assets)) {
167
+ const idProblem = assetIdError(assetId);
168
+ if (idProblem) issues.push({
169
+ assetId,
170
+ message: idProblem
171
+ });
172
+ const plugin = plugins[record.type];
173
+ if (!plugin) issues.push({
174
+ assetId,
175
+ message: `Unknown asset type "${record.type}".`
176
+ });
177
+ else try {
178
+ plugin.validateParameters(record.parameters);
179
+ } catch (cause) {
180
+ issues.push({
181
+ assetId,
182
+ message: `Invalid parameters: ${cause instanceof Error ? cause.message : String(cause)}`
183
+ });
184
+ }
185
+ for (const manifest of record.manifests) if (!library.manifests[manifest]) issues.push({
186
+ assetId,
187
+ message: `Unknown manifest "${manifest}".`
188
+ });
189
+ }
190
+ issues.push(...referenceErrors(library, collectAllReferences(library, plugins)));
191
+ return issues;
192
+ }
193
+ //#endregion
151
194
  //#region src/lib/server/processing/ffmpeg.ts
152
195
  /**
153
196
  * The ffmpeg/ffprobe toolchain layer: binary resolution (bundled `-static`
@@ -871,6 +914,18 @@ function kebabCaseFromCamel(name) {
871
914
  function manifestModuleFileName(manifestName) {
872
915
  return `${kebabCaseFromCamel(manifestName)}.generated.ts`;
873
916
  }
917
+ /** Two manifest names that would generate the same kebab-case module file. */
918
+ function manifestModuleCollisionIssues(manifests) {
919
+ const issues = [];
920
+ const namesByModuleFile = /* @__PURE__ */ new Map();
921
+ for (const name of Object.keys(manifests)) {
922
+ const fileName = manifestModuleFileName(name);
923
+ const existingName = namesByModuleFile.get(fileName);
924
+ if (existingName !== void 0) issues.push({ message: `Manifests "${existingName}" and "${name}" would both generate "${fileName}".` });
925
+ else namesByModuleFile.set(fileName, name);
926
+ }
927
+ return issues;
928
+ }
874
929
  /**
875
930
  * Build the entry data codegen emits for one asset — delegated to
876
931
  * the owning server plugin's `buildManifestEntry`. Reference fields
@@ -1303,7 +1358,8 @@ var LibraryStore = class {
1303
1358
  const folder = options.folder === void 0 ? "" : normalizeFolderPath(options.folder);
1304
1359
  this.#requireFolder(library, folder);
1305
1360
  const manifests = [...new Set(options.manifests ?? [])].sort();
1306
- for (const manifest of manifests) if (!Object.hasOwn(library.manifests, manifest)) throw new Error(`Unknown manifest "${manifest}".`);
1361
+ const validManifests = this.#validManifestNames(library);
1362
+ for (const manifest of manifests) if (!validManifests.has(manifest)) throw new Error(`Unknown manifest "${manifest}".`);
1307
1363
  const rawDirectory = join(this.#config.rawDir, folder);
1308
1364
  await mkdir(rawDirectory, { recursive: true });
1309
1365
  const storedName = this.#uniqueRawName(sanitizeFileName(options.fileName), folder);
@@ -1313,12 +1369,16 @@ var LibraryStore = class {
1313
1369
  let installed = false;
1314
1370
  try {
1315
1371
  await writeFile(temporaryPath, options.bytes);
1316
- let parameters = plugin.descriptor.validateParameters(plugin.descriptor.defaultParameters(plugin.pluginConfig(this.#config)));
1317
- if (prepareParameters) parameters = plugin.descriptor.validateParameters(await prepareParameters({
1318
- rawPath: temporaryPath,
1319
- rawFileName: storedName,
1320
- parameters
1321
- }));
1372
+ let parameters;
1373
+ if (options.parametersOverride !== void 0) parameters = options.parametersOverride;
1374
+ else {
1375
+ parameters = plugin.descriptor.validateParameters(plugin.descriptor.defaultParameters(plugin.pluginConfig(this.#config)));
1376
+ if (prepareParameters) parameters = plugin.descriptor.validateParameters(await prepareParameters({
1377
+ rawPath: temporaryPath,
1378
+ rawFileName: storedName,
1379
+ parameters
1380
+ }));
1381
+ }
1322
1382
  const record = {
1323
1383
  type: options.type,
1324
1384
  raw: storedPath,
@@ -1364,7 +1424,7 @@ var LibraryStore = class {
1364
1424
  if (sourceOptions) {
1365
1425
  const currentSource = record.importSource ? canonicalizeParameters(record.importSource) : null;
1366
1426
  if (record.raw !== sourceOptions.expected.raw || record.rawHash !== sourceOptions.expected.rawHash || record.type !== sourceOptions.expected.type || currentSource !== sourceOptions.expected.canonicalSource) throw new Error("stale-import");
1367
- const { verifyStableRawFile } = await import('./raw-reconciliation.js-ZEOCk_jA.js');
1427
+ const { verifyStableRawFile } = await import('./raw-reconciliation.js-CUH8IIJx.js');
1368
1428
  try {
1369
1429
  await verifyStableRawFile(join(this.#config.rawDir, record.raw), sourceOptions.expected.rawHash);
1370
1430
  } catch {
@@ -1430,7 +1490,7 @@ var LibraryStore = class {
1430
1490
  const record = this.#requireAsset(library, id);
1431
1491
  if (record.raw !== expected.raw || record.rawHash !== expected.rawHash || record.type !== expected.type || !record.importSource || canonicalizeParameters(record.importSource) !== expected.canonicalSource) throw new Error("stale-import");
1432
1492
  const absolutePath = join(this.#config.rawDir, record.raw);
1433
- const { verifyStableRawFile } = await import('./raw-reconciliation.js-ZEOCk_jA.js');
1493
+ const { verifyStableRawFile } = await import('./raw-reconciliation.js-CUH8IIJx.js');
1434
1494
  try {
1435
1495
  await verifyStableRawFile(absolutePath, expected.rawHash);
1436
1496
  } catch {
@@ -1467,6 +1527,68 @@ var LibraryStore = class {
1467
1527
  return library;
1468
1528
  });
1469
1529
  }
1530
+ /**
1531
+ * CAS-protected raw swap for a Figma tag source that may also rename the
1532
+ * asset. In tag mode the tag IS the id, so changing the tag moves the library
1533
+ * key. The raw swap and the (optional) key move happen in ONE queued critical
1534
+ * section and ONE `write`, so no inconsistent intermediate state is ever
1535
+ * persisted; on any error the record and raw file are rolled back and the key
1536
+ * move (in-memory only until `write`) is discarded.
1537
+ */
1538
+ async repointTagAsset(oldId, newId, bytes, expected, nextSource, updateParameters) {
1539
+ return this.#enqueue(async () => {
1540
+ const library = await this.read();
1541
+ const record = this.#requireAsset(library, oldId);
1542
+ if (record.raw !== expected.raw || record.rawHash !== expected.rawHash || record.type !== expected.type || !record.importSource || canonicalizeParameters(record.importSource) !== expected.canonicalSource) throw new Error("stale-import");
1543
+ const renamed = newId !== oldId;
1544
+ if (renamed && Object.hasOwn(library.assets, newId)) throw new Error(`An asset with id "${newId}" already exists.`);
1545
+ const absolutePath = join(this.#config.rawDir, record.raw);
1546
+ const { verifyStableRawFile } = await import('./raw-reconciliation.js-CUH8IIJx.js');
1547
+ try {
1548
+ await verifyStableRawFile(absolutePath, expected.rawHash);
1549
+ } catch {
1550
+ throw new Error("stale-import");
1551
+ }
1552
+ const token = crypto.randomUUID();
1553
+ const temporaryPath = `${absolutePath}.fundus-retag-${token}.tmp`;
1554
+ const backupPath = `${absolutePath}.fundus-retag-${token}`;
1555
+ const previousHash = record.rawHash;
1556
+ const previousSource = structuredClone(record.importSource);
1557
+ const previousParameters = structuredClone(record.parameters);
1558
+ let staged = false;
1559
+ let installed = false;
1560
+ try {
1561
+ await writeFile(temporaryPath, bytes);
1562
+ await rename(absolutePath, backupPath);
1563
+ staged = true;
1564
+ await rename(temporaryPath, absolutePath);
1565
+ installed = true;
1566
+ record.rawHash = sha256Hex(bytes);
1567
+ if (nextSource) record.importSource = structuredClone(nextSource);
1568
+ if (updateParameters) record.parameters = updateParameters(record.parameters);
1569
+ if (renamed) {
1570
+ delete library.assets[oldId];
1571
+ library.assets[newId] = record;
1572
+ }
1573
+ await this.write(library);
1574
+ } catch (cause) {
1575
+ record.rawHash = previousHash;
1576
+ record.importSource = previousSource;
1577
+ record.parameters = previousParameters;
1578
+ if (renamed) {
1579
+ delete library.assets[newId];
1580
+ library.assets[oldId] = record;
1581
+ }
1582
+ if (installed) await unlink(absolutePath).catch(() => {});
1583
+ if (staged) await rename(backupPath, absolutePath);
1584
+ await unlink(temporaryPath).catch(() => {});
1585
+ throw cause;
1586
+ }
1587
+ if (staged) await unlink(backupPath).catch(() => {});
1588
+ if (renamed) await this.#deleteProxiesOf(oldId);
1589
+ return library;
1590
+ });
1591
+ }
1470
1592
  /** Replace an asset's parameters (validated by the owning plugin). */
1471
1593
  async updateParameters(id, parameters) {
1472
1594
  return this.#enqueue(() => this.#updateParameters(id, parameters));
@@ -1486,7 +1608,8 @@ var LibraryStore = class {
1486
1608
  const library = await this.read();
1487
1609
  const record = this.#requireAsset(library, id);
1488
1610
  const unique = [...new Set(manifests)];
1489
- for (const name of unique) if (!Object.hasOwn(library.manifests, name)) throw new Error(`Unknown manifest "${name}".`);
1611
+ const validManifests = this.#validManifestNames(library);
1612
+ for (const name of unique) if (!validManifests.has(name)) throw new Error(`Unknown manifest "${name}".`);
1490
1613
  record.manifests = unique.sort();
1491
1614
  await this.write(library);
1492
1615
  return library;
@@ -1857,7 +1980,8 @@ var LibraryStore = class {
1857
1980
  * type, dangling raw pointer, invalid parameters, unknown manifest names,
1858
1981
  * and reference errors (dangling target, type mismatch, cycles).
1859
1982
  */
1860
- async validate(library) {
1983
+ async validate(library, options = {}) {
1984
+ const flatSpace = options.flatSpace ?? true;
1861
1985
  const issues = [];
1862
1986
  const folderKeys = /* @__PURE__ */ new Map();
1863
1987
  for (const folder of library.folders) {
@@ -1872,44 +1996,7 @@ var LibraryStore = class {
1872
1996
  if (parent !== "" && !library.folders.includes(parent)) issues.push({ message: `Folder "${folder}" has missing parent "${parent}".` });
1873
1997
  for (const root of [this.#config.rawDir, this.#config.proxyDir]) if (!existsSync(join(root, folder, ".gitkeep"))) issues.push({ message: `Folder "${folder}" is not mirrored with a .gitkeep in ${root}.` });
1874
1998
  }
1875
- for (const [name, record] of Object.entries(library.manifests)) {
1876
- const nameProblem = manifestNameError(name);
1877
- if (nameProblem) issues.push({ message: nameProblem });
1878
- if (record.color !== void 0) {
1879
- const colorProblem = manifestColorError(record.color);
1880
- if (colorProblem) issues.push({ message: `Manifest "${name}": ${colorProblem}` });
1881
- }
1882
- if (record.emoji !== void 0) {
1883
- const emojiProblem = manifestEmojiError(record.emoji);
1884
- if (emojiProblem) issues.push({ message: `Manifest "${name}": ${emojiProblem}` });
1885
- }
1886
- }
1887
- const namesByModuleFile = /* @__PURE__ */ new Map();
1888
- for (const name of Object.keys(library.manifests)) {
1889
- const fileName = manifestModuleFileName(name);
1890
- const existingName = namesByModuleFile.get(fileName);
1891
- if (existingName !== void 0) issues.push({ message: `Manifests "${existingName}" and "${name}" would both generate "${fileName}".` });
1892
- else namesByModuleFile.set(fileName, name);
1893
- }
1894
1999
  for (const [assetId, record] of Object.entries(library.assets)) {
1895
- const idProblem = assetIdError(assetId);
1896
- if (idProblem) issues.push({
1897
- assetId,
1898
- message: idProblem
1899
- });
1900
- const plugin = this.#registry[record.type];
1901
- if (!plugin) issues.push({
1902
- assetId,
1903
- message: `Unknown asset type "${record.type}".`
1904
- });
1905
- else try {
1906
- plugin.descriptor.validateParameters(record.parameters);
1907
- } catch (cause) {
1908
- issues.push({
1909
- assetId,
1910
- message: `Invalid parameters: ${cause instanceof Error ? cause.message : String(cause)}`
1911
- });
1912
- }
1913
2000
  try {
1914
2001
  assertSafeRelativeFilePath(record.raw);
1915
2002
  } catch (cause) {
@@ -1927,12 +2014,11 @@ var LibraryStore = class {
1927
2014
  assetId,
1928
2015
  message: `Raw file "${record.raw}" is missing from the raw directory.`
1929
2016
  });
1930
- for (const manifest of record.manifests) if (!library.manifests[manifest]) issues.push({
1931
- assetId,
1932
- message: `Unknown manifest "${manifest}".`
1933
- });
1934
2017
  }
1935
- issues.push(...referenceErrors(library, collectAllReferences(library, descriptorsByType(this.#registry))));
2018
+ if (flatSpace) {
2019
+ issues.push(...flatLibraryIssues(library, descriptorsByType(this.#registry)));
2020
+ issues.push(...manifestModuleCollisionIssues(library.manifests));
2021
+ }
1936
2022
  return issues;
1937
2023
  }
1938
2024
  async #deleteProxiesOf(assetId) {
@@ -1946,6 +2032,18 @@ var LibraryStore = class {
1946
2032
  if (!Object.hasOwn(library.assets, id)) throw new Error(`Unknown asset "${id}".`);
1947
2033
  return library.assets[id];
1948
2034
  }
2035
+ /**
2036
+ * Valid manifest names for asset membership: the host library's own manifests
2037
+ * plus any a configured Package introduces. The effective (merged) library
2038
+ * unions both, so a host asset (or slot fill) may be placed into a
2039
+ * Package-introduced manifest — validating against the host manifests alone
2040
+ * would wrongly reject that placement.
2041
+ */
2042
+ #validManifestNames(library) {
2043
+ const names = new Set(Object.keys(library.manifests));
2044
+ for (const pkg of this.#config.packages ?? []) for (const name of Object.keys(pkg.declaration.manifests)) names.add(name);
2045
+ return names;
2046
+ }
1949
2047
  /** Resolve a non-colliding raw file name, appending `-1`, `-2`, … before the extension. */
1950
2048
  #uniqueRawName(fileName, folder) {
1951
2049
  if (!existsSync(join(this.#config.rawDir, folder, fileName))) return fileName;
@@ -1982,5 +2080,5 @@ function invalidInput(message) {
1982
2080
  throw new SourceImportError("invalid-input", message);
1983
2081
  }
1984
2082
 
1985
- export { LibraryStore as L, SourceImportError as S, serializeLibrary as a, serverPluginForType as b, invalidInput as c, descriptorsByType as d, encodeRelativePathForUrl as e, parseLibrary as f, generateManifestModules as g, assertSafeRelativeFilePath as h, isRecord as i, locateGeneratedAssetDeclaration as l, manifestModuleFileName as m, processAssets as p, readCurrentProxy as r, serverPluginsByType as s };
1986
- //# sourceMappingURL=contract.js-itFN0Gon.js.map
2083
+ export { LibraryStore as L, SourceImportError as S, serializeLibrary as a, serverPluginForType as b, manifestModuleCollisionIssues as c, descriptorsByType as d, encodeRelativePathForUrl as e, flatLibraryIssues as f, generateManifestModules as g, invalidInput as h, isRecord as i, parseLibrary as j, isRecord$1 as k, locateGeneratedAssetDeclaration as l, manifestModuleFileName as m, assertSafeKey as n, parseManifestRecord as o, processAssets as p, parseImportSource as q, readCurrentProxy as r, serverPluginsByType as s, assertSafeRelativeFilePath as t };
2084
+ //# sourceMappingURL=contract.js-_LTMZBo2.js.map