fundus 0.19.0 → 0.20.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 (149) hide show
  1. package/build/client/_app/immutable/chunks/{CrIZjnDr.js → BYFtzj-6.js} +1 -1
  2. package/build/client/_app/immutable/chunks/BYFtzj-6.js.br +0 -0
  3. package/build/client/_app/immutable/chunks/BYFtzj-6.js.gz +0 -0
  4. package/build/client/_app/immutable/chunks/Bpdn9KsZ.js +1 -0
  5. package/build/client/_app/immutable/chunks/Bpdn9KsZ.js.br +0 -0
  6. package/build/client/_app/immutable/chunks/Bpdn9KsZ.js.gz +0 -0
  7. package/build/client/_app/immutable/chunks/{BpsKkIFc.js → C84Cb3FT.js} +1 -1
  8. package/build/client/_app/immutable/chunks/C84Cb3FT.js.br +2 -0
  9. package/build/client/_app/immutable/chunks/C84Cb3FT.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/{lw3KP4og.js → ShJqQdc9.js} +1 -1
  11. package/build/client/_app/immutable/chunks/ShJqQdc9.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/ShJqQdc9.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{ZGU9Utak.js → qKhm3_BR.js} +1 -1
  14. package/build/client/_app/immutable/chunks/qKhm3_BR.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/{ZGU9Utak.js.gz → qKhm3_BR.js.gz} +0 -0
  16. package/build/client/_app/immutable/entry/{app.D-lO1MC-.js → app.xp6XP32Y.js} +2 -2
  17. package/build/client/_app/immutable/entry/app.xp6XP32Y.js.br +0 -0
  18. package/build/client/_app/immutable/entry/app.xp6XP32Y.js.gz +0 -0
  19. package/build/client/_app/immutable/entry/start.Du4Vvers.js +1 -0
  20. package/build/client/_app/immutable/entry/start.Du4Vvers.js.br +1 -0
  21. package/build/client/_app/immutable/entry/start.Du4Vvers.js.gz +0 -0
  22. package/build/client/_app/immutable/nodes/{0.BPGg3A-F.js → 0.C1JztY6C.js} +1 -1
  23. package/build/client/_app/immutable/nodes/0.C1JztY6C.js.br +0 -0
  24. package/build/client/_app/immutable/nodes/0.C1JztY6C.js.gz +0 -0
  25. package/build/client/_app/immutable/nodes/{1.-VJ5Mlss.js → 1.DBrMEpGF.js} +1 -1
  26. package/build/client/_app/immutable/nodes/1.DBrMEpGF.js.br +2 -0
  27. package/build/client/_app/immutable/nodes/1.DBrMEpGF.js.gz +0 -0
  28. package/build/client/_app/immutable/nodes/{2.Dhyvb4bF.js → 2.DePWJalQ.js} +1 -1
  29. package/build/client/_app/immutable/nodes/2.DePWJalQ.js.br +0 -0
  30. package/build/client/_app/immutable/nodes/2.DePWJalQ.js.gz +0 -0
  31. package/build/client/_app/immutable/nodes/{3.D9Fgsq-b.js → 3.CoDFK3_e.js} +1 -1
  32. package/build/client/_app/immutable/nodes/3.CoDFK3_e.js.br +0 -0
  33. package/build/client/_app/immutable/nodes/3.CoDFK3_e.js.gz +0 -0
  34. package/build/client/_app/immutable/nodes/{4.DErtysFP.js → 4.B-qjHb3h.js} +1 -1
  35. package/build/client/_app/immutable/nodes/4.B-qjHb3h.js.br +0 -0
  36. package/build/client/_app/immutable/nodes/4.B-qjHb3h.js.gz +0 -0
  37. package/build/client/_app/version.json +1 -1
  38. package/build/client/_app/version.json.br +0 -0
  39. package/build/client/_app/version.json.gz +0 -0
  40. package/build/handler.js +7 -7
  41. package/build/index.js +7 -7
  42. package/build/server/chunks/chunks/{context.js-BIgcUcEl.js → context.js-4TO_atTF.js} +79 -4
  43. package/build/server/chunks/chunks/context.js-4TO_atTF.js.map +1 -0
  44. package/build/server/chunks/chunks/{exports.js-bhKV7cEL.js → exports.js-D4wm01VC.js} +2 -2
  45. package/build/server/chunks/chunks/{exports.js-bhKV7cEL.js.map → exports.js-D4wm01VC.js.map} +1 -1
  46. package/build/server/chunks/chunks/{internal.js-7MmaxxwZ.js → internal.js-C1qRAVdt.js} +3 -3
  47. package/build/server/chunks/chunks/{internal.js-7MmaxxwZ.js.map → internal.js-C1qRAVdt.js.map} +1 -1
  48. package/build/server/chunks/chunks/internal2.js-BlXt2rfE.js.map +1 -1
  49. package/build/server/chunks/chunks/{shared.js-B0m3s2U9.js → shared.js-WozvTiX9.js} +2 -2
  50. package/build/server/chunks/chunks/{shared.js-B0m3s2U9.js.map → shared.js-WozvTiX9.js.map} +1 -1
  51. package/build/server/chunks/chunks/{utils.js-BXV0zq44.js → utils.js-UxJ7asYr.js} +3 -3
  52. package/build/server/chunks/chunks/{utils.js-BXV0zq44.js.map → utils.js-UxJ7asYr.js.map} +1 -1
  53. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-DbEPdkbO.js → _server.ts.js-Aa7zYzUB.js} +2 -2
  54. package/build/server/chunks/entries/endpoints/api/assets/_id_/{_server.ts.js-DbEPdkbO.js.map → _server.ts.js-Aa7zYzUB.js.map} +1 -1
  55. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-BzA96yBM.js → _server.ts.js-CM73kt1H.js} +2 -2
  56. package/build/server/chunks/entries/endpoints/api/assets/_id_/raw/{_server.ts.js-BzA96yBM.js.map → _server.ts.js-CM73kt1H.js.map} +1 -1
  57. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-fQAXFRLh.js → _server.ts.js-CyiEsjc3.js} +2 -2
  58. package/build/server/chunks/entries/endpoints/api/assets/_id_/reimport/{_server.ts.js-fQAXFRLh.js.map → _server.ts.js-CyiEsjc3.js.map} +1 -1
  59. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-RTBrlhk5.js → _server.ts.js-Cpt_vVY0.js} +2 -2
  60. package/build/server/chunks/entries/endpoints/api/assets/_id_/retag/{_server.ts.js-RTBrlhk5.js.map → _server.ts.js-Cpt_vVY0.js.map} +1 -1
  61. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-Baz4gPRd.js → _server.ts.js-BVdeCRy0.js} +2 -2
  62. package/build/server/chunks/entries/endpoints/api/assets/{_server.ts.js-Baz4gPRd.js.map → _server.ts.js-BVdeCRy0.js.map} +1 -1
  63. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CnqdPxWQ.js → _server.ts.js-QEa0nYZE.js} +2 -2
  64. package/build/server/chunks/entries/endpoints/api/assets/delete/{_server.ts.js-CnqdPxWQ.js.map → _server.ts.js-QEa0nYZE.js.map} +1 -1
  65. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-bvrtSRDz.js → _server.ts.js-Dk0sFdoM.js} +2 -2
  66. package/build/server/chunks/entries/endpoints/api/assets/move/{_server.ts.js-bvrtSRDz.js.map → _server.ts.js-Dk0sFdoM.js.map} +1 -1
  67. package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-CO8RZm3e.js +69 -0
  68. package/build/server/chunks/entries/endpoints/api/events/_server.ts.js-CO8RZm3e.js.map +1 -0
  69. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-cgYcVXgU.js → _server.ts.js-8RzyUK6g.js} +2 -2
  70. package/build/server/chunks/entries/endpoints/api/folders/_path_/{_server.ts.js-cgYcVXgU.js.map → _server.ts.js-8RzyUK6g.js.map} +1 -1
  71. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-DbXw3YEr.js → _server.ts.js-YWliM590.js} +2 -2
  72. package/build/server/chunks/entries/endpoints/api/folders/{_server.ts.js-DbXw3YEr.js.map → _server.ts.js-YWliM590.js.map} +1 -1
  73. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-D0PEYlzG.js → _server.ts.js-CeXmOrwN.js} +2 -2
  74. package/build/server/chunks/entries/endpoints/api/imports/{_server.ts.js-D0PEYlzG.js.map → _server.ts.js-CeXmOrwN.js.map} +1 -1
  75. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-Dt9Wfgs7.js → _server.ts.js-DQaLSdGl.js} +2 -2
  76. package/build/server/chunks/entries/endpoints/api/manifests/_name_/{_server.ts.js-Dt9Wfgs7.js.map → _server.ts.js-DQaLSdGl.js.map} +1 -1
  77. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-BBuZYakQ.js → _server.ts.js-BE_nYFP_.js} +2 -2
  78. package/build/server/chunks/entries/endpoints/api/manifests/{_server.ts.js-BBuZYakQ.js.map → _server.ts.js-BE_nYFP_.js.map} +1 -1
  79. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-DQ_CWMTu.js → _server.ts.js-BGxvZ4EV.js} +2 -2
  80. package/build/server/chunks/entries/endpoints/api/raw/adopt/{_server.ts.js-DQ_CWMTu.js.map → _server.ts.js-BGxvZ4EV.js.map} +1 -1
  81. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-B3TVoDCl.js → _server.ts.js-Cvwr9a0l.js} +2 -2
  82. package/build/server/chunks/entries/endpoints/api/raw/edited/accept/{_server.ts.js-B3TVoDCl.js.map → _server.ts.js-Cvwr9a0l.js.map} +1 -1
  83. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js--2C2x6Q0.js → _server.ts.js-DEMDXHsR.js} +2 -2
  84. package/build/server/chunks/entries/endpoints/api/raw/edited/dismiss/{_server.ts.js--2C2x6Q0.js.map → _server.ts.js-DEMDXHsR.js.map} +1 -1
  85. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DD2Hz15k.js → _server.ts.js-DoeEIUoG.js} +2 -2
  86. package/build/server/chunks/entries/endpoints/api/reconcile/{_server.ts.js-DD2Hz15k.js.map → _server.ts.js-DoeEIUoG.js.map} +1 -1
  87. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Ei98ilB5.js → _server.ts.js-0hMtYoB1.js} +2 -2
  88. package/build/server/chunks/entries/endpoints/api/reveal/{_server.ts.js-Ei98ilB5.js.map → _server.ts.js-0hMtYoB1.js.map} +1 -1
  89. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-NNuDGwyK.js → _server.ts.js-B4YWmlkC.js} +2 -2
  90. package/build/server/chunks/entries/endpoints/api/state/{_server.ts.js-NNuDGwyK.js.map → _server.ts.js-B4YWmlkC.js.map} +1 -1
  91. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-6_Wl_k0H.js → _server.ts.js-dNLtLO2U.js} +2 -2
  92. package/build/server/chunks/entries/endpoints/api/usage/{_server.ts.js-6_Wl_k0H.js.map → _server.ts.js-dNLtLO2U.js.map} +1 -1
  93. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-Dft0Zgh3.js → _server.ts.js-BtCkf-hk.js} +2 -2
  94. package/build/server/chunks/entries/endpoints/files/proxy/_...path_/{_server.ts.js-Dft0Zgh3.js.map → _server.ts.js-BtCkf-hk.js.map} +1 -1
  95. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-rlV0QRQS.js → _server.ts.js-CozrPtRv.js} +2 -2
  96. package/build/server/chunks/entries/endpoints/files/raw/_...path_/{_server.ts.js-rlV0QRQS.js.map → _server.ts.js-CozrPtRv.js.map} +1 -1
  97. package/build/server/chunks/entries/{hooks.server.js-C345JVQ2.js → hooks.server.js-Cnsi5KsE.js} +2 -2
  98. package/build/server/chunks/entries/{hooks.server.js-C345JVQ2.js.map → hooks.server.js-Cnsi5KsE.js.map} +1 -1
  99. package/build/server/chunks/{handler-C_S3CtEF.js → handler-Cy1Egoop.js} +5 -5
  100. package/build/server/chunks/{handler-C_S3CtEF.js.map → handler-Cy1Egoop.js.map} +1 -1
  101. package/build/server/chunks/{index.js-CSCxgyyg.js → index.js-BThzb8OA.js} +5 -5
  102. package/build/server/chunks/{index.js-CSCxgyyg.js.map → index.js-BThzb8OA.js.map} +1 -1
  103. package/build/server/chunks/{manifest.js-CO6AjAUm.js → manifest.js-oxAZ63GO.js} +35 -28
  104. package/build/server/chunks/manifest.js-oxAZ63GO.js.map +1 -0
  105. package/build/server/chunks/nodes/{0.js-CRc8onmc.js → 0.js-CWkqtXV6.js} +2 -2
  106. package/build/server/chunks/nodes/{0.js-CRc8onmc.js.map → 0.js-CWkqtXV6.js.map} +1 -1
  107. package/build/server/chunks/nodes/1.js-CwYk7wO6.js +7 -0
  108. package/build/server/chunks/nodes/{1.js-CZm_Doa7.js.map → 1.js-CwYk7wO6.js.map} +1 -1
  109. package/build/server/chunks/nodes/{2.js-B92vn1Hu.js → 2.js-CH87hyHV.js} +2 -2
  110. package/build/server/chunks/nodes/{2.js-B92vn1Hu.js.map → 2.js-CH87hyHV.js.map} +1 -1
  111. package/build/server/chunks/nodes/3.js-CSO0quMy.js +7 -0
  112. package/build/server/chunks/nodes/{3.js-C14BP7Jm.js.map → 3.js-CSO0quMy.js.map} +1 -1
  113. package/build/server/chunks/nodes/4.js-Dc4P-6cG.js +7 -0
  114. package/build/server/chunks/nodes/{4.js-BLNdVCa1.js.map → 4.js-Dc4P-6cG.js.map} +1 -1
  115. package/dist/server/context.d.ts +3 -0
  116. package/dist/server/context.js +2 -1
  117. package/dist/server/library-watcher.d.ts +8 -0
  118. package/dist/server/library-watcher.js +96 -0
  119. package/package.json +1 -1
  120. package/build/client/_app/immutable/chunks/Bly9uffh.js +0 -1
  121. package/build/client/_app/immutable/chunks/Bly9uffh.js.br +0 -0
  122. package/build/client/_app/immutable/chunks/Bly9uffh.js.gz +0 -0
  123. package/build/client/_app/immutable/chunks/BpsKkIFc.js.br +0 -2
  124. package/build/client/_app/immutable/chunks/BpsKkIFc.js.gz +0 -0
  125. package/build/client/_app/immutable/chunks/CrIZjnDr.js.br +0 -0
  126. package/build/client/_app/immutable/chunks/CrIZjnDr.js.gz +0 -0
  127. package/build/client/_app/immutable/chunks/ZGU9Utak.js.br +0 -0
  128. package/build/client/_app/immutable/chunks/lw3KP4og.js.br +0 -0
  129. package/build/client/_app/immutable/chunks/lw3KP4og.js.gz +0 -0
  130. package/build/client/_app/immutable/entry/app.D-lO1MC-.js.br +0 -0
  131. package/build/client/_app/immutable/entry/app.D-lO1MC-.js.gz +0 -0
  132. package/build/client/_app/immutable/entry/start.BrSEFrid.js +0 -1
  133. package/build/client/_app/immutable/entry/start.BrSEFrid.js.br +0 -1
  134. package/build/client/_app/immutable/entry/start.BrSEFrid.js.gz +0 -0
  135. package/build/client/_app/immutable/nodes/0.BPGg3A-F.js.br +0 -0
  136. package/build/client/_app/immutable/nodes/0.BPGg3A-F.js.gz +0 -0
  137. package/build/client/_app/immutable/nodes/1.-VJ5Mlss.js.br +0 -1
  138. package/build/client/_app/immutable/nodes/1.-VJ5Mlss.js.gz +0 -0
  139. package/build/client/_app/immutable/nodes/2.Dhyvb4bF.js.br +0 -0
  140. package/build/client/_app/immutable/nodes/2.Dhyvb4bF.js.gz +0 -0
  141. package/build/client/_app/immutable/nodes/3.D9Fgsq-b.js.br +0 -0
  142. package/build/client/_app/immutable/nodes/3.D9Fgsq-b.js.gz +0 -0
  143. package/build/client/_app/immutable/nodes/4.DErtysFP.js.br +0 -0
  144. package/build/client/_app/immutable/nodes/4.DErtysFP.js.gz +0 -0
  145. package/build/server/chunks/chunks/context.js-BIgcUcEl.js.map +0 -1
  146. package/build/server/chunks/manifest.js-CO6AjAUm.js.map +0 -1
  147. package/build/server/chunks/nodes/1.js-CZm_Doa7.js +0 -7
  148. package/build/server/chunks/nodes/3.js-C14BP7Jm.js +0 -7
  149. package/build/server/chunks/nodes/4.js-BLNdVCa1.js +0 -7
