@inlang/paraglide-js 2.23.1 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/dist/bundler-plugins/esbuild.d.ts +0 -1
  2. package/dist/bundler-plugins/esbuild.js.map +1 -1
  3. package/dist/bundler-plugins/index.d.ts +0 -1
  4. package/dist/bundler-plugins/index.js.map +1 -1
  5. package/dist/bundler-plugins/per-locale-build/constants.d.ts +0 -1
  6. package/dist/bundler-plugins/per-locale-build/constants.js.map +1 -1
  7. package/dist/bundler-plugins/per-locale-build/index.d.ts +0 -1
  8. package/dist/bundler-plugins/per-locale-build/index.js.map +1 -1
  9. package/dist/bundler-plugins/per-locale-build/locale-id.d.ts +0 -1
  10. package/dist/bundler-plugins/per-locale-build/locale-id.js.map +1 -1
  11. package/dist/bundler-plugins/per-locale-build/types.d.ts +0 -1
  12. package/dist/bundler-plugins/per-locale-build/types.js.map +1 -1
  13. package/dist/bundler-plugins/per-locale-build/vite-environments.d.ts +0 -1
  14. package/dist/bundler-plugins/per-locale-build/vite-environments.js +12 -7
  15. package/dist/bundler-plugins/per-locale-build/vite-environments.js.map +1 -1
  16. package/dist/bundler-plugins/per-locale-build/vite-environments.test.d.ts +0 -1
  17. package/dist/bundler-plugins/per-locale-build/vite-environments.test.js.map +1 -1
  18. package/dist/bundler-plugins/rolldown.d.ts +0 -1
  19. package/dist/bundler-plugins/rolldown.js.map +1 -1
  20. package/dist/bundler-plugins/rollup.d.ts +0 -1
  21. package/dist/bundler-plugins/rollup.js.map +1 -1
  22. package/dist/bundler-plugins/rspack.d.ts +0 -1
  23. package/dist/bundler-plugins/rspack.js.map +1 -1
  24. package/dist/bundler-plugins/unplugin.d.ts +0 -1
  25. package/dist/bundler-plugins/unplugin.js +134 -4
  26. package/dist/bundler-plugins/unplugin.js.map +1 -1
  27. package/dist/bundler-plugins/unplugin.test.d.ts +0 -1
  28. package/dist/bundler-plugins/unplugin.test.js +77 -0
  29. package/dist/bundler-plugins/unplugin.test.js.map +1 -1
  30. package/dist/bundler-plugins/vite.d.ts +0 -1
  31. package/dist/bundler-plugins/vite.js.map +1 -1
  32. package/dist/bundler-plugins/vite.test.d.ts +0 -1
  33. package/dist/bundler-plugins/vite.test.js.map +1 -1
  34. package/dist/bundler-plugins/webpack.d.ts +0 -1
  35. package/dist/bundler-plugins/webpack.js.map +1 -1
  36. package/dist/cli/commands/compile/command.d.ts +0 -1
  37. package/dist/cli/commands/compile/command.js +8 -1
  38. package/dist/cli/commands/compile/command.js.map +1 -1
  39. package/dist/cli/commands/compile/command.test.d.ts +0 -1
  40. package/dist/cli/commands/compile/command.test.js +45 -0
  41. package/dist/cli/commands/compile/command.test.js.map +1 -1
  42. package/dist/cli/commands/init/command.d.ts +0 -1
  43. package/dist/cli/commands/init/command.js.map +1 -1
  44. package/dist/cli/defaults.d.ts +0 -1
  45. package/dist/cli/defaults.js.map +1 -1
  46. package/dist/cli/index.d.ts +0 -1
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli/steps/add-vite-plugin.d.ts +0 -1
  49. package/dist/cli/steps/add-vite-plugin.js.map +1 -1
  50. package/dist/cli/steps/add-vite-plugin.test.d.ts +0 -1
  51. package/dist/cli/steps/add-vite-plugin.test.js.map +1 -1
  52. package/dist/cli/steps/check-for-uncomitted-changes.d.ts +0 -1
  53. package/dist/cli/steps/check-for-uncomitted-changes.js.map +1 -1
  54. package/dist/cli/steps/detect-bundler.d.ts +0 -1
  55. package/dist/cli/steps/detect-bundler.js.map +1 -1
  56. package/dist/cli/steps/detect-bundler.test.d.ts +0 -1
  57. package/dist/cli/steps/detect-bundler.test.js.map +1 -1
  58. package/dist/cli/steps/initialize-inlang-project.d.ts +0 -1
  59. package/dist/cli/steps/initialize-inlang-project.js.map +1 -1
  60. package/dist/cli/steps/maybe-add-machine-translation.d.ts +0 -1
  61. package/dist/cli/steps/maybe-add-machine-translation.js.map +1 -1
  62. package/dist/cli/steps/maybe-add-sherlock.d.ts +0 -1
  63. package/dist/cli/steps/maybe-add-sherlock.js.map +1 -1
  64. package/dist/cli/steps/prompt-for-outdir.d.ts +0 -1
  65. package/dist/cli/steps/prompt-for-outdir.js.map +1 -1
  66. package/dist/cli/steps/update-package-json.d.ts +0 -1
  67. package/dist/cli/steps/update-package-json.js.map +1 -1
  68. package/dist/cli/steps/update-ts-config.d.ts +0 -1
  69. package/dist/cli/steps/update-ts-config.js.map +1 -1
  70. package/dist/cli/steps/update-ts-config.test.d.ts +0 -1
  71. package/dist/cli/steps/update-ts-config.test.js.map +1 -1
  72. package/dist/cli/utils.d.ts +0 -1
  73. package/dist/cli/utils.js.map +1 -1
  74. package/dist/compiler/compile-annotation.d.ts +0 -1
  75. package/dist/compiler/compile-annotation.js.map +1 -1
  76. package/dist/compiler/compile-bundle.d.ts +0 -1
  77. package/dist/compiler/compile-bundle.js.map +1 -1
  78. package/dist/compiler/compile-bundle.test.d.ts +0 -1
  79. package/dist/compiler/compile-bundle.test.js.map +1 -1
  80. package/dist/compiler/compile-local-variable.d.ts +0 -1
  81. package/dist/compiler/compile-local-variable.js.map +1 -1
  82. package/dist/compiler/compile-local-variable.test.d.ts +0 -1
  83. package/dist/compiler/compile-local-variable.test.js.map +1 -1
  84. package/dist/compiler/compile-message.d.ts +0 -1
  85. package/dist/compiler/compile-message.js.map +1 -1
  86. package/dist/compiler/compile-message.test.d.ts +0 -1
  87. package/dist/compiler/compile-message.test.js.map +1 -1
  88. package/dist/compiler/compile-pattern.d.ts +0 -1
  89. package/dist/compiler/compile-pattern.js.map +1 -1
  90. package/dist/compiler/compile-pattern.test.d.ts +0 -1
  91. package/dist/compiler/compile-pattern.test.js.map +1 -1
  92. package/dist/compiler/compile-project.d.ts +0 -1
  93. package/dist/compiler/compile-project.js.map +1 -1
  94. package/dist/compiler/compile-project.test.d.ts +0 -1
  95. package/dist/compiler/compile-project.test.js.map +1 -1
  96. package/dist/compiler/compile.bench.d.ts +0 -1
  97. package/dist/compiler/compile.bench.js.map +1 -1
  98. package/dist/compiler/compile.d.ts +0 -1
  99. package/dist/compiler/compile.js +0 -15
  100. package/dist/compiler/compile.js.map +1 -1
  101. package/dist/compiler/compile.test.d.ts +0 -1
  102. package/dist/compiler/compile.test.js +0 -52
  103. package/dist/compiler/compile.test.js.map +1 -1
  104. package/dist/compiler/compiler-options.d.ts +8 -1
  105. package/dist/compiler/compiler-options.js.map +1 -1
  106. package/dist/compiler/create-paraglide.d.ts +0 -1
  107. package/dist/compiler/create-paraglide.js.map +1 -1
  108. package/dist/compiler/create-paraglide.test.d.ts +0 -1
  109. package/dist/compiler/create-paraglide.test.js.map +1 -1
  110. package/dist/compiler/create-readme.d.ts +0 -1
  111. package/dist/compiler/create-readme.js.map +1 -1
  112. package/dist/compiler/emit-ts-declarations.d.ts +0 -1
  113. package/dist/compiler/emit-ts-declarations.interop.test.d.ts +0 -1
  114. package/dist/compiler/emit-ts-declarations.interop.test.js.map +1 -1
  115. package/dist/compiler/emit-ts-declarations.js.map +1 -1
  116. package/dist/compiler/emit-ts-declarations.test.d.ts +0 -1
  117. package/dist/compiler/emit-ts-declarations.test.js.map +1 -1
  118. package/dist/compiler/index.d.ts +0 -1
  119. package/dist/compiler/index.js.map +1 -1
  120. package/dist/compiler/jsdoc-types.d.ts +0 -1
  121. package/dist/compiler/jsdoc-types.js.map +1 -1
  122. package/dist/compiler/jsdoc-types.test.d.ts +0 -1
  123. package/dist/compiler/jsdoc-types.test.js.map +1 -1
  124. package/dist/compiler/match-literals.d.ts +0 -1
  125. package/dist/compiler/match-literals.js.map +1 -1
  126. package/dist/compiler/output-structure/locale-modules.d.ts +0 -1
  127. package/dist/compiler/output-structure/locale-modules.js.map +1 -1
  128. package/dist/compiler/output-structure/locale-modules.test.d.ts +0 -1
  129. package/dist/compiler/output-structure/locale-modules.test.js.map +1 -1
  130. package/dist/compiler/output-structure/message-modules.d.ts +0 -1
  131. package/dist/compiler/output-structure/message-modules.js.map +1 -1
  132. package/dist/compiler/output-structure/message-modules.test.d.ts +0 -1
  133. package/dist/compiler/output-structure/message-modules.test.js.map +1 -1
  134. package/dist/compiler/per-locale-build.d.ts +0 -1
  135. package/dist/compiler/per-locale-build.js.map +1 -1
  136. package/dist/compiler/registry.d.ts +0 -1
  137. package/dist/compiler/registry.js.map +1 -1
  138. package/dist/compiler/resolve-tsc-js-path.d.ts +0 -1
  139. package/dist/compiler/resolve-tsc-js-path.js.map +1 -1
  140. package/dist/compiler/runtime/check-locale.d.ts +0 -1
  141. package/dist/compiler/runtime/check-locale.js.map +1 -1
  142. package/dist/compiler/runtime/check-locale.test.d.ts +0 -1
  143. package/dist/compiler/runtime/check-locale.test.js.map +1 -1
  144. package/dist/compiler/runtime/create-runtime.d.ts +1 -1
  145. package/dist/compiler/runtime/create-runtime.js +11 -0
  146. package/dist/compiler/runtime/create-runtime.js.map +1 -1
  147. package/dist/compiler/runtime/exec-url-pattern.d.ts +9 -0
  148. package/dist/compiler/runtime/exec-url-pattern.js +31 -0
  149. package/dist/compiler/runtime/exec-url-pattern.js.map +1 -0
  150. package/dist/compiler/runtime/extract-locale-from-cookie.d.ts +0 -1
  151. package/dist/compiler/runtime/extract-locale-from-cookie.js.map +1 -1
  152. package/dist/compiler/runtime/extract-locale-from-cookie.test.d.ts +0 -1
  153. package/dist/compiler/runtime/extract-locale-from-cookie.test.js.map +1 -1
  154. package/dist/compiler/runtime/extract-locale-from-header.d.ts +0 -1
  155. package/dist/compiler/runtime/extract-locale-from-header.js.map +1 -1
  156. package/dist/compiler/runtime/extract-locale-from-header.test.d.ts +0 -1
  157. package/dist/compiler/runtime/extract-locale-from-header.test.js.map +1 -1
  158. package/dist/compiler/runtime/extract-locale-from-navigator.d.ts +0 -1
  159. package/dist/compiler/runtime/extract-locale-from-navigator.js.map +1 -1
  160. package/dist/compiler/runtime/extract-locale-from-navigator.test.d.ts +0 -1
  161. package/dist/compiler/runtime/extract-locale-from-navigator.test.js.map +1 -1
  162. package/dist/compiler/runtime/extract-locale-from-request-async.d.ts +0 -1
  163. package/dist/compiler/runtime/extract-locale-from-request-async.js.map +1 -1
  164. package/dist/compiler/runtime/extract-locale-from-request-async.test.d.ts +0 -1
  165. package/dist/compiler/runtime/extract-locale-from-request-async.test.js.map +1 -1
  166. package/dist/compiler/runtime/extract-locale-from-request.d.ts +0 -1
  167. package/dist/compiler/runtime/extract-locale-from-request.js.map +1 -1
  168. package/dist/compiler/runtime/extract-locale-from-request.test.d.ts +0 -1
  169. package/dist/compiler/runtime/extract-locale-from-request.test.js.map +1 -1
  170. package/dist/compiler/runtime/extract-locale-from-url.d.ts +0 -1
  171. package/dist/compiler/runtime/extract-locale-from-url.js +8 -3
  172. package/dist/compiler/runtime/extract-locale-from-url.js.map +1 -1
  173. package/dist/compiler/runtime/extract-locale-from-url.test.d.ts +0 -1
  174. package/dist/compiler/runtime/extract-locale-from-url.test.js.map +1 -1
  175. package/dist/compiler/runtime/generate-static-localized-urls.d.ts +0 -1
  176. package/dist/compiler/runtime/generate-static-localized-urls.js +12 -6
  177. package/dist/compiler/runtime/generate-static-localized-urls.js.map +1 -1
  178. package/dist/compiler/runtime/generate-static-localized-urls.test.d.ts +0 -1
  179. package/dist/compiler/runtime/generate-static-localized-urls.test.js +46 -0
  180. package/dist/compiler/runtime/generate-static-localized-urls.test.js.map +1 -1
  181. package/dist/compiler/runtime/get-locale.d.ts +0 -1
  182. package/dist/compiler/runtime/get-locale.js.map +1 -1
  183. package/dist/compiler/runtime/get-locale.test.d.ts +0 -1
  184. package/dist/compiler/runtime/get-locale.test.js.map +1 -1
  185. package/dist/compiler/runtime/get-text-direction.d.ts +0 -1
  186. package/dist/compiler/runtime/get-text-direction.js.map +1 -1
  187. package/dist/compiler/runtime/get-text-direction.test.d.ts +0 -1
  188. package/dist/compiler/runtime/get-text-direction.test.js.map +1 -1
  189. package/dist/compiler/runtime/get-url-origin.d.ts +0 -1
  190. package/dist/compiler/runtime/get-url-origin.js.map +1 -1
  191. package/dist/compiler/runtime/get-url-origin.test.d.ts +0 -1
  192. package/dist/compiler/runtime/get-url-origin.test.js.map +1 -1
  193. package/dist/compiler/runtime/localize-href.bench.d.ts +1 -0
  194. package/dist/compiler/runtime/localize-href.bench.js +77 -0
  195. package/dist/compiler/runtime/localize-href.bench.js.map +1 -0
  196. package/dist/compiler/runtime/localize-href.d.ts +0 -1
  197. package/dist/compiler/runtime/localize-href.js.map +1 -1
  198. package/dist/compiler/runtime/localize-href.test.d.ts +0 -1
  199. package/dist/compiler/runtime/localize-href.test.js +43 -0
  200. package/dist/compiler/runtime/localize-href.test.js.map +1 -1
  201. package/dist/compiler/runtime/localize-url.d.ts +14 -1
  202. package/dist/compiler/runtime/localize-url.js +376 -18
  203. package/dist/compiler/runtime/localize-url.js.map +1 -1
  204. package/dist/compiler/runtime/localize-url.test.d.ts +0 -1
  205. package/dist/compiler/runtime/localize-url.test.js +163 -0
  206. package/dist/compiler/runtime/localize-url.test.js.map +1 -1
  207. package/dist/compiler/runtime/normalize-trailing-slash.d.ts +10 -0
  208. package/dist/compiler/runtime/normalize-trailing-slash.js +23 -0
  209. package/dist/compiler/runtime/normalize-trailing-slash.js.map +1 -0
  210. package/dist/compiler/runtime/route-strategy.d.ts +0 -1
  211. package/dist/compiler/runtime/route-strategy.js +4 -2
  212. package/dist/compiler/runtime/route-strategy.js.map +1 -1
  213. package/dist/compiler/runtime/set-locale.d.ts +0 -1
  214. package/dist/compiler/runtime/set-locale.js.map +1 -1
  215. package/dist/compiler/runtime/set-locale.test.d.ts +0 -1
  216. package/dist/compiler/runtime/set-locale.test.js.map +1 -1
  217. package/dist/compiler/runtime/should-redirect.d.ts +0 -1
  218. package/dist/compiler/runtime/should-redirect.js +4 -1
  219. package/dist/compiler/runtime/should-redirect.js.map +1 -1
  220. package/dist/compiler/runtime/should-redirect.test.d.ts +0 -1
  221. package/dist/compiler/runtime/should-redirect.test.js +30 -2
  222. package/dist/compiler/runtime/should-redirect.test.js.map +1 -1
  223. package/dist/compiler/runtime/strategy.d.ts +0 -1
  224. package/dist/compiler/runtime/strategy.js.map +1 -1
  225. package/dist/compiler/runtime/strategy.test.d.ts +0 -1
  226. package/dist/compiler/runtime/strategy.test.js.map +1 -1
  227. package/dist/compiler/runtime/track-message-call.d.ts +0 -1
  228. package/dist/compiler/runtime/track-message-call.js.map +1 -1
  229. package/dist/compiler/runtime/track-message-call.test.d.ts +0 -1
  230. package/dist/compiler/runtime/track-message-call.test.js.map +1 -1
  231. package/dist/compiler/runtime/type-definitions.d.ts +0 -1
  232. package/dist/compiler/runtime/type-definitions.js.map +1 -1
  233. package/dist/compiler/runtime/type.d.ts +1 -1
  234. package/dist/compiler/runtime/type.js.map +1 -1
  235. package/dist/compiler/runtime/type.test.d.ts +0 -1
  236. package/dist/compiler/runtime/type.test.js.map +1 -1
  237. package/dist/compiler/runtime/variables.d.ts +6 -1
  238. package/dist/compiler/runtime/variables.js +6 -0
  239. package/dist/compiler/runtime/variables.js.map +1 -1
  240. package/dist/compiler/safe-module-id.d.ts +0 -1
  241. package/dist/compiler/safe-module-id.js.map +1 -1
  242. package/dist/compiler/safe-module-id.test.d.ts +0 -1
  243. package/dist/compiler/safe-module-id.test.js.map +1 -1
  244. package/dist/compiler/seed-previous-compilation.d.ts +0 -1
  245. package/dist/compiler/seed-previous-compilation.js.map +1 -1
  246. package/dist/compiler/server/create-server-file.d.ts +0 -1
  247. package/dist/compiler/server/create-server-file.js.map +1 -1
  248. package/dist/compiler/server/create-server-file.test.d.ts +0 -1
  249. package/dist/compiler/server/create-server-file.test.js.map +1 -1
  250. package/dist/compiler/server/middleware.d.ts +0 -1
  251. package/dist/compiler/server/middleware.js +6 -2
  252. package/dist/compiler/server/middleware.js.map +1 -1
  253. package/dist/compiler/server/middleware.test.d.ts +0 -1
  254. package/dist/compiler/server/middleware.test.js +34 -0
  255. package/dist/compiler/server/middleware.test.js.map +1 -1
  256. package/dist/compiler/server/type.d.ts +0 -1
  257. package/dist/compiler/server/type.js.map +1 -1
  258. package/dist/compiler/types.d.ts +0 -1
  259. package/dist/compiler/types.js.map +1 -1
  260. package/dist/compiler/variable-access.d.ts +0 -1
  261. package/dist/compiler/variable-access.js.map +1 -1
  262. package/dist/index.d.ts +0 -1
  263. package/dist/index.js.map +1 -1
  264. package/dist/index.test.d.ts +1 -0
  265. package/dist/index.test.js +9 -0
  266. package/dist/index.test.js.map +1 -0
  267. package/dist/services/codegen/escape.d.ts +0 -1
  268. package/dist/services/codegen/escape.js.map +1 -1
  269. package/dist/services/codegen/quotes.d.ts +0 -1
  270. package/dist/services/codegen/quotes.js.map +1 -1
  271. package/dist/services/env-variables/create-index-file.d.ts +0 -1
  272. package/dist/services/env-variables/create-index-file.js.map +1 -1
  273. package/dist/services/env-variables/index.d.ts +0 -1
  274. package/dist/services/env-variables/index.js +1 -1
  275. package/dist/services/env-variables/index.js.map +1 -1
  276. package/dist/services/environment/package.d.ts +0 -1
  277. package/dist/services/environment/package.js.map +1 -1
  278. package/dist/services/environment/package.test.d.ts +0 -1
  279. package/dist/services/environment/package.test.js.map +1 -1
  280. package/dist/services/error-handling.d.ts +0 -1
  281. package/dist/services/error-handling.js.map +1 -1
  282. package/dist/services/error-handling.test.d.ts +0 -1
  283. package/dist/services/error-handling.test.js.map +1 -1
  284. package/dist/services/file-handling/exists.d.ts +0 -1
  285. package/dist/services/file-handling/exists.js.map +1 -1
  286. package/dist/services/file-handling/exists.test.d.ts +0 -1
  287. package/dist/services/file-handling/exists.test.js.map +1 -1
  288. package/dist/services/file-handling/types.d.ts +0 -1
  289. package/dist/services/file-handling/types.js.map +1 -1
  290. package/dist/services/file-handling/write-output.bench.d.ts +1 -0
  291. package/dist/services/file-handling/write-output.bench.js +24 -0
  292. package/dist/services/file-handling/write-output.bench.js.map +1 -0
  293. package/dist/services/file-handling/write-output.d.ts +0 -1
  294. package/dist/services/file-handling/write-output.js +16 -20
  295. package/dist/services/file-handling/write-output.js.map +1 -1
  296. package/dist/services/file-handling/write-output.test.d.ts +0 -1
  297. package/dist/services/file-handling/write-output.test.js +27 -0
  298. package/dist/services/file-handling/write-output.test.js.map +1 -1
  299. package/dist/services/file-watching/tracked-fs.d.ts +0 -1
  300. package/dist/services/file-watching/tracked-fs.js.map +1 -1
  301. package/dist/services/file-watching/tracked-fs.test.d.ts +0 -1
  302. package/dist/services/file-watching/tracked-fs.test.js.map +1 -1
  303. package/dist/services/logger/index.d.ts +0 -1
  304. package/dist/services/logger/index.js.map +1 -1
  305. package/dist/services/lookup.d.ts +0 -1
  306. package/dist/services/lookup.js.map +1 -1
  307. package/dist/urlpattern-polyfill/index.d.ts +0 -1
  308. package/dist/urlpattern-polyfill/index.js.map +1 -1
  309. package/dist/utilities/detect-json-formatting.d.ts +0 -1
  310. package/dist/utilities/detect-json-formatting.js.map +1 -1
  311. package/dist/utilities/node-normalize-path.d.ts +0 -1
  312. package/dist/utilities/node-normalize-path.js.map +1 -1
  313. package/package.json +2 -2
  314. package/dist/bundler-plugins/esbuild.d.ts.map +0 -1
  315. package/dist/bundler-plugins/index.d.ts.map +0 -1
  316. package/dist/bundler-plugins/per-locale-build/constants.d.ts.map +0 -1
  317. package/dist/bundler-plugins/per-locale-build/index.d.ts.map +0 -1
  318. package/dist/bundler-plugins/per-locale-build/locale-id.d.ts.map +0 -1
  319. package/dist/bundler-plugins/per-locale-build/types.d.ts.map +0 -1
  320. package/dist/bundler-plugins/per-locale-build/vite-environments.d.ts.map +0 -1
  321. package/dist/bundler-plugins/per-locale-build/vite-environments.test.d.ts.map +0 -1
  322. package/dist/bundler-plugins/rolldown.d.ts.map +0 -1
  323. package/dist/bundler-plugins/rollup.d.ts.map +0 -1
  324. package/dist/bundler-plugins/rspack.d.ts.map +0 -1
  325. package/dist/bundler-plugins/unplugin.d.ts.map +0 -1
  326. package/dist/bundler-plugins/unplugin.test.d.ts.map +0 -1
  327. package/dist/bundler-plugins/vite.d.ts.map +0 -1
  328. package/dist/bundler-plugins/vite.test.d.ts.map +0 -1
  329. package/dist/bundler-plugins/webpack.d.ts.map +0 -1
  330. package/dist/cli/commands/compile/command.d.ts.map +0 -1
  331. package/dist/cli/commands/compile/command.test.d.ts.map +0 -1
  332. package/dist/cli/commands/init/command.d.ts.map +0 -1
  333. package/dist/cli/defaults.d.ts.map +0 -1
  334. package/dist/cli/index.d.ts.map +0 -1
  335. package/dist/cli/steps/add-vite-plugin.d.ts.map +0 -1
  336. package/dist/cli/steps/add-vite-plugin.test.d.ts.map +0 -1
  337. package/dist/cli/steps/check-for-uncomitted-changes.d.ts.map +0 -1
  338. package/dist/cli/steps/detect-bundler.d.ts.map +0 -1
  339. package/dist/cli/steps/detect-bundler.test.d.ts.map +0 -1
  340. package/dist/cli/steps/initialize-inlang-project.d.ts.map +0 -1
  341. package/dist/cli/steps/maybe-add-machine-translation.d.ts.map +0 -1
  342. package/dist/cli/steps/maybe-add-sherlock.d.ts.map +0 -1
  343. package/dist/cli/steps/prompt-for-outdir.d.ts.map +0 -1
  344. package/dist/cli/steps/update-package-json.d.ts.map +0 -1
  345. package/dist/cli/steps/update-ts-config.d.ts.map +0 -1
  346. package/dist/cli/steps/update-ts-config.test.d.ts.map +0 -1
  347. package/dist/cli/utils.d.ts.map +0 -1
  348. package/dist/compiler/compile-annotation.d.ts.map +0 -1
  349. package/dist/compiler/compile-bundle.d.ts.map +0 -1
  350. package/dist/compiler/compile-bundle.test.d.ts.map +0 -1
  351. package/dist/compiler/compile-local-variable.d.ts.map +0 -1
  352. package/dist/compiler/compile-local-variable.test.d.ts.map +0 -1
  353. package/dist/compiler/compile-message.d.ts.map +0 -1
  354. package/dist/compiler/compile-message.test.d.ts.map +0 -1
  355. package/dist/compiler/compile-pattern.d.ts.map +0 -1
  356. package/dist/compiler/compile-pattern.test.d.ts.map +0 -1
  357. package/dist/compiler/compile-project.d.ts.map +0 -1
  358. package/dist/compiler/compile-project.test.d.ts.map +0 -1
  359. package/dist/compiler/compile.bench.d.ts.map +0 -1
  360. package/dist/compiler/compile.d.ts.map +0 -1
  361. package/dist/compiler/compile.test.d.ts.map +0 -1
  362. package/dist/compiler/compiler-options.d.ts.map +0 -1
  363. package/dist/compiler/create-paraglide.d.ts.map +0 -1
  364. package/dist/compiler/create-paraglide.test.d.ts.map +0 -1
  365. package/dist/compiler/create-readme.d.ts.map +0 -1
  366. package/dist/compiler/emit-ts-declarations.d.ts.map +0 -1
  367. package/dist/compiler/emit-ts-declarations.interop.test.d.ts.map +0 -1
  368. package/dist/compiler/emit-ts-declarations.test.d.ts.map +0 -1
  369. package/dist/compiler/index.d.ts.map +0 -1
  370. package/dist/compiler/jsdoc-types.d.ts.map +0 -1
  371. package/dist/compiler/jsdoc-types.test.d.ts.map +0 -1
  372. package/dist/compiler/match-literals.d.ts.map +0 -1
  373. package/dist/compiler/output-structure/locale-modules.d.ts.map +0 -1
  374. package/dist/compiler/output-structure/locale-modules.test.d.ts.map +0 -1
  375. package/dist/compiler/output-structure/message-modules.d.ts.map +0 -1
  376. package/dist/compiler/output-structure/message-modules.test.d.ts.map +0 -1
  377. package/dist/compiler/per-locale-build.d.ts.map +0 -1
  378. package/dist/compiler/registry.d.ts.map +0 -1
  379. package/dist/compiler/resolve-tsc-js-path.d.ts.map +0 -1
  380. package/dist/compiler/runtime/check-locale.d.ts.map +0 -1
  381. package/dist/compiler/runtime/check-locale.test.d.ts.map +0 -1
  382. package/dist/compiler/runtime/create-runtime.d.ts.map +0 -1
  383. package/dist/compiler/runtime/extract-locale-from-cookie.d.ts.map +0 -1
  384. package/dist/compiler/runtime/extract-locale-from-cookie.test.d.ts.map +0 -1
  385. package/dist/compiler/runtime/extract-locale-from-header.d.ts.map +0 -1
  386. package/dist/compiler/runtime/extract-locale-from-header.test.d.ts.map +0 -1
  387. package/dist/compiler/runtime/extract-locale-from-navigator.d.ts.map +0 -1
  388. package/dist/compiler/runtime/extract-locale-from-navigator.test.d.ts.map +0 -1
  389. package/dist/compiler/runtime/extract-locale-from-request-async.d.ts.map +0 -1
  390. package/dist/compiler/runtime/extract-locale-from-request-async.test.d.ts.map +0 -1
  391. package/dist/compiler/runtime/extract-locale-from-request.d.ts.map +0 -1
  392. package/dist/compiler/runtime/extract-locale-from-request.test.d.ts.map +0 -1
  393. package/dist/compiler/runtime/extract-locale-from-url.d.ts.map +0 -1
  394. package/dist/compiler/runtime/extract-locale-from-url.test.d.ts.map +0 -1
  395. package/dist/compiler/runtime/generate-static-localized-urls.d.ts.map +0 -1
  396. package/dist/compiler/runtime/generate-static-localized-urls.test.d.ts.map +0 -1
  397. package/dist/compiler/runtime/get-locale.d.ts.map +0 -1
  398. package/dist/compiler/runtime/get-locale.test.d.ts.map +0 -1
  399. package/dist/compiler/runtime/get-text-direction.d.ts.map +0 -1
  400. package/dist/compiler/runtime/get-text-direction.test.d.ts.map +0 -1
  401. package/dist/compiler/runtime/get-url-origin.d.ts.map +0 -1
  402. package/dist/compiler/runtime/get-url-origin.test.d.ts.map +0 -1
  403. package/dist/compiler/runtime/localize-href.d.ts.map +0 -1
  404. package/dist/compiler/runtime/localize-href.test.d.ts.map +0 -1
  405. package/dist/compiler/runtime/localize-url.d.ts.map +0 -1
  406. package/dist/compiler/runtime/localize-url.test.d.ts.map +0 -1
  407. package/dist/compiler/runtime/route-strategy.d.ts.map +0 -1
  408. package/dist/compiler/runtime/set-locale.d.ts.map +0 -1
  409. package/dist/compiler/runtime/set-locale.test.d.ts.map +0 -1
  410. package/dist/compiler/runtime/should-redirect.d.ts.map +0 -1
  411. package/dist/compiler/runtime/should-redirect.test.d.ts.map +0 -1
  412. package/dist/compiler/runtime/strategy.d.ts.map +0 -1
  413. package/dist/compiler/runtime/strategy.test.d.ts.map +0 -1
  414. package/dist/compiler/runtime/track-message-call.d.ts.map +0 -1
  415. package/dist/compiler/runtime/track-message-call.test.d.ts.map +0 -1
  416. package/dist/compiler/runtime/type-definitions.d.ts.map +0 -1
  417. package/dist/compiler/runtime/type.d.ts.map +0 -1
  418. package/dist/compiler/runtime/type.test.d.ts.map +0 -1
  419. package/dist/compiler/runtime/variables.d.ts.map +0 -1
  420. package/dist/compiler/safe-module-id.d.ts.map +0 -1
  421. package/dist/compiler/safe-module-id.test.d.ts.map +0 -1
  422. package/dist/compiler/seed-previous-compilation.d.ts.map +0 -1
  423. package/dist/compiler/server/create-server-file.d.ts.map +0 -1
  424. package/dist/compiler/server/create-server-file.test.d.ts.map +0 -1
  425. package/dist/compiler/server/middleware.d.ts.map +0 -1
  426. package/dist/compiler/server/middleware.test.d.ts.map +0 -1
  427. package/dist/compiler/server/type.d.ts.map +0 -1
  428. package/dist/compiler/types.d.ts.map +0 -1
  429. package/dist/compiler/variable-access.d.ts.map +0 -1
  430. package/dist/index.d.ts.map +0 -1
  431. package/dist/services/account/index.d.ts +0 -15
  432. package/dist/services/account/index.d.ts.map +0 -1
  433. package/dist/services/account/index.js +0 -43
  434. package/dist/services/account/index.js.map +0 -1
  435. package/dist/services/codegen/escape.d.ts.map +0 -1
  436. package/dist/services/codegen/quotes.d.ts.map +0 -1
  437. package/dist/services/env-variables/create-index-file.d.ts.map +0 -1
  438. package/dist/services/env-variables/index.d.ts.map +0 -1
  439. package/dist/services/environment/package.d.ts.map +0 -1
  440. package/dist/services/environment/package.test.d.ts.map +0 -1
  441. package/dist/services/error-handling.d.ts.map +0 -1
  442. package/dist/services/error-handling.test.d.ts.map +0 -1
  443. package/dist/services/file-handling/exists.d.ts.map +0 -1
  444. package/dist/services/file-handling/exists.test.d.ts.map +0 -1
  445. package/dist/services/file-handling/types.d.ts.map +0 -1
  446. package/dist/services/file-handling/write-output.d.ts.map +0 -1
  447. package/dist/services/file-handling/write-output.test.d.ts.map +0 -1
  448. package/dist/services/file-watching/tracked-fs.d.ts.map +0 -1
  449. package/dist/services/file-watching/tracked-fs.test.d.ts.map +0 -1
  450. package/dist/services/logger/index.d.ts.map +0 -1
  451. package/dist/services/lookup.d.ts.map +0 -1
  452. package/dist/urlpattern-polyfill/index.d.ts.map +0 -1
  453. package/dist/utilities/detect-json-formatting.d.ts.map +0 -1
  454. package/dist/utilities/node-normalize-path.d.ts.map +0 -1
