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
@@ -8,8 +8,8 @@ import { existsSync } from 'node:fs';
8
8
  import { mkdir, readFile, rename, rm, unlink, writeFile } from 'node:fs/promises';
9
9
  import { dirname, extname, join } from 'node:path';
10
10
  import { createHash } from 'node:crypto';
11
- import { assetIdError, collectAllReferences, canonicalizeParameters, createEmptyLibrary, folderNameError, folderNameOf, folderOfRawPath, folderPathError, isFolderOrDescendant, joinFolderPath, manifestColorError, manifestEmojiError, parseLibrary, referenceErrors, normalizeFolderPath, parentFolderPath, portableFolderPathKey, rawFilePathError, rawFileNameOfPath, replaceFolderPrefix, manifestNameError, serializeLibrary } from '../core/index.js';
12
- import { manifestModuleFileName } from './codegen.js';
11
+ import { assetIdError, canonicalizeParameters, createEmptyLibrary, flatLibraryIssues, folderNameError, folderNameOf, folderOfRawPath, folderPathError, isFolderOrDescendant, joinFolderPath, manifestColorError, manifestEmojiError, parseLibrary, normalizeFolderPath, parentFolderPath, portableFolderPathKey, rawFilePathError, rawFileNameOfPath, replaceFolderPrefix, manifestNameError, serializeLibrary } from '../core/index.js';
12
+ import { manifestModuleCollisionIssues, manifestModuleFileName } from './codegen.js';
13
13
  import { descriptorsByType, serverPluginForType, serverPluginsByType } from './plugins.js';
14
14
  import { isProxyFileNameFor } from './processing/processor.js';
15
15
  import { ensureManagedFolder, listRelativeFiles, syncManagedFolders } from './folder-filesystem.js';