package/build/handler.js CHANGED
@@ -2,9 +2,9 @@ import './shims.js';
2
2
  import 'node:fs';
3
3
  import 'node:path';
4
4
  import 'node:process';
5
- export { h as handler } from './server/chunks/handler-C_S3CtEF.js';
6
- import './server/chunks/index.js-CSCxgyyg.js';
7
- import './server/chunks/manifest.js-CO6AjAUm.js';
5
+ export { h as handler } from './server/chunks/handler-Cy1Egoop.js';
6
+ import './server/chunks/index.js-BThzb8OA.js';
7
+ import './server/chunks/manifest.js-oxAZ63GO.js';
8
8
  import './env.js';
9
9
  import 'node:buffer';
10
10
  import 'node:crypto';
@@ -12,12 +12,12 @@ import 'node:http';
12
12
  import 'node:timers';
13
13
  import 'node:querystring';
14
14
  import 'node:stream';
15
- import './server/chunks/chunks/shared.js-B0m3s2U9.js';
16
- import './server/chunks/chunks/internal.js-7MmaxxwZ.js';
15
+ import './server/chunks/chunks/shared.js-WozvTiX9.js';
16
+ import './server/chunks/chunks/internal.js-C1qRAVdt.js';
17
17
  import 'node:module';
18
- import './server/chunks/chunks/utils.js-BXV0zq44.js';
18
+ import './server/chunks/chunks/utils.js-UxJ7asYr.js';
19
19
  import 'node:url';
