@superblocksteam/vite-plugin-file-sync 2.0.3-next.100

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 (558) hide show
  1. package/LICENSE.txt +87 -0
  2. package/dist/ai-service/artifacts/bolt.d.ts +8 -0
  3. package/dist/ai-service/artifacts/bolt.d.ts.map +1 -0
  4. package/dist/ai-service/artifacts/bolt.js +34 -0
  5. package/dist/ai-service/artifacts/bolt.js.map +1 -0
  6. package/dist/ai-service/const.d.ts +8 -0
  7. package/dist/ai-service/const.d.ts.map +1 -0
  8. package/dist/ai-service/const.js +9 -0
  9. package/dist/ai-service/const.js.map +1 -0
  10. package/dist/ai-service/eval/template-renderer.d.ts +13 -0
  11. package/dist/ai-service/eval/template-renderer.d.ts.map +1 -0
  12. package/dist/ai-service/eval/template-renderer.js +66 -0
  13. package/dist/ai-service/eval/template-renderer.js.map +1 -0
  14. package/dist/ai-service/index.d.ts +18 -0
  15. package/dist/ai-service/index.d.ts.map +1 -0
  16. package/dist/ai-service/index.js +140 -0
  17. package/dist/ai-service/index.js.map +1 -0
  18. package/dist/ai-service/integrations/const.d.ts +41 -0
  19. package/dist/ai-service/integrations/const.d.ts.map +1 -0
  20. package/dist/ai-service/integrations/const.js +76 -0
  21. package/dist/ai-service/integrations/const.js.map +1 -0
  22. package/dist/ai-service/integrations/from-prompt-context.d.ts +4 -0
  23. package/dist/ai-service/integrations/from-prompt-context.d.ts.map +1 -0
  24. package/dist/ai-service/integrations/from-prompt-context.js +56 -0
  25. package/dist/ai-service/integrations/from-prompt-context.js.map +1 -0
  26. package/dist/ai-service/integrations/to-sdk-prompt.d.ts +3 -0
  27. package/dist/ai-service/integrations/to-sdk-prompt.d.ts.map +1 -0
  28. package/dist/ai-service/integrations/to-sdk-prompt.js +47 -0
  29. package/dist/ai-service/integrations/to-sdk-prompt.js.map +1 -0
  30. package/dist/ai-service/integrations/types.d.ts +31 -0
  31. package/dist/ai-service/integrations/types.d.ts.map +1 -0
  32. package/dist/ai-service/integrations/types.js +2 -0
  33. package/dist/ai-service/integrations/types.js.map +1 -0
  34. package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.d.ts +2 -0
  35. package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.d.ts.map +1 -0
  36. package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.js +386 -0
  37. package/dist/ai-service/prompts/draft-subprompts/superblocks-api-draft.js.map +1 -0
  38. package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.d.ts +2 -0
  39. package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.d.ts.map +1 -0
  40. package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.js +219 -0
  41. package/dist/ai-service/prompts/draft-subprompts/superblocks-layouts-with-grid-examples.js.map +1 -0
  42. package/dist/ai-service/prompts/generated/index.d.ts +4 -0
  43. package/dist/ai-service/prompts/generated/index.d.ts.map +1 -0
  44. package/dist/ai-service/prompts/generated/index.js +6 -0
  45. package/dist/ai-service/prompts/generated/index.js.map +1 -0
  46. package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.d.ts +2 -0
  47. package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.d.ts.map +1 -0
  48. package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.js +6 -0
  49. package/dist/ai-service/prompts/generated/library-components/SbButtonPropsDocs.js.map +1 -0
  50. package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.d.ts +2 -0
  51. package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.d.ts.map +1 -0
  52. package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.js +6 -0
  53. package/dist/ai-service/prompts/generated/library-components/SbCheckboxPropsDocs.js.map +1 -0
  54. package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.d.ts +2 -0
  55. package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.d.ts.map +1 -0
  56. package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.js +6 -0
  57. package/dist/ai-service/prompts/generated/library-components/SbColumnPropsDocs.js.map +1 -0
  58. package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.d.ts +2 -0
  59. package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.d.ts.map +1 -0
  60. package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.js +6 -0
  61. package/dist/ai-service/prompts/generated/library-components/SbContainerPropsDocs.js.map +1 -0
  62. package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.d.ts +2 -0
  63. package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.d.ts.map +1 -0
  64. package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.js +6 -0
  65. package/dist/ai-service/prompts/generated/library-components/SbDatePickerPropsDocs.js.map +1 -0
  66. package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.d.ts +2 -0
  67. package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.d.ts.map +1 -0
  68. package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.js +6 -0
  69. package/dist/ai-service/prompts/generated/library-components/SbDropdownPropsDocs.js.map +1 -0
  70. package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.d.ts +2 -0
  71. package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.d.ts.map +1 -0
  72. package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.js +6 -0
  73. package/dist/ai-service/prompts/generated/library-components/SbIconPropsDocs.js.map +1 -0
  74. package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.d.ts +2 -0
  75. package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.d.ts.map +1 -0
  76. package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.js +6 -0
  77. package/dist/ai-service/prompts/generated/library-components/SbImagePropsDocs.js.map +1 -0
  78. package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.d.ts +2 -0
  79. package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.d.ts.map +1 -0
  80. package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.js +6 -0
  81. package/dist/ai-service/prompts/generated/library-components/SbInputPropsDocs.js.map +1 -0
  82. package/dist/ai-service/prompts/generated/library-components/SbKeyValuePropsDocs.d.ts +2 -0
  83. package/dist/ai-service/prompts/generated/library-components/SbKeyValuePropsDocs.d.ts.map +1 -0
  84. package/dist/ai-service/prompts/generated/library-components/SbKeyValuePropsDocs.js +6 -0
  85. package/dist/ai-service/prompts/generated/library-components/SbKeyValuePropsDocs.js.map +1 -0
  86. package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.d.ts +2 -0
  87. package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.d.ts.map +1 -0
  88. package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.js +6 -0
  89. package/dist/ai-service/prompts/generated/library-components/SbModalPropsDocs.js.map +1 -0
  90. package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.d.ts +2 -0
  91. package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.d.ts.map +1 -0
  92. package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.js +6 -0
  93. package/dist/ai-service/prompts/generated/library-components/SbPagePropsDocs.js.map +1 -0
  94. package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.d.ts +2 -0
  95. package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.d.ts.map +1 -0
  96. package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.js +6 -0
  97. package/dist/ai-service/prompts/generated/library-components/SbSectionPropsDocs.js.map +1 -0
  98. package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.d.ts +2 -0
  99. package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.d.ts.map +1 -0
  100. package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.js +6 -0
  101. package/dist/ai-service/prompts/generated/library-components/SbSlideoutPropsDocs.js.map +1 -0
  102. package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.d.ts +2 -0
  103. package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.d.ts.map +1 -0
  104. package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.js +6 -0
  105. package/dist/ai-service/prompts/generated/library-components/SbSwitchPropsDocs.js.map +1 -0
  106. package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.d.ts +2 -0
  107. package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.d.ts.map +1 -0
  108. package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.js +6 -0
  109. package/dist/ai-service/prompts/generated/library-components/SbTablePropsDocs.js.map +1 -0
  110. package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.d.ts +2 -0
  111. package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.d.ts.map +1 -0
  112. package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.js +6 -0
  113. package/dist/ai-service/prompts/generated/library-components/SbTextPropsDocs.js.map +1 -0
  114. package/dist/ai-service/prompts/generated/library-components/index.d.ts +18 -0
  115. package/dist/ai-service/prompts/generated/library-components/index.d.ts.map +1 -0
  116. package/dist/ai-service/prompts/generated/library-components/index.js +20 -0
  117. package/dist/ai-service/prompts/generated/library-components/index.js.map +1 -0
  118. package/dist/ai-service/prompts/generated/library-typedefs/Dim.d.ts +2 -0
  119. package/dist/ai-service/prompts/generated/library-typedefs/Dim.d.ts.map +1 -0
  120. package/dist/ai-service/prompts/generated/library-typedefs/Dim.js +6 -0
  121. package/dist/ai-service/prompts/generated/library-typedefs/Dim.js.map +1 -0
  122. package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.d.ts +2 -0
  123. package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.d.ts.map +1 -0
  124. package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.js +6 -0
  125. package/dist/ai-service/prompts/generated/library-typedefs/SbEventFlow.js.map +1 -0
  126. package/dist/ai-service/prompts/generated/library-typedefs/index.d.ts +3 -0
  127. package/dist/ai-service/prompts/generated/library-typedefs/index.d.ts.map +1 -0
  128. package/dist/ai-service/prompts/generated/library-typedefs/index.js +5 -0
  129. package/dist/ai-service/prompts/generated/library-typedefs/index.js.map +1 -0
  130. package/dist/ai-service/prompts/generated/subprompts/index.d.ts +11 -0
  131. package/dist/ai-service/prompts/generated/subprompts/index.d.ts.map +1 -0
  132. package/dist/ai-service/prompts/generated/subprompts/index.js +13 -0
  133. package/dist/ai-service/prompts/generated/subprompts/index.js.map +1 -0
  134. package/dist/ai-service/prompts/generated/subprompts/superblocks-api.d.ts +2 -0
  135. package/dist/ai-service/prompts/generated/subprompts/superblocks-api.d.ts.map +1 -0
  136. package/dist/ai-service/prompts/generated/subprompts/superblocks-api.js +6 -0
  137. package/dist/ai-service/prompts/generated/subprompts/superblocks-api.js.map +1 -0
  138. package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.d.ts +2 -0
  139. package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.d.ts.map +1 -0
  140. package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.js +6 -0
  141. package/dist/ai-service/prompts/generated/subprompts/superblocks-components-rules.js.map +1 -0
  142. package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.d.ts +2 -0
  143. package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.d.ts.map +1 -0
  144. package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.js +6 -0
  145. package/dist/ai-service/prompts/generated/subprompts/superblocks-custom-components.js.map +1 -0
  146. package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.d.ts +2 -0
  147. package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.d.ts.map +1 -0
  148. package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.js +6 -0
  149. package/dist/ai-service/prompts/generated/subprompts/superblocks-event-flow.js.map +1 -0
  150. package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.d.ts +2 -0
  151. package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.d.ts.map +1 -0
  152. package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.js +6 -0
  153. package/dist/ai-service/prompts/generated/subprompts/superblocks-layouts.js.map +1 -0
  154. package/dist/ai-service/prompts/generated/subprompts/superblocks-page.d.ts +2 -0
  155. package/dist/ai-service/prompts/generated/subprompts/superblocks-page.d.ts.map +1 -0
  156. package/dist/ai-service/prompts/generated/subprompts/superblocks-page.js +6 -0
  157. package/dist/ai-service/prompts/generated/subprompts/superblocks-page.js.map +1 -0
  158. package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.d.ts +2 -0
  159. package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.d.ts.map +1 -0
  160. package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.js +6 -0
  161. package/dist/ai-service/prompts/generated/subprompts/superblocks-routes.js.map +1 -0
  162. package/dist/ai-service/prompts/generated/subprompts/superblocks-state.d.ts +2 -0
  163. package/dist/ai-service/prompts/generated/subprompts/superblocks-state.d.ts.map +1 -0
  164. package/dist/ai-service/prompts/generated/subprompts/superblocks-state.js +6 -0
  165. package/dist/ai-service/prompts/generated/subprompts/superblocks-state.js.map +1 -0
  166. package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.d.ts +2 -0
  167. package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.d.ts.map +1 -0
  168. package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.js +6 -0
  169. package/dist/ai-service/prompts/generated/subprompts/superblocks-theming.js.map +1 -0
  170. package/dist/ai-service/prompts/generated/subprompts/system.d.ts +2 -0
  171. package/dist/ai-service/prompts/generated/subprompts/system.d.ts.map +1 -0
  172. package/dist/ai-service/prompts/generated/subprompts/system.js +6 -0
  173. package/dist/ai-service/prompts/generated/subprompts/system.js.map +1 -0
  174. package/dist/ai-service/prompts/markdown-loader.d.ts +10 -0
  175. package/dist/ai-service/prompts/markdown-loader.d.ts.map +1 -0
  176. package/dist/ai-service/prompts/markdown-loader.js +65 -0
  177. package/dist/ai-service/prompts/markdown-loader.js.map +1 -0
  178. package/dist/ai-service/prompts/system.d.ts +2 -0
  179. package/dist/ai-service/prompts/system.d.ts.map +1 -0
  180. package/dist/ai-service/prompts/system.js +152 -0
  181. package/dist/ai-service/prompts/system.js.map +1 -0
  182. package/dist/ai-service/result-buffer/bolt.d.ts +15 -0
  183. package/dist/ai-service/result-buffer/bolt.d.ts.map +1 -0
  184. package/dist/ai-service/result-buffer/bolt.js +73 -0
  185. package/dist/ai-service/result-buffer/bolt.js.map +1 -0
  186. package/dist/ai-service/result-buffer/shared.d.ts +13 -0
  187. package/dist/ai-service/result-buffer/shared.d.ts.map +1 -0
  188. package/dist/ai-service/result-buffer/shared.js +7 -0
  189. package/dist/ai-service/result-buffer/shared.js.map +1 -0
  190. package/dist/ai-service/state-machine/clark-fsm.d.ts +158 -0
  191. package/dist/ai-service/state-machine/clark-fsm.d.ts.map +1 -0
  192. package/dist/ai-service/state-machine/clark-fsm.js +62 -0
  193. package/dist/ai-service/state-machine/clark-fsm.js.map +1 -0
  194. package/dist/ai-service/state-machine/fsm.d.ts +42 -0
  195. package/dist/ai-service/state-machine/fsm.d.ts.map +1 -0
  196. package/dist/ai-service/state-machine/fsm.js +55 -0
  197. package/dist/ai-service/state-machine/fsm.js.map +1 -0
  198. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts +3 -0
  199. package/dist/ai-service/state-machine/handlers/agent-planning.d.ts.map +1 -0
  200. package/dist/ai-service/state-machine/handlers/agent-planning.js +209 -0
  201. package/dist/ai-service/state-machine/handlers/agent-planning.js.map +1 -0
  202. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts +3 -0
  203. package/dist/ai-service/state-machine/handlers/awaiting-user.d.ts.map +1 -0
  204. package/dist/ai-service/state-machine/handlers/awaiting-user.js +21 -0
  205. package/dist/ai-service/state-machine/handlers/awaiting-user.js.map +1 -0
  206. package/dist/ai-service/state-machine/handlers/idle.d.ts +3 -0
  207. package/dist/ai-service/state-machine/handlers/idle.d.ts.map +1 -0
  208. package/dist/ai-service/state-machine/handlers/idle.js +22 -0
  209. package/dist/ai-service/state-machine/handlers/idle.js.map +1 -0
  210. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts +3 -0
  211. package/dist/ai-service/state-machine/handlers/llm-generating.d.ts.map +1 -0
  212. package/dist/ai-service/state-machine/handlers/llm-generating.js +123 -0
  213. package/dist/ai-service/state-machine/handlers/llm-generating.js.map +1 -0
  214. package/dist/ai-service/state-machine/handlers/play-dead.d.ts +3 -0
  215. package/dist/ai-service/state-machine/handlers/play-dead.d.ts.map +1 -0
  216. package/dist/ai-service/state-machine/handlers/play-dead.js +11 -0
  217. package/dist/ai-service/state-machine/handlers/play-dead.js.map +1 -0
  218. package/dist/ai-service/state-machine/handlers/post-processing.d.ts +3 -0
  219. package/dist/ai-service/state-machine/handlers/post-processing.d.ts.map +1 -0
  220. package/dist/ai-service/state-machine/handlers/post-processing.js +50 -0
  221. package/dist/ai-service/state-machine/handlers/post-processing.js.map +1 -0
  222. package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts +3 -0
  223. package/dist/ai-service/state-machine/handlers/runtime-reviewing.d.ts.map +1 -0
  224. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js +37 -0
  225. package/dist/ai-service/state-machine/handlers/runtime-reviewing.js.map +1 -0
  226. package/dist/ai-service/state-machine/helpers/metadata.d.ts +6 -0
  227. package/dist/ai-service/state-machine/helpers/metadata.d.ts.map +1 -0
  228. package/dist/ai-service/state-machine/helpers/metadata.js +11 -0
  229. package/dist/ai-service/state-machine/helpers/metadata.js.map +1 -0
  230. package/dist/ai-service/state-machine/helpers/peer.d.ts +5 -0
  231. package/dist/ai-service/state-machine/helpers/peer.d.ts.map +1 -0
  232. package/dist/ai-service/state-machine/helpers/peer.js +7 -0
  233. package/dist/ai-service/state-machine/helpers/peer.js.map +1 -0
  234. package/dist/ai-service/state-machine/helpers/transition.d.ts +13 -0
  235. package/dist/ai-service/state-machine/helpers/transition.d.ts.map +1 -0
  236. package/dist/ai-service/state-machine/helpers/transition.js +6 -0
  237. package/dist/ai-service/state-machine/helpers/transition.js.map +1 -0
  238. package/dist/ai-service/state-machine/mocks.d.ts +7 -0
  239. package/dist/ai-service/state-machine/mocks.d.ts.map +1 -0
  240. package/dist/ai-service/state-machine/mocks.js +63 -0
  241. package/dist/ai-service/state-machine/mocks.js.map +1 -0
  242. package/dist/ai-service/state-machine/test-util.d.ts +5 -0
  243. package/dist/ai-service/state-machine/test-util.d.ts.map +1 -0
  244. package/dist/ai-service/state-machine/test-util.js +29 -0
  245. package/dist/ai-service/state-machine/test-util.js.map +1 -0
  246. package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.d.ts +21 -0
  247. package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.d.ts.map +1 -0
  248. package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.js +47 -0
  249. package/dist/ai-service/transform/add-metadata-to-api-yaml/transformer.js.map +1 -0
  250. package/dist/ai-service/transform/api-builder/shared.d.ts +11 -0
  251. package/dist/ai-service/transform/api-builder/shared.d.ts.map +1 -0
  252. package/dist/ai-service/transform/api-builder/shared.js +53 -0
  253. package/dist/ai-service/transform/api-builder/shared.js.map +1 -0
  254. package/dist/ai-service/transform/api-builder/to-sdk-transformer.d.ts +27 -0
  255. package/dist/ai-service/transform/api-builder/to-sdk-transformer.d.ts.map +1 -0
  256. package/dist/ai-service/transform/api-builder/to-sdk-transformer.js +66 -0
  257. package/dist/ai-service/transform/api-builder/to-sdk-transformer.js.map +1 -0
  258. package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts +23 -0
  259. package/dist/ai-service/transform/api-builder/to-yaml-transformer.d.ts.map +1 -0
  260. package/dist/ai-service/transform/api-builder/to-yaml-transformer.js +59 -0
  261. package/dist/ai-service/transform/api-builder/to-yaml-transformer.js.map +1 -0
  262. package/dist/ai-service/transform/remove-api-builder-imports/transformer.d.ts +19 -0
  263. package/dist/ai-service/transform/remove-api-builder-imports/transformer.d.ts.map +1 -0
  264. package/dist/ai-service/transform/remove-api-builder-imports/transformer.js +45 -0
  265. package/dist/ai-service/transform/remove-api-builder-imports/transformer.js.map +1 -0
  266. package/dist/ai-service/transform/shared.d.ts +20 -0
  267. package/dist/ai-service/transform/shared.d.ts.map +1 -0
  268. package/dist/ai-service/transform/shared.js +132 -0
  269. package/dist/ai-service/transform/shared.js.map +1 -0
  270. package/dist/ai-service/transform/workaround-missing-sbapi/transformer.d.ts +17 -0
  271. package/dist/ai-service/transform/workaround-missing-sbapi/transformer.d.ts.map +1 -0
  272. package/dist/ai-service/transform/workaround-missing-sbapi/transformer.js +33 -0
  273. package/dist/ai-service/transform/workaround-missing-sbapi/transformer.js.map +1 -0
  274. package/dist/ai-service/types.d.ts +65 -0
  275. package/dist/ai-service/types.d.ts.map +1 -0
  276. package/dist/ai-service/types.js +2 -0
  277. package/dist/ai-service/types.js.map +1 -0
  278. package/dist/binding-extraction/extract-control-block-identifiers.d.ts +4 -0
  279. package/dist/binding-extraction/extract-control-block-identifiers.d.ts.map +1 -0
  280. package/dist/binding-extraction/extract-control-block-identifiers.js +86 -0
  281. package/dist/binding-extraction/extract-control-block-identifiers.js.map +1 -0
  282. package/dist/binding-extraction/extract-embedded-identifiers.d.ts +16 -0
  283. package/dist/binding-extraction/extract-embedded-identifiers.d.ts.map +1 -0
  284. package/dist/binding-extraction/extract-embedded-identifiers.js +100 -0
  285. package/dist/binding-extraction/extract-embedded-identifiers.js.map +1 -0
  286. package/dist/binding-extraction/extract-identifiers.d.ts +8 -0
  287. package/dist/binding-extraction/extract-identifiers.d.ts.map +1 -0
  288. package/dist/binding-extraction/extract-identifiers.js +150 -0
  289. package/dist/binding-extraction/extract-identifiers.js.map +1 -0
  290. package/dist/binding-extraction/extract-js-identifiers.d.ts +19 -0
  291. package/dist/binding-extraction/extract-js-identifiers.d.ts.map +1 -0
  292. package/dist/binding-extraction/extract-js-identifiers.js +161 -0
  293. package/dist/binding-extraction/extract-js-identifiers.js.map +1 -0
  294. package/dist/binding-extraction/extract-py-identifiers.d.ts +4 -0
  295. package/dist/binding-extraction/extract-py-identifiers.d.ts.map +1 -0
  296. package/dist/binding-extraction/extract-py-identifiers.js +161 -0
  297. package/dist/binding-extraction/extract-py-identifiers.js.map +1 -0
  298. package/dist/binding-extraction/shared.d.ts +225 -0
  299. package/dist/binding-extraction/shared.d.ts.map +1 -0
  300. package/dist/binding-extraction/shared.js +43 -0
  301. package/dist/binding-extraction/shared.js.map +1 -0
  302. package/dist/binding-extraction/template-strings.d.ts +9 -0
  303. package/dist/binding-extraction/template-strings.d.ts.map +1 -0
  304. package/dist/binding-extraction/template-strings.js +45 -0
  305. package/dist/binding-extraction/template-strings.js.map +1 -0
  306. package/dist/codegen.d.ts +26 -0
  307. package/dist/codegen.d.ts.map +1 -0
  308. package/dist/codegen.js +222 -0
  309. package/dist/codegen.js.map +1 -0
  310. package/dist/components-manager.d.ts +38 -0
  311. package/dist/components-manager.d.ts.map +1 -0
  312. package/dist/components-manager.js +177 -0
  313. package/dist/components-manager.js.map +1 -0
  314. package/dist/custom-components.d.ts +6 -0
  315. package/dist/custom-components.d.ts.map +1 -0
  316. package/dist/custom-components.js +51 -0
  317. package/dist/custom-components.js.map +1 -0
  318. package/dist/draft-interface.d.ts +11 -0
  319. package/dist/draft-interface.d.ts.map +1 -0
  320. package/dist/draft-interface.js +2 -0
  321. package/dist/draft-interface.js.map +1 -0
  322. package/dist/errors/error-handler.d.ts +35 -0
  323. package/dist/errors/error-handler.d.ts.map +1 -0
  324. package/dist/errors/error-handler.js +65 -0
  325. package/dist/errors/error-handler.js.map +1 -0
  326. package/dist/errors/make-server-error.d.ts +5 -0
  327. package/dist/errors/make-server-error.d.ts.map +1 -0
  328. package/dist/errors/make-server-error.js +21 -0
  329. package/dist/errors/make-server-error.js.map +1 -0
  330. package/dist/file-sync-vite-plugin.d.ts +4 -0
  331. package/dist/file-sync-vite-plugin.d.ts.map +1 -0
  332. package/dist/file-sync-vite-plugin.js +624 -0
  333. package/dist/file-sync-vite-plugin.js.map +1 -0
  334. package/dist/file-system-helpers.d.ts +7 -0
  335. package/dist/file-system-helpers.d.ts.map +1 -0
  336. package/dist/file-system-helpers.js +12 -0
  337. package/dist/file-system-helpers.js.map +1 -0
  338. package/dist/file-system-manager.d.ts +132 -0
  339. package/dist/file-system-manager.d.ts.map +1 -0
  340. package/dist/file-system-manager.js +1176 -0
  341. package/dist/file-system-manager.js.map +1 -0
  342. package/dist/generate.d.ts +8 -0
  343. package/dist/generate.d.ts.map +1 -0
  344. package/dist/generate.js +7 -0
  345. package/dist/generate.js.map +1 -0
  346. package/dist/ids.d.ts +2 -0
  347. package/dist/ids.d.ts.map +1 -0
  348. package/dist/ids.js +21 -0
  349. package/dist/ids.js.map +1 -0
  350. package/dist/index.d.ts +6 -0
  351. package/dist/index.d.ts.map +1 -0
  352. package/dist/index.js +6 -0
  353. package/dist/index.js.map +1 -0
  354. package/dist/injected-index.d.ts +12 -0
  355. package/dist/injected-index.d.ts.map +1 -0
  356. package/dist/injected-index.js +38 -0
  357. package/dist/injected-index.js.map +1 -0
  358. package/dist/lock-service/index.d.ts +93 -0
  359. package/dist/lock-service/index.d.ts.map +1 -0
  360. package/dist/lock-service/index.js +267 -0
  361. package/dist/lock-service/index.js.map +1 -0
  362. package/dist/parsing/bindings.d.ts +4 -0
  363. package/dist/parsing/bindings.d.ts.map +1 -0
  364. package/dist/parsing/bindings.js +17 -0
  365. package/dist/parsing/bindings.js.map +1 -0
  366. package/dist/parsing/computed/to-code-computed.d.ts +2 -0
  367. package/dist/parsing/computed/to-code-computed.d.ts.map +1 -0
  368. package/dist/parsing/computed/to-code-computed.js +39 -0
  369. package/dist/parsing/computed/to-code-computed.js.map +1 -0
  370. package/dist/parsing/computed/to-value-computed.d.ts +4 -0
  371. package/dist/parsing/computed/to-value-computed.d.ts.map +1 -0
  372. package/dist/parsing/computed/to-value-computed.js +13 -0
  373. package/dist/parsing/computed/to-value-computed.js.map +1 -0
  374. package/dist/parsing/dim/to-code-dimensions.d.ts +3 -0
  375. package/dist/parsing/dim/to-code-dimensions.d.ts.map +1 -0
  376. package/dist/parsing/dim/to-code-dimensions.js +22 -0
  377. package/dist/parsing/dim/to-code-dimensions.js.map +1 -0
  378. package/dist/parsing/dim/to-value-dimensions.d.ts +4 -0
  379. package/dist/parsing/dim/to-value-dimensions.d.ts.map +1 -0
  380. package/dist/parsing/dim/to-value-dimensions.js +39 -0
  381. package/dist/parsing/dim/to-value-dimensions.js.map +1 -0
  382. package/dist/parsing/entity/index.d.ts +8 -0
  383. package/dist/parsing/entity/index.d.ts.map +1 -0
  384. package/dist/parsing/entity/index.js +8 -0
  385. package/dist/parsing/entity/index.js.map +1 -0
  386. package/dist/parsing/entity/to-code-entity.d.ts +3 -0
  387. package/dist/parsing/entity/to-code-entity.d.ts.map +1 -0
  388. package/dist/parsing/entity/to-code-entity.js +41 -0
  389. package/dist/parsing/entity/to-code-entity.js.map +1 -0
  390. package/dist/parsing/entity/to-value-entity.d.ts +8 -0
  391. package/dist/parsing/entity/to-value-entity.d.ts.map +1 -0
  392. package/dist/parsing/entity/to-value-entity.js +120 -0
  393. package/dist/parsing/entity/to-value-entity.js.map +1 -0
  394. package/dist/parsing/events/to-code-events.d.ts +3 -0
  395. package/dist/parsing/events/to-code-events.d.ts.map +1 -0
  396. package/dist/parsing/events/to-code-events.js +86 -0
  397. package/dist/parsing/events/to-code-events.js.map +1 -0
  398. package/dist/parsing/events/to-value-events.d.ts +5 -0
  399. package/dist/parsing/events/to-value-events.d.ts.map +1 -0
  400. package/dist/parsing/events/to-value-events.js +157 -0
  401. package/dist/parsing/events/to-value-events.js.map +1 -0
  402. package/dist/parsing/ids.d.ts +17 -0
  403. package/dist/parsing/ids.d.ts.map +1 -0
  404. package/dist/parsing/ids.js +121 -0
  405. package/dist/parsing/ids.js.map +1 -0
  406. package/dist/parsing/imports.d.ts +6 -0
  407. package/dist/parsing/imports.d.ts.map +1 -0
  408. package/dist/parsing/imports.js +27 -0
  409. package/dist/parsing/imports.js.map +1 -0
  410. package/dist/parsing/jsx-utils.d.ts +9 -0
  411. package/dist/parsing/jsx-utils.d.ts.map +1 -0
  412. package/dist/parsing/jsx-utils.js +42 -0
  413. package/dist/parsing/jsx-utils.js.map +1 -0
  414. package/dist/parsing/jsx.d.ts +23 -0
  415. package/dist/parsing/jsx.d.ts.map +1 -0
  416. package/dist/parsing/jsx.js +329 -0
  417. package/dist/parsing/jsx.js.map +1 -0
  418. package/dist/parsing/page.d.ts +9 -0
  419. package/dist/parsing/page.d.ts.map +1 -0
  420. package/dist/parsing/page.js +156 -0
  421. package/dist/parsing/page.js.map +1 -0
  422. package/dist/parsing/properties.d.ts +5 -0
  423. package/dist/parsing/properties.d.ts.map +1 -0
  424. package/dist/parsing/properties.js +89 -0
  425. package/dist/parsing/properties.js.map +1 -0
  426. package/dist/parsing/scope.d.ts +81 -0
  427. package/dist/parsing/scope.d.ts.map +1 -0
  428. package/dist/parsing/scope.js +575 -0
  429. package/dist/parsing/scope.js.map +1 -0
  430. package/dist/parsing/template/to-code-template.d.ts +2 -0
  431. package/dist/parsing/template/to-code-template.d.ts.map +1 -0
  432. package/dist/parsing/template/to-code-template.js +5 -0
  433. package/dist/parsing/template/to-code-template.js.map +1 -0
  434. package/dist/parsing/template/to-value-template.d.ts +4 -0
  435. package/dist/parsing/template/to-value-template.d.ts.map +1 -0
  436. package/dist/parsing/template/to-value-template.js +19 -0
  437. package/dist/parsing/template/to-value-template.js.map +1 -0
  438. package/dist/parsing/theme.d.ts +3 -0
  439. package/dist/parsing/theme.d.ts.map +1 -0
  440. package/dist/parsing/theme.js +87 -0
  441. package/dist/parsing/theme.js.map +1 -0
  442. package/dist/parsing/type-parsing-registry.d.ts +18 -0
  443. package/dist/parsing/type-parsing-registry.d.ts.map +1 -0
  444. package/dist/parsing/type-parsing-registry.js +31 -0
  445. package/dist/parsing/type-parsing-registry.js.map +1 -0
  446. package/dist/parsing/util.d.ts +31 -0
  447. package/dist/parsing/util.d.ts.map +1 -0
  448. package/dist/parsing/util.js +322 -0
  449. package/dist/parsing/util.js.map +1 -0
  450. package/dist/plugin-options.d.ts +25 -0
  451. package/dist/plugin-options.d.ts.map +1 -0
  452. package/dist/plugin-options.js +14 -0
  453. package/dist/plugin-options.js.map +1 -0
  454. package/dist/refactor/blocks.d.ts +10 -0
  455. package/dist/refactor/blocks.d.ts.map +1 -0
  456. package/dist/refactor/blocks.js +214 -0
  457. package/dist/refactor/blocks.js.map +1 -0
  458. package/dist/refactor/javascript.d.ts +15 -0
  459. package/dist/refactor/javascript.d.ts.map +1 -0
  460. package/dist/refactor/javascript.js +182 -0
  461. package/dist/refactor/javascript.js.map +1 -0
  462. package/dist/refactor-jsx.d.ts +28 -0
  463. package/dist/refactor-jsx.d.ts.map +1 -0
  464. package/dist/refactor-jsx.js +77 -0
  465. package/dist/refactor-jsx.js.map +1 -0
  466. package/dist/rename-manager.d.ts +27 -0
  467. package/dist/rename-manager.d.ts.map +1 -0
  468. package/dist/rename-manager.js +140 -0
  469. package/dist/rename-manager.js.map +1 -0
  470. package/dist/routing.d.ts +6 -0
  471. package/dist/routing.d.ts.map +1 -0
  472. package/dist/routing.js +76 -0
  473. package/dist/routing.js.map +1 -0
  474. package/dist/sb-scope-manager.d.ts +102 -0
  475. package/dist/sb-scope-manager.d.ts.map +1 -0
  476. package/dist/sb-scope-manager.js +501 -0
  477. package/dist/sb-scope-manager.js.map +1 -0
  478. package/dist/socket-manager.d.ts +40 -0
  479. package/dist/socket-manager.d.ts.map +1 -0
  480. package/dist/socket-manager.js +174 -0
  481. package/dist/socket-manager.js.map +1 -0
  482. package/dist/source-tracker.d.ts +190 -0
  483. package/dist/source-tracker.d.ts.map +1 -0
  484. package/dist/source-tracker.js +967 -0
  485. package/dist/source-tracker.js.map +1 -0
  486. package/dist/sync-service/download.d.ts +15 -0
  487. package/dist/sync-service/download.d.ts.map +1 -0
  488. package/dist/sync-service/download.js +116 -0
  489. package/dist/sync-service/download.js.map +1 -0
  490. package/dist/sync-service/draft-helpers.d.ts +68 -0
  491. package/dist/sync-service/draft-helpers.d.ts.map +1 -0
  492. package/dist/sync-service/draft-helpers.js +362 -0
  493. package/dist/sync-service/draft-helpers.js.map +1 -0
  494. package/dist/sync-service/hash-cache.d.ts +15 -0
  495. package/dist/sync-service/hash-cache.d.ts.map +1 -0
  496. package/dist/sync-service/hash-cache.js +58 -0
  497. package/dist/sync-service/hash-cache.js.map +1 -0
  498. package/dist/sync-service/hash-dir-tree.d.ts +10 -0
  499. package/dist/sync-service/hash-dir-tree.d.ts.map +1 -0
  500. package/dist/sync-service/hash-dir-tree.js +53 -0
  501. package/dist/sync-service/hash-dir-tree.js.map +1 -0
  502. package/dist/sync-service/index.d.ts +134 -0
  503. package/dist/sync-service/index.d.ts.map +1 -0
  504. package/dist/sync-service/index.js +323 -0
  505. package/dist/sync-service/index.js.map +1 -0
  506. package/dist/sync-service/list-dir.d.ts +29 -0
  507. package/dist/sync-service/list-dir.d.ts.map +1 -0
  508. package/dist/sync-service/list-dir.js +66 -0
  509. package/dist/sync-service/list-dir.js.map +1 -0
  510. package/dist/sync-service/server-rpc/client.d.ts +13 -0
  511. package/dist/sync-service/server-rpc/client.d.ts.map +1 -0
  512. package/dist/sync-service/server-rpc/client.js +62 -0
  513. package/dist/sync-service/server-rpc/client.js.map +1 -0
  514. package/dist/sync-service/server-rpc/handlers.d.ts +3 -0
  515. package/dist/sync-service/server-rpc/handlers.d.ts.map +1 -0
  516. package/dist/sync-service/server-rpc/handlers.js +18 -0
  517. package/dist/sync-service/server-rpc/handlers.js.map +1 -0
  518. package/dist/sync-service/snapshot/take-snapshot.d.ts +38 -0
  519. package/dist/sync-service/snapshot/take-snapshot.d.ts.map +1 -0
  520. package/dist/sync-service/snapshot/take-snapshot.js +232 -0
  521. package/dist/sync-service/snapshot/take-snapshot.js.map +1 -0
  522. package/dist/sync-service/snapshot/types.d.ts +24 -0
  523. package/dist/sync-service/snapshot/types.d.ts.map +1 -0
  524. package/dist/sync-service/snapshot/types.js +3 -0
  525. package/dist/sync-service/snapshot/types.js.map +1 -0
  526. package/dist/sync-service/snapshot/upload-snapshot.d.ts +5 -0
  527. package/dist/sync-service/snapshot/upload-snapshot.d.ts.map +1 -0
  528. package/dist/sync-service/snapshot/upload-snapshot.js +63 -0
  529. package/dist/sync-service/snapshot/upload-snapshot.js.map +1 -0
  530. package/dist/traverse.d.ts +6 -0
  531. package/dist/traverse.d.ts.map +1 -0
  532. package/dist/traverse.js +7 -0
  533. package/dist/traverse.js.map +1 -0
  534. package/dist/util/generation-number-sequence.d.ts +7 -0
  535. package/dist/util/generation-number-sequence.d.ts.map +1 -0
  536. package/dist/util/generation-number-sequence.js +13 -0
  537. package/dist/util/generation-number-sequence.js.map +1 -0
  538. package/dist/util/logger.d.ts +22 -0
  539. package/dist/util/logger.d.ts.map +1 -0
  540. package/dist/util/logger.js +64 -0
  541. package/dist/util/logger.js.map +1 -0
  542. package/dist/util/operation-queue.d.ts +17 -0
  543. package/dist/util/operation-queue.d.ts.map +1 -0
  544. package/dist/util/operation-queue.js +27 -0
  545. package/dist/util/operation-queue.js.map +1 -0
  546. package/dist/util/tracing.d.ts +4 -0
  547. package/dist/util/tracing.d.ts.map +1 -0
  548. package/dist/util/tracing.js +19 -0
  549. package/dist/util/tracing.js.map +1 -0
  550. package/dist/util/with-resolvers.d.ts +10 -0
  551. package/dist/util/with-resolvers.d.ts.map +1 -0
  552. package/dist/util/with-resolvers.js +14 -0
  553. package/dist/util/with-resolvers.js.map +1 -0
  554. package/dist/util.d.ts +26 -0
  555. package/dist/util.d.ts.map +1 -0
  556. package/dist/util.js +82 -0
  557. package/dist/util.js.map +1 -0
  558. package/package.json +126 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft-helpers.js","sourceRoot":"","sources":["../../src/sync-service/draft-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { DirectorySnapshot, DirectoryState } from "./snapshot/types.js";
