@inlang/sdk 0.36.4 → 2.0.0-beta.2

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 (727) hide show
  1. package/README.md +1 -1
  2. package/dist/database/initDb.d.ts +7 -0
  3. package/dist/database/initDb.d.ts.map +1 -0
  4. package/dist/database/initDb.js +36 -0
  5. package/dist/database/initDb.js.map +1 -0
  6. package/dist/database/initDbAndSchema.test.d.ts +2 -0
  7. package/dist/database/initDbAndSchema.test.d.ts.map +1 -0
  8. package/dist/database/initDbAndSchema.test.js +110 -0
  9. package/dist/database/initDbAndSchema.test.js.map +1 -0
  10. package/dist/database/jsonbPlugin.d.ts +20 -0
  11. package/dist/database/jsonbPlugin.d.ts.map +1 -0
  12. package/dist/database/jsonbPlugin.js +183 -0
  13. package/dist/database/jsonbPlugin.js.map +1 -0
  14. package/dist/database/jsonbPlugin.test.d.ts +2 -0
  15. package/dist/database/jsonbPlugin.test.d.ts.map +1 -0
  16. package/dist/database/jsonbPlugin.test.js +119 -0
  17. package/dist/database/jsonbPlugin.test.js.map +1 -0
  18. package/dist/database/schema.d.ts +74 -0
  19. package/dist/database/schema.d.ts.map +1 -0
  20. package/dist/database/schema.js +45 -0
  21. package/dist/database/schema.js.map +1 -0
  22. package/dist/helper.d.ts +71 -0
  23. package/dist/helper.d.ts.map +1 -0
  24. package/dist/helper.js +91 -0
  25. package/dist/helper.js.map +1 -0
  26. package/dist/human-id/human-id.d.ts +3 -0
  27. package/dist/human-id/human-id.d.ts.map +1 -0
  28. package/dist/human-id/human-id.js +12 -0
  29. package/dist/human-id/human-id.js.map +1 -0
  30. package/dist/human-id/words.d.ts.map +1 -0
  31. package/dist/{storage/human-id → human-id}/words.js +4 -0
  32. package/dist/human-id/words.js.map +1 -0
  33. package/dist/human-id/words.test.d.ts.map +1 -0
  34. package/dist/{storage/human-id → human-id}/words.test.js +4 -0
  35. package/dist/human-id/words.test.js.map +1 -0
  36. package/dist/import-export/exportFiles.d.ts +11 -0
  37. package/dist/import-export/exportFiles.d.ts.map +1 -0
  38. package/dist/import-export/exportFiles.js +26 -0
  39. package/dist/import-export/exportFiles.js.map +1 -0
  40. package/dist/import-export/importFiles.d.ts +13 -0
  41. package/dist/import-export/importFiles.d.ts.map +1 -0
  42. package/dist/import-export/importFiles.js +124 -0
  43. package/dist/import-export/importFiles.js.map +1 -0
  44. package/dist/import-export/importFiles.test.d.ts +2 -0
  45. package/dist/import-export/importFiles.test.d.ts.map +1 -0
  46. package/dist/import-export/importFiles.test.js +179 -0
  47. package/dist/import-export/importFiles.test.js.map +1 -0
  48. package/dist/import-export/roundtrip.test.d.ts +2 -0
  49. package/dist/import-export/roundtrip.test.d.ts.map +1 -0
  50. package/dist/import-export/roundtrip.test.js +273 -0
  51. package/dist/import-export/roundtrip.test.js.map +1 -0
  52. package/dist/import-export/upsertBundleNestedMatchByProperties.d.ts +4 -0
  53. package/dist/import-export/upsertBundleNestedMatchByProperties.d.ts.map +1 -0
  54. package/dist/import-export/upsertBundleNestedMatchByProperties.js +58 -0
  55. package/dist/import-export/upsertBundleNestedMatchByProperties.js.map +1 -0
  56. package/dist/index.d.ts +21 -18
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +20 -17
  59. package/dist/index.js.map +1 -0
  60. package/dist/json-schema/old-v1-message/fromMessageV1.d.ts +9 -0
  61. package/dist/json-schema/old-v1-message/fromMessageV1.d.ts.map +1 -0
  62. package/dist/json-schema/old-v1-message/fromMessageV1.js +84 -0
  63. package/dist/json-schema/old-v1-message/fromMessageV1.js.map +1 -0
  64. package/dist/json-schema/old-v1-message/fromMessageV1.test.d.ts +2 -0
  65. package/dist/json-schema/old-v1-message/fromMessageV1.test.d.ts.map +1 -0
  66. package/dist/json-schema/old-v1-message/fromMessageV1.test.js +85 -0
  67. package/dist/json-schema/old-v1-message/fromMessageV1.test.js.map +1 -0
  68. package/dist/json-schema/old-v1-message/schemaV1.d.ts +86 -0
  69. package/dist/json-schema/old-v1-message/schemaV1.d.ts.map +1 -0
  70. package/dist/json-schema/old-v1-message/schemaV1.js +35 -0
  71. package/dist/json-schema/old-v1-message/schemaV1.js.map +1 -0
  72. package/dist/json-schema/old-v1-message/toMessageV1.d.ts +9 -0
  73. package/dist/json-schema/old-v1-message/toMessageV1.d.ts.map +1 -0
  74. package/dist/json-schema/old-v1-message/toMessageV1.js +67 -0
  75. package/dist/json-schema/old-v1-message/toMessageV1.js.map +1 -0
  76. package/dist/json-schema/old-v1-message/toMessageV1.test.d.ts +2 -0
  77. package/dist/json-schema/old-v1-message/toMessageV1.test.d.ts.map +1 -0
  78. package/dist/json-schema/old-v1-message/toMessageV1.test.js +85 -0
  79. package/dist/json-schema/old-v1-message/toMessageV1.test.js.map +1 -0
  80. package/dist/json-schema/pattern.d.ts +190 -0
  81. package/dist/json-schema/pattern.d.ts.map +1 -0
  82. package/dist/json-schema/pattern.js +43 -0
  83. package/dist/json-schema/pattern.js.map +1 -0
  84. package/dist/json-schema/settings.d.ts +31 -0
  85. package/dist/json-schema/settings.d.ts.map +1 -0
  86. package/dist/json-schema/settings.js +96 -0
  87. package/dist/json-schema/settings.js.map +1 -0
  88. package/dist/json-schema/settings.test-d.d.ts +2 -0
  89. package/dist/json-schema/settings.test-d.d.ts.map +1 -0
  90. package/dist/json-schema/settings.test-d.js +20 -0
  91. package/dist/json-schema/settings.test-d.js.map +1 -0
  92. package/dist/lix-plugin/applyChanges.d.ts +3 -0
  93. package/dist/lix-plugin/applyChanges.d.ts.map +1 -0
  94. package/dist/lix-plugin/applyChanges.js +127 -0
  95. package/dist/lix-plugin/applyChanges.js.map +1 -0
  96. package/dist/lix-plugin/applyChanges.test.d.ts +2 -0
  97. package/dist/lix-plugin/applyChanges.test.d.ts.map +1 -0
  98. package/dist/lix-plugin/applyChanges.test.js +135 -0
  99. package/dist/lix-plugin/applyChanges.test.js.map +1 -0
  100. package/dist/lix-plugin/detectConflicts.d.ts +3 -0
  101. package/dist/lix-plugin/detectConflicts.d.ts.map +1 -0
  102. package/dist/lix-plugin/detectConflicts.js +47 -0
  103. package/dist/lix-plugin/detectConflicts.js.map +1 -0
  104. package/dist/lix-plugin/detectConflicts.test.d.ts +2 -0
  105. package/dist/lix-plugin/detectConflicts.test.d.ts.map +1 -0
  106. package/dist/lix-plugin/detectConflicts.test.js +251 -0
  107. package/dist/lix-plugin/detectConflicts.test.js.map +1 -0
  108. package/dist/lix-plugin/inlangLixPluginV1.d.ts +8 -0
  109. package/dist/lix-plugin/inlangLixPluginV1.d.ts.map +1 -0
  110. package/dist/lix-plugin/inlangLixPluginV1.js +109 -0
  111. package/dist/lix-plugin/inlangLixPluginV1.js.map +1 -0
  112. package/dist/lix-plugin/inlangLixPluginV1.test.d.ts +2 -0
  113. package/dist/lix-plugin/inlangLixPluginV1.test.d.ts.map +1 -0
  114. package/dist/lix-plugin/inlangLixPluginV1.test.js +418 -0
  115. package/dist/lix-plugin/inlangLixPluginV1.test.js.map +1 -0
  116. package/dist/lix-plugin/merge.test.d.ts +2 -0
  117. package/dist/lix-plugin/merge.test.d.ts.map +1 -0
  118. package/dist/lix-plugin/merge.test.js +120 -0
  119. package/dist/lix-plugin/merge.test.js.map +1 -0
  120. package/dist/lix-plugin/resolveConflictBySelecting.test.d.ts +2 -0
  121. package/dist/lix-plugin/resolveConflictBySelecting.test.d.ts.map +1 -0
  122. package/dist/lix-plugin/resolveConflictBySelecting.test.js +176 -0
  123. package/dist/lix-plugin/resolveConflictBySelecting.test.js.map +1 -0
  124. package/dist/migrations/v2/createMessageV1.d.ts +28 -0
  125. package/dist/migrations/v2/createMessageV1.d.ts.map +1 -0
  126. package/dist/migrations/v2/createMessageV1.js +31 -0
  127. package/dist/migrations/v2/createMessageV1.js.map +1 -0
  128. package/dist/migrations/v2/withLanguageTagToLocaleMigration.d.ts +9 -0
  129. package/dist/migrations/v2/withLanguageTagToLocaleMigration.d.ts.map +1 -0
  130. package/dist/migrations/v2/withLanguageTagToLocaleMigration.js +31 -0
  131. package/dist/migrations/v2/withLanguageTagToLocaleMigration.js.map +1 -0
  132. package/dist/migrations/v2/withLanguageTagToLocaleMigration.test.d.ts +2 -0
  133. package/dist/migrations/v2/withLanguageTagToLocaleMigration.test.d.ts.map +1 -0
  134. package/dist/migrations/v2/withLanguageTagToLocaleMigration.test.js +45 -0
  135. package/dist/migrations/v2/withLanguageTagToLocaleMigration.test.js.map +1 -0
  136. package/dist/plugin/cache.d.ts +6 -0
  137. package/dist/plugin/cache.d.ts.map +1 -0
  138. package/dist/plugin/cache.js +59 -0
  139. package/dist/plugin/cache.js.map +1 -0
  140. package/dist/plugin/cache.test.d.ts +2 -0
  141. package/dist/plugin/cache.test.d.ts.map +1 -0
  142. package/dist/plugin/cache.test.js +61 -0
  143. package/dist/plugin/cache.test.js.map +1 -0
  144. package/dist/plugin/errors.d.ts +41 -0
  145. package/dist/plugin/errors.d.ts.map +1 -0
  146. package/dist/plugin/errors.js +48 -0
  147. package/dist/plugin/errors.js.map +1 -0
  148. package/dist/plugin/importPlugins.d.ts +19 -0
  149. package/dist/plugin/importPlugins.d.ts.map +1 -0
  150. package/dist/plugin/importPlugins.js +43 -0
  151. package/dist/plugin/importPlugins.js.map +1 -0
  152. package/dist/plugin/importPlugins.test.d.ts +2 -0
  153. package/dist/plugin/importPlugins.test.d.ts.map +1 -0
  154. package/dist/plugin/importPlugins.test.js +95 -0
  155. package/dist/plugin/importPlugins.test.js.map +1 -0
  156. package/dist/plugin/meta/ideExtension.d.ts +54 -0
  157. package/dist/plugin/meta/ideExtension.d.ts.map +1 -0
  158. package/dist/plugin/meta/ideExtension.js +5 -0
  159. package/dist/plugin/meta/ideExtension.js.map +1 -0
  160. package/dist/plugin/schema.d.ts +152 -0
  161. package/dist/plugin/schema.d.ts.map +1 -0
  162. package/dist/plugin/schema.js +5 -0
  163. package/dist/plugin/schema.js.map +1 -0
  164. package/dist/project/api.d.ts +74 -0
  165. package/dist/project/api.d.ts.map +1 -0
  166. package/dist/project/api.js +5 -0
  167. package/dist/project/api.js.map +1 -0
  168. package/dist/project/initHandleSaveToLixOnChange.d.ts +14 -0
  169. package/dist/project/initHandleSaveToLixOnChange.d.ts.map +1 -0
  170. package/dist/project/initHandleSaveToLixOnChange.js +87 -0
  171. package/dist/project/initHandleSaveToLixOnChange.js.map +1 -0
  172. package/dist/project/loadProject.d.ts +53 -0
  173. package/dist/project/loadProject.d.ts.map +1 -0
  174. package/dist/project/loadProject.js +168 -0
  175. package/dist/project/loadProject.js.map +1 -0
  176. package/dist/project/loadProject.test.d.ts.map +1 -0
  177. package/dist/project/loadProject.test.js +146 -0
  178. package/dist/project/loadProject.test.js.map +1 -0
  179. package/dist/project/loadProjectFromDirectory.d.ts +77 -0
  180. package/dist/project/loadProjectFromDirectory.d.ts.map +1 -0
  181. package/dist/project/loadProjectFromDirectory.js +584 -0
  182. package/dist/project/loadProjectFromDirectory.js.map +1 -0
  183. package/dist/project/loadProjectFromDirectory.test.d.ts +2 -0
  184. package/dist/project/loadProjectFromDirectory.test.d.ts.map +1 -0
  185. package/dist/project/loadProjectFromDirectory.test.js +663 -0
  186. package/dist/project/loadProjectFromDirectory.test.js.map +1 -0
  187. package/dist/project/loadProjectInMemory.d.ts +8 -0
  188. package/dist/project/loadProjectInMemory.d.ts.map +1 -0
  189. package/dist/project/loadProjectInMemory.js +32 -0
  190. package/dist/project/loadProjectInMemory.js.map +1 -0
  191. package/dist/project/loadProjectInMemory.test.d.ts +2 -0
  192. package/dist/project/loadProjectInMemory.test.d.ts.map +1 -0
  193. package/dist/project/loadProjectInMemory.test.js +27 -0
  194. package/dist/project/loadProjectInMemory.test.js.map +1 -0
  195. package/dist/project/maybeCaptureTelemetry.d.ts +15 -0
  196. package/dist/project/maybeCaptureTelemetry.d.ts.map +1 -0
  197. package/dist/project/maybeCaptureTelemetry.js +58 -0
  198. package/dist/project/maybeCaptureTelemetry.js.map +1 -0
  199. package/dist/project/maybeCaptureTelemetry.test.d.ts +2 -0
  200. package/dist/project/maybeCaptureTelemetry.test.d.ts.map +1 -0
  201. package/dist/project/maybeCaptureTelemetry.test.js +71 -0
  202. package/dist/project/maybeCaptureTelemetry.test.js.map +1 -0
  203. package/dist/project/newProject.d.ts +17 -0
  204. package/dist/project/newProject.d.ts.map +1 -0
  205. package/dist/project/newProject.js +71 -0
  206. package/dist/project/newProject.js.map +1 -0
  207. package/dist/project/newProject.test.d.ts +2 -0
  208. package/dist/project/newProject.test.d.ts.map +1 -0
  209. package/dist/project/newProject.test.js +37 -0
  210. package/dist/project/newProject.test.js.map +1 -0
  211. package/dist/project/saveProjectToDirectory.d.ts +8 -0
  212. package/dist/project/saveProjectToDirectory.d.ts.map +1 -0
  213. package/dist/project/saveProjectToDirectory.js +86 -0
  214. package/dist/project/saveProjectToDirectory.js.map +1 -0
  215. package/dist/project/saveProjectToDirectory.test.d.ts +2 -0
  216. package/dist/project/saveProjectToDirectory.test.d.ts.map +1 -0
  217. package/dist/project/saveProjectToDirectory.test.js +245 -0
  218. package/dist/project/saveProjectToDirectory.test.js.map +1 -0
  219. package/dist/project/state/id$.d.ts +6 -0
  220. package/dist/project/state/id$.d.ts.map +1 -0
  221. package/dist/project/state/id$.js +19 -0
  222. package/dist/project/state/id$.js.map +1 -0
  223. package/dist/project/state/id$.test.d.ts +2 -0
  224. package/dist/project/state/id$.test.d.ts.map +1 -0
  225. package/dist/project/state/id$.test.js +36 -0
  226. package/dist/project/state/id$.test.js.map +1 -0
  227. package/dist/project/state/setSettings.d.ts +7 -0
  228. package/dist/project/state/setSettings.d.ts.map +1 -0
  229. package/dist/project/state/setSettings.js +16 -0
  230. package/dist/project/state/setSettings.js.map +1 -0
  231. package/dist/project/state/setSettings.test.d.ts +2 -0
  232. package/dist/project/state/setSettings.test.d.ts.map +1 -0
  233. package/dist/project/state/setSettings.test.js +58 -0
  234. package/dist/project/state/setSettings.test.js.map +1 -0
  235. package/dist/project/state/settings$.d.ts +7 -0
  236. package/dist/project/state/settings$.d.ts.map +1 -0
  237. package/dist/project/state/settings$.js +21 -0
  238. package/dist/project/state/settings$.js.map +1 -0
  239. package/dist/project/state/settings$.test.d.ts +2 -0
  240. package/dist/project/state/settings$.test.d.ts.map +1 -0
  241. package/dist/project/state/settings$.test.js +51 -0
  242. package/dist/project/state/settings$.test.js.map +1 -0
  243. package/dist/project/state/state.d.ts +58 -0
  244. package/dist/project/state/state.d.ts.map +1 -0
  245. package/dist/project/state/state.js +67 -0
  246. package/dist/project/state/state.js.map +1 -0
  247. package/dist/project/state/state.test.d.ts +2 -0
  248. package/dist/project/state/state.test.d.ts.map +1 -0
  249. package/dist/project/state/state.test.js +103 -0
  250. package/dist/project/state/state.test.js.map +1 -0
  251. package/dist/query-utilities/index.d.ts +5 -0
  252. package/dist/query-utilities/index.d.ts.map +1 -0
  253. package/dist/query-utilities/index.js +8 -0
  254. package/dist/query-utilities/index.js.map +1 -0
  255. package/dist/query-utilities/insertBundleNested.d.ts +4 -0
  256. package/dist/query-utilities/insertBundleNested.d.ts.map +1 -0
  257. package/dist/query-utilities/insertBundleNested.js +39 -0
  258. package/dist/query-utilities/insertBundleNested.js.map +1 -0
  259. package/dist/query-utilities/pollQuery.d.ts +14 -0
  260. package/dist/query-utilities/pollQuery.d.ts.map +1 -0
  261. package/dist/query-utilities/pollQuery.js +22 -0
  262. package/dist/query-utilities/pollQuery.js.map +1 -0
  263. package/dist/query-utilities/pollQuery.test.d.ts +2 -0
  264. package/dist/query-utilities/pollQuery.test.d.ts.map +1 -0
  265. package/dist/query-utilities/pollQuery.test.js +67 -0
  266. package/dist/query-utilities/pollQuery.test.js.map +1 -0
  267. package/dist/query-utilities/selectBundleNested.d.ts +107 -0
  268. package/dist/query-utilities/selectBundleNested.d.ts.map +1 -0
  269. package/dist/query-utilities/selectBundleNested.js +43 -0
  270. package/dist/query-utilities/selectBundleNested.js.map +1 -0
  271. package/dist/query-utilities/updateBundleNested.d.ts +12 -0
  272. package/dist/query-utilities/updateBundleNested.d.ts.map +1 -0
  273. package/dist/query-utilities/updateBundleNested.js +25 -0
  274. package/dist/query-utilities/updateBundleNested.js.map +1 -0
  275. package/dist/query-utilities/upsertBundleNested.d.ts +4 -0
  276. package/dist/query-utilities/upsertBundleNested.d.ts.map +1 -0
  277. package/dist/query-utilities/upsertBundleNested.js +50 -0
  278. package/dist/query-utilities/upsertBundleNested.js.map +1 -0
  279. package/dist/services/env-variables/index.d.ts +6 -0
  280. package/dist/services/env-variables/index.d.ts.map +1 -0
  281. package/dist/services/env-variables/index.js +9 -0
  282. package/dist/services/env-variables/index.js.map +1 -0
  283. package/dist/services/error-reporting/index.d.ts +15 -0
  284. package/dist/services/error-reporting/index.d.ts.map +1 -0
  285. package/dist/services/error-reporting/index.js +30 -0
  286. package/dist/services/error-reporting/index.js.map +1 -0
  287. package/dist/{telemetry → services/telemetry}/capture.d.ts +5 -2
  288. package/dist/services/telemetry/capture.d.ts.map +1 -0
  289. package/dist/services/telemetry/capture.js +76 -0
  290. package/dist/services/telemetry/capture.js.map +1 -0
  291. package/dist/services/telemetry/capture.test.d.ts +2 -0
  292. package/dist/services/telemetry/capture.test.d.ts.map +1 -0
  293. package/dist/services/telemetry/capture.test.js +46 -0
  294. package/dist/services/telemetry/capture.test.js.map +1 -0
  295. package/dist/utilities/detectJsonFormatting.d.ts +11 -0
  296. package/dist/utilities/detectJsonFormatting.d.ts.map +1 -0
  297. package/dist/utilities/detectJsonFormatting.js +83 -0
  298. package/dist/utilities/detectJsonFormatting.js.map +1 -0
  299. package/dist/utilities/detectJsonFormatting.test.d.ts +2 -0
  300. package/dist/utilities/detectJsonFormatting.test.d.ts.map +1 -0
  301. package/dist/utilities/detectJsonFormatting.test.js +33 -0
  302. package/dist/utilities/detectJsonFormatting.test.js.map +1 -0
  303. package/package.json +32 -40
  304. package/src/database/initDb.ts +34 -0
  305. package/src/database/initDbAndSchema.test.ts +125 -0
  306. package/src/database/jsonbPlugin.test.ts +154 -0
  307. package/src/database/jsonbPlugin.ts +215 -0
  308. package/src/database/schema.ts +127 -0
  309. package/src/helper.ts +113 -0
  310. package/src/human-id/human-id.ts +14 -0
  311. package/src/{storage/human-id → human-id}/words.test.ts +14 -14
  312. package/src/{storage/human-id → human-id}/words.ts +4 -4
  313. package/src/import-export/exportFiles.ts +36 -0
  314. package/src/import-export/importFiles.test.ts +211 -0
  315. package/src/import-export/importFiles.ts +142 -0
  316. package/src/import-export/roundtrip.test.ts +313 -0
  317. package/src/import-export/upsertBundleNestedMatchByProperties.ts +74 -0
  318. package/src/index.ts +29 -37
  319. package/src/json-schema/old-v1-message/README.md +1 -0
  320. package/src/json-schema/old-v1-message/fromMessageV1.test.ts +87 -0
  321. package/src/json-schema/old-v1-message/fromMessageV1.ts +99 -0
  322. package/src/json-schema/old-v1-message/schemaV1.ts +66 -0
  323. package/src/json-schema/old-v1-message/toMessageV1.test.ts +87 -0
  324. package/src/json-schema/old-v1-message/toMessageV1.ts +79 -0
  325. package/src/json-schema/pattern.ts +59 -0
  326. package/src/json-schema/settings.test-d.ts +21 -0
  327. package/src/json-schema/settings.ts +138 -0
  328. package/src/lix-plugin/applyChanges.test.ts +150 -0
  329. package/src/lix-plugin/applyChanges.ts +171 -0
  330. package/src/lix-plugin/detectConflicts.test.ts +286 -0
  331. package/src/lix-plugin/detectConflicts.ts +62 -0
  332. package/src/lix-plugin/inlangLixPluginV1.test.ts +439 -0
  333. package/src/lix-plugin/inlangLixPluginV1.ts +132 -0
  334. package/src/lix-plugin/merge.test.ts +133 -0
  335. package/src/lix-plugin/resolveConflictBySelecting.test.ts +188 -0
  336. package/src/migrations/v2/createMessageV1.ts +37 -0
  337. package/src/migrations/v2/withLanguageTagToLocaleMigration.test.ts +51 -0
  338. package/src/migrations/v2/withLanguageTagToLocaleMigration.ts +31 -0
  339. package/src/plugin/cache.test.ts +83 -0
  340. package/src/plugin/cache.ts +79 -0
  341. package/src/plugin/errors.ts +67 -0
  342. package/src/plugin/importPlugins.test.ts +107 -0
  343. package/src/plugin/importPlugins.ts +60 -0
  344. package/src/plugin/meta/ideExtension.ts +56 -0
  345. package/src/plugin/schema.ts +165 -0
  346. package/src/project/api.ts +77 -0
  347. package/src/project/initHandleSaveToLixOnChange.ts +93 -0
  348. package/src/project/loadProject.test.ts +176 -0
  349. package/src/project/loadProject.ts +246 -0
  350. package/src/project/loadProjectFromDirectory.test.ts +854 -0
  351. package/src/project/loadProjectFromDirectory.ts +752 -0
  352. package/src/project/loadProjectInMemory.test.ts +29 -0
  353. package/src/project/loadProjectInMemory.ts +36 -0
  354. package/src/project/maybeCaptureTelemetry.test.ts +79 -0
  355. package/src/project/maybeCaptureTelemetry.ts +69 -0
  356. package/src/project/newProject.test.ts +36 -0
  357. package/src/project/newProject.ts +78 -0
  358. package/src/project/saveProjectToDirectory.test.ts +310 -0
  359. package/src/project/saveProjectToDirectory.ts +100 -0
  360. package/src/query-utilities/index.ts +4 -0
  361. package/src/query-utilities/insertBundleNested.ts +46 -0
  362. package/src/query-utilities/selectBundleNested.ts +46 -0
  363. package/src/query-utilities/updateBundleNested.ts +35 -0
  364. package/src/query-utilities/upsertBundleNested.ts +61 -0
  365. package/src/services/env-variables/createIndexFile.js +40 -0
  366. package/src/{env-variables → services/env-variables}/index.d.ts +8 -5
  367. package/src/services/error-reporting/index.ts +28 -0
  368. package/src/services/telemetry/capture.test.ts +50 -0
  369. package/src/services/telemetry/capture.ts +99 -0
  370. package/src/utilities/detectJsonFormatting.test.ts +38 -0
  371. package/src/utilities/detectJsonFormatting.ts +109 -0
  372. package/dist/adapter/solidAdapter.d.ts +0 -33
  373. package/dist/adapter/solidAdapter.d.ts.map +0 -1
  374. package/dist/adapter/solidAdapter.js +0 -40
  375. package/dist/adapter/solidAdapter.test.d.ts +0 -2
  376. package/dist/adapter/solidAdapter.test.d.ts.map +0 -1
  377. package/dist/adapter/solidAdapter.test.js +0 -356
  378. package/dist/api.d.ts +0 -113
  379. package/dist/api.d.ts.map +0 -1
  380. package/dist/api.js +0 -1
  381. package/dist/api.test-d.d.ts +0 -2
  382. package/dist/api.test-d.d.ts.map +0 -1
  383. package/dist/api.test-d.js +0 -4
  384. package/dist/createMessageLintReportsQuery.d.ts +0 -12
  385. package/dist/createMessageLintReportsQuery.d.ts.map +0 -1
  386. package/dist/createMessageLintReportsQuery.js +0 -176
  387. package/dist/createMessagesQuery.d.ts +0 -19
  388. package/dist/createMessagesQuery.d.ts.map +0 -1
  389. package/dist/createMessagesQuery.js +0 -451
  390. package/dist/createMessagesQuery.test.d.ts +0 -2
  391. package/dist/createMessagesQuery.test.d.ts.map +0 -1
  392. package/dist/createMessagesQuery.test.js +0 -402
  393. package/dist/createNewProject.d.ts +0 -12
  394. package/dist/createNewProject.d.ts.map +0 -1
  395. package/dist/createNewProject.js +0 -38
  396. package/dist/createNewProject.test.d.ts +0 -2
  397. package/dist/createNewProject.test.d.ts.map +0 -1
  398. package/dist/createNewProject.test.js +0 -91
  399. package/dist/createNodeishFsWithAbsolutePaths.d.ts +0 -12
  400. package/dist/createNodeishFsWithAbsolutePaths.d.ts.map +0 -1
  401. package/dist/createNodeishFsWithAbsolutePaths.js +0 -38
  402. package/dist/createNodeishFsWithAbsolutePaths.test.d.ts +0 -2
  403. package/dist/createNodeishFsWithAbsolutePaths.test.d.ts.map +0 -1
  404. package/dist/createNodeishFsWithAbsolutePaths.test.js +0 -44
  405. package/dist/createNodeishFsWithWatcher.d.ts +0 -14
  406. package/dist/createNodeishFsWithWatcher.d.ts.map +0 -1
  407. package/dist/createNodeishFsWithWatcher.js +0 -75
  408. package/dist/createNodeishFsWithWatcher.test.d.ts +0 -2
  409. package/dist/createNodeishFsWithWatcher.test.d.ts.map +0 -1
  410. package/dist/createNodeishFsWithWatcher.test.js +0 -38
  411. package/dist/defaultProjectSettings.d.ts +0 -14
  412. package/dist/defaultProjectSettings.d.ts.map +0 -1
  413. package/dist/defaultProjectSettings.js +0 -22
  414. package/dist/env-variables/index.d.ts +0 -4
  415. package/dist/env-variables/index.d.ts.map +0 -1
  416. package/dist/env-variables/index.js +0 -3
  417. package/dist/errors.d.ts +0 -48
  418. package/dist/errors.d.ts.map +0 -1
  419. package/dist/errors.js +0 -62
  420. package/dist/lint/index.d.ts +0 -3
  421. package/dist/lint/index.d.ts.map +0 -1
  422. package/dist/lint/index.js +0 -2
  423. package/dist/lint/message/errors.d.ts +0 -7
  424. package/dist/lint/message/errors.d.ts.map +0 -1
  425. package/dist/lint/message/errors.js +0 -9
  426. package/dist/lint/message/lintMessages.d.ts +0 -13
  427. package/dist/lint/message/lintMessages.d.ts.map +0 -1
  428. package/dist/lint/message/lintMessages.js +0 -12
  429. package/dist/lint/message/lintMessages.test.d.ts +0 -2
  430. package/dist/lint/message/lintMessages.test.d.ts.map +0 -1
  431. package/dist/lint/message/lintMessages.test.js +0 -107
  432. package/dist/lint/message/lintSingleMessage.d.ts +0 -19
  433. package/dist/lint/message/lintSingleMessage.d.ts.map +0 -1
  434. package/dist/lint/message/lintSingleMessage.js +0 -38
  435. package/dist/lint/message/lintSingleMessage.test.d.ts +0 -2
  436. package/dist/lint/message/lintSingleMessage.test.d.ts.map +0 -1
  437. package/dist/lint/message/lintSingleMessage.test.js +0 -161
  438. package/dist/listProjects.d.ts +0 -5
  439. package/dist/listProjects.d.ts.map +0 -1
  440. package/dist/listProjects.js +0 -38
  441. package/dist/listProjects.test.d.ts +0 -2
  442. package/dist/listProjects.test.d.ts.map +0 -1
  443. package/dist/listProjects.test.js +0 -72
  444. package/dist/loadProject.d.ts +0 -19
  445. package/dist/loadProject.d.ts.map +0 -1
  446. package/dist/loadProject.js +0 -343
  447. package/dist/loadProject.test.d.ts.map +0 -1
  448. package/dist/loadProject.test.js +0 -975
  449. package/dist/messages/errors.d.ts +0 -13
  450. package/dist/messages/errors.d.ts.map +0 -1
  451. package/dist/messages/errors.js +0 -18
  452. package/dist/messages/index.d.ts +0 -3
  453. package/dist/messages/index.d.ts.map +0 -1
  454. package/dist/messages/index.js +0 -2
  455. package/dist/messages/variant.d.ts +0 -46
  456. package/dist/messages/variant.d.ts.map +0 -1
  457. package/dist/messages/variant.js +0 -176
  458. package/dist/messages/variant.test.d.ts +0 -2
  459. package/dist/messages/variant.test.d.ts.map +0 -1
  460. package/dist/messages/variant.test.js +0 -439
  461. package/dist/migrations/maybeAddModuleCache.d.ts +0 -6
  462. package/dist/migrations/maybeAddModuleCache.d.ts.map +0 -1
  463. package/dist/migrations/maybeAddModuleCache.js +0 -62
  464. package/dist/migrations/maybeCreateFirstProjectId.d.ts +0 -16
  465. package/dist/migrations/maybeCreateFirstProjectId.d.ts.map +0 -1
  466. package/dist/migrations/maybeCreateFirstProjectId.js +0 -46
  467. package/dist/migrations/maybeCreateFirstProjectId.test.d.ts +0 -2
  468. package/dist/migrations/maybeCreateFirstProjectId.test.d.ts.map +0 -1
  469. package/dist/migrations/maybeCreateFirstProjectId.test.js +0 -24
  470. package/dist/migrations/migrateToDirectory.d.ts +0 -10
  471. package/dist/migrations/migrateToDirectory.d.ts.map +0 -1
  472. package/dist/migrations/migrateToDirectory.js +0 -48
  473. package/dist/migrations/migrateToDirectory.test.d.ts +0 -2
  474. package/dist/migrations/migrateToDirectory.test.d.ts.map +0 -1
  475. package/dist/migrations/migrateToDirectory.test.js +0 -48
  476. package/dist/parseConfig.d.ts +0 -8
  477. package/dist/parseConfig.d.ts.map +0 -1
  478. package/dist/parseConfig.js +0 -26
  479. package/dist/persistence/batchedIO.d.ts +0 -11
  480. package/dist/persistence/batchedIO.d.ts.map +0 -1
  481. package/dist/persistence/batchedIO.js +0 -49
  482. package/dist/persistence/batchedIO.test.d.ts +0 -2
  483. package/dist/persistence/batchedIO.test.d.ts.map +0 -1
  484. package/dist/persistence/batchedIO.test.js +0 -56
  485. package/dist/persistence/filelock/acquireFileLock.d.ts +0 -3
  486. package/dist/persistence/filelock/acquireFileLock.d.ts.map +0 -1
  487. package/dist/persistence/filelock/acquireFileLock.js +0 -111
  488. package/dist/persistence/filelock/releaseLock.d.ts +0 -3
  489. package/dist/persistence/filelock/releaseLock.d.ts.map +0 -1
  490. package/dist/persistence/filelock/releaseLock.js +0 -24
  491. package/dist/persistence/store.d.ts +0 -107
  492. package/dist/persistence/store.d.ts.map +0 -1
  493. package/dist/persistence/store.js +0 -99
  494. package/dist/persistence/store.test.d.ts +0 -2
  495. package/dist/persistence/store.test.d.ts.map +0 -1
  496. package/dist/persistence/store.test.js +0 -79
  497. package/dist/persistence/storeApi.d.ts +0 -22
  498. package/dist/persistence/storeApi.d.ts.map +0 -1
  499. package/dist/persistence/storeApi.js +0 -1
  500. package/dist/reactivity/map.d.ts +0 -67
  501. package/dist/reactivity/map.d.ts.map +0 -1
  502. package/dist/reactivity/map.js +0 -143
  503. package/dist/reactivity/solid.d.ts +0 -14
  504. package/dist/reactivity/solid.d.ts.map +0 -1
  505. package/dist/reactivity/solid.js +0 -15
  506. package/dist/reactivity/solid.test.d.ts +0 -2
  507. package/dist/reactivity/solid.test.d.ts.map +0 -1
  508. package/dist/reactivity/solid.test.js +0 -189
  509. package/dist/reactivity/trigger.d.ts +0 -11
  510. package/dist/reactivity/trigger.d.ts.map +0 -1
  511. package/dist/reactivity/trigger.js +0 -46
  512. package/dist/resolve-modules/cache.d.ts +0 -6
  513. package/dist/resolve-modules/cache.d.ts.map +0 -1
  514. package/dist/resolve-modules/cache.js +0 -58
  515. package/dist/resolve-modules/errors.d.ts +0 -41
  516. package/dist/resolve-modules/errors.d.ts.map +0 -1
  517. package/dist/resolve-modules/errors.js +0 -45
  518. package/dist/resolve-modules/import.d.ts +0 -19
  519. package/dist/resolve-modules/import.d.ts.map +0 -1
  520. package/dist/resolve-modules/import.js +0 -102
  521. package/dist/resolve-modules/import.test.d.ts +0 -2
  522. package/dist/resolve-modules/import.test.d.ts.map +0 -1
  523. package/dist/resolve-modules/import.test.js +0 -47
  524. package/dist/resolve-modules/index.d.ts +0 -3
  525. package/dist/resolve-modules/index.d.ts.map +0 -1
  526. package/dist/resolve-modules/index.js +0 -2
  527. package/dist/resolve-modules/message-lint-rules/errors.d.ts +0 -9
  528. package/dist/resolve-modules/message-lint-rules/errors.d.ts.map +0 -1
  529. package/dist/resolve-modules/message-lint-rules/errors.js +0 -6
  530. package/dist/resolve-modules/message-lint-rules/resolveMessageLintRules.d.ts +0 -9
  531. package/dist/resolve-modules/message-lint-rules/resolveMessageLintRules.d.ts.map +0 -1
  532. package/dist/resolve-modules/message-lint-rules/resolveMessageLintRules.js +0 -24
  533. package/dist/resolve-modules/plugins/errors.d.ts +0 -33
  534. package/dist/resolve-modules/plugins/errors.d.ts.map +0 -1
  535. package/dist/resolve-modules/plugins/errors.js +0 -38
  536. package/dist/resolve-modules/plugins/resolvePlugins.d.ts +0 -3
  537. package/dist/resolve-modules/plugins/resolvePlugins.d.ts.map +0 -1
  538. package/dist/resolve-modules/plugins/resolvePlugins.js +0 -92
  539. package/dist/resolve-modules/plugins/resolvePlugins.test.d.ts +0 -2
  540. package/dist/resolve-modules/plugins/resolvePlugins.test.d.ts.map +0 -1
  541. package/dist/resolve-modules/plugins/resolvePlugins.test.js +0 -252
  542. package/dist/resolve-modules/plugins/types.d.ts +0 -57
  543. package/dist/resolve-modules/plugins/types.d.ts.map +0 -1
  544. package/dist/resolve-modules/plugins/types.js +0 -1
  545. package/dist/resolve-modules/plugins/types.test.d.ts +0 -2
  546. package/dist/resolve-modules/plugins/types.test.d.ts.map +0 -1
  547. package/dist/resolve-modules/plugins/types.test.js +0 -45
  548. package/dist/resolve-modules/resolveModules.d.ts +0 -3
  549. package/dist/resolve-modules/resolveModules.d.ts.map +0 -1
  550. package/dist/resolve-modules/resolveModules.js +0 -80
  551. package/dist/resolve-modules/resolveModules.test.d.ts +0 -2
  552. package/dist/resolve-modules/resolveModules.test.d.ts.map +0 -1
  553. package/dist/resolve-modules/resolveModules.test.js +0 -185
  554. package/dist/resolve-modules/types.d.ts +0 -63
  555. package/dist/resolve-modules/types.d.ts.map +0 -1
  556. package/dist/resolve-modules/types.js +0 -1
  557. package/dist/resolve-modules/validateModuleSettings.test.d.ts +0 -2
  558. package/dist/resolve-modules/validateModuleSettings.test.d.ts.map +0 -1
  559. package/dist/resolve-modules/validateModuleSettings.test.js +0 -71
  560. package/dist/resolve-modules/validatedModuleSettings.d.ts +0 -7
  561. package/dist/resolve-modules/validatedModuleSettings.d.ts.map +0 -1
  562. package/dist/resolve-modules/validatedModuleSettings.js +0 -11
  563. package/dist/storage/helper.d.ts +0 -11
  564. package/dist/storage/helper.d.ts.map +0 -1
  565. package/dist/storage/helper.js +0 -63
  566. package/dist/storage/helpers.test.d.ts +0 -2
  567. package/dist/storage/helpers.test.d.ts.map +0 -1
  568. package/dist/storage/helpers.test.js +0 -84
  569. package/dist/storage/human-id/human-readable-id.d.ts +0 -3
  570. package/dist/storage/human-id/human-readable-id.d.ts.map +0 -1
  571. package/dist/storage/human-id/human-readable-id.js +0 -20
  572. package/dist/storage/human-id/words.d.ts.map +0 -1
  573. package/dist/storage/human-id/words.test.d.ts.map +0 -1
  574. package/dist/telemetry/capture.d.ts.map +0 -1
  575. package/dist/telemetry/capture.js +0 -39
  576. package/dist/telemetry/groupIdentify.d.ts +0 -13
  577. package/dist/telemetry/groupIdentify.d.ts.map +0 -1
  578. package/dist/telemetry/groupIdentify.js +0 -35
  579. package/dist/test-utilities/createMessage.d.ts +0 -18
  580. package/dist/test-utilities/createMessage.d.ts.map +0 -1
  581. package/dist/test-utilities/createMessage.js +0 -17
  582. package/dist/test-utilities/createMessage.test.d.ts +0 -2
  583. package/dist/test-utilities/createMessage.test.d.ts.map +0 -1
  584. package/dist/test-utilities/createMessage.test.js +0 -106
  585. package/dist/test-utilities/index.d.ts +0 -3
  586. package/dist/test-utilities/index.d.ts.map +0 -1
  587. package/dist/test-utilities/index.js +0 -2
  588. package/dist/test-utilities/sleep.d.ts +0 -4
  589. package/dist/test-utilities/sleep.d.ts.map +0 -1
  590. package/dist/test-utilities/sleep.js +0 -9
  591. package/dist/v2/helper.d.ts +0 -43
  592. package/dist/v2/helper.d.ts.map +0 -1
  593. package/dist/v2/helper.js +0 -75
  594. package/dist/v2/helper.test.d.ts +0 -2
  595. package/dist/v2/helper.test.d.ts.map +0 -1
  596. package/dist/v2/helper.test.js +0 -92
  597. package/dist/v2/index.d.ts +0 -4
  598. package/dist/v2/index.d.ts.map +0 -1
  599. package/dist/v2/index.js +0 -2
  600. package/dist/v2/mocks/index.d.ts +0 -3
  601. package/dist/v2/mocks/index.d.ts.map +0 -1
  602. package/dist/v2/mocks/index.js +0 -2
  603. package/dist/v2/mocks/multipleMatcher/bundle.d.ts +0 -3
  604. package/dist/v2/mocks/multipleMatcher/bundle.d.ts.map +0 -1
  605. package/dist/v2/mocks/multipleMatcher/bundle.js +0 -194
  606. package/dist/v2/mocks/multipleMatcher/bundle.test.d.ts +0 -2
  607. package/dist/v2/mocks/multipleMatcher/bundle.test.d.ts.map +0 -1
  608. package/dist/v2/mocks/multipleMatcher/bundle.test.js +0 -10
  609. package/dist/v2/mocks/plural/bundle.d.ts +0 -3
  610. package/dist/v2/mocks/plural/bundle.d.ts.map +0 -1
  611. package/dist/v2/mocks/plural/bundle.js +0 -162
  612. package/dist/v2/mocks/plural/bundle.test.d.ts +0 -2
  613. package/dist/v2/mocks/plural/bundle.test.d.ts.map +0 -1
  614. package/dist/v2/mocks/plural/bundle.test.js +0 -15
  615. package/dist/v2/shim.d.ts +0 -12
  616. package/dist/v2/shim.d.ts.map +0 -1
  617. package/dist/v2/shim.js +0 -151
  618. package/dist/v2/shim.test.d.ts +0 -2
  619. package/dist/v2/shim.test.d.ts.map +0 -1
  620. package/dist/v2/shim.test.js +0 -49
  621. package/dist/v2/stubQueryApi.d.ts +0 -9
  622. package/dist/v2/stubQueryApi.d.ts.map +0 -1
  623. package/dist/v2/stubQueryApi.js +0 -38
  624. package/dist/v2/types.d.ts +0 -521
  625. package/dist/v2/types.d.ts.map +0 -1
  626. package/dist/v2/types.js +0 -78
  627. package/dist/validateProjectPath.d.ts +0 -17
  628. package/dist/validateProjectPath.d.ts.map +0 -1
  629. package/dist/validateProjectPath.js +0 -31
  630. package/dist/validateProjectPath.test.d.ts +0 -2
  631. package/dist/validateProjectPath.test.d.ts.map +0 -1
  632. package/dist/validateProjectPath.test.js +0 -40
  633. package/dist/versionedInterfaces.d.ts +0 -8
  634. package/dist/versionedInterfaces.d.ts.map +0 -1
  635. package/dist/versionedInterfaces.js +0 -8
  636. package/src/adapter/solidAdapter.test.ts +0 -472
  637. package/src/adapter/solidAdapter.ts +0 -79
  638. package/src/api.test-d.ts +0 -8
  639. package/src/api.ts +0 -116
  640. package/src/createMessageLintReportsQuery.ts +0 -225
  641. package/src/createMessagesQuery.test.ts +0 -538
  642. package/src/createMessagesQuery.ts +0 -635
  643. package/src/createNewProject.test.ts +0 -105
  644. package/src/createNewProject.ts +0 -46
  645. package/src/createNodeishFsWithAbsolutePaths.test.ts +0 -55
  646. package/src/createNodeishFsWithAbsolutePaths.ts +0 -52
  647. package/src/createNodeishFsWithWatcher.test.ts +0 -50
  648. package/src/createNodeishFsWithWatcher.ts +0 -85
  649. package/src/defaultProjectSettings.ts +0 -26
  650. package/src/env-variables/.prettierignore +0 -1
  651. package/src/env-variables/createIndexFile.js +0 -28
  652. package/src/errors.ts +0 -84
  653. package/src/lint/index.ts +0 -2
  654. package/src/lint/message/errors.ts +0 -9
  655. package/src/lint/message/lintMessages.test.ts +0 -126
  656. package/src/lint/message/lintMessages.ts +0 -25
  657. package/src/lint/message/lintSingleMessage.test.ts +0 -191
  658. package/src/lint/message/lintSingleMessage.ts +0 -57
  659. package/src/listProjects.test.ts +0 -91
  660. package/src/listProjects.ts +0 -48
  661. package/src/loadProject.test.ts +0 -1173
  662. package/src/loadProject.ts +0 -460
  663. package/src/messages/errors.ts +0 -25
  664. package/src/messages/index.ts +0 -2
  665. package/src/messages/variant.test.ts +0 -511
  666. package/src/messages/variant.ts +0 -247
  667. package/src/migrations/maybeAddModuleCache.ts +0 -68
  668. package/src/migrations/maybeCreateFirstProjectId.test.ts +0 -31
  669. package/src/migrations/maybeCreateFirstProjectId.ts +0 -51
  670. package/src/migrations/migrateToDirectory.test.ts +0 -54
  671. package/src/migrations/migrateToDirectory.ts +0 -62
  672. package/src/parseConfig.ts +0 -35
  673. package/src/persistence/batchedIO.test.ts +0 -63
  674. package/src/persistence/batchedIO.ts +0 -64
  675. package/src/persistence/filelock/acquireFileLock.ts +0 -129
  676. package/src/persistence/filelock/releaseLock.ts +0 -29
  677. package/src/persistence/store.test.ts +0 -102
  678. package/src/persistence/store.ts +0 -119
  679. package/src/persistence/storeApi.ts +0 -19
  680. package/src/reactivity/map.ts +0 -135
  681. package/src/reactivity/solid.test.ts +0 -222
  682. package/src/reactivity/solid.ts +0 -42
  683. package/src/reactivity/trigger.ts +0 -46
  684. package/src/resolve-modules/cache.ts +0 -89
  685. package/src/resolve-modules/errors.ts +0 -69
  686. package/src/resolve-modules/import.test.ts +0 -62
  687. package/src/resolve-modules/import.ts +0 -133
  688. package/src/resolve-modules/index.ts +0 -2
  689. package/src/resolve-modules/message-lint-rules/errors.ts +0 -9
  690. package/src/resolve-modules/message-lint-rules/resolveMessageLintRules.ts +0 -27
  691. package/src/resolve-modules/plugins/errors.ts +0 -56
  692. package/src/resolve-modules/plugins/resolvePlugins.test.ts +0 -301
  693. package/src/resolve-modules/plugins/resolvePlugins.ts +0 -129
  694. package/src/resolve-modules/plugins/types.test.ts +0 -53
  695. package/src/resolve-modules/plugins/types.ts +0 -76
  696. package/src/resolve-modules/resolveModules.test.ts +0 -224
  697. package/src/resolve-modules/resolveModules.ts +0 -113
  698. package/src/resolve-modules/types.ts +0 -72
  699. package/src/resolve-modules/validateModuleSettings.test.ts +0 -85
  700. package/src/resolve-modules/validatedModuleSettings.ts +0 -19
  701. package/src/storage/helper.ts +0 -74
  702. package/src/storage/helpers.test.ts +0 -95
  703. package/src/storage/human-id/human-readable-id.ts +0 -27
  704. package/src/telemetry/capture.ts +0 -49
  705. package/src/telemetry/groupIdentify.ts +0 -41
  706. package/src/test-utilities/createMessage.test.ts +0 -118
  707. package/src/test-utilities/createMessage.ts +0 -21
  708. package/src/test-utilities/index.ts +0 -2
  709. package/src/test-utilities/sleep.ts +0 -11
  710. package/src/v2/helper.test.ts +0 -95
  711. package/src/v2/helper.ts +0 -98
  712. package/src/v2/index.ts +0 -3
  713. package/src/v2/mocks/index.ts +0 -2
  714. package/src/v2/mocks/multipleMatcher/bundle.test.ts +0 -11
  715. package/src/v2/mocks/multipleMatcher/bundle.ts +0 -196
  716. package/src/v2/mocks/plural/bundle.test.ts +0 -18
  717. package/src/v2/mocks/plural/bundle.ts +0 -164
  718. package/src/v2/shim.test.ts +0 -56
  719. package/src/v2/shim.ts +0 -173
  720. package/src/v2/stubQueryApi.ts +0 -43
  721. package/src/v2/types.ts +0 -159
  722. package/src/validateProjectPath.test.ts +0 -50
  723. package/src/validateProjectPath.ts +0 -38
  724. package/src/versionedInterfaces.ts +0 -9
  725. /package/dist/{storage/human-id → human-id}/words.d.ts +0 -0
  726. /package/dist/{storage/human-id → human-id}/words.test.d.ts +0 -0
  727. /package/dist/{loadProject.test.d.ts → project/loadProject.test.d.ts} +0 -0