20
20
  import './server/chunks/chunks/internal2.js-BlXt2rfE.js';
21
- import './server/chunks/chunks/exports.js-bhKV7cEL.js';
21
+ import './server/chunks/chunks/exports.js-D4wm01VC.js';
22
22
  import './server/chunks/chunks/routing.js-y-tryuip.js';
23
23
  //# sourceMappingURL=handler.js.map
package/build/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import http from 'node:http';
2
2
  import fs__default from 'node:fs';
3
3
  import process from 'node:process';
4
- import { p as polka, h as handler, f as format_listening_address } from './server/chunks/handler-C_S3CtEF.js';
4
+ import { p as polka, h as handler, f as format_listening_address } from './server/chunks/handler-Cy1Egoop.js';
5
5
  import { env, timeout_env } from './env.js';
6
6
  import { rm } from 'node:fs/promises';
7
7
  import './shims.js';
@@ -11,15 +11,15 @@ import 'node:path';
11
11
  import 'node:timers';
12
12
  import 'node:querystring';
13
13
  import 'node:stream';
14
- import './server/chunks/chunks/shared.js-B0m3s2U9.js';
15
- import './server/chunks/chunks/internal.js-7MmaxxwZ.js';
14
+ import './server/chunks/chunks/shared.js-WozvTiX9.js';
15
+ import './server/chunks/chunks/internal.js-C1qRAVdt.js';
16
16
  import 'node:module';