@@ -0,0 +1,9 @@
1
+ import { expect, test, vi } from "vitest";
2
+ vi.mock("vite", () => {
3
+ throw new Error("The package entry point eagerly imported Vite");
4
+ });
5
+ test("imports the compiler API without loading the optional Vite peer", async () => {
6
+ const { compile } = await import("./index.js");
7
+ expect(compile).toBeTypeOf("function");
8
+ });
9
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE1C,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;IAClF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAE/C,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC","sourcesContent":["import { expect, test, vi } from \"vitest\";\n\nvi.mock(\"vite\", () => {\n\tthrow new Error(\"The package entry point eagerly imported Vite\");\n});\n\ntest(\"imports the compiler API without loading the optional Vite peer\", async () => {\n\tconst { compile } = await import(\"./index.js\");\n\n\texpect(compile).toBeTypeOf(\"function\");\n});\n"]}
@@ -7,4 +7,3 @@ export declare function escapeForTemplateLiteral(text: string): string;
7
7
  */
8
8
  export declare function escapeForSingleQuoteString(text: string): string;
9
9
  export declare function escapeForDoubleQuoteString(text: string): string;
10
- //# sourceMappingURL=escape.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"escape.js","sourceRoot":"","sources":["../../../src/services/codegen/escape.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACpD,OAAO,IAAI;SACT,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC"}
1
+ {"version":3,"file":"escape.js","sourceRoot":"","sources":["../../../src/services/codegen/escape.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY;IACpD,OAAO,IAAI;SACT,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;SACpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACzD,CAAC","sourcesContent":["/**\n * Escapes some Text so that it can safely be used inside a template literal.\n */\nexport function escapeForTemplateLiteral(text: string): string {\n\treturn text\n\t\t.replace(/\\\\/g, \"\\\\\\\\\")\n\t\t.replace(/`/g, \"\\\\`\")\n\t\t.replace(/\\${/g, \"\\\\${\");\n}\n\n/**\n * Escapes some Text so that it can safely be used inside a single quote string.s\n */\nexport function escapeForSingleQuoteString(text: string): string {\n\treturn text.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\");\n}\n\nexport function escapeForDoubleQuoteString(text: string): string {\n\treturn text.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n"]}
@@ -2,4 +2,3 @@
2
2
  export declare const doubleQuote: (str: string) => string;
3
3
  /** Wrap the given string in backticks */
4
4
  export declare const backtick: (str: string) => string;
5
- //# sourceMappingURL=quotes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../../src/services/codegen/quotes.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAC5E,yCAAyC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"quotes.js","sourceRoot":"","sources":["../../../src/services/codegen/quotes.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;AAC5E,yCAAyC;AACzC,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC","sourcesContent":["/** Wrap the given string in double quotes */\nexport const doubleQuote = (str: string) => `\"${str.replace(/\"/g, '\\\\\"')}\"`;\n/** Wrap the given string in backticks */\nexport const backtick = (str: string) => `\\`${str}\\``;\n"]}
@@ -7,4 +7,3 @@
7
7
  * - Must be ran before building the SDK
8
8
  */
9
9
  export {};
10
- //# sourceMappingURL=create-index-file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-index-file.js","sourceRoot":"","sources":["../../../src/services/env-variables/create-index-file.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC7B,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CAC1E,CAAC;AAEF,MAAM,EAAE,CAAC,SAAS,CACjB,OAAO,GAAG,WAAW,EACrB;;0BAEyB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;;CAEvD,CACA,CAAC;AAEF,qDAAqD;AAErD;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAK;IACvB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"create-index-file.js","sourceRoot":"","sources":["../../../src/services/env-variables/create-index-file.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC7B,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CAC1E,CAAC;AAEF,MAAM,EAAE,CAAC,SAAS,CACjB,OAAO,GAAG,WAAW,EACrB;;0BAEyB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;;CAEvD,CACA,CAAC;AAEF,qDAAqD;AAErD;;;;GAIG;AACH,SAAS,SAAS,CAAC,KAAK;IACvB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,CAAC","sourcesContent":["/**\n * This script writes public environment variables\n * to an importable env file.\n *\n * - The SDK must bundle this file with the rest of the SDK\n * - This scripts avoids the need for a bundler\n * - Must be ran before building the SDK\n */\n\nimport fs from \"node:fs/promises\";\nimport url from \"node:url\";\nimport path from \"node:path\";\n\nconst dirname = path.dirname(url.fileURLToPath(import.meta.url));\n\nconst packageJson = JSON.parse(\n\tawait fs.readFile(path.resolve(dirname, \"../../../package.json\"), \"utf-8\")\n);\n\nawait fs.writeFile(\n\tdirname + \"/index.ts\",\n\t`\nexport const ENV_VARIABLES = {\n\tPARJS_PACKAGE_VERSION: ${ifDefined(packageJson.version)},\n}\n`\n);\n\n// console.log(\"✅ Created env variable index file.\");\n\n/**\n *\n * @param {string | undefined} value\n * @returns {string | undefined}\n */\nfunction ifDefined(value) {\n\treturn value ? `\"${value}\"` : undefined;\n}\n"]}
@@ -1,4 +1,3 @@
1
1
  export declare const ENV_VARIABLES: {
2
2
  PARJS_PACKAGE_VERSION: string;
3
3
  };
4
- //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
1
  export const ENV_VARIABLES = {
2
- PARJS_PACKAGE_VERSION: "2.23.1",
2
+ PARJS_PACKAGE_VERSION: "2.24.0",
3
3
  };
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/env-variables/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,qBAAqB,EAAE,QAAQ;CAC/B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/env-variables/index.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC5B,qBAAqB,EAAE,QAAQ;CAC/B,CAAA","sourcesContent":["\nexport const ENV_VARIABLES = {\n\tPARJS_PACKAGE_VERSION: \"2.24.0\",\n}\n"]}
@@ -7,4 +7,3 @@
7
7
  */