@@ -135,8 +135,9 @@ export class LibraryStore {
135
135
  const folder = options.folder === undefined ? '' : normalizeFolderPath(options.folder);
136
136
  this.#requireFolder(library, folder);
137
137
  const manifests = [...new Set(options.manifests ?? [])].sort();
138
+ const validManifests = this.#validManifestNames(library);
138
139
  for (const manifest of manifests) {
139
- if (!Object.hasOwn(library.manifests, manifest)) {
140
+ if (!validManifests.has(manifest)) {
140
141
  throw new Error(`Unknown manifest "${manifest}".`);
141
142
  }
142
143
  }
@@ -149,9 +150,15 @@ export class LibraryStore {
149
150
  let installed = false;
150
151
  try {
151
152
  await writeFile(temporaryPath, options.bytes);
152
- let parameters = plugin.descriptor.validateParameters(plugin.descriptor.defaultParameters(plugin.pluginConfig(this.#config)));
153
- if (prepareParameters) {
154
- parameters = plugin.descriptor.validateParameters(await prepareParameters({ rawPath: temporaryPath, rawFileName: storedName, parameters }));
153
+ let parameters;
154
+ if (options.parametersOverride !== undefined) {
155
+ parameters = options.parametersOverride;
156
+ }
157
+ else {
158
+ parameters = plugin.descriptor.validateParameters(plugin.descriptor.defaultParameters(plugin.pluginConfig(this.#config)));
159
+ if (prepareParameters) {
160
+ parameters = plugin.descriptor.validateParameters(await prepareParameters({ rawPath: temporaryPath, rawFileName: storedName, parameters }));
161
+ }
155
162
  }
156
163
  const record = {
157
164
  type: options.type,
@@ -341,6 +348,85 @@ export class LibraryStore {
341
348
  return library;
342
349
  });
343
350
  }
351
+ /**
352
+ * CAS-protected raw swap for a Figma tag source that may also rename the
353
+ * asset. In tag mode the tag IS the id, so changing the tag moves the library
354
+ * key. The raw swap and the (optional) key move happen in ONE queued critical
355
+ * section and ONE `write`, so no inconsistent intermediate state is ever
356
+ * persisted; on any error the record and raw file are rolled back and the key
357
+ * move (in-memory only until `write`) is discarded.
358
+ */
359
+ async repointTagAsset(oldId, newId, bytes, expected, nextSource, updateParameters) {
360
+ return this.#enqueue(async () => {
361
+ const library = await this.read();
362
+ const record = this.#requireAsset(library, oldId);
363
+ if (record.raw !== expected.raw ||
364
+ record.rawHash !== expected.rawHash ||
365
+ record.type !== expected.type ||
366
+ !record.importSource ||
367
+ canonicalizeParameters(record.importSource) !== expected.canonicalSource) {
368
+ throw new Error('stale-import');
369
+ }
370
+ const renamed = newId !== oldId;
371
+ if (renamed && Object.hasOwn(library.assets, newId)) {
372
+ throw new Error(`An asset with id "${newId}" already exists.`);
373
+ }
374
+ const absolutePath = join(this.#config.rawDir, record.raw);
375
+ const { verifyStableRawFile } = await import('./raw-reconciliation.js');
376
+ try {
377
+ await verifyStableRawFile(absolutePath, expected.rawHash);
378
+ }
379
+ catch {
380
+ throw new Error('stale-import');
381
+ }
382
+ const token = crypto.randomUUID();
383
+ const temporaryPath = `${absolutePath}.fundus-retag-${token}.tmp`;
384
+ const backupPath = `${absolutePath}.fundus-retag-${token}`;
385
+ const previousHash = record.rawHash;
386
+ const previousSource = structuredClone(record.importSource);
387
+ const previousParameters = structuredClone(record.parameters);
388
+ let staged = false;
389
+ let installed = false;
390
+ try {
391
+ await writeFile(temporaryPath, bytes);
392
+ await rename(absolutePath, backupPath);
393
+ staged = true;
394
+ await rename(temporaryPath, absolutePath);
395
+ installed = true;
396
+ record.rawHash = sha256Hex(bytes);
397
+ if (nextSource)
398
+ record.importSource = structuredClone(nextSource);
399
+ if (updateParameters)
400
+ record.parameters = updateParameters(record.parameters);
401
+ if (renamed) {
402
+ delete library.assets[oldId];
403
+ library.assets[newId] = record;
404
+ }
405
+ await this.write(library);
406
+ }
407
+ catch (cause) {
408
+ record.rawHash = previousHash;
409
+ record.importSource = previousSource;
410
+ record.parameters = previousParameters;
411
+ if (renamed) {
412
+ delete library.assets[newId];
413
+ library.assets[oldId] = record;
414
+ }
415
+ if (installed)
416
+ await unlink(absolutePath).catch(() => { });
417
+ if (staged)
418
+ await rename(backupPath, absolutePath);
419
+ await unlink(temporaryPath).catch(() => { });
420
+ throw cause;
421
+ }
422
+ if (staged)
423
+ await unlink(backupPath).catch(() => { });
424
+ // The old id's proxies are orphans after a rename (pruning also covers it).
425
+ if (renamed)
426
+ await this.#deleteProxiesOf(oldId);
427
+ return library;
428
+ });
429
+ }
344
430
  /** Replace an asset's parameters (validated by the owning plugin). */
345
431
  async updateParameters(id, parameters) {
346
432
  return this.#enqueue(() => this.#updateParameters(id, parameters));
@@ -360,8 +446,9 @@ export class LibraryStore {
360
446
  const library = await this.read();
361
447
  const record = this.#requireAsset(library, id);
362
448
  const unique = [...new Set(manifests)];
449
+ const validManifests = this.#validManifestNames(library);
363
450
  for (const name of unique) {
364
- if (!Object.hasOwn(library.manifests, name)) {
451
+ if (!validManifests.has(name)) {
365
452
  throw new Error(`Unknown manifest "${name}".`);
366
453
  }
367
454
  }
@@ -815,7 +902,14 @@ export class LibraryStore {
815
902
  * type, dangling raw pointer, invalid parameters, unknown manifest names,
816
903
  * and reference errors (dangling target, type mismatch, cycles).
817
904
  */
818
- async validate(library) {
905
+ async validate(library, options = {}) {
906
+ // The default preserves single-root behaviour (host === effective). When
907
+ // merging Packages, disk/host checks run on the host library with
908
+ // `flatSpace: false`, while the flat-space checks (id/type/parameters/
909
+ // membership/appearance/references) run separately over the *effective*
910
+ // library — host override records store partial parameters that only
911
+ // validate once merged, and references may cross the host/Package boundary.
912
+ const flatSpace = options.flatSpace ?? true;
819
913
  const issues = [];
820
914
  const folderKeys = new Map();
821
915
  for (const folder of library.folders) {
@@ -845,53 +939,7 @@ export class LibraryStore {
845
939
  }
846
940
  }
847
941
  }
848
- for (const [name, record] of Object.entries(library.manifests)) {
849
- const nameProblem = manifestNameError(name);
850
- if (nameProblem)
851
- issues.push({ message: nameProblem });
852
- if (record.color !== undefined) {
853
- const colorProblem = manifestColorError(record.color);
854
- if (colorProblem)
855
- issues.push({ message: `Manifest "${name}": ${colorProblem}` });
856
- }
857
- if (record.emoji !== undefined) {
858
- const emojiProblem = manifestEmojiError(record.emoji);
859
- if (emojiProblem)
860
- issues.push({ message: `Manifest "${name}": ${emojiProblem}` });
861
- }
862
- }
863
- const namesByModuleFile = new Map();
864
- for (const name of Object.keys(library.manifests)) {
865
- const fileName = manifestModuleFileName(name);
866
- const existingName = namesByModuleFile.get(fileName);
867
- if (existingName !== undefined) {
868
- issues.push({
869
- message: `Manifests "${existingName}" and "${name}" would both generate "${fileName}".`
870
- });
871
- }
872
- else {
873
- namesByModuleFile.set(fileName, name);
874
- }
875
- }
876
942
  for (const [assetId, record] of Object.entries(library.assets)) {
877
- const idProblem = assetIdError(assetId);
878
- if (idProblem)
879
- issues.push({ assetId, message: idProblem });
880
- const plugin = this.#registry[record.type];
881
- if (!plugin) {
882
- issues.push({ assetId, message: `Unknown asset type "${record.type}".` });
883
- }
884
- else {
885
- try {
886
- plugin.descriptor.validateParameters(record.parameters);
887
- }
888
- catch (cause) {
889
- issues.push({
890
- assetId,
891
- message: `Invalid parameters: ${cause instanceof Error ? cause.message : String(cause)}`
892
- });
893
- }
894
- }
895
943
  try {
896
944
  assertSafeRelativeFilePath(record.raw);
897
945
  }
@@ -911,13 +959,11 @@ export class LibraryStore {
911
959
  message: `Raw file "${record.raw}" is missing from the raw directory.`
912
960
  });
913
961
  }
914
- for (const manifest of record.manifests) {
915
- if (!library.manifests[manifest]) {
916
- issues.push({ assetId, message: `Unknown manifest "${manifest}".` });
917
- }
918
- }
919
962
  }
920
- issues.push(...referenceErrors(library, collectAllReferences(library, descriptorsByType(this.#registry))));
963
+ if (flatSpace) {
964
+ issues.push(...flatLibraryIssues(library, descriptorsByType(this.#registry)));
965
+ issues.push(...manifestModuleCollisionIssues(library.manifests));
966
+ }
921
967
  return issues;
922
968
  }
923
969
  async #deleteProxiesOf(assetId) {
@@ -940,6 +986,21 @@ export class LibraryStore {
940
986
  }
941
987
  return library.assets[id];
942
988
  }
989
+ /**
990
+ * Valid manifest names for asset membership: the host library's own manifests
991
+ * plus any a configured Package introduces. The effective (merged) library
992
+ * unions both, so a host asset (or slot fill) may be placed into a
993
+ * Package-introduced manifest — validating against the host manifests alone
994
+ * would wrongly reject that placement.
995
+ */
996
+ #validManifestNames(library) {
997
+ const names = new Set(Object.keys(library.manifests));
998
+ for (const pkg of this.#config.packages ?? []) {
999
+ for (const name of Object.keys(pkg.declaration.manifests))
1000
+ names.add(name);
1001
+ }
1002
+ return names;
1003
+ }
943
1004
  /** Resolve a non-colliding raw file name, appending `-1`, `-2`, … before the extension. */
944
1005
  #uniqueRawName(fileName, folder) {
945
1006
  if (!existsSync(join(this.#config.rawDir, folder, fileName)))
@@ -66,6 +66,18 @@ export declare class FundusOperations {
66
66
  reimportAsset(id: string, input?: unknown): Promise<FundusStateDto>;
67
67
  /** Materialize a new source, then atomically replace an existing asset's raw file. */
68
68
  replaceRawFromSource(id: string, options: ReplaceRawFromSourceOptions): Promise<FundusStateDto>;
69
+ /**
70
+ * Edit a Figma tag asset's tag, fileKey, and/or scale in place. Because in tag
71
+ * mode the tag IS the asset id, changing the tag renames the asset (moves the
72
+ * library key); changing only fileKey/scale is an in-place re-point. Mirrors
73
+ * `reimportAsset`'s three phases: preflight in the queue, materialize outside
74
+ * it, then commit atomically through `store.repointTagAsset`.
75
+ */
76
+ retagFigmaAsset(id: string, input: {
77
+ tag?: string;
78
+ fileKey?: string;
79
+ scale?: 1 | 2 | 3 | 4;
80
+ }): Promise<FundusStateDto>;
69
81
  /** Apply a PATCH body: parameters and/or manifests and/or a rename — in that order. */
70
82
  patchAsset(id: string, body: PatchAssetRequestDto): Promise<FundusStateDto>;
71
83
  moveAsset(id: string, folder: string): Promise<FundusStateDto>;