17
- import './server/chunks/chunks/utils.js-BXV0zq44.js';
18
- import './server/chunks/index.js-CSCxgyyg.js';
17
+ import './server/chunks/chunks/utils.js-UxJ7asYr.js';
18
+ import './server/chunks/index.js-BThzb8OA.js';
19
19
  import './server/chunks/chunks/internal2.js-BlXt2rfE.js';
20
- import './server/chunks/chunks/exports.js-bhKV7cEL.js';
20
+ import './server/chunks/chunks/exports.js-D4wm01VC.js';
21
21
  import './server/chunks/chunks/routing.js-y-tryuip.js';
22
- import './server/chunks/manifest.js-CO6AjAUm.js';
22
+ import './server/chunks/manifest.js-oxAZ63GO.js';
23
23
  import 'node:url';
24
24
 
25
25
  const path = env('SOCKET_PATH', false);
@@ -4,8 +4,8 @@ import { c as collectAllReferences, a as assetIdError, b as computeLibraryMember
4
4
  import { v as validateDependencyList, f as formatRequiredBy } from './dependencies.js-pUkjICr5.js';
5
5
  import { v as verifyStableRawFile, c as classifyRawDirectory } from './raw-reconciliation2.js-Bo1jJgvd.js';
6
6
  import { createRequire } from 'node:module';
7
- import { isAbsolute, resolve, join, dirname, extname, relative, sep } from 'node:path';
8
- import { existsSync, readFileSync } from 'node:fs';
7
+ import { isAbsolute, resolve, basename, dirname, join, extname, relative, sep } from 'node:path';
8
+ import { existsSync, watch, readFileSync } from 'node:fs';
9
9
  import { createJiti } from 'jiti';
10
10
  import { readFile, realpath } from 'node:fs/promises';
11
11
  import { execFile } from 'node:child_process';
@@ -212,6 +212,80 @@ async function loadConfig(projectRoot) {
212
212
  };
213
213
  }