8
8
  export declare function findPackageJson(fs: typeof import("node:fs/promises"), cwd: string): Promise<string | undefined>;
9
9
  export declare function getPackageJson(fs: typeof import("node:fs/promises"), cwd: string): Promise<unknown | undefined>;
10
- //# sourceMappingURL=package.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","sourceRoot":"","sources":["../../../src/services/environment/package.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,EAAqC,EACrC,GAAW;IAEX,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,iBAAiB;QAAE,OAAO,wBAAwB,CAAC;IACvD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,EAAqC,EACrC,GAAW;IAEX,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,CAAC;QACJ,MAAM,mBAAmB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC9D,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../../src/services/environment/package.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACpC,EAAqC,EACrC,GAAW;IAEX,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IACzE,IAAI,iBAAiB;QAAE,OAAO,wBAAwB,CAAC;IACvD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,EAAqC,EACrC,GAAW;IAEX,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,CAAC;QACJ,MAAM,mBAAmB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE;YAC9D,QAAQ,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC","sourcesContent":["import path from \"node:path\";\nimport { pathExists } from \"../file-handling/exists.js\";\n\n/**\n * Attempts to find the package.json file that's closest to the current working directory.\n *\n * @param fs The filesystem to use.\n * @param cwd The current working directory.\n * @returns The path to the package.json file, or undefined if none was found.\n */\nexport async function findPackageJson(\n\tfs: typeof import(\"node:fs/promises\"),\n\tcwd: string\n): Promise<string | undefined> {\n\tconst potentialPackageJsonPath = path.resolve(cwd, \"package.json\");\n\tconst packageJsonExists = await pathExists(potentialPackageJsonPath, fs);\n\tif (packageJsonExists) return potentialPackageJsonPath;\n\treturn undefined;\n}\n\nexport async function getPackageJson(\n\tfs: typeof import(\"node:fs/promises\"),\n\tcwd: string\n): Promise<unknown | undefined> {\n\tconst packageJsonPath = await findPackageJson(fs, cwd);\n\tif (!packageJsonPath) return undefined;\n\ttry {\n\t\tconst packageJsonContents = await fs.readFile(packageJsonPath, {\n\t\t\tencoding: \"utf-8\",\n\t\t});\n\t\treturn JSON.parse(packageJsonContents);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"]}
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=package.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.test.js","sourceRoot":"","sources":["../../../src/services/environment/package.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAClC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YAC3B,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC/B,IAAI,EAAE,MAAM;aACZ,CAAC;SACF,CAAC,CACF,CAAC,QAAwD,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;aAClE,QAAwD,CAAC;QAE3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"package.test.js","sourceRoot":"","sources":["../../../src/services/environment/package.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAClC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YAC3B,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC;gBAC/B,IAAI,EAAE,MAAM;aACZ,CAAC;SACF,CAAC,CACF,CAAC,QAAwD,CAAC;QAC3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,GAAG,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;aAClE,QAAwD,CAAC;QAE3D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport memfs from \"memfs\";\nimport { findPackageJson } from \"./package.js\";\n\ndescribe(\"findPackageJson\", () => {\n\tit(\"returns the path to the package.json file if it exists\", async () => {\n\t\tconst fs = memfs.createFsFromVolume(\n\t\t\tmemfs.Volume.fromNestedJSON({\n\t\t\t\t\"/package.json\": JSON.stringify({\n\t\t\t\t\tname: \"test\",\n\t\t\t\t}),\n\t\t\t})\n\t\t).promises as unknown as typeof import(\"node:fs/promises\");\n\t\tconst result = await findPackageJson(fs, \"/\");\n\t\texpect(result).toBe(\"/package.json\");\n\t});\n\n\tit(\"returns undefined if no package.json file exists\", async () => {\n\t\tconst fs = memfs.createFsFromVolume(memfs.Volume.fromNestedJSON({}))\n\t\t\t.promises as unknown as typeof import(\"node:fs/promises\");\n\n\t\tconst result = await findPackageJson(fs, \"/\");\n\t\texpect(result).toBe(undefined);\n\t});\n});\n"]}
@@ -7,4 +7,3 @@ export declare function classifyProjectErrors(errors: readonly Error[]): {
7
7
  * Splits an array into two arrays based on the predicate
8
8
  */
9
9
  export declare function split<T, U extends T>(array: T[], predicate: (value: T) => value is U): [U[], T[]];
10
- //# sourceMappingURL=error-handling.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-handling.js","sourceRoot":"","sources":["../../src/services/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC7D,MAAM,aAAa,GAAG,CAAC,GAAU,EAAsB,EAAE,CACxD,GAAG,YAAY,WAAW,CAAC;IAE5B,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,MAAiB,EAAE,aAAa,CAAC,CAAC;IAE5E,MAAM,kBAAkB,GAAG,CAAC,GAAgB,EAAsB,EAAE,CACnE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CACtD,YAAY,EACZ,kBAAkB,CAClB,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,GAAG,iBAAiB,EAAE,GAAG,WAAW,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;IAEjD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CACpB,KAAU,EACV,SAAmC;IAEnC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAQ,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAQ,CAAC;IAC7D,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"error-handling.js","sourceRoot":"","sources":["../../src/services/error-handling.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC7D,MAAM,aAAa,GAAG,CAAC,GAAU,EAAsB,EAAE,CACxD,GAAG,YAAY,WAAW,CAAC;IAE5B,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,MAAiB,EAAE,aAAa,CAAC,CAAC;IAE5E,MAAM,kBAAkB,GAAG,CAAC,GAAgB,EAAsB,EAAE,CACnE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,KAAK,CACtD,YAAY,EACZ,kBAAkB,CAClB,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,GAAG,iBAAiB,EAAE,GAAG,WAAW,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,CAAC,GAAG,oBAAoB,CAAC,CAAC;IAEjD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CACpB,KAAU,EACV,SAAmC;IAEnC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAQ,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAQ,CAAC;IAC7D,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACvB,CAAC","sourcesContent":["import { PluginError } from \"@inlang/sdk\";\n\nexport function classifyProjectErrors(errors: readonly Error[]) {\n\tconst isModuleError = (err: Error): err is PluginError =>\n\t\terr instanceof PluginError;\n\n\tconst [moduleErrors, otherErrors] = split(errors as Error[], isModuleError);\n\n\tconst isFatalModuleError = (err: PluginError): err is PluginError =>\n\t\terr.plugin.includes(\"plugin\");\n\tconst [fatalModuleErrors, nonFatalModuleErrors] = split(\n\t\tmoduleErrors,\n\t\tisFatalModuleError\n\t);\n\n\tconst fatalErrors = [...fatalModuleErrors, ...otherErrors];\n\tconst nonFatalErrors = [...nonFatalModuleErrors];\n\n\treturn { fatalErrors, nonFatalErrors };\n}\n\n/**\n * Splits an array into two arrays based on the predicate\n */\nexport function split<T, U extends T>(\n\tarray: T[],\n\tpredicate: (value: T) => value is U\n): [U[], T[]] {\n\tconst mask = array.map(predicate);\n\tconst result = array.filter((_, index) => mask[index]) as U[];\n\tconst rest = array.filter((_, index) => !mask[index]) as T[];\n\treturn [result, rest];\n}\n"]}
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=error-handling.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-handling.test.js","sourceRoot":"","sources":["../../src/services/error-handling.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAS,EAAe,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEvC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"error-handling.test.js","sourceRoot":"","sources":["../../src/services/error-handling.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,EAAE,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC1B,MAAM,MAAM,GAAG,CAAC,CAAS,EAAe,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEvC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC","sourcesContent":["import { it, expect } from \"vitest\";\nimport { split } from \"./error-handling.js\";\n\nit(\"splits an array\", () => {\n\tconst isEven = (n: number): n is number => n % 2 === 0;\n\tconst arr = [1, 2, 3, 4, 5, 6];\n\tconst [even, odd] = split(arr, isEven);\n\n\texpect(even).toEqual([2, 4, 6]);\n\texpect(odd).toEqual([1, 3, 5]);\n});\n"]}
@@ -5,4 +5,3 @@
5
5
  * @returns
6
6
  */
7
7
  export declare function pathExists(filePath: string, fs: typeof import("node:fs/promises")): Promise<boolean>;
8
- //# sourceMappingURL=exists.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exists.js","sourceRoot":"","sources":["../../../src/services/file-handling/exists.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,QAAgB,EAChB,EAAqC;IAErC,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,mCAAmC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACd,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,EAAE,EAAE;gBAC3D,KAAK,EAAE,KAAK;aACZ,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"exists.js","sourceRoot":"","sources":["../../../src/services/file-handling/exists.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,QAAgB,EAChB,EAAqC;IAErC,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,mCAAmC;QACnC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACd,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,EAAE,EAAE;gBAC3D,KAAK,EAAE,KAAK;aACZ,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;AACF,CAAC","sourcesContent":["/**\n * Returns true if the path exists (file or directory), false otherwise.\n *\n * @param nodeishFs\n * @returns\n */\nexport async function pathExists(\n\tfilePath: string,\n\tfs: typeof import(\"node:fs/promises\")\n) {\n\ttry {\n\t\tawait fs.stat(filePath);\n\t\treturn true;\n\t} catch (error) {\n\t\t//@ts-expect-error - error is Error\n\t\tif (error.code === \"ENOENT\") {\n\t\t\treturn false;\n\t\t} else {\n\t\t\tthrow new Error(`Failed to check if path exists: ${error}`, {\n\t\t\t\tcause: error,\n\t\t\t});\n\t\t}\n\t}\n}\n"]}
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=exists.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exists.test.js","sourceRoot":"","sources":["../../../src/services/file-handling/exists.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YACtC,WAAW,EAAE,OAAO;SACpB,CAAC,CAAC,QAAwD,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YACtC,WAAW,EAAE,OAAO;SACpB,CAAC,CAAC,QAAwD,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YACtC,gBAAgB,EAAE,OAAO;SACzB,CAAC,CAAC,QAAwD,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"exists.test.js","sourceRoot":"","sources":["../../../src/services/file-handling/exists.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YACtC,WAAW,EAAE,OAAO;SACpB,CAAC,CAAC,QAAwD,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YACtC,WAAW,EAAE,OAAO;SACpB,CAAC,CAAC,QAAwD,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC;YACtC,gBAAgB,EAAE,OAAO;SACzB,CAAC,CAAC,QAAwD,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it, expect } from \"vitest\";\nimport { pathExists } from \"./exists.js\";\nimport memfs from \"memfs\";\n\ndescribe(\"fileExists\", () => {\n\tit(\"returns true if the file does exist\", async () => {\n\t\tconst fs = memfs.Volume.fromNestedJSON({\n\t\t\t\"/test.txt\": \"hello\",\n\t\t}).promises as unknown as typeof import(\"node:fs/promises\");\n\n\t\tconst result = await pathExists(\"/test.txt\", fs);\n\t\texpect(result).toBe(true);\n\t});\n\n\tit(\"returns false if the file does not exist\", async () => {\n\t\tconst fs = memfs.Volume.fromNestedJSON({\n\t\t\t\"/test.txt\": \"hello\",\n\t\t}).promises as unknown as typeof import(\"node:fs/promises\");\n\n\t\tconst result = await pathExists(\"/does-not-exist.txt\", fs);\n\t\texpect(result).toBe(false);\n\t});\n\n\tit(\"returns true if the path is a directory\", async () => {\n\t\tconst fs = memfs.Volume.fromNestedJSON({\n\t\t\t\"/test/test.txt\": \"Hello\",\n\t\t}).promises as unknown as typeof import(\"node:fs/promises\");\n\n\t\tconst result = await pathExists(\"/test\", fs);\n\t\texpect(result).toBe(true);\n\t});\n});\n"]}
@@ -2,4 +2,3 @@
2
2
  * @deprecated Node fs can be used directly
