@inlang/sdk 0.36.3 → 2.0.0-beta.1

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 +167 -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 +13 -0
  196. package/dist/project/maybeCaptureTelemetry.d.ts.map +1 -0
  197. package/dist/project/maybeCaptureTelemetry.js +53 -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 +65 -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 +4 -2
  288. package/dist/services/telemetry/capture.d.ts.map +1 -0
  289. package/dist/services/telemetry/capture.js +77 -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 +44 -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 +177 -0
  349. package/src/project/loadProject.ts +245 -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 +72 -0
  355. package/src/project/maybeCaptureTelemetry.ts +61 -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 +48 -0
  369. package/src/services/telemetry/capture.ts +98 -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
@@ -0,0 +1,663 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f4f0657b-efd6-57ad-929c-9ac84897bf71")}catch(e){}}();
4
+ import { beforeEach, describe, expect, test, vi } from "vitest";
5
+ import { ProjectSettings } from "../json-schema/settings.js";
6
+ import { fs, vol, Volume } from "memfs";
7
+ import { loadProjectFromDirectory, ResourceFileImportError, WarningDeprecatedLintRule, } from "./loadProjectFromDirectory.js";
8
+ import { selectBundleNested } from "../query-utilities/selectBundleNested.js";
9
+ import { Text } from "../json-schema/pattern.js";
10
+ import { saveProjectToDirectory } from "./saveProjectToDirectory.js";
11
+ import { insertBundleNested } from "../query-utilities/insertBundleNested.js";
12
+ test("plugin.loadMessages and plugin.saveMessages must not be configured together with import export", async () => {
13
+ const mockLegacyPlugin = {
14
+ key: "mock-legacy-plugin",
15
+ loadMessages: async () => {
16
+ return [];
17
+ },
18
+ saveMessages: async () => { },
19
+ };
20
+ const mockLegacyPlugin2 = {
21
+ key: "mock-legacy-plugin-2",
22
+ loadMessages: async () => {
23
+ return [];
24
+ },
25
+ saveMessages: async () => { },
26
+ };
27
+ const mockImportExportPlugin = {
28
+ key: "mock-import-export-plugin",
29
+ exportFiles: () => {
30
+ return [];
31
+ },
32
+ importFiles: () => {
33
+ return {};
34
+ },
35
+ };
36
+ await expect((async () => {
37
+ await loadProjectFromDirectory({
38
+ fs: Volume.fromJSON({
39
+ "./project.inlang/settings.json": JSON.stringify({
40
+ baseLocale: "en",
41
+ locales: ["en", "de"],
42
+ modules: [],
43
+ }),
44
+ }),
45
+ path: "./project.inlang",
46
+ providePlugins: [
47
+ mockLegacyPlugin,
48
+ mockLegacyPlugin2,
49
+ mockImportExportPlugin,
50
+ ],
51
+ });
52
+ })()).rejects.toThrowError();
53
+ await expect((async () => {
54
+ await loadProjectFromDirectory({
55
+ fs: Volume.fromJSON({
56
+ "./project.inlang/settings.json": JSON.stringify({
57
+ baseLocale: "en",
58
+ locales: ["en", "de"],
59
+ modules: [],
60
+ }),
61
+ }),
62
+ path: "./project.inlang",
63
+ providePlugins: [
64
+ mockLegacyPlugin,
65
+ mockLegacyPlugin2,
66
+ mockImportExportPlugin,
67
+ ],
68
+ });
69
+ })()).rejects.toThrowError();
70
+ });
71
+ test("plugin.loadMessages and plugin.saveMessages should work for legacy purposes", async () => {
72
+ const mockLegacyPlugin = {
73
+ id: "mock-legacy-plugin",
74
+ // @ts-expect-error - id is deprecated, key can be undefined
75
+ key: undefined,
76
+ loadMessages: async ({ nodeishFs, settings }) => {
77
+ const pathPattern = settings["plugin.mock-plugin"]?.pathPattern;
78
+ const messages = [];
79
+ // @ts-expect-error - language tag is always given by the sdk v2
80
+ for (const languageTag of settings.languageTags) {
81
+ const data = await nodeishFs.readFile(pathPattern.replace("{languageTag}", languageTag));
82
+ for (const [key, value] of Object.entries(JSON.parse(data.toString()))) {
83
+ const exisitngMessage = messages.find((message) => message.id === key);
84
+ const variant = {
85
+ languageTag: languageTag,
86
+ match: [],
87
+ pattern: [{ type: "Text", value: value }],
88
+ };
89
+ if (exisitngMessage !== undefined) {
90
+ exisitngMessage.variants.push(variant);
91
+ }
92
+ else {
93
+ messages.push({
94
+ alias: {},
95
+ id: key,
96
+ selectors: [],
97
+ variants: [variant],
98
+ });
99
+ }
100
+ }
101
+ }
102
+ return messages;
103
+ },
104
+ saveMessages: async ({ messages, nodeishFs, settings }) => {
105
+ const pathPattern = settings["plugin.mock-plugin"]?.pathPattern;
106
+ for (const languageTag of settings.languageTags) {
107
+ const messagesInLanguage = {};
108
+ for (const message of messages) {
109
+ const variantsInLanguage = message.variants.filter((variant) => variant.languageTag === languageTag);
110
+ if (variantsInLanguage.length > 1) {
111
+ // data will get lost during export => throw?
112
+ }
113
+ else if (variantsInLanguage.length === 1) {
114
+ if (variantsInLanguage[0].pattern.length != 1 ||
115
+ variantsInLanguage[0].pattern[0]?.type !== "Text") {
116
+ // throw?
117
+ }
118
+ messagesInLanguage[message.id] = variantsInLanguage[0].pattern[0].value;
119
+ }
120
+ // else no-op
121
+ }
122
+ await nodeishFs.writeFile(pathPattern.replace("{languageTag}", languageTag), JSON.stringify(messagesInLanguage, null, 2));
123
+ }
124
+ },
125
+ };
126
+ const mockRepo = {
127
+ "./README.md": "# Hello World",
128
+ "./src/index.js": "console.log('Hello World')",
129
+ "./src/translations/en.json": JSON.stringify({
130
+ key1: "value1",
131
+ key2: "value2",
132
+ }),
133
+ "./src/translations/de.json": JSON.stringify({
134
+ key1: "wert1",
135
+ key2: "wert2",
136
+ }),
137
+ "./project.inlang/settings.json": JSON.stringify({
138
+ baseLocale: "en",
139
+ locales: ["en", "de"],
140
+ modules: ["./mock-module.js"],
141
+ "plugin.mock-plugin": {
142
+ pathPattern: "./src/translations/{languageTag}.json",
143
+ },
144
+ }),
145
+ };
146
+ const fs = Volume.fromJSON(mockRepo);
147
+ let project = await loadProjectFromDirectory({
148
+ fs: fs,
149
+ path: "./project.inlang",
150
+ providePlugins: [mockLegacyPlugin],
151
+ });
152
+ await insertBundleNested(project.db, {
153
+ id: "key-id",
154
+ messages: [
155
+ {
156
+ id: "mock-message",
157
+ bundleId: "mock-bundle",
158
+ locale: "en",
159
+ selectors: [],
160
+ variants: [
161
+ {
162
+ messageId: "mock-message",
163
+ pattern: [
164
+ {
165
+ type: "text",
166
+ value: "JOJO",
167
+ },
168
+ ],
169
+ },
170
+ ],
171
+ },
172
+ ],
173
+ });
174
+ await saveProjectToDirectory({
175
+ fs: fs.promises,
176
+ path: "./project.inlang",
177
+ project,
178
+ });
179
+ project = await loadProjectFromDirectory({
180
+ fs: fs,
181
+ path: "./project.inlang",
182
+ providePlugins: [mockLegacyPlugin],
183
+ });
184
+ const bundles = await selectBundleNested(project.db).execute();
185
+ const bundlesOrdered = bundles.sort((a, b) => a.id.localeCompare(b.id));
186
+ expect(bundles.length).toBe(3);
187
+ expect(bundlesOrdered[0]?.messages[0]?.locale).toBe("en");
188
+ expect(bundlesOrdered[0]?.messages[0]?.variants[0]?.pattern[0]?.value).toBe("JOJO");
189
+ // TODO fix
190
+ // expect(bundlesOrdered[0]?.messages[9]?.locale).toBe("en");
191
+ // expect(
192
+ // (bundlesOrdered[0]?.messages[1]?.variants[0]?.pattern[0] as Text)?.value
193
+ // ).toBe("wert1");
194
+ // expect(bundlesOrdered[1]?.messages[0]?.locale).toBe("en");
195
+ // expect(
196
+ // (bundlesOrdered[1]?.messages[0]?.variants[0]?.pattern[0] as Text)?.value
197
+ // ).toBe("value2");
198
+ // expect(bundlesOrdered[1]?.messages[1]?.locale).toBe("de");
199
+ // expect(
200
+ // (bundlesOrdered[1]?.messages[1]?.variants[0]?.pattern[0] as Text)?.value
201
+ // ).toBe("wert2");
202
+ });
203
+ const mockSettings = {
204
+ baseLocale: "en",
205
+ locales: ["en", "de"],
206
+ modules: [],
207
+ };
208
+ const mockDirectory = {
209
+ "/project.inlang/cache/plugin/29j49j2": "cache value",
210
+ "/project.inlang/.gitignore": "git value",
211
+ "/project.inlang/prettierrc.json": "prettier value",
212
+ "/project.inlang/README.md": "readme value",
213
+ "/project.inlang/settings.json": JSON.stringify(mockSettings),
214
+ };
215
+ describe("it should keep files between the inlang directory and lix in sync", async () => {
216
+ test("files from directory should be available via lix after project has been loaded from directory", async () => {
217
+ const syncInterval = 100;
218
+ const fs = Volume.fromJSON(mockDirectory);
219
+ const project = await loadProjectFromDirectory({
220
+ fs: fs,
221
+ path: "/project.inlang",
222
+ syncInterval: syncInterval,
223
+ });
224
+ const files = await project.lix.db.selectFrom("file").selectAll().execute();
225
+ expect(files.length).toBe(5 + 1 /* the db.sqlite file */ + 1 /* project_id */);
226
+ const filesByPath = files.reduce((acc, file) => {
227
+ acc[file.path] = new TextDecoder().decode(file.data);
228
+ return acc;
229
+ }, {});
230
+ expect(filesByPath["/cache/plugin/29j49j2"]).toBe("cache value");
231
+ expect(filesByPath["/.gitignore"]).toBe("git value");
232
+ expect(filesByPath["/prettierrc.json"]).toBe("prettier value");
233
+ expect(filesByPath["/README.md"]).toBe("readme value");
234
+ expect(filesByPath["/settings.json"]).toBe(JSON.stringify(mockSettings));
235
+ });
236
+ test("file created in fs should be avaialable in lix ", async () => {
237
+ const syncInterval = 100;
238
+ const fs = Volume.fromJSON(mockDirectory);
239
+ const project = await loadProjectFromDirectory({
240
+ fs: fs,
241
+ path: "/project.inlang",
242
+ syncInterval: syncInterval,
243
+ });
244
+ fs.writeFileSync("/project.inlang/file-created-on-fs.txt", "value written by fs", {
245
+ encoding: "utf-8",
246
+ });
247
+ // lets wait a seconds to allow the sync process catch up
248
+ await new Promise((resolve) => setTimeout(resolve, syncInterval + 10));
249
+ const randomFileInLix = await project.lix.db
250
+ .selectFrom("file")
251
+ .selectAll()
252
+ .where("path", "=", "/file-created-on-fs.txt")
253
+ .executeTakeFirstOrThrow();
254
+ expect(new TextDecoder().decode(randomFileInLix.data)).toBe("value written by fs");
255
+ });
256
+ test("file updated in fs should be avaialable in lix ", async () => {
257
+ const syncInterval = 100;
258
+ const fs = Volume.fromJSON(mockDirectory);
259
+ const project = await loadProjectFromDirectory({
260
+ fs: fs,
261
+ path: "/project.inlang",
262
+ syncInterval: syncInterval,
263
+ });
264
+ // "changes to a file on disk should reflect in lix
265
+ fs.writeFileSync("/project.inlang/settings.json", JSON.stringify({
266
+ ...mockSettings,
267
+ baseLocale: "brand-new-locale-written-to-fs-file",
268
+ }));
269
+ // console.log("wrting fs settings");
270
+ await new Promise((resolve) => setTimeout(resolve, syncInterval + 10));
271
+ const fileInLix = await project.lix.db
272
+ .selectFrom("file")
273
+ .selectAll()
274
+ .where("path", "=", "/settings.json")
275
+ .executeTakeFirstOrThrow();
276
+ const settingsAfterUpdateOnDisk = JSON.parse(new TextDecoder().decode(fileInLix.data));
277
+ expect(settingsAfterUpdateOnDisk.baseLocale).toBe("brand-new-locale-written-to-fs-file");
278
+ });
279
+ test("file deleted in fs should be droped from lix ", async () => {
280
+ const syncInterval = 100;
281
+ const fs = Volume.fromJSON(mockDirectory);
282
+ const project = await loadProjectFromDirectory({
283
+ fs: fs,
284
+ path: "/project.inlang",
285
+ syncInterval: syncInterval,
286
+ });
287
+ const filesInLixBefore = await project.lix.db
288
+ .selectFrom("file")
289
+ .selectAll()
290
+ .where("path", "=", "/README.md")
291
+ .execute();
292
+ expect(filesInLixBefore.length).toBe(1);
293
+ // "changes to a file on disk should reflect in lix
294
+ fs.unlinkSync("/project.inlang/README.md");
295
+ // console.log("wrting fs settings");
296
+ await new Promise((resolve) => setTimeout(resolve, syncInterval + 10));
297
+ const fileInLixAfter = await project.lix.db
298
+ .selectFrom("file")
299
+ .selectAll()
300
+ .where("path", "=", "/README.md")
301
+ .execute();
302
+ expect(fileInLixAfter.length).toBe(0);
303
+ });
304
+ test("file created in lix should be avaialable in fs ", async () => {
305
+ const syncInterval = 100;
306
+ const fs = Volume.fromJSON(mockDirectory);
307
+ const project = await loadProjectFromDirectory({
308
+ fs: fs,
309
+ path: "/project.inlang",
310
+ syncInterval: syncInterval,
311
+ });
312
+ await project.lix.db
313
+ .insertInto("file")
314
+ .values({
315
+ path: "/file-created-in.lix.txt",
316
+ data: new TextEncoder().encode("random value lix"),
317
+ })
318
+ .execute();
319
+ // lets wait a seconds to allow the sync process catch up
320
+ await new Promise((resolve) => setTimeout(resolve, syncInterval + 10));
321
+ const randomFileOnDiskContent = fs
322
+ .readFileSync("/project.inlang/file-created-in.lix.txt")
323
+ .toString();
324
+ expect(randomFileOnDiskContent).toBe("random value lix");
325
+ });
326
+ test("file updated in lix should be avaialable in fs ", async () => {
327
+ const syncInterval = 100;
328
+ const fs = Volume.fromJSON(mockDirectory);
329
+ const project = await loadProjectFromDirectory({
330
+ fs: fs,
331
+ path: "/project.inlang",
332
+ syncInterval: syncInterval,
333
+ });
334
+ // console.log("wrting lix settings");
335
+ // changes to a file in lix should reflect in the project directory
336
+ await project.lix.db
337
+ .updateTable("file")
338
+ .where("path", "=", "/settings.json")
339
+ .set({
340
+ data: new TextEncoder().encode(JSON.stringify({ ...mockSettings, baseLocale: "brand-new-locale2" })),
341
+ })
342
+ .execute();
343
+ // lets wait a seconds to allow the sync process catch up
344
+ await new Promise((resolve) => setTimeout(resolve, syncInterval + 10));
345
+ const fileOnDisk = fs.readFileSync("/project.inlang/settings.json");
346
+ const settings = JSON.parse(fileOnDisk.toString());
347
+ expect(settings.baseLocale).toBe("brand-new-locale2");
348
+ });
349
+ test("file deleted in lix should be gone in fs as awell", async () => {
350
+ const syncInterval = 100;
351
+ const fs = Volume.fromJSON(mockDirectory);
352
+ const project = await loadProjectFromDirectory({
353
+ fs: fs,
354
+ path: "/project.inlang",
355
+ syncInterval: syncInterval,
356
+ });
357
+ // console.log("wrting lix settings");
358
+ // changes to a file in lix should reflect in the project directory
359
+ await project.lix.db
360
+ .deleteFrom("file")
361
+ .where("path", "=", "/.gitignore")
362
+ .execute();
363
+ // lets wait a seconds to allow the sync process catch up
364
+ await new Promise((resolve) => setTimeout(resolve, syncInterval + 10));
365
+ const fileExistsOnDisk = fs.existsSync("/project.inlang/.gitignore");
366
+ expect(fileExistsOnDisk).toBe(false);
367
+ });
368
+ test("file updated in fs and lix (conflicting) should result in the fs state", async () => {
369
+ const syncInterval = 100;
370
+ const fs = Volume.fromJSON(mockDirectory);
371
+ const project = await loadProjectFromDirectory({
372
+ fs: fs,
373
+ path: "/project.inlang",
374
+ syncInterval: syncInterval,
375
+ });
376
+ // console.log("wrting fs settings simultanous");
377
+ // changes to a file on disk and lix at the same time should lead to the fs version
378
+ fs.writeFileSync("/project.inlang/settings.json", JSON.stringify({ ...mockSettings, baseLocale: "fs-version" }));
379
+ // console.log("wrting lix settings simultanous");
380
+ await project.lix.db
381
+ .updateTable("file")
382
+ .where("path", "=", "/settings.json")
383
+ .set({
384
+ data: new TextEncoder().encode(JSON.stringify({ ...mockSettings, baseLocale: "lix-version" })),
385
+ })
386
+ .execute();
387
+ // lets wait a seconds to allow the sync process catch up
388
+ await new Promise((resolve) => setTimeout(resolve, 1010));
389
+ const fileOnDiskUpdated = fs.readFileSync("/project.inlang/settings.json");
390
+ const settingsUpdated = JSON.parse(fileOnDiskUpdated.toString());
391
+ expect(settingsUpdated.baseLocale).toBe("fs-version");
392
+ const fileInLixUpdated = await project.lix.db
393
+ .selectFrom("file")
394
+ .selectAll()
395
+ .where("path", "=", "/settings.json")
396
+ .executeTakeFirstOrThrow();
397
+ const settingsAfterUpdateOnDiskAndLix = JSON.parse(new TextDecoder().decode(fileInLixUpdated.data));
398
+ expect(settingsAfterUpdateOnDiskAndLix.baseLocale).toBe("fs-version");
399
+ });
400
+ });
401
+ test("errors from importing translation files should be shown", async () => {
402
+ const mock = {
403
+ "/project.inlang/settings.json": JSON.stringify({
404
+ baseLocale: "en",
405
+ locales: ["en", "de"],
406
+ modules: [],
407
+ }),
408
+ };
409
+ const fs = Volume.fromJSON(mock);
410
+ const proxiedFs = new Proxy(fs, {
411
+ get: (target, prop) => {
412
+ if (prop === "promises") {
413
+ // Intercept the 'promises' object
414
+ return new Proxy(target.promises, {
415
+ get: (promisesTarget, promisesProp) => {
416
+ if (promisesProp === "readFile") {
417
+ // @ts-expect-error - we are mocking the fs
418
+ return (path, ...args) => {
419
+ if (path.endsWith("some-file.json")) {
420
+ throw new Error("MOCK ERROR");
421
+ }
422
+ return promisesTarget.readFile(path, ...args);
423
+ };
424
+ }
425
+ return Reflect.get(promisesTarget, promisesProp);
426
+ },
427
+ });
428
+ }
429
+ return Reflect.get(target, prop);
430
+ },
431
+ });
432
+ const mockPlugin = {
433
+ key: "mock-plugin",
434
+ importFiles: async () => {
435
+ return { bundles: [], messages: [], variants: [] };
436
+ },
437
+ toBeImportedFiles: async () => {
438
+ return [{ path: "./some-file.json", locale: "mock" }];
439
+ },
440
+ };
441
+ const project = await loadProjectFromDirectory({
442
+ fs: proxiedFs,
443
+ path: "/project.inlang",
444
+ providePlugins: [mockPlugin],
445
+ });
446
+ const errors = await project.errors.get();
447
+ // TODO deactivated for now - we need to proxy fs.promises or change the signature of loadProject
448
+ expect(errors).toHaveLength(1);
449
+ expect(errors[0]).toBeInstanceOf(ResourceFileImportError);
450
+ });
451
+ // it happens often that a resource file doesn't exist yet on import
452
+ test("errors from importing translation files that are ENOENT should not be shown", async () => {
453
+ const mock = {
454
+ "/project.inlang/settings.json": JSON.stringify({
455
+ baseLocale: "en",
456
+ locales: ["en", "de"],
457
+ modules: [],
458
+ }),
459
+ };
460
+ const fs = Volume.fromJSON(mock);
461
+ const mockPlugin = {
462
+ key: "mock-plugin",
463
+ importFiles: async () => {
464
+ return { bundles: [], messages: [], variants: [] };
465
+ },
466
+ toBeImportedFiles: async () => {
467
+ return [{ path: "./some-non-existing-file.json", locale: "mock" }];
468
+ },
469
+ };
470
+ const project = await loadProjectFromDirectory({
471
+ fs: fs,
472
+ path: "/project.inlang",
473
+ providePlugins: [mockPlugin],
474
+ });
475
+ const errors = await project.errors.get();
476
+ expect(errors).toHaveLength(0);
477
+ });
478
+ // it happens often that a resource file doesn't exist yet on import
479
+ test("it should pass toBeImportedMetadata on import", async () => {
480
+ const mock = {
481
+ "/foo/en.json": JSON.stringify({}),
482
+ "/project.inlang/settings.json": JSON.stringify({
483
+ baseLocale: "en",
484
+ locales: ["en", "de"],
485
+ }),
486
+ };
487
+ const fs = Volume.fromJSON(mock);
488
+ const mockPlugin = {
489
+ key: "mock-plugin",
490
+ toBeImportedFiles: async () => {
491
+ return [
492
+ {
493
+ path: "/foo/en.json",
494
+ locale: "mock",
495
+ metadata: {
496
+ foo: "bar",
497
+ },
498
+ },
499
+ ];
500
+ },
501
+ importFiles: async () => {
502
+ return { bundles: [], messages: [], variants: [] };
503
+ },
504
+ };
505
+ const toBeSpy = vi.spyOn(mockPlugin, "toBeImportedFiles");
506
+ const importSpy = vi.spyOn(mockPlugin, "importFiles");
507
+ const project = await loadProjectFromDirectory({
508
+ fs: fs,
509
+ path: "/project.inlang",
510
+ providePlugins: [mockPlugin],
511
+ });
512
+ expect(toBeSpy).toHaveBeenCalled();
513
+ expect(importSpy).toHaveBeenCalledWith(expect.objectContaining({
514
+ files: [
515
+ expect.objectContaining({
516
+ name: "en.json",
517
+ toBeImportedFilesMetadata: {
518
+ foo: "bar",
519
+ },
520
+ }),
521
+ ],
522
+ }));
523
+ });
524
+ test("it should provide plugins from disk for backwards compatibility but warn that those plugins are not portable", async () => {
525
+ const mockRepo = {
526
+ "/local-plugins/mock-plugin.js": "export default { key: 'mock-plugin' }",
527
+ "/local-plugins/mock-rule.js": "export default { id: 'messageLintRule.mock }",
528
+ "/website/project.inlang/settings.json": JSON.stringify({
529
+ baseLocale: "en",
530
+ locales: ["en", "de"],
531
+ modules: [
532
+ "../local-plugins/mock-plugin.js",
533
+ "../local-plugins/mock-rule.js",
534
+ ],
535
+ }),
536
+ };
537
+ const fs = Volume.fromJSON(mockRepo);
538
+ const project = await loadProjectFromDirectory({
539
+ fs: fs,
540
+ path: "/website/project.inlang",
541
+ });
542
+ const plugins = await project.plugins.get();
543
+ const errors = await project.errors.get();
544
+ const settings = await project.settings.get();
545
+ expect(plugins.length).toBe(1);
546
+ expect(plugins[0]?.key).toBe("mock-plugin");
547
+ expect(errors.length).toBe(1);
548
+ expect(errors[0]).toBeInstanceOf(WarningDeprecatedLintRule);
549
+ // it should not remove the module from the settings
550
+ // else roundtrips would not work
551
+ expect(settings.modules?.[0]).toBe("../local-plugins/mock-plugin.js");
552
+ });
553
+ // https://github.com/opral/inlang-sdk/issues/174
554
+ test("plugin calls that use fs should be intercepted to use an absolute path", async () => {
555
+ process.cwd = () => "/";
556
+ const mockRepo = {
557
+ "/messages/en.json": JSON.stringify({
558
+ key1: "value1",
559
+ key2: "value2",
560
+ }),
561
+ "/project.inlang/settings.json": JSON.stringify({
562
+ baseLocale: "en",
563
+ locales: ["en", "de"],
564
+ "plugin.mock-plugin": {
565
+ pathPattern: "./messages/{locale}.json",
566
+ },
567
+ }),
568
+ };
569
+ const mockPlugin = {
570
+ key: "mock-plugin",
571
+ loadMessages: async ({ nodeishFs, settings }) => {
572
+ const pathPattern = settings["plugin.mock-plugin"]?.pathPattern.replace("{locale}", "en");
573
+ const file = await nodeishFs.readFile(pathPattern);
574
+ // reading the file should be possible without an error
575
+ expect(file.toString()).toBe(JSON.stringify({
576
+ key1: "value1",
577
+ key2: "value2",
578
+ }));
579
+ return [];
580
+ },
581
+ saveMessages: async ({ nodeishFs, settings }) => {
582
+ const pathPattern = settings["plugin.mock-plugin"]?.pathPattern.replace("{locale}", "en");
583
+ const file = new TextEncoder().encode(JSON.stringify({
584
+ key1: "value1",
585
+ key2: "value2",
586
+ key3: "value3",
587
+ }));
588
+ await nodeishFs.writeFile(pathPattern, file.buffer);
589
+ },
590
+ toBeImportedFiles: async ({ settings }) => {
591
+ const pathPattern = settings["plugin.mock-plugin"]?.pathPattern.replace("{locale}", "en");
592
+ return [
593
+ {
594
+ path: pathPattern,
595
+ locale: "en",
596
+ },
597
+ ];
598
+ },
599
+ };
600
+ const fs = Volume.fromJSON(mockRepo);
601
+ const loadMessagesSpy = vi.spyOn(mockPlugin, "loadMessages");
602
+ const saveMessagesSpy = vi.spyOn(mockPlugin, "saveMessages");
603
+ const toBeImportedFilesSpy = vi.spyOn(mockPlugin, "toBeImportedFiles");
604
+ const fsReadFileSpy = vi.spyOn(fs.promises, "readFile");
605
+ const fsWriteFileSpy = vi.spyOn(fs.promises, "writeFile");
606
+ const project = await loadProjectFromDirectory({
607
+ fs: fs,
608
+ path: "/project.inlang",
609
+ providePlugins: [mockPlugin],
610
+ });
611
+ expect(loadMessagesSpy).toHaveBeenCalled();
612
+ expect(fsReadFileSpy).toHaveBeenCalledWith("/messages/en.json", undefined);
613
+ // todo test that saveMessages works too.
614
+ // await project.db.insertInto("bundle").defaultValues().execute();
615
+ // const translationFile = await fs.readFile("/messages/en.json", "utf-8");
616
+ // expect(translationFile).toBe(
617
+ // JSON.stringify({
618
+ // key1: "value1",
619
+ // key2: "value2",
620
+ // key3: "value3",
621
+ // })
622
+ // );
623
+ // expect(fsWriteFileSpy).toHaveBeenCalledWith(
624
+ // "/messages/en.json",
625
+ // JSON.stringify({
626
+ // key1: "value1",
627
+ // key2: "value2",
628
+ // key3: "value3",
629
+ // }),
630
+ // "utf-8"
631
+ // );
632
+ // expect(saveMessagesSpy).toHaveBeenCalled();
633
+ // expect(toBeImportedFilesSpy).toHaveBeenCalled();
634
+ });
635
+ test("it can import plugins via http", async () => {
636
+ const mockRepo = {
637
+ "/project.inlang/settings.json": JSON.stringify({
638
+ baseLocale: "en",
639
+ locales: ["en"],
640
+ modules: ["https://example.com/plugin.js"],
641
+ }),
642
+ };
643
+ const fs = Volume.fromJSON(mockRepo);
644
+ const mockPluginModule = `export default {
645
+ key: "mock-plugin"
646
+ }`;
647
+ global.fetch = vi.fn(() => Promise.resolve(new Response(mockPluginModule)));
648
+ const project = await loadProjectFromDirectory({
649
+ fs: fs,
650
+ path: "/project.inlang",
651
+ });
652
+ const plugins = await project.plugins.get();
653
+ expect(global.fetch).toHaveBeenCalledWith("https://example.com/plugin.js");
654
+ expect(plugins.length).toBe(1);
655
+ const pluginCache = await project.lix.db
656
+ .selectFrom("file")
657
+ .selectAll()
658
+ .where("path", "like", "/cache/plugins/%")
659
+ .execute();
660
+ expect(pluginCache.some((file) => new TextDecoder().decode(file.data) === mockPluginModule), "expecting the plugin to be cached").toBe(true);
661
+ });
662
+ //# sourceMappingURL=loadProjectFromDirectory.test.js.map
663
+ //# debugId=f4f0657b-efd6-57ad-929c-9ac84897bf71