214
214
  //#endregion
215
+ //#region src/lib/server/library-watcher.ts
216
+ /**
217
+ * Watches the library file and the raw directory for out-of-band changes — the
218
+ * CLI writing the library, or another process moving/renaming/deleting raw
219
+ * files — and notifies subscribers so the editor can reconcile without waiting
220
+ * for a window-focus refresh.
221
+ *
222
+ * Watching starts on the first subscriber and stops on the last, so a process
223
+ * that never subscribes (the CLI builds its own `FundusOperations`) never opens
224
+ * a file-system watch. A change the editor itself caused also fires here; the
225
+ * resulting reconcile is idempotent and coalesced, so a redundant refresh costs
226
+ * one no-op request — and that same property syncs edits made in one browser
227
+ * tab to every other open tab.
228
+ */
229
+ /** How long to collect burst file-system events into a single notification. */
230
+ var DEBOUNCE_MS = 200;
231
+ var LibraryWatcher = class {
232
+ #specs;
233
+ #listeners = /* @__PURE__ */ new Set();
234
+ #watchers = [];
235
+ #debounce = null;
236
+ constructor(config) {
237
+ const libraryName = basename(config.library);
238
+ this.#specs = [{
239
+ dir: dirname(config.library),
240
+ recursive: false,
241
+ accept: (filename) => filename === null || filename === libraryName
242
+ }, {
243
+ dir: resolve(config.rawDir),
244
+ recursive: true,
245
+ accept: () => true
246
+ }];
247
+ }
248
+ /** Register a listener, starting the watch on the first and stopping on the last. */
249
+ subscribe(listener) {
250
+ this.#listeners.add(listener);
251
+ if (this.#listeners.size === 1) this.#start();
252
+ return () => {
253
+ if (!this.#listeners.delete(listener)) return;
254
+ if (this.#listeners.size === 0) this.#stop();
255
+ };
256
+ }
257
+ #start() {
258
+ for (const spec of this.#specs) try {
259
+ const watcher = watch(spec.dir, {
260
+ recursive: spec.recursive,
261
+ persistent: false
262
+ }, (_event, filename) => {
263
+ if (spec.accept(typeof filename === "string" ? filename : null)) this.#schedule();
264
+ });
265
+ watcher.on("error", () => {});
266
+ this.#watchers.push(watcher);
267
+ } catch {}
268
+ }
269
+ #stop() {
270
+ if (this.#debounce) {
271
+ clearTimeout(this.#debounce);
272
+ this.#debounce = null;
273
+ }
274
+ for (const watcher of this.#watchers) watcher.close();
275
+ this.#watchers = [];
276
+ }
277
+ #schedule() {
278
+ if (this.#debounce) clearTimeout(this.#debounce);
279
+ this.#debounce = setTimeout(() => {
280
+ this.#debounce = null;
281
+ for (const listener of [...this.#listeners]) try {
282
+ listener();
283
+ } catch {}
284
+ }, DEBOUNCE_MS);
285
+ this.#debounce.unref?.();
286
+ }
287
+ };
288
+ //#endregion
215
289
  //#region src/lib/server/raw-safety.ts
216
290
  function rawSafetyIssueKey(issue) {
217
291
  return `${issue.kind}|${issue.assetId ?? ""}|${issue.path}`;
@@ -2401,9 +2475,10 @@ async function createFundusContext() {
2401
2475
  const config = await loadConfig(projectRoot);
2402
2476
  return {
2403
2477
  config,
2404
- operations: new FundusOperations(config)
2478
+ operations: new FundusOperations(config),
2479
+ watcher: new LibraryWatcher(config)
2405
2480
  };
2406
2481
  }
2407
2482
 
2408
2483
  export { getFundusContext as g, initializeFundusContext as i };
2409
- //# sourceMappingURL=context.js-BIgcUcEl.js.map
2484
+ //# sourceMappingURL=context.js-4TO_atTF.js.map