2
+ /**
3
+ * A cache of hashes of DBFS objects that we know that are already stored in the server.
4
+ */
5
+ export declare class HashCache {
6
+ private directories;
7
+ private file_contents;
8
+ private now;
9
+ add_directory(hash: string): void;
10
+ add_file_content(hash: string): void;
11
+ add_directory_recursive(directory: DirectoryState | DirectorySnapshot): void;
12
+ check_directory(hash: string): boolean;
13
+ check_file_content(hash: string): boolean;
14
+ }
15
+ //# sourceMappingURL=hash-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-cache.d.ts","sourceRoot":"","sources":["../../src/sync-service/hash-cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAS7E;;GAEG;AACH,qBAAa,SAAS;IAGpB,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,aAAa,CAA6B;IAElD,OAAO,CAAC,GAAG;IAIX,aAAa,CAAC,IAAI,EAAE,MAAM;IAI1B,gBAAgB,CAAC,IAAI,EAAE,MAAM;IAI7B,uBAAuB,CAAC,SAAS,EAAE,cAAc,GAAG,iBAAiB;IAWrE,eAAe,CAAC,IAAI,EAAE,MAAM;IAY5B,kBAAkB,CAAC,IAAI,EAAE,MAAM;CAWhC"}
@@ -0,0 +1,58 @@
1
+ /** How long after we've seen a hash in the server, we consider it to be still in the server. */
2
+ const CACHE_DURATION_MS = 1_000 * 60 * 60 * 6; // 6 hours
3
+ // TODO(george): We are not currently removing old entries from the cache after they expire. We only do this when one of the
4
+ // `check_*` methods is called. If a hash is added to the cache but never checked, it will never be removed from the cache.
5
+ // This causes a memory leak. This can be a problem if the user has a large number of files in their project and/or if they are
6
+ // keeping the dev server running for a long time.
7
+ /**
8
+ * A cache of hashes of DBFS objects that we know that are already stored in the server.
9
+ */
10
+ export class HashCache {
11
+ // for both maps, the values are timestamps from the monotonic clock (`performance.now()`) that represent the time
12
+ // when we added the hash to the respective cache
13
+ directories = new Map();
14
+ file_contents = new Map();
15
+ now() {
16
+ return performance.now();
17
+ }
18
+ add_directory(hash) {
19
+ this.directories.set(hash, this.now());
20
+ }
21
+ add_file_content(hash) {
22
+ this.file_contents.set(hash, this.now());
23
+ }
24
+ add_directory_recursive(directory) {
25
+ this.add_directory(directory.hash);
26
+ for (const entry of directory.contents) {
27
+ if (entry.type === "d") {
28
+ this.add_directory_recursive(entry);
29
+ }
30
+ else if (entry.type === "-") {
31
+ this.add_file_content(entry.hash);
32
+ }
33
+ }
34
+ }
35
+ check_directory(hash) {
36
+ const timestamp = this.directories.get(hash);
37
+ if (timestamp === undefined) {
38
+ return false;
39
+ }
40
+ if (this.now() - timestamp > CACHE_DURATION_MS) {
41
+ this.directories.delete(hash);
42
+ return false;
43
+ }
44
+ return true;
45
+ }
46
+ check_file_content(hash) {
47
+ const timestamp = this.file_contents.get(hash);
48
+ if (timestamp === undefined) {
49
+ return false;
50
+ }
51
+ if (this.now() - timestamp > CACHE_DURATION_MS) {
52
+ this.file_contents.delete(hash);
53
+ return false;
54
+ }
55
+ return true;
56
+ }
57
+ }
58
+ //# sourceMappingURL=hash-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-cache.js","sourceRoot":"","sources":["../../src/sync-service/hash-cache.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,MAAM,iBAAiB,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,UAAU;AAEzD,4HAA4H;AAC5H,2HAA2H;AAC3H,+HAA+H;AAC/H,kDAAkD;AAClD;;GAEG;AACH,MAAM,OAAO,SAAS;IACpB,kHAAkH;IAClH,iDAAiD;IACzC,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,GAAG;QACT,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,aAAa,CAAC,IAAY;QACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,gBAAgB,CAAC,IAAY;QAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,uBAAuB,CAAC,SAA6C;QACnE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBACvB,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC9B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,IAAY;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import type { DirectoryState } from "./snapshot/types.js";
2
+ /**
3
+ * Computes the hash of a local directory, including the hashes of all its contents recursively.
4
+ *
5
+ * @param localDirectoryPath - The path to the local directory to hash.
6
+ * @param excludedDirectories - An array of directory names to be ignored.
7
+ * @returns A promise that resolves to the hash of the directory and its contents.
8
+ */
9
+ export declare function hashLocalDirectory(localDirectoryPath: string): Promise<DirectoryState>;
10
+ //# sourceMappingURL=hash-dir-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-dir-tree.d.ts","sourceRoot":"","sources":["../../src/sync-service/hash-dir-tree.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,cAAc,CAAC,CA0CzB"}
@@ -0,0 +1,53 @@
1
+ import { hashDirectoryContents, hashFileContents, } from "@superblocksteam/shared";
2
+ import { unreachable } from "@superblocksteam/util";
3
+ import { listLocalDirectory } from "./list-dir.js";
4
+ /**
5
+ * Computes the hash of a local directory, including the hashes of all its contents recursively.
6
+ *
7
+ * @param localDirectoryPath - The path to the local directory to hash.
8
+ * @param excludedDirectories - An array of directory names to be ignored.
9
+ * @returns A promise that resolves to the hash of the directory and its contents.
10
+ */
11
+ export async function hashLocalDirectory(localDirectoryPath) {
12
+ const directoryContents = [];
13
+ const localDirListing = listLocalDirectory(localDirectoryPath);
14
+ for await (const localDirEntry of localDirListing) {
15
+ let entry;
16
+ switch (localDirEntry.type) {
17
+ case "-": {
18
+ const hash = await hashFileContents(localDirEntry.contents);
19
+ entry = {
20
+ type: "-",
21
+ executable: localDirEntry.executable,
22
+ name: localDirEntry.name,
23
+ hash,
24
+ };
25
+ break;
26
+ }
27
+ case "d": {
28
+ const { hash, contents: subdirectoryContents } = await hashLocalDirectory(localDirEntry.localPath);
29
+ entry = {
30
+ type: "d",
31
+ name: localDirEntry.name,
32
+ hash,
33
+ contents: subdirectoryContents,
34
+ };
35
+ break;
36
+ }
37
+ case "l": {
38
+ entry = {
39
+ type: "l",
40
+ target: localDirEntry.target,
41
+ name: localDirEntry.name,
42
+ };
43
+ break;
44
+ }
45
+ default:
46
+ unreachable(localDirEntry);
47
+ }
48
+ directoryContents.push(entry);
49
+ }
50
+ const hash = await hashDirectoryContents(directoryContents);
51
+ return { contents: directoryContents, hash };
52
+ }
53
+ //# sourceMappingURL=hash-dir-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-dir-tree.js","sourceRoot":"","sources":["../../src/sync-service/hash-dir-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,kBAA0B;IAE1B,MAAM,iBAAiB,GAAyB,EAAE,CAAC;IACnD,MAAM,eAAe,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAC/D,IAAI,KAAK,EAAE,MAAM,aAAa,IAAI,eAAe,EAAE,CAAC;QAClD,IAAI,KAAyB,CAAC;QAC9B,QAAQ,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC5D,KAAK,GAAG;oBACN,IAAI,EAAE,GAAG;oBACT,UAAU,EAAE,aAAa,CAAC,UAAU;oBACpC,IAAI,EAAE,aAAa,CAAC,IAAI;oBACxB,IAAI;iBACL,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,GAC5C,MAAM,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBACpD,KAAK,GAAG;oBACN,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,aAAa,CAAC,IAAI;oBACxB,IAAI;oBACJ,QAAQ,EAAE,oBAAoB;iBAC/B,CAAC;gBACF,MAAM;YACR,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,KAAK,GAAG;oBACN,IAAI,EAAE,GAAG;oBACT,MAAM,EAAE,aAAa,CAAC,MAAM;oBAC5B,IAAI,EAAE,aAAa,CAAC,IAAI;iBACzB,CAAC;gBACF,MAAM;YACR,CAAC;YACD;gBACE,WAAW,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;QACD,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC5D,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,134 @@
1
+ import EventEmitter from "node:events";
2
+ import { SyncronizationStatus } from "@superblocksteam/library-shared/types";
3
+ import { type ErrorEventMap } from "../errors/error-handler.js";
4
+ import { OperationQueue } from "../util/operation-queue.js";
5
+ import type { DraftEventMap, DraftInterface } from "../draft-interface.js";
6
+ import type { LockService } from "../lock-service/index.js";
7
+ import type { GenerationNumberSequence } from "../util/generation-number-sequence.js";
8
+ export declare enum SyncServiceStatus {
9
+ /** The sync service is not currently syncing or scheduled to sync */
10
+ IDLE = "IDLE",
11
+ /** The sync service is scheduled to sync */
12
+ SCHEDULED = "SCHEDULED",
13
+ /** The sync service is currently syncing server -> local */
14
+ DOWNLOADING = "DOWNLOADING",
15
+ /** The sync service is currently syncing local -> server */
16
+ UPLOADING = "UPLOADING"
17
+ }
18
+ /** Configuration for the SyncService passed to the constructor */
19
+ export interface SyncServiceConfig {
20
+ fsOperationQueue: OperationQueue;
21
+ authToken: string;
22
+ superblocksBaseUrl: string;
23
+ appRootDirPath: string;
24
+ applicationId: string;
25
+ branchName: string;
26
+ lockService: LockService;
27
+ }
28
+ interface EventMap extends ErrorEventMap, DraftEventMap {
29
+ /** Emitted when the sync service status changes, which indicates what the service is currently doing */
30
+ statusChange: [
31
+ status: SyncServiceStatus,
32
+ /** The time when the next sync is scheduled to be performed, in milliseconds in the monotonic clock (`performance.now()`) */
33
+ scheduledSyncTime: number | undefined
34
+ ];
35
+ /** Emitted when the synchronization status changes, which indicates whether the server and local directories are in sync */
36
+ synchronizationStatusChange: [
37
+ status: SyncronizationStatus,
38
+ generationNumber: number | undefined
39
+ ];
40
+ }
41
+ export declare class SyncService extends EventEmitter<EventMap> implements DraftInterface {
42
+ private readonly authToken;
43
+ private readonly superblocksBaseUrl;
44
+ private readonly appRootDirPath;
45
+ private readonly applicationId;
46
+ private readonly branchName;
47
+ generationNumberSequence: GenerationNumberSequence | undefined;
48
+ private lastSyncedGenerationNumber;
49
+ private hashCache;
50
+ lastSyncedDirectoryHash: string | undefined;
51
+ private readonly fsOperationQueue;
52
+ private readonly syncOperationQueue;
53
+ /** This will be defined if (and only if) a sync is currently pending */
54
+ private pendingSyncUp;
55
+ private lockService;
56
+ private _status;
57
+ private _synchronizationStatus;
58
+ constructor(config: SyncServiceConfig);
59
+ /** The current status of the sync service, which indicates what the service is currently doing */
60
+ get status(): SyncServiceStatus;
61
+ private set status(value);
62
+ /** The current synchronization status, which indicates whether the server and local directories are in sync */
63
+ get synchronizationStatus(): SyncronizationStatus;
64
+ private set synchronizationStatus(value);
65
+ /**
66
+ * Enqueues a filesystem operation to be executed one at a time and avoiding conflicts with sync operations.
67
+ */
68
+ private fsOperation;
69
+ /**
70
+ * Pulls the application down from the server.
71
+ */
72
+ downloadDirectory(): Promise<void>;
73
+ /**
74
+ * Request a sync of the local application directory to the server.
75
+ *
76
+ * This method is asynchronous, in the sense that it does not wait for the sync to complete. It simply schedules
77
+ * a sync to happen in the future. The returned promise resolves as soon as the method has collected enough information
78
+ * to schedule the sync. So the caller must wait for the returned promise to resolve before performing any filesystem
79
+ * operations.
80
+ * This method is also idempotent.
81
+ */
82
+ uploadDirectory(): Promise<void>;
83
+ /**
84
+ * Requests an immediate sync of the local application directory to the server, if there are any pending changes.
85
+ * If there are no pending changes, the method returns immediately.
86
+ *
87
+ * @returns the dbfs hash of the most recent sync
88
+ */
89
+ uploadDirectoryNowIfNeeded(): Promise<string>;
90
+ private scheduleUploadDirectory;
91
+ /**
92
+ * Performs the actual upload of the local application directory to the server.
93
+ */
94
+ private performUploadDirectory;
95
+ /**
96
+ * Checks if there are any local draft changes (.sbswap.edit and .sbswap.add files).
97
+ *
98
+ * @returns A promise that resolves to true if any draft files are found, false otherwise.
99
+ */
100
+ hasLocalDraftChanges(): Promise<boolean>;
101
+ /**
102
+ * Gets information about current draft changes.
103
+ *
104
+ * @returns A promise that resolves to information about draft edits and additions.
105
+ */
106
+ getDraftChanges(): Promise<{
107
+ edits: string[];
108
+ additions: string[];
109
+ }>;
110
+ /**
111
+ * Creates a draft edit or addition for a file.
112
+ *
113
+ * @param filePath - The path to the file to edit or add (relative to app root).
114
+ * @param draftContent - The content of the draft edit or addition.
115
+ * @returns A promise that resolves when the draft edit or addition is created.
116
+ */
117
+ createDraftFile(filePath: string, draftContent: string | Buffer): Promise<void>;
118
+ /**
119
+ * Discards all local draft changes by restoring original files and removing draft additions.
120
+ *
121
+ * @returns A promise that resolves when all draft changes have been discarded.
122
+ */
123
+ discardLocalDraftChanges(): Promise<void>;
124
+ /**
125
+ * Commits all draft changes by removing .sbswap.edit and .sbswap.add markers.
126
+ * This makes the current filesystem state the committed state.
127
+ *
128
+ * @returns A promise that resolves when all drafts have been committed.
129
+ */
130
+ commitLocalDraftChanges(): Promise<void>;
131
+ private getRpcClient;
132
+ }
133
+ export {};
134
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync-service/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,323 @@
1
+ import EventEmitter from "node:events";
2
+ import { SyncronizationStatus } from "@superblocksteam/library-shared/types";
3
+ import { applyErrorHandling, } from "../errors/error-handler.js";
4
+ import { makeServerError } from "../errors/make-server-error.js";
5
+ import { getErrorMeta, getLogger } from "../util/logger.js";
6
+ import { OperationQueue } from "../util/operation-queue.js";
7
+ import { withResolvers } from "../util/with-resolvers.js";
8
+ import { downloadApplicationDirectory } from "./download.js";
9
+ import { hasSwapFiles, discardAllDrafts, commitAllDrafts, getDraftInfo, createDraft, } from "./draft-helpers.js";
10
+ import { HashCache } from "./hash-cache.js";
11
+ import { connectToISocketRPCServer, unwrapResponseDto, } from "./server-rpc/client.js";
12
+ import { snapshotLocalDirectoryCommittedState } from "./snapshot/take-snapshot.js";
13
+ import { uploadDirectorySnapshot } from "./snapshot/upload-snapshot.js";
14
+ const SYNC_INTERVAL_MS = 10_000;
15
+ export var SyncServiceStatus;
16
+ (function (SyncServiceStatus) {
17
+ /** The sync service is not currently syncing or scheduled to sync */
18
+ SyncServiceStatus["IDLE"] = "IDLE";
19
+ /** The sync service is scheduled to sync */
20
+ SyncServiceStatus["SCHEDULED"] = "SCHEDULED";
21
+ /** The sync service is currently syncing server -> local */
22
+ SyncServiceStatus["DOWNLOADING"] = "DOWNLOADING";
23
+ /** The sync service is currently syncing local -> server */
24
+ SyncServiceStatus["UPLOADING"] = "UPLOADING";
25
+ })(SyncServiceStatus || (SyncServiceStatus = {}));
26
+ export class SyncService extends EventEmitter {
27
+ // TODO: this is temporary, we will not use a fixed token for the lifetime of the sync service
28
+ authToken;
29
+ superblocksBaseUrl;
30
+ appRootDirPath;
31
+ applicationId;
32
+ branchName;
33
+ generationNumberSequence;
34
+ lastSyncedGenerationNumber;
35
+ hashCache = new HashCache();
36
+ // TODO: this can be private, we leave it public for now because tsc complains that its value is never read
37
+ lastSyncedDirectoryHash;
38
+ // A queue to ensure that all filesystem operations are executed one at a time
39
+ fsOperationQueue;
40
+ // A queue to ensure that the actual sync operations are executed one at a time
41
+ syncOperationQueue = new OperationQueue();
42
+ /** This will be defined if (and only if) a sync is currently pending */
43
+ pendingSyncUp;
44
+ lockService;
45
+ _status = SyncServiceStatus.IDLE;
46
+ _synchronizationStatus = SyncronizationStatus.SERVER_AHEAD;
47
+ constructor(config) {
48
+ super();
49
+ this.fsOperationQueue = config.fsOperationQueue;
50
+ this.authToken = config.authToken;
51
+ this.superblocksBaseUrl = config.superblocksBaseUrl;
52
+ this.appRootDirPath = config.appRootDirPath;
53
+ this.applicationId = config.applicationId;
54
+ this.branchName = config.branchName;
55
+ this.lockService = config.lockService;
56
+ applyErrorHandling(this, {
57
+ downloadDirectory: { operation: "syncing directory from server" },
58
+ uploadDirectory: { operation: "syncing directory to server" },
59
+ hasLocalDraftChanges: { operation: "checking for local draft changes" },
60
+ commitLocalDraftChanges: { operation: "committing local draft changes" },
61
+ });
62
+ }
63
+ /** The current status of the sync service, which indicates what the service is currently doing */
64
+ get status() {
65
+ return this._status;
66
+ }
67
+ set status(status) {
68
+ const logger = getLogger();
69
+ this._status = status;
70
+ const scheduledSyncTime = status === SyncServiceStatus.SCHEDULED
71
+ ? this.pendingSyncUp?.syncTime
72
+ : undefined;
73
+ logger.info(`[sync-service] statusChange: ${status}, ${scheduledSyncTime}`);
74
+ this.emit("statusChange", status, scheduledSyncTime);
75
+ }
76
+ /** The current synchronization status, which indicates whether the server and local directories are in sync */
77
+ get synchronizationStatus() {
78
+ return this._synchronizationStatus;
79
+ }
80
+ set synchronizationStatus(status) {
81
+ this._synchronizationStatus = status;
82
+ const generationNumber = status === SyncronizationStatus.IN_SYNC
83
+ ? this.lastSyncedGenerationNumber
84
+ : undefined;
85
+ this.emit("synchronizationStatusChange", status, generationNumber);
86
+ }
87
+ /**
88
+ * Enqueues a filesystem operation to be executed one at a time and avoiding conflicts with sync operations.
89
+ */
90
+ fsOperation(operation) {
91
+ return this.fsOperationQueue.enqueue(operation);
92
+ }
93
+ /**
94
+ * Pulls the application down from the server.
95
+ */
96
+ downloadDirectory() {
97
+ const logger = getLogger();
98
+ logger.info("[sync-service] Synchronizating application from the server");
99
+ return this.fsOperation(async () => {
100
+ this.status = SyncServiceStatus.DOWNLOADING;
101
+ const rpcClient = await this.getRpcClient();
102
+ try {
103
+ const directoryHash = await downloadApplicationDirectory({
104
+ rpcClient,
105
+ applicationId: this.applicationId,
106
+ branch: this.branchName,
107
+ localDirectoryPath: this.appRootDirPath,
108
+ hashCache: this.hashCache,
109
+ });
110
+ this.lastSyncedDirectoryHash = directoryHash;
111
+ this.synchronizationStatus = SyncronizationStatus.IN_SYNC;
112
+ logger.info("[sync-service] Synchronization finished");
113
+ }
114
+ catch (err) {
115
+ logger.error("[sync-service] Error synchronizing application from the server", getErrorMeta(err));
116
+ throw err;
117
+ }
118
+ finally {
119
+ this.status = SyncServiceStatus.IDLE;
120
+ rpcClient.close();
121
+ }
122
+ });
123
+ }
124
+ /**
125
+ * Request a sync of the local application directory to the server.
126
+ *
127
+ * This method is asynchronous, in the sense that it does not wait for the sync to complete. It simply schedules
128
+ * a sync to happen in the future. The returned promise resolves as soon as the method has collected enough information
129
+ * to schedule the sync. So the caller must wait for the returned promise to resolve before performing any filesystem
130
+ * operations.
131
+ * This method is also idempotent.
132
+ */
133
+ uploadDirectory() {
134
+ const logger = getLogger();
135
+ logger.info("[sync-service] Application updated, scheduling synchronization");
136
+ this.synchronizationStatus = SyncronizationStatus.LOCAL_AHEAD;
137
+ return this.fsOperation(async () => {
138
+ // Use committed state snapshot for regular sync (excluding drafts)
139
+ const directorySnapshot = await snapshotLocalDirectoryCommittedState(this.appRootDirPath);
140
+ const completedPromise = this.scheduleUploadDirectory(directorySnapshot, false, this.generationNumberSequence?.currentValue);
141
+ completedPromise.then(() => {
142
+ logger.info("[sync-service] Synchronization completed");
143
+ }, (err) => {
144
+ logger.error("[sync-service] error syncing directory to server", getErrorMeta(err));
145
+ this.emit("error", makeServerError(err));
146
+ });
147
+ });
148
+ }
149
+ /**
150
+ * Requests an immediate sync of the local application directory to the server, if there are any pending changes.
151
+ * If there are no pending changes, the method returns immediately.
152
+ *
153
+ * @returns the dbfs hash of the most recent sync
154
+ */
155
+ uploadDirectoryNowIfNeeded() {
156
+ if (!this.pendingSyncUp) {
157
+ const logger = getLogger();
158
+ logger.info("[sync-service] No pending sync, skipping");
159
+ return Promise.resolve(this.lastSyncedDirectoryHash || "");
160
+ }
161
+ const directorySnapshot = this.pendingSyncUp.directorySnapshot;
162
+ const logger = getLogger();
163
+ logger.info("[sync-service] Performing immediate sync");
164
+ return this.fsOperation(async () => {
165
+ const completedPromise = this.scheduleUploadDirectory(directorySnapshot, true, this.generationNumberSequence?.currentValue);
166
+ const directoryHash = await completedPromise;
167
+ logger.info("[sync-service] Synchronization completed");
168
+ return directoryHash;
169
+ });
170
+ }
171
+ scheduleUploadDirectory(directorySnapshot, performNow, generationNumber) {
172
+ if (performNow && this.pendingSyncUp) {
173
+ // There is already a sync pending, cancel it so that we can schedule a new one, to be performed immediately
174
+ clearTimeout(this.pendingSyncUp.timeoutId);
175
+ this.pendingSyncUp = undefined;
176
+ }
177
+ if (this.pendingSyncUp) {
178
+ // There is already a sync pending, we don't need to schedule a new one, we will use the existing one but
179
+ // we will update the directory snapshot
180
+ this.pendingSyncUp.directorySnapshot = directorySnapshot;
181
+ this.pendingSyncUp.generationNumber = generationNumber;
182
+ }
183
+ else {
184
+ const { promise: completedPromise, resolve, reject, } = withResolvers();
185
+ const logger = getLogger();
186
+ const timeoutDelayMs = performNow ? 0 : SYNC_INTERVAL_MS;
187
+ const pendingSyncUp = {
188
+ directorySnapshot,
189
+ generationNumber,
190
+ syncTime: performance.now() + timeoutDelayMs,
191
+ timeoutId: setTimeout(async () => {
192
+ this.pendingSyncUp = undefined;
193
+ await this.syncOperationQueue.enqueue(async () => {
194
+ try {
195
+ const isLockValid = await this.lockService.checkAndUpdateLockIfPossible();
196
+ if (!isLockValid) {
197
+ throw new Error("Lock is not valid");
198
+ }
199
+ const directoryHash = await this.performUploadDirectory(
200
+ // Note: we should not use `directorySnapshot` here, because it might have changed since when the sync was
201
+ // originally scheduled which is when we captured the value of this lexical variable
202
+ pendingSyncUp.directorySnapshot, pendingSyncUp.generationNumber);
203
+ this.lastSyncedDirectoryHash = directoryHash;
204
+ resolve(directoryHash);
205
+ }
206
+ catch (error) {
207
+ logger.error("[sync-service] Error synchronizing directory to server: " +
208
+ error, getErrorMeta(error));
209
+ reject(error);
210
+ }
211
+ });
212
+ }, timeoutDelayMs),
213
+ completed: completedPromise,
214
+ };
215
+ this.pendingSyncUp = pendingSyncUp;
216
+ }
217
+ this.status = SyncServiceStatus.SCHEDULED;
218
+ return this.pendingSyncUp.completed;
219
+ }
220
+ /**
221
+ * Performs the actual upload of the local application directory to the server.
222
+ */
223
+ async performUploadDirectory(directorySnapshot, generationNumber) {
224
+ this.status = SyncServiceStatus.UPLOADING;
225
+ const rpcClient = await this.getRpcClient();
226
+ try {
227
+ await uploadDirectorySnapshot(rpcClient, directorySnapshot, this.hashCache);
228
+ // Now that the directory has been uploaded, we know that all of its hashes are in the server,
229
+ // so we can add them to the hash cache
230
+ this.hashCache.add_directory_recursive(directorySnapshot);
231
+ await unwrapResponseDto(rpcClient.call.v3.application.liveEditDirectoryContents.set({
232
+ applicationId: this.applicationId,
233
+ branchName: this.branchName,
234
+ hash: directorySnapshot.hash,
235
+ }));
236
+ this.lastSyncedGenerationNumber = generationNumber;
237
+ this.synchronizationStatus = SyncronizationStatus.IN_SYNC;
238
+ return directorySnapshot.hash;
239
+ }
240
+ finally {
241
+ this.status = SyncServiceStatus.IDLE;
242
+ rpcClient.close();
243
+ }
244
+ }
245
+ /**
246
+ * Checks if there are any local draft changes (.sbswap.edit and .sbswap.add files).
247
+ *
248
+ * @returns A promise that resolves to true if any draft files are found, false otherwise.
249
+ */
250
+ async hasLocalDraftChanges() {
251
+ return this.fsOperation(async () => {
252
+ return await hasSwapFiles(this.appRootDirPath);
253
+ });
254
+ }
255
+ /**
256
+ * Gets information about current draft changes.
257
+ *
258
+ * @returns A promise that resolves to information about draft edits and additions.
259
+ */
260
+ async getDraftChanges() {
261
+ return this.fsOperation(async () => {
262
+ return await getDraftInfo(this.appRootDirPath);
263
+ });
264
+ }
265
+ /**
266
+ * Creates a draft edit or addition for a file.
267
+ *
268
+ * @param filePath - The path to the file to edit or add (relative to app root).
269
+ * @param draftContent - The content of the draft edit or addition.
270
+ * @returns A promise that resolves when the draft edit or addition is created.
271
+ */
272
+ async createDraftFile(filePath, draftContent) {
273
+ const logger = getLogger();
274
+ this.fsOperation(async () => {
275
+ const fullPath = `${this.appRootDirPath}/${filePath}`;
276
+ const type = await createDraft(fullPath, draftContent, this.appRootDirPath);
277
+ if (type === "edit") {
278
+ logger.info(`[sync-service] Draft edit created for: ${filePath}`);
279
+ }
280
+ else {
281
+ logger.info(`[sync-service] Draft addition created for: ${filePath}`);
282
+ }
283
+ });
284
+ this.emit("draftStateChanged", true);
285
+ }
286
+ /**
287
+ * Discards all local draft changes by restoring original files and removing draft additions.
288
+ *
289
+ * @returns A promise that resolves when all draft changes have been discarded.
290
+ */
291
+ async discardLocalDraftChanges() {
292
+ const logger = getLogger();
293
+ logger.info("[sync-service] Discarding local draft changes");
294
+ this.fsOperation(async () => {
295
+ await discardAllDrafts(this.appRootDirPath);
296
+ // Emit event so UI can refresh
297
+ logger.info("[sync-service] Local draft changes discarded");
298
+ });
299
+ this.emit("draftStateChanged", false);
300
+ }
301
+ /**
302
+ * Commits all draft changes by removing .sbswap.edit and .sbswap.add markers.
303
+ * This makes the current filesystem state the committed state.
304
+ *
305
+ * @returns A promise that resolves when all drafts have been committed.
306
+ */
307
+ async commitLocalDraftChanges() {
308
+ const logger = getLogger();
309
+ logger.info("[sync-service] Committing local draft changes");
310
+ this.fsOperation(async () => {
311
+ await commitAllDrafts(this.appRootDirPath);
312
+ logger.info("[sync-service] Local draft changes committed");
313
+ });
314
+ this.emit("draftStateChanged", false);
315
+ }
316
+ async getRpcClient() {
317
+ return await connectToISocketRPCServer({
318
+ superblocksBaseUrl: this.superblocksBaseUrl,
319
+ token: this.authToken,
320
+ });
321
+ }
322
+ }
323
+ //# sourceMappingURL=index.js.map