3
3
  */
4
4
  export type NodeishFilesystem = typeof import("node:fs/promises");
5
- //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/file-handling/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/file-handling/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * @deprecated Node fs can be used directly\n */\nexport type NodeishFilesystem = typeof import(\"node:fs/promises\");\n"]}
@@ -0,0 +1,24 @@
1
+ import { bench } from "vitest";
2
+ import memfs from "memfs";
3
+ import { writeOutput } from "./write-output.js";
4
+ const output = Object.fromEntries(Array.from({ length: 2_000 }, (_, index) => [
5
+ `messages/bundle-${index}.js`,
6
+ `export const m${index} = ${JSON.stringify("Hello world")}`,
7
+ ]));
8
+ bench("write 2,000 generated message modules", async () => {
9
+ const volume = memfs.Volume.fromJSON({});
10
+ const fsp = memfs.createFsFromVolume(volume).promises;
11
+ await writeOutput({ directory: "/output", output, fs: fsp });
12
+ });
13
+ bench("rewrite one of 2,000 generated message modules", async () => {
14
+ const volume = memfs.Volume.fromJSON({});
15
+ const fsp = memfs.createFsFromVolume(volume).promises;
16
+ const hashes = await writeOutput({ directory: "/output", output, fs: fsp });
17
+ await writeOutput({
18
+ directory: "/output",
19
+ output: { ...output, "messages/bundle-0.js": "changed" },
20
+ fs: fsp,
21
+ previousOutputHashes: hashes,
22
+ });
23
+ });
24
+ //# sourceMappingURL=write-output.bench.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-output.bench.js","sourceRoot":"","sources":["../../../src/services/file-handling/write-output.bench.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAChC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;IAC3C,mBAAmB,KAAK,KAAK;IAC7B,iBAAiB,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;CAC3D,CAAC,CACF,CAAC;AAEF,KAAK,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;IACzD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,QAA6B,CAAC;IAC3E,MAAM,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEH,KAAK,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;IAClE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,QAA6B,CAAC;IAC3E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5E,MAAM,WAAW,CAAC;QACjB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,sBAAsB,EAAE,SAAS,EAAE;QACxD,EAAE,EAAE,GAAG;QACP,oBAAoB,EAAE,MAAM;KAC5B,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { bench } from \"vitest\";\nimport memfs from \"memfs\";\nimport { writeOutput } from \"./write-output.js\";\ntype NodeFs = typeof import(\"node:fs/promises\");\n\nconst output = Object.fromEntries(\n\tArray.from({ length: 2_000 }, (_, index) => [\n\t\t`messages/bundle-${index}.js`,\n\t\t`export const m${index} = ${JSON.stringify(\"Hello world\")}`,\n\t])\n);\n\nbench(\"write 2,000 generated message modules\", async () => {\n\tconst volume = memfs.Volume.fromJSON({});\n\tconst fsp = memfs.createFsFromVolume(volume).promises as unknown as NodeFs;\n\tawait writeOutput({ directory: \"/output\", output, fs: fsp });\n});\n\nbench(\"rewrite one of 2,000 generated message modules\", async () => {\n\tconst volume = memfs.Volume.fromJSON({});\n\tconst fsp = memfs.createFsFromVolume(volume).promises as unknown as NodeFs;\n\tconst hashes = await writeOutput({ directory: \"/output\", output, fs: fsp });\n\tawait writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { ...output, \"messages/bundle-0.js\": \"changed\" },\n\t\tfs: fsp,\n\t\tpreviousOutputHashes: hashes,\n\t});\n});\n"]}
@@ -19,4 +19,3 @@ export declare function writeOutput(args: {
19
19
  * forward-slash relative paths to match {@link hashOutput}.
20
20
  */
21
21
  export declare function hashDirectory(directory: string, fs: typeof nodeFs): Promise<Record<string, string> | undefined>;
22
- //# sourceMappingURL=write-output.d.ts.map
@@ -1,4 +1,5 @@
1
1
  import path from "node:path";
2
+ import { createHash } from "node:crypto";
2
3
  export async function writeOutput(args) {
3
4
  const currentOutputHashes = await hashOutput(args.output, args.directory);
4
5
  // if the output hasn't changed, don't write it
@@ -27,20 +28,20 @@ export async function writeOutput(args) {
27
28
  if (args.cleanDirectory) {
28
29
  await args.fs.rm(args.directory, { recursive: true, force: true });
29
30
  }
30
- else {
31
- await args.fs.mkdir(args.directory, { recursive: true });
32
- }
33
31
  // Delete files that have been removed
34
32
  // ignore if cleanDirectory is true because the directory will be cleaned anyway
35
33
  if (filesToDelete.size > 0 && !args.cleanDirectory) {
36
34
  await deleteRemovedFiles(args.fs, args.directory, filesToDelete);
37
35
  }
38
- //Create missing directories inside the output directory
39
- await Promise.allSettled(Object.keys(args.output).map(async (filePath) => {
40
- const fullPath = path.resolve(args.directory, filePath);
41
- const directory = path.dirname(fullPath);
42
- await args.fs.mkdir(directory, { recursive: true });
43
- }));
36
+ // Create only the directories needed by files that are about to be written.
37
+ // On incremental compiles, `output` can contain thousands of unchanged
38
+ // message modules; creating every parent directory again adds avoidable
39
+ // filesystem work even though only a handful of files changed.
40
+ const directoriesToCreate = new Set();
41
+ for (const filePath of changedFiles) {
42
+ directoriesToCreate.add(path.dirname(path.resolve(args.directory, filePath)));
43
+ }
44
+ await Promise.allSettled(Array.from(directoriesToCreate, (directory) => args.fs.mkdir(directory, { recursive: true })));
44
45
  //Write files
45
46
  await Promise.allSettled(Object.entries(args.output).map(async ([filePath, fileContent]) => {
46
47
  if (!changedFiles.has(filePath)) {
@@ -96,20 +97,15 @@ async function deleteRemovedFiles(fs, baseDirectory, filesToDelete) {
96
97
  }
97
98
  }
98
99
  }
99
- async function hashString(input) {
100
- const encoder = new TextEncoder();
101
- const data = encoder.encode(input);
102
- const hashBuffer = await crypto.subtle.digest("SHA-256", data);
103
- const hashArray = Array.from(new Uint8Array(hashBuffer));
104
- return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
100
+ function hashString(input) {
101
+ return createHash("sha256").update(input).digest("hex");
105
102
  }
106
103
  async function hashOutput(output, outputDirectory) {
107
- const hashes = {};
108
- for (const [filePath, fileContent] of Object.entries(output)) {
104
+ const entries = Object.entries(output).map(([filePath, fileContent]) => {
109
105
  const combinedContent = fileContent + path.resolve(outputDirectory, filePath);
110
- hashes[filePath] = await hashString(combinedContent);
111
- }
112
- return hashes;
106
+ return [filePath, hashString(combinedContent)];
107
+ });
108
+ return Object.fromEntries(entries);
113
109
  }
114
110
  /**
115
111
  * Walk an existing output directory and produce the same hash map that
@@ -1 +1 @@
1
- {"version":3,"file":"write-output.js","sourceRoot":"","sources":["../../../src/services/file-handling/write-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-output.js","sourceRoot":"","sources":["../../../src/services/file-handling/write-output.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type nodeFs from \"node:fs/promises\";\n\nexport async function writeOutput(args: {\n\tdirectory: string;\n\toutput: Record<string, string>;\n\tcleanDirectory?: boolean;\n\tfs: typeof nodeFs;\n\tpreviousOutputHashes?: Record<string, string>;\n}) {\n\tconst currentOutputHashes = await hashOutput(args.output, args.directory);\n\n\t// if the output hasn't changed, don't write it\n\tconst changedFiles = new Set<string>();\n\n\tfor (const [filePath, hash] of Object.entries(currentOutputHashes)) {\n\t\tif (args.previousOutputHashes?.[filePath] !== hash) {\n\t\t\tchangedFiles.add(filePath);\n\t\t}\n\t}\n\n\t// Find files that have been removed in the current output\n\tconst filesToDelete = new Set<string>();\n\tif (args.previousOutputHashes) {\n\t\tfor (const filePath of Object.keys(args.previousOutputHashes)) {\n\t\t\tif (!currentOutputHashes[filePath]) {\n\t\t\t\tfilesToDelete.add(filePath);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (changedFiles.size === 0 && filesToDelete.size === 0) {\n\t\treturn currentOutputHashes;\n\t}\n\n\t// clear the output directory\n\t//\n\t// disabled because of https://github.com/opral/inlang-paraglide-js/issues/350\n\t// and re-enabled because of https://github.com/opral/inlang-paraglide-js/issues/420\n\tif (args.cleanDirectory) {\n\t\tawait args.fs.rm(args.directory, { recursive: true, force: true });\n\t}\n\t// Delete files that have been removed\n\t// ignore if cleanDirectory is true because the directory will be cleaned anyway\n\tif (filesToDelete.size > 0 && !args.cleanDirectory) {\n\t\tawait deleteRemovedFiles(args.fs, args.directory, filesToDelete);\n\t}\n\n\t// Create only the directories needed by files that are about to be written.\n\t// On incremental compiles, `output` can contain thousands of unchanged\n\t// message modules; creating every parent directory again adds avoidable\n\t// filesystem work even though only a handful of files changed.\n\tconst directoriesToCreate = new Set<string>();\n\tfor (const filePath of changedFiles) {\n\t\tdirectoriesToCreate.add(\n\t\t\tpath.dirname(path.resolve(args.directory, filePath))\n\t\t);\n\t}\n\tawait Promise.allSettled(\n\t\tArray.from(directoriesToCreate, (directory) =>\n\t\t\targs.fs.mkdir(directory, { recursive: true })\n\t\t)\n\t);\n\n\t//Write files\n\tawait Promise.allSettled(\n\t\tObject.entries(args.output).map(async ([filePath, fileContent]) => {\n\t\t\tif (!changedFiles.has(filePath)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst fullPath = path.resolve(args.directory, filePath);\n\t\t\tawait args.fs.writeFile(fullPath, fileContent);\n\t\t})\n\t);\n\n\t//Only update the previousOutputHashes if the write was successful\n\treturn currentOutputHashes;\n}\n\n/**\n * Delete files that have been removed and clean up empty directories\n */\nasync function deleteRemovedFiles(\n\tfs: typeof nodeFs,\n\tbaseDirectory: string,\n\tfilesToDelete: Set<string>\n) {\n\t// Collect directories that might need cleanup\n\tconst potentialEmptyDirs = new Set<string>();\n\n\t// First pass: delete all files and collect parent directories\n\tawait Promise.allSettled(\n\t\tArray.from(filesToDelete).map(async (filePath) => {\n\t\t\tconst fullPath = path.resolve(baseDirectory, filePath);\n\t\t\ttry {\n\t\t\t\tawait fs.unlink(fullPath);\n\n\t\t\t\t// Add parent directory for potential cleanup\n\t\t\t\tconst dirPath = path.dirname(fullPath);\n\t\t\t\tif (dirPath !== baseDirectory) {\n\t\t\t\t\tpotentialEmptyDirs.add(dirPath);\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Ignore errors if the file doesn't exist\n\t\t\t}\n\t\t})\n\t);\n\n\t// Second pass: clean up empty directories, starting from deepest paths\n\tconst sortedDirs = Array.from(potentialEmptyDirs).sort(\n\t\t(a, b) => b.length - a.length\n\t);\n\n\tfor (const dirPath of sortedDirs) {\n\t\t// Only process directories within the base directory\n\t\tif (!dirPath.startsWith(baseDirectory) || dirPath === baseDirectory) {\n\t\t\tcontinue;\n\t\t}\n\n\t\ttry {\n\t\t\tconst dirContents = await fs.readdir(dirPath);\n\t\t\tif (dirContents.length === 0) {\n\t\t\t\tawait fs.rmdir(dirPath);\n\n\t\t\t\t// Add parent directory for potential cleanup\n\t\t\t\tconst parentDir = path.dirname(dirPath);\n\t\t\t\tif (parentDir !== baseDirectory) {\n\t\t\t\t\tsortedDirs.push(parentDir);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Ignore errors during directory cleanup\n\t\t}\n\t}\n}\n\nfunction hashString(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nasync function hashOutput(\n\toutput: Record<string, string>,\n\toutputDirectory: string\n): Promise<Record<string, string>> {\n\tconst entries = Object.entries(output).map(([filePath, fileContent]) => {\n\t\tconst combinedContent =\n\t\t\tfileContent + path.resolve(outputDirectory, filePath);\n\t\treturn [filePath, hashString(combinedContent)] as const;\n\t});\n\treturn Object.fromEntries(entries);\n}\n\n/**\n * Walk an existing output directory and produce the same hash map that\n * {@link writeOutput} would have returned on a previous compile.\n *\n * Used by the bundler plugins to seed `previousCompilation` on a fresh\n * process so the first compile's diff against unchanged inputs is empty\n * and `writeOutput` short-circuits — letting us avoid wiping the directory\n * out from under concurrent SSR/prerender readers (#659).\n *\n * Returns `undefined` if the directory does not exist. Keys are\n * forward-slash relative paths to match {@link hashOutput}.\n */\nexport async function hashDirectory(\n\tdirectory: string,\n\tfs: typeof nodeFs\n): Promise<Record<string, string> | undefined> {\n\ttry {\n\t\tconst stat = await fs.stat(directory);\n\t\tif (!stat.isDirectory()) return undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n\n\tconst hashes: Record<string, string> = {};\n\n\tasync function walk(currentDir: string, relativePrefix: string) {\n\t\tlet entries;\n\t\ttry {\n\t\t\tentries = await fs.readdir(currentDir, { withFileTypes: true });\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tfor (const entry of entries) {\n\t\t\tconst entryAbsolutePath = path.resolve(currentDir, entry.name);\n\t\t\tconst relativePath = relativePrefix\n\t\t\t\t? `${relativePrefix}/${entry.name}`\n\t\t\t\t: entry.name;\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tawait walk(entryAbsolutePath, relativePath);\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\ttry {\n\t\t\t\t\tconst fileContent = await fs.readFile(entryAbsolutePath, \"utf-8\");\n\t\t\t\t\tconst combinedContent =\n\t\t\t\t\t\tfileContent + path.resolve(directory, relativePath);\n\t\t\t\t\thashes[relativePath] = await hashString(combinedContent);\n\t\t\t\t} catch {\n\t\t\t\t\t// Another compiler process may be rewriting this file. A partial\n\t\t\t\t\t// seed is safe; the following compile will repair missing outputs.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tawait walk(directory, \"\");\n\treturn hashes;\n}\n"]}
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=write-output.test.d.ts.map
@@ -79,6 +79,33 @@ test("should write again if the output has changed", async () => {
79
79
  expect(await fs.readFile("/output/test.txt", { encoding: "utf-8" })).toBe("test2");
80
80
  expect(writeFileSpy).toHaveBeenCalledTimes(2);
81
81
  });
82
+ test("should only create directories for files that changed", async () => {
83
+ const { writeOutput } = await import("./write-output.js");
84
+ const fs = mockFs({});
85
+ const mkdirSpy = vi.spyOn(fs, "mkdir");
86
+ const hashes = await writeOutput({
87
+ directory: "/output",
88
+ output: {
89
+ "messages/first.js": "first",
90
+ "messages/second.js": "second",
91
+ },
92
+ fs,
93
+ });
94
+ mkdirSpy.mockClear();
95
+ await writeOutput({
96
+ directory: "/output",
97
+ output: {
98
+ "messages/first.js": "changed",
99
+ "messages/second.js": "second",
100
+ },
101
+ fs,
102
+ previousOutputHashes: hashes,
103
+ });
104
+ expect(mkdirSpy).toHaveBeenCalledTimes(1);
105
+ expect(mkdirSpy).toHaveBeenCalledWith("/output/messages", {
106
+ recursive: true,
107
+ });
108
+ });
82
109
  test("should write files if output has partially changed", async () => {
83
110
  const { writeOutput } = await import("./write-output.js");
84
111
  const fs = mockFs({});
@@ -1 +1 @@
1
- {"version":3,"file":"write-output.test.js","sourceRoot":"","sources":["../../../src/services/file-handling/write-output.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-output.test.js","sourceRoot":"","sources":["../../../src/services/file-handling/write-output.test.ts"],"names":[],"mappings":"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","sourcesContent":["import memfs from \"memfs\";\nimport type fs from \"node:fs/promises\";\nimport { test, expect, vi, beforeEach } from \"vitest\";\n\nbeforeEach(() => {\n\tvi.resetModules();\n});\n\ntest(\"should write the output to a non-existing directory\", async () => {\n\tconst { writeOutput } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\n\tawait writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { \"test.txt\": \"test\" },\n\t\tfs,\n\t});\n\texpect(await fs.readFile(\"/output/test.txt\", { encoding: \"utf-8\" })).toBe(\n\t\t\"test\"\n\t);\n});\n\ntest(\"should clear & overwrite output that's already there\", async () => {\n\tconst { writeOutput } = await import(\"./write-output.js\");\n\tconst fs = mockFs({\n\t\t\"/output/test.txt\": \"old\",\n\t\t\"/output/other.txt\": \"other\",\n\t});\n\n\tawait writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { \"test.txt\": \"new\" },\n\t\tcleanDirectory: true,\n\t\tfs,\n\t});\n\n\texpect(await fs.readFile(\"/output/test.txt\", { encoding: \"utf-8\" })).toBe(\n\t\t\"new\"\n\t);\n\tawait expect(\n\t\tasync () => await fs.readFile(\"/output/other.txt\", { encoding: \"utf-8\" })\n\t).rejects.toBeDefined();\n});\n\ntest(\"should create any missing directories\", async () => {\n\tconst { writeOutput } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\n\tawait writeOutput({\n\t\tdirectory: \"/output/messages\",\n\t\toutput: {\n\t\t\t\"de/test.txt\": \"de\",\n\t\t\t\"en/test.txt\": \"en\",\n\t\t},\n\t\tfs,\n\t});\n\texpect(\n\t\tawait fs.readFile(\"/output/messages/de/test.txt\", { encoding: \"utf-8\" })\n\t).toBe(\"de\");\n\texpect(\n\t\tawait fs.readFile(\"/output/messages/en/test.txt\", { encoding: \"utf-8\" })\n\t).toBe(\"en\");\n});\n\ntest(\"should only write once if the output hasn't changed\", async () => {\n\tconst { writeOutput } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\n\tconst writeFileSpy = vi.spyOn(fs as any, \"writeFile\");\n\n\tconst hashes = await writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { \"test.txt\": \"test\" },\n\t\tfs,\n\t});\n\tconst hashes2 = await writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { \"test.txt\": \"test\" },\n\t\tfs,\n\t\tpreviousOutputHashes: hashes,\n\t});\n\texpect(hashes).toEqual(hashes2);\n\texpect(await fs.readFile(\"/output/test.txt\", { encoding: \"utf-8\" })).toBe(\n\t\t\"test\"\n\t);\n\texpect(writeFileSpy).toHaveBeenCalledTimes(1);\n});\n\ntest(\"should write again if the output has changed\", async () => {\n\tconst { writeOutput } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\n\tconst writeFileSpy = vi.spyOn(fs as any, \"writeFile\");\n\n\tconst hashes = await writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { \"test.txt\": \"test\" },\n\t\tfs,\n\t});\n\tawait writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { \"test.txt\": \"test2\" },\n\t\tfs,\n\t\tpreviousOutputHashes: hashes,\n\t});\n\texpect(await fs.readFile(\"/output/test.txt\", { encoding: \"utf-8\" })).toBe(\n\t\t\"test2\"\n\t);\n\texpect(writeFileSpy).toHaveBeenCalledTimes(2);\n});\n\ntest(\"should only create directories for files that changed\", async () => {\n\tconst { writeOutput } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\tconst mkdirSpy = vi.spyOn(fs, \"mkdir\");\n\n\tconst hashes = await writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: {\n\t\t\t\"messages/first.js\": \"first\",\n\t\t\t\"messages/second.js\": \"second\",\n\t\t},\n\t\tfs,\n\t});\n\tmkdirSpy.mockClear();\n\n\tawait writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: {\n\t\t\t\"messages/first.js\": \"changed\",\n\t\t\t\"messages/second.js\": \"second\",\n\t\t},\n\t\tfs,\n\t\tpreviousOutputHashes: hashes,\n\t});\n\n\texpect(mkdirSpy).toHaveBeenCalledTimes(1);\n\texpect(mkdirSpy).toHaveBeenCalledWith(\"/output/messages\", {\n\t\trecursive: true,\n\t});\n});\n\ntest(\"should write files if output has partially changed\", async () => {\n\tconst { writeOutput } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\n\tconst writeFileSpy = vi.spyOn(fs as any, \"writeFile\");\n\n\tconst hashes = await writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { \"file1.txt\": \"test\", \"file2.txt\": \"test\" },\n\t\tfs,\n\t});\n\n\tawait writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: { \"file1.txt\": \"test\", \"file2.txt\": \"test2\" },\n\t\tfs,\n\t\tpreviousOutputHashes: hashes,\n\t});\n\texpect(writeFileSpy).toHaveBeenCalledWith(\"/output/file2.txt\", \"test2\");\n\texpect(writeFileSpy).toHaveBeenCalledTimes(3);\n});\n\ntest(\"should delete files that have been removed from the output\", async () => {\n\tconst { writeOutput } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\n\t// First write with three files\n\tconst hashes = await writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: {\n\t\t\t\"file1.txt\": \"content1\",\n\t\t\t\"file2.txt\": \"content2\",\n\t\t\t\"subdir/file3.txt\": \"content3\",\n\t\t},\n\t\tfs,\n\t});\n\n\t// Verify all files were written\n\texpect(await fs.readFile(\"/output/file1.txt\", { encoding: \"utf-8\" })).toBe(\n\t\t\"content1\"\n\t);\n\texpect(await fs.readFile(\"/output/file2.txt\", { encoding: \"utf-8\" })).toBe(\n\t\t\"content2\"\n\t);\n\texpect(\n\t\tawait fs.readFile(\"/output/subdir/file3.txt\", { encoding: \"utf-8\" })\n\t).toBe(\"content3\");\n\n\t// Second write with file2.txt removed\n\tawait writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: {\n\t\t\t\"file1.txt\": \"content1\",\n\t\t\t\"subdir/file3.txt\": \"content3updated\",\n\t\t},\n\t\tfs,\n\t\tpreviousOutputHashes: hashes,\n\t});\n\n\t// Verify file1.txt still exists\n\texpect(await fs.readFile(\"/output/file1.txt\", { encoding: \"utf-8\" })).toBe(\n\t\t\"content1\"\n\t);\n\t// Verify file2.txt has been deleted\n\tawait expect(\n\t\tasync () => await fs.readFile(\"/output/file2.txt\", { encoding: \"utf-8\" })\n\t).rejects.toBeDefined();\n\t// Verify file3.txt was updated\n\texpect(\n\t\tawait fs.readFile(\"/output/subdir/file3.txt\", { encoding: \"utf-8\" })\n\t).toBe(\"content3updated\");\n\n\t// Get the new hashes\n\tconst newHashes = await writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: {\n\t\t\t\"file1.txt\": \"content1\",\n\t\t\t\"subdir/file3.txt\": \"content3updated\",\n\t\t},\n\t\tfs,\n\t\tpreviousOutputHashes: hashes,\n\t});\n\n\t// Third write with subdir/file3.txt removed\n\tawait writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput: {\n\t\t\t\"file1.txt\": \"content1\",\n\t\t},\n\t\tfs,\n\t\tpreviousOutputHashes: newHashes,\n\t});\n\n\t// Verify file1.txt still exists\n\texpect(await fs.readFile(\"/output/file1.txt\", { encoding: \"utf-8\" })).toBe(\n\t\t\"content1\"\n\t);\n\t// Verify subdir/file3.txt has been deleted\n\tawait expect(\n\t\tasync () =>\n\t\t\tawait fs.readFile(\"/output/subdir/file3.txt\", { encoding: \"utf-8\" })\n\t).rejects.toBeDefined();\n\t// Verify the subdir directory has also been removed\n\tawait expect(\n\t\tasync () => await fs.readdir(\"/output/subdir\")\n\t).rejects.toBeDefined();\n});\n\ntest(\"hashDirectory matches the hashes writeOutput returns\", async () => {\n\tconst { writeOutput, hashDirectory } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\n\tconst output = {\n\t\t\"a.txt\": \"alpha\",\n\t\t\"nested/b.txt\": \"beta\",\n\t\t\"nested/deep/c.txt\": \"gamma\",\n\t};\n\n\tconst writtenHashes = await writeOutput({\n\t\tdirectory: \"/output\",\n\t\toutput,\n\t\tfs,\n\t});\n\n\tconst seededHashes = await hashDirectory(\"/output\", fs);\n\n\texpect(seededHashes).toEqual(writtenHashes);\n});\n\ntest(\"hashDirectory returns undefined when directory does not exist\", async () => {\n\tconst { hashDirectory } = await import(\"./write-output.js\");\n\tconst fs = mockFs({});\n\n\texpect(await hashDirectory(\"/nope\", fs)).toBeUndefined();\n});\n\ntest(\"hashDirectory skips files that disappear while walking\", async () => {\n\tconst { hashDirectory } = await import(\"./write-output.js\");\n\tconst fs = mockFs({\n\t\t\"/output/a.txt\": \"alpha\",\n\t\t\"/output/b.txt\": \"beta\",\n\t});\n\tconst readFile = fs.readFile.bind(fs);\n\tvi.spyOn(fs, \"readFile\").mockImplementation((async (...args) => {\n\t\tif (args[0] === \"/output/b.txt\") {\n\t\t\tthrow new Error(\"file disappeared\");\n\t\t}\n\t\treturn readFile(args[0], args[1]);\n\t}) as typeof fs.readFile);\n\n\tconst seededHashes = await hashDirectory(\"/output\", fs);\n\n\texpect(seededHashes).toEqual({\n\t\t\"a.txt\": expect.any(String),\n\t});\n});\n\ntest(\"hashDirectory skips directories that disappear while walking\", async () => {\n\tconst { hashDirectory } = await import(\"./write-output.js\");\n\tconst fs = mockFs({\n\t\t\"/output/nested/b.txt\": \"beta\",\n\t});\n\tconst readdir = fs.readdir.bind(fs);\n\tvi.spyOn(fs, \"readdir\").mockImplementation((async (...args) => {\n\t\tif (args[0] === \"/output/nested\") {\n\t\t\tthrow new Error(\"directory disappeared\");\n\t\t}\n\t\treturn readdir(args[0], args[1] as never);\n\t}) as typeof fs.readdir);\n\n\tconst seededHashes = await hashDirectory(\"/output\", fs);\n\n\texpect(seededHashes).toEqual({});\n});\n\nconst mockFs = (files: memfs.DirectoryJSON) => {\n\tconst _memfs = memfs.createFsFromVolume(memfs.Volume.fromJSON(files));\n\treturn _memfs.promises as unknown as typeof fs;\n};\n"]}
@@ -23,4 +23,3 @@ export declare function isPathWithinDirectories(path: string, directories: Itera
23
23
  export declare function getWatchTargets(files: Iterable<string>, options?: WatchTargetOptions): WatchTargets;
24
24
  export declare function createTrackedFs(options?: TrackedFsOptions): TrackedFs;
25
25
  export {};
26
- //# sourceMappingURL=tracked-fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracked-fs.js","sourceRoot":"","sources":["../../../src/services/file-watching/tracked-fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracked-fs.js","sourceRoot":"","sources":["../../../src/services/file-watching/tracked-fs.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { nodeNormalizePath } from \"../../utilities/node-normalize-path.js\";\n\ntype TrackedFs = {\n\tfs: typeof import(\"node:fs\");\n\treadFiles: Set<string>;\n\tclearReadFiles: () => void;\n};\n\ntype TrackedFsOptions = {\n\tbaseDir?: string;\n\tfs?: typeof import(\"node:fs\");\n};\n\ntype WatchTargetOptions = {\n\tbaseDir?: string;\n\toutdir?: string;\n\tignoreCache?: boolean;\n\tincludeDirectories?: boolean;\n\tignorePath?: (path: string) => boolean;\n};\n\ntype WatchTargets = {\n\tfiles: Set<string>;\n\tdirectories: Set<string>;\n\tisIgnoredPath: (path: string) => boolean;\n};\n\nexport function isPathWithinDirectories(\n\tpath: string,\n\tdirectories: Iterable<string>\n): boolean {\n\tconst normalizedPath = nodeNormalizePath(path);\n\tfor (const directory of directories) {\n\t\tconst normalizedDirectory = nodeNormalizePath(directory);\n\t\tif (\n\t\t\tnormalizedPath === normalizedDirectory ||\n\t\t\tnormalizedPath.startsWith(`${normalizedDirectory}/`)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nexport function getWatchTargets(\n\tfiles: Iterable<string>,\n\toptions: WatchTargetOptions = {}\n): WatchTargets {\n\tconst baseDir = options.baseDir ?? process.cwd();\n\tconst outdirPath = options.outdir\n\t\t? nodeNormalizePath(resolve(baseDir, options.outdir))\n\t\t: undefined;\n\tconst ignoreCache = options.ignoreCache ?? true;\n\tconst includeDirectories = options.includeDirectories ?? true;\n\tconst ignorePath = options.ignorePath;\n\n\tconst isIgnoredPath = (path: string) => {\n\t\tconst normalizedPath = nodeNormalizePath(path);\n\t\t// match whole path segments only — a project under e.g. /cachet-app/\n\t\t// must not have its inputs ignored\n\t\tif (ignoreCache && /(^|\\/)cache(\\/|$)/.test(normalizedPath)) {\n\t\t\treturn true;\n\t\t}\n\t\tif (\n\t\t\toutdirPath &&\n\t\t\t(normalizedPath === outdirPath ||\n\t\t\t\tnormalizedPath.startsWith(`${outdirPath}/`))\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn ignorePath ? ignorePath(normalizedPath) : false;\n\t};\n\n\tconst nextFiles = new Set<string>();\n\tconst nextDirectories = new Set<string>();\n\n\tfor (const filePath of files) {\n\t\tconst normalizedPath = nodeNormalizePath(filePath);\n\t\tif (isIgnoredPath(normalizedPath)) {\n\t\t\tcontinue;\n\t\t}\n\t\tnextFiles.add(normalizedPath);\n\t\tif (includeDirectories) {\n\t\t\tconst directoryPath = dirname(normalizedPath);\n\t\t\tif (!isIgnoredPath(directoryPath)) {\n\t\t\t\tnextDirectories.add(directoryPath);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tfiles: nextFiles,\n\t\tdirectories: nextDirectories,\n\t\tisIgnoredPath,\n\t};\n}\n\nexport function createTrackedFs(options: TrackedFsOptions = {}): TrackedFs {\n\tconst baseDir = options.baseDir ?? process.cwd();\n\tconst baseFs = options.fs ?? fs;\n\tconst readFiles = new Set<string>();\n\n\tconst trackRead = (path: fs.PathLike | number) => {\n\t\treadFiles.add(nodeNormalizePath(resolve(baseDir, path.toString())));\n\t};\n\n\tconst wrappedFs: typeof import(\"node:fs\") = {\n\t\t...baseFs,\n\t\t// @ts-expect-error - Node's fs has too many overloads\n\t\treadFile: (\n\t\t\tpath: fs.PathLike | number,\n\t\t\toptions: { encoding?: null; flag?: string } | null | undefined,\n\t\t\tcallback: (err: NodeJS.ErrnoException | null, data: Buffer) => void\n\t\t) => {\n\t\t\ttrackRead(path);\n\t\t\treturn baseFs.readFile(path, options, callback);\n\t\t},\n\t\t// @ts-expect-error - Node's fs has too many overloads\n\t\treadFileSync: (\n\t\t\tpath: fs.PathLike | number,\n\t\t\toptions?: { encoding?: null; flag?: string } | null | undefined\n\t\t) => {\n\t\t\ttrackRead(path);\n\t\t\treturn baseFs.readFileSync(path, options);\n\t\t},\n\t\tpromises: {\n\t\t\t...baseFs.promises,\n\t\t\t// @ts-expect-error - Node's fs.promises has too many overloads\n\t\t\treadFile: async (\n\t\t\t\tpath: fs.PathLike,\n\t\t\t\toptions?: { encoding?: null; flag?: string } | null\n\t\t\t): Promise<Buffer> => {\n\t\t\t\ttrackRead(path);\n\t\t\t\treturn baseFs.promises.readFile(path, options);\n\t\t\t},\n\t\t},\n\t};\n\n\treturn {\n\t\tfs: wrappedFs,\n\t\treadFiles,\n\t\tclearReadFiles: () => {\n\t\t\treadFiles.clear();\n\t\t},\n\t};\n}\n"]}
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=tracked-fs.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracked-fs.test.js","sourceRoot":"","sources":["../../../src/services/file-watching/tracked-fs.test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACN,eAAe,EACf,eAAe,EACf,uBAAuB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;IAC9D,MAAM,OAAO,GAAG,GAAG,CAAC;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CACrC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrB,gBAAgB,EAAE,MAAM;KACxB,CAAC,CACsB,CAAC;IAC1B,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAExD,MAAM,IAAI,OAAO,CAAO,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACzD,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC3D,IAAI,KAAK,EAAE,CAAC;gBACX,aAAa,CAAC,KAAK,CAAC,CAAC;gBACrB,OAAO;YACR,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,cAAc,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAErD,MAAM,cAAc,GAAG,iBAAiB,CACvC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CACtC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;IAC/D,MAAM,OAAO,GAAG,GAAG,CAAC;IACpB,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CACrC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;QACrB,YAAY,EAAE,MAAM;KACpB,CAAC,CACsB,CAAC;IAC1B,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IACvD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEzC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,cAAc,EAAE,CAAC;IACzB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS;QAC7B,2BAA2B;QAC3B,yBAAyB;KACzB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAC5B,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC,CAAC,CACzD,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAClC,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC3D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS;QAC7B,iCAAiC;QACjC,2BAA2B;KAC3B,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE;QACtC,OAAO,EAAE,UAAU;QACnB,MAAM,EAAE,eAAe;KACvB,CAAC,CAAC;IAEH,MAAM,CACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,iCAAiC,CAAC,CAAC,CACvE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,MAAM,CACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,CAAC,CACjE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAClC,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC3E,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,IAAI,CAC5E,IAAI,CACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IAC1D,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS;QAC7B,2BAA2B;QAC3B,oBAAoB;KACpB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE;QACtC,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;KAChD,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CACtE,KAAK,CACL,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,CAClC,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CACjD,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,GAAG,EAAE;IACzD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE7E,MAAM,CACL,uBAAuB,CAAC,oCAAoC,EAAE,WAAW,CAAC,CAC1E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,CACL,uBAAuB,CAAC,4BAA4B,EAAE,WAAW,CAAC,CAClE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACf,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"tracked-fs.test.js","sourceRoot":"","sources":["../../../src/services/file-watching/tracked-fs.test.ts"],"names":[],"mappings":"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","sourcesContent":["import memfs from \"memfs\";\nimport path from \"node:path\";\nimport type fs from \"node:fs\";\nimport { expect, test } from \"vitest\";\nimport {\n\tcreateTrackedFs,\n\tgetWatchTargets,\n\tisPathWithinDirectories,\n} from \"./tracked-fs.js\";\nimport { nodeNormalizePath } from \"../../utilities/node-normalize-path.js\";\n\ntest(\"tracks readFile and promises.readFile calls\", async () => {\n\tconst baseDir = \"/\";\n\tconst memFs = memfs.createFsFromVolume(\n\t\tmemfs.Volume.fromJSON({\n\t\t\t\"/messages.json\": \"test\",\n\t\t})\n\t) as unknown as typeof fs;\n\tconst tracked = createTrackedFs({ baseDir, fs: memFs });\n\n\tawait new Promise<void>((resolvePromise, rejectPromise) => {\n\t\ttracked.fs.readFile(\"/messages.json\", null, (error, data) => {\n\t\t\tif (error) {\n\t\t\t\trejectPromise(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\texpect(data.toString()).toBe(\"test\");\n\t\t\tresolvePromise();\n\t\t});\n\t});\n\n\tawait tracked.fs.promises.readFile(\"/messages.json\");\n\n\tconst normalizedPath = nodeNormalizePath(\n\t\tpath.resolve(baseDir, \"messages.json\")\n\t);\n\texpect(tracked.readFiles.has(normalizedPath)).toBe(true);\n});\n\ntest(\"tracks readFileSync and clears tracked files\", async () => {\n\tconst baseDir = \"/\";\n\tconst memFs = memfs.createFsFromVolume(\n\t\tmemfs.Volume.fromJSON({\n\t\t\t\"/sync.json\": \"sync\",\n\t\t})\n\t) as unknown as typeof fs;\n\tconst tracked = createTrackedFs({ baseDir, fs: memFs });\n\n\tconst contents = tracked.fs.readFileSync(\"/sync.json\");\n\texpect(contents.toString()).toBe(\"sync\");\n\n\texpect(tracked.readFiles.size).toBe(1);\n\ttracked.clearReadFiles();\n\texpect(tracked.readFiles.size).toBe(0);\n});\n\ntest(\"getWatchTargets filters cache files and collects directories\", () => {\n\tconst files = new Set<string>([\n\t\t\"/project/messages/en.json\",\n\t\t\"/project/cache/tmp.json\",\n\t]);\n\tconst targets = getWatchTargets(files);\n\n\texpect(targets.files).toEqual(\n\t\tnew Set([nodeNormalizePath(\"/project/messages/en.json\")])\n\t);\n\texpect(targets.directories).toEqual(\n\t\tnew Set([nodeNormalizePath(\"/project/messages\")])\n\t);\n});\n\ntest(\"getWatchTargets ignores outdir and descendants\", () => {\n\tconst files = new Set<string>([\n\t\t\"/project/src/paraglide/index.js\",\n\t\t\"/project/messages/en.json\",\n\t]);\n\tconst targets = getWatchTargets(files, {\n\t\tbaseDir: \"/project\",\n\t\toutdir: \"src/paraglide\",\n\t});\n\n\texpect(\n\t\ttargets.files.has(nodeNormalizePath(\"/project/src/paraglide/index.js\"))\n\t).toBe(false);\n\texpect(\n\t\ttargets.files.has(nodeNormalizePath(\"/project/messages/en.json\"))\n\t).toBe(true);\n\texpect(targets.isIgnoredPath(\"/project/src/paraglide/new.js\")).toBe(true);\n\texpect(targets.directories).toEqual(\n\t\tnew Set([nodeNormalizePath(\"/project/messages\")])\n\t);\n});\n\ntest(\"getWatchTargets can keep cache files when ignoreCache is false\", () => {\n\tconst files = new Set<string>([\"/project/cache/keep.json\"]);\n\tconst targets = getWatchTargets(files, { ignoreCache: false });\n\n\texpect(targets.files.has(nodeNormalizePath(\"/project/cache/keep.json\"))).toBe(\n\t\ttrue\n\t);\n});\n\ntest(\"getWatchTargets respects ignorePath predicate\", () => {\n\tconst files = new Set<string>([\n\t\t\"/project/messages/en.json\",\n\t\t\"/project/extra.txt\",\n\t]);\n\tconst targets = getWatchTargets(files, {\n\t\tignorePath: (path) => path.endsWith(\"extra.txt\"),\n\t});\n\n\texpect(targets.files.has(nodeNormalizePath(\"/project/extra.txt\"))).toBe(\n\t\tfalse\n\t);\n\texpect(targets.directories).toEqual(\n\t\tnew Set([nodeNormalizePath(\"/project/messages\")])\n\t);\n});\n\ntest(\"getWatchTargets can omit directories\", () => {\n\tconst files = new Set<string>([\"/project/messages/en.json\"]);\n\tconst targets = getWatchTargets(files, { includeDirectories: false });\n\n\texpect(targets.directories.size).toBe(0);\n});\n\ntest(\"isPathWithinDirectories matches nested paths\", () => {\n\tconst directories = new Set<string>([\"/project/messages\", \"/project/other\"]);\n\n\texpect(\n\t\tisPathWithinDirectories(\"/project/messages/nested/file.json\", directories)\n\t).toBe(true);\n\texpect(\n\t\tisPathWithinDirectories(\"/project/unknown/file.json\", directories)\n\t).toBe(false);\n});\n"]}
@@ -15,4 +15,3 @@ export declare class Logger {
15
15
  error(message: any, ...args: any[]): Logger;
16
16
  box(message: any, ...args: any[]): Logger;
17
17
  }
18
- //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,CAAC,OAAO,GAAG;IACjB,GAAG,OAAO,CAAC,OAAO;IAClB,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;CAC9B,CAAC;AAWF,MAAM,OAAO,MAAM;IAET,OAAO;IADhB,YACS,OAAO,GAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;uBAAxD,OAAO;IACb,CAAC;IAEG,GAAG,CAAC,OAAe;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,IAAI,CAAC,OAAe;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC7C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,OAAO,CAAC,OAAe;QAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC9C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,IAAI,CAAC,OAAY,EAAE,GAAG,IAAW;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC/C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,OAAY,EAAE,GAAG,IAAW;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC5C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,GAAG,CAAC,OAAY,EAAE,GAAG,IAAW;QACtC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,CAAC,OAAO,GAAG;IACjB,GAAG,OAAO,CAAC,OAAO;IAClB,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;CAC9B,CAAC;AAWF,MAAM,OAAO,MAAM;IAET,OAAO;IADhB,YACS,OAAO,GAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;uBAAxD,OAAO;IACb,CAAC;IAEG,GAAG,CAAC,OAAe;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,IAAI,CAAC,OAAe;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC7C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,OAAO,CAAC,OAAe;QAC7B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC9C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,IAAI,CAAC,OAAY,EAAE,GAAG,IAAW;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC/C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,OAAY,EAAE,GAAG,IAAW;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC5C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,GAAG,CAAC,OAAY,EAAE,GAAG,IAAW;QACtC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;CACD","sourcesContent":["import { colors } from \"consola/utils\";\nimport consola from \"consola\";\n\nconsola.options = {\n\t...consola.options,\n\tformatOptions: { date: false },\n};\n\nexport type LoggerOptions = {\n\tsilent: boolean;\n\n\t/**\n\t * If the [paraglide] prefix should be printed before each log message.\n\t */\n\tprefix: boolean;\n};\n\nexport class Logger {\n\tconstructor(\n\t\tprivate options: LoggerOptions = { silent: false, prefix: true }\n\t) {}\n\n\tpublic log(message: string): Logger {\n\t\tif (this.options.silent) return this;\n\t\tconst prefix = this.options.prefix ? colors.bold(\"[paraglide-js] \") : \"\";\n\t\tconsola.log(prefix + message);\n\t\treturn this;\n\t}\n\n\tpublic info(message: string): Logger {\n\t\tif (this.options.silent) return this;\n\t\tconst prefix = this.options.prefix\n\t\t\t? colors.bold(colors.blue(\"[paraglide-js] \"))\n\t\t\t: \"\";\n\t\tconsola.info(prefix + message);\n\t\treturn this;\n\t}\n\n\tpublic success(message: string): Logger {\n\t\tif (this.options.silent) return this;\n\t\tconst prefix = this.options.prefix\n\t\t\t? colors.bold(colors.green(\"[paraglide-js] \"))\n\t\t\t: \"\";\n\t\tconsola.success(prefix + message);\n\t\treturn this;\n\t}\n\n\tpublic warn(message: any, ...args: any[]): Logger {\n\t\tconst prefix = this.options.prefix\n\t\t\t? colors.bold(colors.yellow(\"[paraglide-js] \"))\n\t\t\t: \"\";\n\t\tconsola.warn(prefix + message, ...args);\n\t\treturn this;\n\t}\n\n\tpublic error(message: any, ...args: any[]): Logger {\n\t\tconst prefix = this.options.prefix\n\t\t\t? colors.bold(colors.red(\"[paraglide-js] \"))\n\t\t\t: \"\";\n\t\tconsola.error(prefix + message, ...args);\n\t\treturn this;\n\t}\n\n\tpublic box(message: any, ...args: any[]): Logger {\n\t\tif (this.options.silent) return this;\n\t\tconsola.box(message, ...args);\n\t\treturn this;\n\t}\n}\n"]}
@@ -12,4 +12,3 @@ type LookupOptions = {
12
12
  */
13
13
  export declare function lookup(locale: string, options: LookupOptions): string;
14
14
  export {};
15
- //# sourceMappingURL=lookup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/services/lookup.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,MAAc,EAAE,OAAsB;IAC5D,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,KAAK,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,sBAAsB;QACtB,IAAI,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;YAAE,SAAS;QAE9C,kCAAkC;QAClC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAAE,SAAS;QAC7D,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,iBAAiB,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../src/services/lookup.ts"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,MAAc,EAAE,OAAsB;IAC5D,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,KAAK,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,sBAAsB;QACtB,IAAI,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;YAAE,SAAS;QAE9C,kCAAkC;QAClC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAAE,SAAS;QAC7D,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,iBAAiB,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC;AACnD,CAAC","sourcesContent":["type LookupOptions = {\n\tlocales: string[];\n\tbaseLocale: string;\n};\n\n/**\n * Performs a lookup for the given language tag, among the available language tags,\n * according to the IETF BCP 47 spec.\n *\n * It **does not support Wildcards** at the moment.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc4647#section-3.4\n */\nexport function lookup(locale: string, options: LookupOptions): string {\n\tconst fallbackLanguages: string[] = [];\n\n\tconst languageTagParts = locale.split(\"-\").filter(Boolean);\n\tfor (let i = languageTagParts.length; i > 0; i--) {\n\t\t//Skip the x separator\n\t\tif (languageTagParts[i - 1] === \"x\") continue;\n\n\t\t//Stringify the language tag parts\n\t\tconst fallbackLanguageTag = languageTagParts.slice(0, i).join(\"-\");\n\t\tif (!options.locales.includes(fallbackLanguageTag)) continue;\n\t\tfallbackLanguages.push(fallbackLanguageTag);\n\t}\n\n\treturn fallbackLanguages[0] ?? options.baseLocale;\n}\n"]}
@@ -1,2 +1 @@
1
1
  export * as x from "urlpattern-polyfill";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/urlpattern-polyfill/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/urlpattern-polyfill/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,qBAAqB,CAAC","sourcesContent":["export * as x from \"urlpattern-polyfill\";\n"]}
@@ -8,4 +8,3 @@
8
8
  * const newFile = stringify(json)
9
9
  */
10
10
  export declare const detectJsonFormatting: (file: string) => ((value: Parameters<typeof JSON.stringify>[0], replacer?: Parameters<typeof JSON.stringify>[1]) => string);
11
- //# sourceMappingURL=detect-json-formatting.d.ts.map