@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,100 @@
1
+ /* eslint-disable no-restricted-imports */
2
+ import type fs from "node:fs/promises";
3
+ import type { InlangProject } from "./api.js";
4
+ import path from "node:path";
5
+ import { toMessageV1 } from "../json-schema/old-v1-message/toMessageV1.js";
6
+ import {
7
+ absolutePathFromProject,
8
+ withAbsolutePaths,
9
+ } from "./loadProjectFromDirectory.js";
10
+ import { detectJsonFormatting } from "../utilities/detectJsonFormatting.js";
11
+ import { selectBundleNested } from "../query-utilities/selectBundleNested.js";
12
+
13
+ export async function saveProjectToDirectory(args: {
14
+ fs: typeof fs;
15
+ project: InlangProject;
16
+ path: string;
17
+ }): Promise<void> {
18
+ if (args.path.endsWith(".inlang") === false) {
19
+ throw new Error("The path must end with .inlang");
20
+ }
21
+ const files = await args.project.lix.db
22
+ .selectFrom("file")
23
+ .selectAll()
24
+ .execute();
25
+
26
+ // write all files to the directory
27
+ for (const file of files) {
28
+ if (file.path.endsWith("db.sqlite")) {
29
+ continue;
30
+ }
31
+ const p = path.join(args.path, file.path);
32
+ await args.fs.mkdir(path.dirname(p), { recursive: true });
33
+ await args.fs.writeFile(p, new Uint8Array(file.data));
34
+ }
35
+
36
+ // run exporters
37
+ const plugins = await args.project.plugins.get();
38
+ const settings = await args.project.settings.get();
39
+
40
+ for (const plugin of plugins) {
41
+ // old legacy remove with v3
42
+ if (plugin.saveMessages) {
43
+ // in-efficient re-qeuery but it's a legacy function that will be removed.
44
+ // the effort of adjusting the code to not re-query is not worth it.
45
+ const bundlesNested = await selectBundleNested(args.project.db).execute();
46
+ await plugin.saveMessages({
47
+ messages: bundlesNested.map((b) => toMessageV1(b)),
48
+ // @ts-expect-error - legacy
49
+ nodeishFs: withAbsolutePaths(args.fs, args.path),
50
+ settings,
51
+ });
52
+ }
53
+
54
+ if (plugin.exportFiles) {
55
+ const bundles = await args.project.db
56
+ .selectFrom("bundle")
57
+ .selectAll()
58
+ .execute();
59
+ const messages = await args.project.db
60
+ .selectFrom("message")
61
+ .selectAll()
62
+ .execute();
63
+ const variants = await args.project.db
64
+ .selectFrom("variant")
65
+ .selectAll()
66
+ .execute();
67
+ const files = await plugin.exportFiles({
68
+ bundles,
69
+ messages,
70
+ variants,
71
+ settings,
72
+ });
73
+ for (const file of files) {
74
+ const p = absolutePathFromProject(args.path, file.name);
75
+ const dirname = path.dirname(p);
76
+ if ((await args.fs.stat(dirname)).isDirectory() === false) {
77
+ await args.fs.mkdir(dirname, { recursive: true });
78
+ }
79
+ if (p.endsWith(".json")) {
80
+ try {
81
+ const existing = await args.fs.readFile(p, "utf-8");
82
+ const stringify = detectJsonFormatting(existing);
83
+ await args.fs.writeFile(
84
+ p,
85
+ new TextEncoder().encode(
86
+ stringify(JSON.parse(new TextDecoder().decode(file.content)))
87
+ )
88
+ );
89
+ } catch {
90
+ // write the file to disk (json doesn't exist yet)
91
+ // yeah ugly duplication of write file but it works.
92
+ await args.fs.writeFile(p, new Uint8Array(file.content));
93
+ }
94
+ } else {
95
+ await args.fs.writeFile(p, new Uint8Array(file.content));
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
@@ -0,0 +1,4 @@
1
+ export { selectBundleNested } from "./selectBundleNested.js";
2
+ export { insertBundleNested } from "./insertBundleNested.js";
3
+ export { updateBundleNested } from "./updateBundleNested.js";
4
+ export { upsertBundleNested } from "./upsertBundleNested.js";
@@ -0,0 +1,46 @@
1
+ import type { Kysely } from "kysely";
2
+ import type {
3
+ InlangDatabaseSchema,
4
+ NewBundleNested,
5
+ } from "../database/schema.js";
6
+
7
+ export const insertBundleNested = async (
8
+ db: Kysely<InlangDatabaseSchema>,
9
+ bundle: NewBundleNested
10
+ ): Promise<void> => {
11
+ await db.transaction().execute(async (trx) => {
12
+ const insertedBundle = await trx
13
+ .insertInto("bundle")
14
+ .values({
15
+ id: bundle.id,
16
+ declarations: bundle.declarations,
17
+ })
18
+ .returning("id")
19
+ .executeTakeFirstOrThrow();
20
+
21
+ for (const message of bundle.messages) {
22
+ const insertedMessage = await trx
23
+ .insertInto("message")
24
+ .values({
25
+ id: message.id,
26
+ bundleId: insertedBundle.id,
27
+ locale: message.locale,
28
+ selectors: message.selectors,
29
+ })
30
+ .returning("id")
31
+ .executeTakeFirstOrThrow();
32
+
33
+ for (const variant of message.variants) {
34
+ await trx
35
+ .insertInto("variant")
36
+ .values({
37
+ id: variant.id,
38
+ messageId: insertedMessage.id,
39
+ matches: variant.matches,
40
+ pattern: variant.pattern,
41
+ })
42
+ .execute();
43
+ }
44
+ }
45
+ });
46
+ };
@@ -0,0 +1,46 @@
1
+ import type { Kysely } from "kysely";
2
+ import { jsonArrayFrom } from "kysely/helpers/sqlite";
3
+ import type { InlangDatabaseSchema } from "../database/schema.js";
4
+
5
+ /**
6
+ * Select bundles with nested messages and variants.
7
+ *
8
+ * `{ bundle, messages: [{ message, variants: [{ variant }] }] }`
9
+ *
10
+ * @example
11
+ * // getting one bundle where id is 123
12
+ * await selectBundleNested(db)
13
+ * .where("bundle.id", "=", "123")
14
+ * .executeTakeFirst()
15
+ *
16
+ * // getting all bundles
17
+ * await selectBundleNested(db)
18
+ * .execute()
19
+ */
20
+ export const selectBundleNested = (db: Kysely<InlangDatabaseSchema>) => {
21
+ return db.selectFrom("bundle").select((eb) => [
22
+ // select all columns from bundle
23
+ "id",
24
+ "declarations",
25
+ // select all columns from messages as "messages"
26
+ jsonArrayFrom(
27
+ eb
28
+ .selectFrom("message")
29
+ .select((eb) => [
30
+ // select all columns from message
31
+ "id",
32
+ "bundleId",
33
+ "locale",
34
+ "selectors",
35
+ // select all columns from variants as "variants"
36
+ jsonArrayFrom(
37
+ eb
38
+ .selectFrom("variant")
39
+ .select(["id", "messageId", "matches", "pattern"])
40
+ .whereRef("variant.messageId", "=", "message.id")
41
+ ).as("variants"),
42
+ ])
43
+ .whereRef("message.bundleId", "=", "bundle.id")
44
+ ).as("messages"),
45
+ ]);
46
+ };
@@ -0,0 +1,35 @@
1
+ import type { Kysely } from "kysely";
2
+ import type {
3
+ BundleNestedUpdate,
4
+ InlangDatabaseSchema,
5
+ } from "../database/schema.js";
6
+
7
+ export const updateBundleNested = async (
8
+ db: Kysely<InlangDatabaseSchema>,
9
+ bundle: BundleNestedUpdate & {
10
+ id: string;
11
+ messages: { id: string; variants: { id: string }[] }[];
12
+ }
13
+ ): Promise<void> => {
14
+ await db
15
+ .updateTable("bundle")
16
+ .set(bundle)
17
+ .where("id", "=", bundle.id)
18
+ .execute();
19
+
20
+ for (const message of bundle.messages) {
21
+ await db
22
+ .updateTable("message")
23
+ .set(message)
24
+ .where("id", "=", message.id)
25
+ .execute();
26
+
27
+ for (const variant of message.variants) {
28
+ await db
29
+ .updateTable("variant")
30
+ .set(variant)
31
+ .where("id", "=", variant.id)
32
+ .execute();
33
+ }
34
+ }
35
+ };
@@ -0,0 +1,61 @@
1
+ import type { Kysely } from "kysely";
2
+ import type {
3
+ InlangDatabaseSchema,
4
+ NewBundleNested,
5
+ } from "../database/schema.js";
6
+
7
+ export const upsertBundleNested = async (
8
+ db: Kysely<InlangDatabaseSchema>,
9
+ bundle: NewBundleNested
10
+ ): Promise<void> => {
11
+ await db.transaction().execute(async (trx) => {
12
+ const insertedBundle = await trx
13
+ .insertInto("bundle")
14
+ .values({
15
+ id: bundle.id,
16
+ declarations: bundle.declarations,
17
+ })
18
+ .returning("id")
19
+ .onConflict((oc) =>
20
+ oc.column("id").doUpdateSet({
21
+ ...bundle,
22
+ // @ts-expect-error - undefined
23
+ messages: undefined,
24
+ })
25
+ )
26
+ .executeTakeFirstOrThrow();
27
+
28
+ for (const message of bundle.messages) {
29
+ const insertedMessage = await trx
30
+ .insertInto("message")
31
+ .values({
32
+ id: message.id,
33
+ bundleId: insertedBundle.id,
34
+ locale: message.locale,
35
+ selectors: message.selectors,
36
+ })
37
+ .onConflict((oc) =>
38
+ oc.column("id").doUpdateSet({
39
+ ...message,
40
+ // @ts-expect-error - undefined
41
+ variants: undefined,
42
+ })
43
+ )
44
+ .returning("id")
45
+ .executeTakeFirstOrThrow();
46
+
47
+ for (const variant of message.variants) {
48
+ await trx
49
+ .insertInto("variant")
50
+ .values({
51
+ id: variant.id,
52
+ messageId: insertedMessage.id,
53
+ matches: variant.matches,
54
+ pattern: variant.pattern,
55
+ })
56
+ .onConflict((oc) => oc.column("id").doUpdateSet(variant))
57
+ .execute();
58
+ }
59
+ }
60
+ });
61
+ };
@@ -0,0 +1,40 @@
1
+ /* eslint-disable no-restricted-imports */
2
+ /* eslint-disable no-undef */
3
+ /**
4
+ * This script writes public environment variables
5
+ * to an importable env file.
6
+ *
7
+ * - The SDK must bundle this file with the rest of the SDK
8
+ * - This scripts avoids the need for a bundler
9
+ * - Must be ran before building the SDK
10
+ */
11
+
12
+ import fs from "node:fs/promises";
13
+ import url from "node:url";
14
+ import path from "node:path";
15
+
16
+ const dirname = path.dirname(url.fileURLToPath(import.meta.url));
17
+
18
+ const packageJson = JSON.parse(
19
+ await fs.readFile(path.resolve(dirname, "../../../package.json"), "utf-8")
20
+ );
21
+
22
+ await fs.writeFile(
23
+ dirname + "/index.ts",
24
+ `
25
+ export const ENV_VARIABLES = {
26
+ PUBLIC_POSTHOG_TOKEN: ${ifDefined(process.env.PUBLIC_POSTHOG_TOKEN)},
27
+ PUBLIC_INLANG_SDK_SENTRY_DSN: ${ifDefined(
28
+ process.env.PUBLIC_INLANG_SDK_SENTRY_DSN
29
+ )},
30
+ SDK_VERSION: ${ifDefined(packageJson.version)},
31
+ }
32
+ `
33
+ );
34
+
35
+ // eslint-disable-next-line no-console
36
+ // console.log("✅ Created env variable index file.");
37
+
38
+ function ifDefined(value) {
39
+ return value ? `"${value}"` : undefined;
40
+ }
@@ -5,9 +5,12 @@
5
5
 
6
6
  /**
7
7
  * Env variables that are available at runtime.
8
- *
9
- * - assume that each env variable might be undefined (to ease development/contributions)
10
8
  */
11
- export declare const ENV_VARIABLES: Partial<{
12
- PUBLIC_POSTHOG_TOKEN: string
13
- }>
9
+ export declare const ENV_VARIABLES: {
10
+ PUBLIC_POSTHOG_TOKEN?: string;
11
+ PUBLIC_INLANG_SDK_SENTRY_DSN?: string;
12
+ /**
13
+ * As defined in the package.json
14
+ */
15
+ SDK_VERSION: string;
16
+ };
@@ -0,0 +1,28 @@
1
+ import { init, setUser, captureException } from "@sentry/browser";
2
+ import { ENV_VARIABLES } from "../env-variables/index.js";
3
+
4
+ export function initErrorReporting(args: { projectId: string }) {
5
+ if (ENV_VARIABLES.PUBLIC_INLANG_SDK_SENTRY_DSN) {
6
+ // in order to receive alerts like "if more than 100 "users" are effected, notify the team"
7
+ // the user id is set to the project id
8
+ setUser({ id: args.projectId });
9
+ init({
10
+ dsn: ENV_VARIABLES.PUBLIC_INLANG_SDK_SENTRY_DSN,
11
+ release: ENV_VARIABLES.SDK_VERSION,
12
+ });
13
+ }
14
+ }
15
+
16
+ /**
17
+ * Capture an error.
18
+ *
19
+ * @example
20
+ * try {
21
+ * throw new Error("Something went wrong");
22
+ * } catch (error) {
23
+ * captureError(error);
24
+ * }
25
+ */
26
+ export function captureError(error: Error | any) {
27
+ return captureException(error);
28
+ }
@@ -0,0 +1,48 @@
1
+ import { expect, test, vi } from "vitest";
2
+ import { capture } from "./capture.js";
3
+
4
+ test("it should not capture if telemetry is off", async () => {
5
+ // @ts-expect-error - global.fetch is not defined
6
+ global.fetch = vi.fn(() => Promise.resolve());
7
+
8
+ vi.mock("../env-variables/index.js", async () => {
9
+ return {
10
+ ENV_VARIABLES: {
11
+ PUBLIC_POSTHOG_TOKEN: "mock-defined",
12
+ },
13
+ };
14
+ });
15
+
16
+ await capture("SDK loaded project", {
17
+ projectId: "test",
18
+ settings: {
19
+ telemetry: "off",
20
+ },
21
+ properties: {},
22
+ });
23
+
24
+ expect(global.fetch).not.toHaveBeenCalled();
25
+ });
26
+
27
+ test("it should not capture if telemetry is NOT off", async () => {
28
+ // @ts-expect-error - global.fetch is not defined
29
+ global.fetch = vi.fn(() => Promise.resolve());
30
+
31
+ vi.mock("../env-variables/index.js", async () => {
32
+ return {
33
+ ENV_VARIABLES: {
34
+ PUBLIC_POSTHOG_TOKEN: "mock-defined",
35
+ },
36
+ };
37
+ });
38
+
39
+ await capture("SDK loaded project", {
40
+ projectId: "test",
41
+ settings: {
42
+ telemetry: undefined,
43
+ },
44
+ properties: {},
45
+ });
46
+
47
+ expect(global.fetch).toHaveBeenCalled();
48
+ });
@@ -0,0 +1,98 @@
1
+ // import { ENV_VARIABLES } from "../env-variables/index.js";
2
+
3
+ import type { ProjectSettings } from "../../json-schema/settings.js";
4
+ import { ENV_VARIABLES } from "../env-variables/index.js";
5
+ import { captureError } from "../error-reporting/index.js";
6
+
7
+ /**
8
+ * List of telemetry events for typesafety.
9
+ *
10
+ * - prefix with `SDK` to avoid collisions with other apps
11
+ * - use past tense to indicate that the event is completed
12
+ */
13
+ type TelemetryEvent = "SDK loaded project";
14
+
15
+ /**
16
+ * Capture an event.
17
+ *
18
+ * - manually calling the PostHog API because the SDKs were not platform angostic (and generally bloated)
19
+ */
20
+ export const capture = async (
21
+ event: TelemetryEvent,
22
+ args: {
23
+ projectId: string;
24
+ /**
25
+ * Please use snake_case for property names.
26
+ */
27
+ properties: Record<string, any>;
28
+ settings: Pick<ProjectSettings, "telemetry">;
29
+ }
30
+ ) => {
31
+ if (args.settings.telemetry === "off") {
32
+ return;
33
+ } else if (ENV_VARIABLES.PUBLIC_POSTHOG_TOKEN === undefined) {
34
+ return;
35
+ }
36
+ try {
37
+ await fetch("https://eu.posthog.com/capture/", {
38
+ method: "POST",
39
+ body: JSON.stringify({
40
+ api_key: ENV_VARIABLES.PUBLIC_POSTHOG_TOKEN,
41
+ event,
42
+ // id is "unknown" because no user information is available
43
+ distinct_id: "unknown",
44
+ properties: {
45
+ $groups: { project: args.projectId },
46
+ ...args.properties,
47
+ },
48
+ }),
49
+ });
50
+ await identifyProject({
51
+ projectId: args.projectId,
52
+ // using the id for now as a name but can be changed in the future
53
+ // we need at least one property to make a project visible in the dashboar
54
+ properties: { name: args.projectId },
55
+ });
56
+ } catch (e) {
57
+ captureError(e);
58
+ }
59
+ };
60
+
61
+ /**
62
+ * Identifying a project is needed.
63
+ *
64
+ * Otherwise, the project will not be visible in the PostHog dashboard.
65
+ */
66
+ const identifyProject = async (args: {
67
+ projectId: string;
68
+ /**
69
+ * Please use snake_case for property names.
70
+ */
71
+ properties: Record<string, any>;
72
+ }) => {
73
+ // do not send events if the token is not set
74
+ // (assuming this eases testing)
75
+ if (ENV_VARIABLES.PUBLIC_POSTHOG_TOKEN === undefined) {
76
+ return;
77
+ }
78
+ try {
79
+ await fetch("https://eu.posthog.com/capture/", {
80
+ method: "POST",
81
+ body: JSON.stringify({
82
+ api_key: ENV_VARIABLES.PUBLIC_POSTHOG_TOKEN,
83
+ event: "$groupidentify",
84
+ // id is "unknown" because no user information is available
85
+ distinct_id: "unknown",
86
+ properties: {
87
+ $group_type: "project",
88
+ $group_key: args.projectId,
89
+ $group_set: {
90
+ ...args.properties,
91
+ },
92
+ },
93
+ }),
94
+ });
95
+ } catch (e) {
96
+ captureError(e);
97
+ }
98
+ };
@@ -0,0 +1,38 @@
1
+ import { expect, it } from "vitest";
2
+ import { detectJsonFormatting } from "./detectJsonFormatting.js";
3
+
4
+ it("should detect spacing", () => {
5
+ // test all possible spacings
6
+ for (const value of [1, 2, 3, 4, 6, 8, "\t"]) {
7
+ const spacing = value === "\t" ? "\t" : " ".repeat(value as number);
8
+ const objectWithSpacing = `{\n${spacing}"test": "test"\n}`;
9
+
10
+ const serialize = detectJsonFormatting(objectWithSpacing);
11
+ expect(serialize(JSON.parse(objectWithSpacing))).toBe(objectWithSpacing);
12
+ }
13
+ });
14
+
15
+ it("should detect spacing if the json is an array", () => {
16
+ // testing with one element only because dynamic generation of
17
+ // arrays with different spacings is too complex
18
+ const objectWithSpacing = `[\n\t"test",\n\t"test"\n]`;
19
+
20
+ const serialize = detectJsonFormatting(objectWithSpacing);
21
+ expect(serialize(JSON.parse(objectWithSpacing))).toBe(objectWithSpacing);
22
+ });
23
+
24
+ it("should detect new lines correctly", () => {
25
+ const withNewLine = `{"test":"test"}\n`;
26
+ const withoutNewLine = `{"test":"test"}`;
27
+ const withNewLineAndSpacing = `{\n\t"test": "test"\n}`;
28
+
29
+ const serialize1 = detectJsonFormatting(withNewLine);
30
+ const serialize2 = detectJsonFormatting(withoutNewLine);
31
+ const serialize3 = detectJsonFormatting(withNewLineAndSpacing);
32
+
33
+ expect(serialize1(JSON.parse(withNewLine))).toBe(withNewLine);
34
+ expect(serialize2(JSON.parse(withoutNewLine))).toBe(withoutNewLine);
35
+ expect(serialize3(JSON.parse(withNewLineAndSpacing))).toBe(
36
+ withNewLineAndSpacing
37
+ );
38
+ });
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Detects the formatting of a JSON file and returns a function
3
+ * that can be used to stringify JSON with the same formatting.
4
+ *
5
+ * @example
6
+ * const file = await fs.readFile("./messages.json", { encoding: "utf-8" })
7
+ * const stringify = detectJsonFormatting(file)
8
+ * const newFile = stringify(json)
9
+ */
10
+ export const detectJsonFormatting = (
11
+ file: string
12
+ ): ((
13
+ value: Parameters<typeof JSON.stringify>[0],
14
+ replacer?: Parameters<typeof JSON.stringify>[1]
15
+ // space is provided by the function
16
+ ) => string) => {
17
+ const endsWithNewLine = file.endsWith("\n");
18
+ const spacing = guessJsonIndent(file);
19
+
20
+ return (value, replacer) =>
21
+ JSON.stringify(value, replacer, spacing as any) +
22
+ (endsWithNewLine ? "\n" : "");
23
+ };
24
+
25
+ /**
26
+ * vendored from https://github.com/ehmicky/guess-json-indent
27
+ */
28
+ // Guess the indentation of a JSON string
29
+ const guessJsonIndent = (jsonString: string) => {
30
+ const firstIndex = skipWhitespaces(jsonString, 0);
31
+
32
+ if (
33
+ firstIndex === undefined ||
34
+ !isJsonObjectOrArray(jsonString[firstIndex])
35
+ ) {
36
+ return;
37
+ }
38
+
39
+ const secondIndex = skipWhitespaces(jsonString, firstIndex + 1);
40
+
41
+ if (secondIndex === undefined) {
42
+ return;
43
+ }
44
+
45
+ return getIndent(jsonString, firstIndex, secondIndex);
46
+ };
47
+
48
+ // Whitespaces are ignored before|between|after tokens in JSON.
49
+ // Uses imperative logic for performance.
50
+ const skipWhitespaces = (jsonString: string | any[], startIndex: number) => {
51
+ for (let index = startIndex; index < jsonString.length; index += 1) {
52
+ const character = jsonString[index];
53
+
54
+ if (!isJsonWhitespace(character)) {
55
+ return index;
56
+ }
57
+ }
58
+ return;
59
+ };
60
+
61
+ // JSON defines only those are valid whitespaces
62
+ const isJsonWhitespace = (character: string) =>
63
+ character === " " ||
64
+ character === "\t" ||
65
+ character === "\n" ||
66
+ character === "\r";
67
+
68
+ // If the top-level value is another type than an object or an array, there is
69
+ // no possible indentation
70
+ const isJsonObjectOrArray = (character: string | undefined) =>
71
+ character === "{" || character === "[";
72
+
73
+ // Uses imperative logic for performance
74
+ // @ts-expect-error - not all code paths return a value
75
+ const getIndent = (
76
+ jsonString: string | any[],
77
+ firstIndex: number,
78
+ secondIndex: number
79
+ ) => {
80
+ let indent;
81
+
82
+ for (let index = secondIndex - 1; index > firstIndex; index -= 1) {
83
+ const character = jsonString[index];
84
+
85
+ if (character === "\r") {
86
+ return;
87
+ }
88
+
89
+ if (character === "\n") {
90
+ return normalizeIndent(indent);
91
+ }
92
+
93
+ if (indent === undefined) {
94
+ indent = character;
95
+ } else if (indent[0] === character) {
96
+ indent += character;
97
+ } else {
98
+ return;
99
+ }
100
+ }
101
+ };
102
+
103
+ const normalizeIndent = (indent: string | any[] | undefined) => {
104
+ if (indent === undefined) {
105
+ return 0;
106
+ }
107
+
108
+ return indent[0] === " " ? indent.length : indent;
109
+ };