@@ -1,635 +0,0 @@
1
- import type { Message } from "@inlang/message"
2
- import { ReactiveMap } from "./reactivity/map.js"
3
- import { createEffect, onCleanup, batch } from "./reactivity/solid.js"
4
- import { createSubscribable } from "./loadProject.js"
5
- import type { InlangProject, MessageQueryApi, MessageQueryDelegate } from "./api.js"
6
- import type { ResolvedPluginApi } from "./resolve-modules/plugins/types.js"
7
- import type { resolveModules } from "./resolve-modules/resolveModules.js"
8
- import { createNodeishFsWithWatcher } from "./createNodeishFsWithWatcher.js"
9
- import type { NodeishFilesystem } from "@lix-js/fs"
10
- import { stringifyMessage } from "./storage/helper.js"
11
- import { acquireFileLock } from "./persistence/filelock/acquireFileLock.js"
12
- import _debug from "debug"
13
- import type { ProjectSettings } from "@inlang/project-settings"
14
- import { releaseLock } from "./persistence/filelock/releaseLock.js"
15
- import { PluginLoadMessagesError, PluginSaveMessagesError } from "./errors.js"
16
- import { humanIdHash } from "./storage/human-id/human-readable-id.js"
17
- const debug = _debug("sdk:messages")
18
-
19
- type MessageState = {
20
- messageDirtyFlags: {
21
- [messageId: string]: boolean
22
- }
23
- messageLoadHash: {
24
- [messageId: string]: string
25
- }
26
- isSaving: boolean
27
- currentSaveMessagesViaPlugin: Promise<void> | undefined
28
- sheduledSaveMessages:
29
- | { promise: Promise<void>; resolve: () => void; reject: (e: unknown) => void }
30
- | undefined
31
- isLoading: boolean
32
- sheduledLoadMessagesViaPlugin:
33
- | { promise: Promise<void>; resolve: () => void; reject: (e: unknown) => void }
34
- | undefined
35
- }
36
-
37
- type createMessagesQueryParameters = {
38
- projectPath: string
39
- nodeishFs: NodeishFilesystem
40
- settings: () => ProjectSettings | undefined
41
- resolvedModules: () => Awaited<ReturnType<typeof resolveModules>> | undefined
42
- onInitialMessageLoadResult: (e?: Error) => void
43
- onLoadMessageResult: (e?: Error) => void
44
- onSaveMessageResult: (e?: Error) => void
45
- }
46
- /**
47
- * Creates a reactive query API for messages.
48
- */
49
- export function createMessagesQuery({
50
- projectPath,
51
- nodeishFs,
52
- settings,
53
- resolvedModules,
54
- onInitialMessageLoadResult,
55
- onLoadMessageResult,
56
- onSaveMessageResult,
57
- }: createMessagesQueryParameters): InlangProject["query"]["messages"] {
58
- // @ts-expect-error
59
- const index = new ReactiveMap<string, Message>()
60
- let loaded = false
61
-
62
- // filepath for the lock folder
63
- const messageLockDirPath = projectPath + "/messagelock"
64
-
65
- let delegate: MessageQueryDelegate | undefined = undefined
66
-
67
- const setDelegate = (newDelegate: MessageQueryDelegate | undefined, onLoad: boolean) => {
68
- delegate = newDelegate
69
- if (newDelegate && loaded && onLoad) {
70
- newDelegate.onLoaded([...index.values()] as Message[])
71
- }
72
- }
73
-
74
- // Map default alias to message
75
- // Assumes that aliases are only created and deleted, not updated
76
- // TODO #2346 - handle updates to aliases
77
- // TODO #2346 - refine to hold messageId[], if default alias is not unique
78
- // @ts-expect-error
79
- const defaultAliasIndex = new ReactiveMap<string, Message>()
80
-
81
- const messageStates = {
82
- messageDirtyFlags: {},
83
- messageLoadHash: {},
84
- isSaving: false,
85
- currentSaveMessagesViaPlugin: undefined,
86
- sheduledSaveMessages: undefined,
87
- isLoading: false,
88
- sheduledLoadMessagesViaPlugin: undefined,
89
- } as MessageState
90
-
91
- // triggered whenever settings or resolved modules change
92
- createEffect(() => {
93
- // we clear the index independent from the change for
94
- index.clear()
95
- defaultAliasIndex.clear()
96
- loaded = false
97
-
98
- // Load messages -> use settings to subscribe to signals from the settings
99
- const _settings = settings()
100
- if (!_settings) return
101
-
102
- // wait for first effect excution until modules are resolved
103
- const resolvedPluginApi = resolvedModules()?.resolvedPluginApi
104
- if (!resolvedPluginApi) return
105
-
106
- const fsWithWatcher = createNodeishFsWithWatcher({
107
- nodeishFs: nodeishFs,
108
- // this message is called whenever a file changes that was read earlier by this filesystem
109
- // - the plugin loads messages -> reads the file messages.json -> start watching on messages.json -> updateMessages
110
- onChange: () => {
111
- // reload
112
- loadMessagesViaPlugin(
113
- fsWithWatcher,
114
- messageLockDirPath,
115
- messageStates,
116
- index,
117
- defaultAliasIndex,
118
- delegate,
119
- _settings, // NOTE we bang here - we don't expect the settings to become null during the livetime of a project
120
- resolvedPluginApi
121
- )
122
- .catch((e) => {
123
- onLoadMessageResult(e)
124
- })
125
- .then(() => {
126
- onLoadMessageResult()
127
- })
128
- },
129
- })
130
-
131
- // called between executions of effects as well as on disposal
132
- onCleanup(() => {
133
- // stop listening on fs events
134
- fsWithWatcher.stopWatching()
135
- delegate?.onCleanup()
136
- })
137
-
138
- if (!resolvedPluginApi.loadMessages) {
139
- onInitialMessageLoadResult(new Error("no loadMessages in resolved Modules found"))
140
- return
141
- }
142
- loadMessagesViaPlugin(
143
- fsWithWatcher,
144
- messageLockDirPath,
145
- messageStates,
146
- index,
147
- defaultAliasIndex,
148
- undefined /* delegate - we don't pass it here since we will call onLoaded instead */,
149
- _settings, // NOTE we bang here - we don't expect the settings to become null during the livetime of a project
150
- resolvedPluginApi
151
- )
152
- .catch((e) => {
153
- // propagate initial load error to calling laodProject function
154
- onInitialMessageLoadResult(new PluginLoadMessagesError({ cause: e }))
155
- })
156
- .then(() => {
157
- onInitialMessageLoadResult()
158
- delegate?.onLoaded([...index.values()])
159
- loaded = true
160
- })
161
- })
162
-
163
- const get = (args: Parameters<MessageQueryApi["get"]>[0]) => index.get(args.where.id)
164
-
165
- const getByDefaultAlias = (alias: Parameters<MessageQueryApi["getByDefaultAlias"]>[0]) =>
166
- defaultAliasIndex.get(alias)
167
-
168
- const scheduleSave = function () {
169
- // NOTE: we ignore save calls on a project without settings for now
170
-
171
- const _settings = settings()
172
- if (!_settings) return
173
-
174
- // wait for first effect excution until modules are resolved
175
- const resolvedPluginApi = resolvedModules()?.resolvedPluginApi
176
- if (!resolvedPluginApi) return
177
-
178
- saveMessagesViaPlugin(
179
- nodeishFs,
180
- messageLockDirPath,
181
- messageStates,
182
- index,
183
- defaultAliasIndex,
184
- delegate,
185
- _settings, // NOTE we bang here - we don't expect the settings to become null during the livetime of a project
186
- resolvedPluginApi
187
- )
188
- .catch((e) => {
189
- debug.log("error during saveMessagesViaPlugin")
190
- debug.log(e)
191
- })
192
- .catch((e) => {
193
- onSaveMessageResult(e)
194
- })
195
- .then(() => {
196
- onSaveMessageResult()
197
- })
198
- }
199
-
200
- return {
201
- setDelegate,
202
- create: ({ data }): boolean => {
203
- if (index.has(data.id)) return false
204
- index.set(data.id, data)
205
- if ("default" in data.alias) {
206
- defaultAliasIndex.set(data.alias.default, data)
207
- }
208
-
209
- messageStates.messageDirtyFlags[data.id] = true
210
- delegate?.onMessageCreate(data.id, index.get(data.id), [...index.values()])
211
- scheduleSave()
212
- return true
213
- },
214
- get: Object.assign(get, {
215
- subscribe: (
216
- args: Parameters<MessageQueryApi["get"]["subscribe"]>[0],
217
- callback: Parameters<MessageQueryApi["get"]["subscribe"]>[1]
218
- ) => createSubscribable(() => get(args)).subscribe(callback),
219
- }) as any,
220
- getByDefaultAlias: Object.assign(getByDefaultAlias, {
221
- subscribe: (
222
- alias: Parameters<MessageQueryApi["getByDefaultAlias"]["subscribe"]>[0],
223
- callback: Parameters<MessageQueryApi["getByDefaultAlias"]["subscribe"]>[1]
224
- ) => createSubscribable(() => getByDefaultAlias(alias)).subscribe(callback),
225
- }) as any,
226
- includedMessageIds: createSubscribable(() => {
227
- return [...index.keys()]
228
- }),
229
- getAll: createSubscribable(() => {
230
- return [...index.values()]
231
- }),
232
- update: ({ where, data }): boolean => {
233
- const message = index.get(where.id)
234
- if (message === undefined) return false
235
- index.set(where.id, { ...message, ...data })
236
- if (data.alias && "default" in data.alias) {
237
- defaultAliasIndex.set(data.alias.default, data)
238
- }
239
- messageStates.messageDirtyFlags[where.id] = true
240
- delegate?.onMessageUpdate(where.id, index.get(data.id), [...index.values()])
241
- scheduleSave()
242
- return true
243
- },
244
- upsert: ({ where, data }) => {
245
- const message = index.get(where.id)
246
- if (message === undefined) {
247
- index.set(where.id, data)
248
- if ("default" in data.alias) {
249
- defaultAliasIndex.set(data.alias.default, data)
250
- }
251
- messageStates.messageDirtyFlags[where.id] = true
252
- delegate?.onMessageCreate(data.id, index.get(data.id), [...index.values()])
253
- } else {
254
- index.set(where.id, { ...message, ...data })
255
- defaultAliasIndex.set(data.alias.default, { ...message, ...data })
256
- messageStates.messageDirtyFlags[where.id] = true
257
- delegate?.onMessageUpdate(data.id, index.get(data.id), [...index.values()])
258
- }
259
- scheduleSave()
260
- return true
261
- },
262
- delete: ({ where }): boolean => {
263
- const message = index.get(where.id)
264
- if (message === undefined) return false
265
- if ("default" in message.alias) {
266
- defaultAliasIndex.delete(message.alias.default)
267
- }
268
- index.delete(where.id)
269
- messageStates.messageDirtyFlags[where.id] = true
270
- delegate?.onMessageDelete(where.id, [...index.values()])
271
- scheduleSave()
272
- return true
273
- },
274
- }
275
- }
276
-
277
- // --- serialization of loading / saving messages.
278
- // 1. A plugin saveMessage call can not be called simultaniously to avoid side effects - its an async function not controlled by us
279
- // 2. loading and saving must not run in "parallel".
280
- // - json plugin exports into separate file per language.
281
- // - saving a message in two different languages would lead to a write in de.json first
282
- // - This will leads to a load of the messages and since en.json has not been saved yet the english variant in the message would get overritten with the old state again
283
-
284
- /**
285
- * Messsage that loads messages from a plugin - this method synchronizes with the saveMessage funciton.
286
- * If a save is in progress loading will wait until saving is done. If another load kicks in during this load it will queue the
287
- * load and execute it at the end of this load. subsequential loads will not be queued but the same promise will be reused
288
- *
289
- * - NOTE: this means that the parameters used to load like settingsValue and loadPlugin might not take into account. this has to be refactored
290
- * with the loadProject restructuring
291
- * @param fs
292
- * @param messagesQuery
293
- * @param settingsValue
294
- * @param loadPlugin
295
- * @returns void - updates the files and messages in of the project in place
296
- */
297
- async function loadMessagesViaPlugin(
298
- fs: NodeishFilesystem,
299
- lockDirPath: string,
300
- messageState: MessageState,
301
- messages: Map<string, Message>,
302
- aliaseToMessageMap: Map<string, Message>,
303
- delegate: MessageQueryDelegate | undefined,
304
- settingsValue: ProjectSettings,
305
- resolvedPluginApi: ResolvedPluginApi
306
- ) {
307
- const experimentalAliases = !!settingsValue.experimental?.aliases
308
-
309
- // loading is an asynchronous process - check if another load is in progress - queue this call if so
310
- if (messageState.isLoading) {
311
- if (!messageState.sheduledLoadMessagesViaPlugin) {
312
- messageState.sheduledLoadMessagesViaPlugin = createAwaitable()
313
- }
314
- // another load will take place right after the current one - its goingt to be idempotent form the current requested one - don't reschedule
315
- return messageState.sheduledLoadMessagesViaPlugin.promise
316
- }
317
-
318
- // set loading flag
319
- messageState.isLoading = true
320
- let lockTime: number | undefined = undefined
321
-
322
- try {
323
- lockTime = await acquireFileLock(fs as NodeishFilesystem, lockDirPath, "loadMessage")
324
- const loadedMessages = await makeTrulyAsync(
325
- resolvedPluginApi.loadMessages({
326
- settings: settingsValue,
327
- nodeishFs: fs,
328
- })
329
- )
330
-
331
- const deletedMessages = new Set(messages.keys())
332
- batch(() => {
333
- for (const loadedMessage of loadedMessages) {
334
- const loadedMessageClone = structuredClone(loadedMessage)
335
-
336
- const currentMessages = [...messages.values()]
337
- // TODO #1585 here we match using the id to support legacy load message plugins - after we introduced import / export methods we will use importedMessage.alias
338
- .filter(
339
- (message: any) =>
340
- (experimentalAliases ? message.alias["default"] : message.id) === loadedMessage.id
341
- )
342
-
343
- if (currentMessages.length > 1) {
344
- // NOTE: if we happen to find two messages witht the sam alias we throw for now
345
- // - this could be the case if one edits the aliase manualy
346
- throw new Error("more than one message with the same id or alias found ")
347
- } else if (currentMessages.length === 1) {
348
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- length has checked beforhand
349
- deletedMessages.delete(currentMessages[0]!.id)
350
- // update message in place - leave message id and alias untouched
351
- loadedMessageClone.alias = {} as any
352
-
353
- // TODO #1585 we have to map the id of the importedMessage to the alias and fill the id property with the id of the existing message - change when import mesage provides importedMessage.alias
354
- if (experimentalAliases) {
355
- loadedMessageClone.alias["default"] = loadedMessageClone.id
356
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- length has checked beforhand
357
- loadedMessageClone.id = currentMessages[0]!.id
358
- }
359
-
360
- // NOTE stringifyMessage encodes messages independent from key order!
361
- const importedEnecoded = stringifyMessage(loadedMessageClone)
362
-
363
- // NOTE could use hash instead of the whole object JSON to save memory...
364
- if (messageState.messageLoadHash[loadedMessageClone.id] === importedEnecoded) {
365
- // debug("skipping upsert!")
366
- continue
367
- }
368
-
369
- // This logic is preventing cycles - could also be handled if update api had a parameter for who triggered update
370
- // e.g. when FS was updated, we don't need to write back to FS
371
- // update is synchronous, so update effect will be triggered immediately
372
- // NOTE: this might trigger a save before we have the chance to delete - but since save is async and waits for the lock acquired by this method - its save to set the flags afterwards
373
- messages.set(loadedMessageClone.id, loadedMessageClone)
374
- if (loadedMessageClone.alias["default"]) {
375
- aliaseToMessageMap.set(loadedMessageClone.alias["default"], loadedMessageClone)
376
- }
377
- // NOTE could use hash instead of the whole object JSON to save memory...
378
- messageState.messageLoadHash[loadedMessageClone.id] = importedEnecoded
379
- delegate?.onMessageUpdate(loadedMessageClone.id, loadedMessageClone, [
380
- ...messages.values(),
381
- ])
382
- } else {
383
- // message with the given alias does not exist so far
384
- loadedMessageClone.alias = {} as any
385
- // TODO #1585 we have to map the id of the importedMessage to the alias - change when import mesage provides importedMessage.alias
386
- if (experimentalAliases) {
387
- loadedMessageClone.alias["default"] = loadedMessageClone.id
388
-
389
- let currentOffset = 0
390
- let messsageId: string | undefined
391
- do {
392
- messsageId = humanIdHash(loadedMessageClone.id, currentOffset)
393
- if (messages.get(messsageId)) {
394
- currentOffset += 1
395
- messsageId = undefined
396
- }
397
- } while (messsageId === undefined)
398
-
399
- // create a humanId based on a hash of the alias
400
- loadedMessageClone.id = messsageId
401
- aliaseToMessageMap.set(loadedMessageClone.alias["default"], loadedMessageClone)
402
- }
403
-
404
- const importedEnecoded = stringifyMessage(loadedMessageClone)
405
-
406
- // we don't have to check - done before hand if (messages.has(loadedMessageClone.id)) return false
407
- messages.set(loadedMessageClone.id, loadedMessageClone)
408
-
409
- messageState.messageLoadHash[loadedMessageClone.id] = importedEnecoded
410
- delegate?.onMessageUpdate(loadedMessageClone.id, loadedMessageClone, [
411
- ...messages.values(),
412
- ])
413
- }
414
- }
415
-
416
- for (const deletedMessageId of deletedMessages) {
417
- messages.delete(deletedMessageId)
418
- delegate?.onMessageDelete(deletedMessageId, [...messages.values()])
419
- }
420
- })
421
- await releaseLock(fs as NodeishFilesystem, lockDirPath, "loadMessage", lockTime)
422
- lockTime = undefined
423
-
424
- debug("loadMessagesViaPlugin: " + loadedMessages.length + " Messages processed ")
425
-
426
- messageState.isLoading = false
427
- } finally {
428
- if (lockTime !== undefined) {
429
- await releaseLock(fs as NodeishFilesystem, lockDirPath, "loadMessage", lockTime)
430
- }
431
- messageState.isLoading = false
432
- }
433
-
434
- const executingScheduledMessages = messageState.sheduledLoadMessagesViaPlugin
435
- if (executingScheduledMessages) {
436
- // a load has been requested during the load - executed it
437
-
438
- // reset sheduling to except scheduling again
439
- messageState.sheduledLoadMessagesViaPlugin = undefined
440
-
441
- // recall load unawaited to allow stack to pop
442
- loadMessagesViaPlugin(
443
- fs,
444
- lockDirPath,
445
- messageState,
446
- messages,
447
- aliaseToMessageMap,
448
- delegate,
449
- settingsValue,
450
- resolvedPluginApi
451
- )
452
- .then(() => {
453
- // resolve the scheduled load message promise
454
- executingScheduledMessages.resolve()
455
- })
456
- .catch((e: Error) => {
457
- // reject the scheduled load message promise
458
- executingScheduledMessages.reject(e)
459
- })
460
- }
461
- }
462
-
463
- async function saveMessagesViaPlugin(
464
- fs: NodeishFilesystem,
465
- lockDirPath: string,
466
- messageState: MessageState,
467
- messages: Map<string, Message>,
468
- aliaseToMessageMap: Map<string, Message>,
469
- delegate: MessageQueryDelegate | undefined,
470
- settingsValue: ProjectSettings,
471
- resolvedPluginApi: ResolvedPluginApi
472
- ): Promise<void> {
473
- // queue next save if we have a save ongoing
474
- if (messageState.isSaving) {
475
- if (!messageState.sheduledSaveMessages) {
476
- messageState.sheduledSaveMessages = createAwaitable()
477
- }
478
-
479
- return messageState.sheduledSaveMessages.promise
480
- }
481
-
482
- // set isSavingFlag
483
- messageState.isSaving = true
484
-
485
- messageState.currentSaveMessagesViaPlugin = (async function () {
486
- const saveMessageHashes = {} as { [messageId: string]: string }
487
-
488
- // check if we have any dirty message - witho
489
- if (Object.keys(messageState.messageDirtyFlags).length == 0) {
490
- // nothing to save :-)
491
- debug("save was skipped - no messages marked as dirty... build!")
492
- messageState.isSaving = false
493
- return
494
- }
495
-
496
- let messageDirtyFlagsBeforeSave: typeof messageState.messageDirtyFlags | undefined
497
- let lockTime: number | undefined
498
- try {
499
- lockTime = await acquireFileLock(fs as NodeishFilesystem, lockDirPath, "saveMessage")
500
-
501
- // since it may takes some time to acquire the lock we check if the save is required still (loadMessage could have happend in between)
502
- if (Object.keys(messageState.messageDirtyFlags).length == 0) {
503
- debug("save was skipped - no messages marked as dirty... releasing lock again")
504
- messageState.isSaving = false
505
- // release lock in finally block
506
- return
507
- }
508
-
509
- const currentMessages = [...messages.values()]
510
-
511
- const messagesToExport: Message[] = []
512
- for (const message of currentMessages) {
513
- if (messageState.messageDirtyFlags[message.id]) {
514
- const importedEnecoded = stringifyMessage(message)
515
- // NOTE: could use hash instead of the whole object JSON to save memory...
516
- saveMessageHashes[message.id] = importedEnecoded
517
- }
518
-
519
- const fixedExportMessage = { ...message }
520
- // TODO #1585 here we match using the id to support legacy load message plugins - after we introduced import / export methods we will use importedMessage.alias
521
- if (settingsValue.experimental?.aliases) {
522
- fixedExportMessage.id = fixedExportMessage.alias["default"] ?? fixedExportMessage.id
523
- }
524
-
525
- messagesToExport.push(fixedExportMessage)
526
- }
527
-
528
- // wa are about to save the messages to the plugin - reset all flags now
529
- messageDirtyFlagsBeforeSave = { ...messageState.messageDirtyFlags }
530
- messageState.messageDirtyFlags = {}
531
-
532
- // NOTE: this assumes that the plugin will handle message ordering
533
- await resolvedPluginApi.saveMessages({
534
- settings: settingsValue,
535
- messages: messagesToExport,
536
- nodeishFs: fs,
537
- })
538
-
539
- for (const [messageId, messageHash] of Object.entries(saveMessageHashes)) {
540
- messageState.messageLoadHash[messageId] = messageHash
541
- }
542
-
543
- if (lockTime !== undefined) {
544
- await releaseLock(fs as NodeishFilesystem, lockDirPath, "saveMessage", lockTime)
545
- lockTime = undefined
546
- }
547
-
548
- // if there is a queued load, allow it to take the lock before we run additional saves.
549
- if (messageState.sheduledLoadMessagesViaPlugin) {
550
- debug("saveMessagesViaPlugin calling queued loadMessagesViaPlugin to share lock")
551
- await loadMessagesViaPlugin(
552
- fs,
553
- lockDirPath,
554
- messageState,
555
- messages,
556
- aliaseToMessageMap,
557
- delegate,
558
- settingsValue,
559
- resolvedPluginApi
560
- )
561
- }
562
-
563
- messageState.isSaving = false
564
- } catch (err) {
565
- // something went wrong - add dirty flags again
566
- if (messageDirtyFlagsBeforeSave !== undefined) {
567
- for (const dirtyMessageId of Object.keys(messageDirtyFlagsBeforeSave)) {
568
- messageState.messageDirtyFlags[dirtyMessageId] = true
569
- }
570
- }
571
-
572
- if (lockTime !== undefined) {
573
- await releaseLock(fs as NodeishFilesystem, lockDirPath, "saveMessage", lockTime)
574
- lockTime = undefined
575
- }
576
- messageState.isSaving = false
577
-
578
- // ok an error
579
- throw new PluginSaveMessagesError({
580
- cause: err,
581
- })
582
- } finally {
583
- if (lockTime !== undefined) {
584
- await releaseLock(fs as NodeishFilesystem, lockDirPath, "saveMessage", lockTime)
585
- lockTime = undefined
586
- }
587
- messageState.isSaving = false
588
- }
589
- })()
590
-
591
- await messageState.currentSaveMessagesViaPlugin
592
-
593
- if (messageState.sheduledSaveMessages) {
594
- const executingSheduledSaveMessages = messageState.sheduledSaveMessages
595
- messageState.sheduledSaveMessages = undefined
596
-
597
- saveMessagesViaPlugin(
598
- fs,
599
- lockDirPath,
600
- messageState,
601
- messages,
602
- aliaseToMessageMap,
603
- delegate,
604
- settingsValue,
605
- resolvedPluginApi
606
- )
607
- .then(() => {
608
- executingSheduledSaveMessages.resolve()
609
- })
610
- .catch((e: Error) => {
611
- executingSheduledSaveMessages.reject(e)
612
- })
613
- }
614
- }
615
-
616
- type MaybePromise<T> = T | Promise<T>
617
-
618
- const makeTrulyAsync = <T>(fn: MaybePromise<T>): Promise<T> => (async () => fn)()
619
-
620
- const createAwaitable = () => {
621
- let resolve: () => void
622
- let reject: () => void
623
-
624
- const promise = new Promise<void>((res, rej) => {
625
- resolve = res
626
- reject = rej
627
- })
628
-
629
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- those properties get set by new Promise, TS can't know this
630
- return { promise, resolve: resolve!, reject: reject! } as unknown as {
631
- promise: Promise<void>
632
- resolve: () => void
633
- reject: (e: unknown) => void
634
- }
635
- }