@common.js/next-intl 4.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/config.d.ts +4 -0
  4. package/dist/cjs/development/ExtractorCodec-D9Tw618d.cjs +7 -0
  5. package/dist/cjs/development/JSONCodec-CzA8ubPy.cjs +55 -0
  6. package/dist/cjs/development/POCodec-CWGHK-Gp.cjs +111 -0
  7. package/dist/cjs/development/plugin-DlFYUFWh.cjs +1613 -0
  8. package/dist/cjs/development/plugin.cjs +13 -0
  9. package/dist/esm/development/config.js +13 -0
  10. package/dist/esm/development/extractor/ExtractionCompiler.js +284 -0
  11. package/dist/esm/development/extractor/catalog/CatalogLocales.js +398 -0
  12. package/dist/esm/development/extractor/catalog/CatalogManager.js +1515 -0
  13. package/dist/esm/development/extractor/catalog/CatalogPersister.js +341 -0
  14. package/dist/esm/development/extractor/catalog/SaveScheduler.js +314 -0
  15. package/dist/esm/development/extractor/catalogLoader.js +288 -0
  16. package/dist/esm/development/extractor/extractMessages.js +180 -0
  17. package/dist/esm/development/extractor/extractionLoader.js +37 -0
  18. package/dist/esm/development/extractor/extractor/LRUCache.js +68 -0
  19. package/dist/esm/development/extractor/extractor/MessageExtractor.js +273 -0
  20. package/dist/esm/development/extractor/format/ExtractorCodec.js +13 -0
  21. package/dist/esm/development/extractor/format/codecs/JSONCodec.js +91 -0
  22. package/dist/esm/development/extractor/format/codecs/POCodec.js +227 -0
  23. package/dist/esm/development/extractor/format/index.js +289 -0
  24. package/dist/esm/development/extractor/normalizeExtractorConfig.js +91 -0
  25. package/dist/esm/development/extractor/source/SourceFileFilter.js +104 -0
  26. package/dist/esm/development/extractor/source/SourceFileScanner.js +297 -0
  27. package/dist/esm/development/extractor/source/SourceFileWatcher.js +610 -0
  28. package/dist/esm/development/extractor/utils.js +133 -0
  29. package/dist/esm/development/extractor.js +25 -0
  30. package/dist/esm/development/index.react-client.js +59 -0
  31. package/dist/esm/development/index.react-server.js +61 -0
  32. package/dist/esm/development/middleware/getAlternateLinksHeaderValue.js +142 -0
  33. package/dist/esm/development/middleware/middleware.js +231 -0
  34. package/dist/esm/development/middleware/resolveLocale.js +150 -0
  35. package/dist/esm/development/middleware/syncCookie.js +87 -0
  36. package/dist/esm/development/middleware/utils.js +403 -0
  37. package/dist/esm/development/middleware.js +16 -0
  38. package/dist/esm/development/navigation/react-client/createNavigation.js +195 -0
  39. package/dist/esm/development/navigation/react-client/useBasePathname.js +46 -0
  40. package/dist/esm/development/navigation/react-server/createNavigation.js +111 -0
  41. package/dist/esm/development/navigation/react-server/getServerLocale.js +167 -0
  42. package/dist/esm/development/navigation/shared/BaseLink.js +115 -0
  43. package/dist/esm/development/navigation/shared/createSharedNavigationFns.js +214 -0
  44. package/dist/esm/development/navigation/shared/syncLocaleCookie.js +139 -0
  45. package/dist/esm/development/navigation/shared/utils.js +352 -0
  46. package/dist/esm/development/navigation.react-client.js +16 -0
  47. package/dist/esm/development/navigation.react-server.js +16 -0
  48. package/dist/esm/development/plugin/config.js +28 -0
  49. package/dist/esm/development/plugin/createNextIntlPlugin.js +66 -0
  50. package/dist/esm/development/plugin/declaration/createMessagesDeclaration.js +91 -0
  51. package/dist/esm/development/plugin/extractor/initExtractionCompiler.js +64 -0
  52. package/dist/esm/development/plugin/getNextConfig.js +355 -0
  53. package/dist/esm/development/plugin/nextFlags.js +47 -0
  54. package/dist/esm/development/plugin/utils.js +43 -0
  55. package/dist/esm/development/plugin/watchFile.js +32 -0
  56. package/dist/esm/development/plugin.js +16 -0
  57. package/dist/esm/development/react-client/index.js +67 -0
  58. package/dist/esm/development/react-server/NextIntlClientProviderServer.js +327 -0
  59. package/dist/esm/development/react-server/useConfig.js +40 -0
  60. package/dist/esm/development/react-server/useExtracted.js +21 -0
  61. package/dist/esm/development/react-server/useFormatter.js +21 -0
  62. package/dist/esm/development/react-server/useLocale.js +20 -0
  63. package/dist/esm/development/react-server/useMessages.js +21 -0
  64. package/dist/esm/development/react-server/useNow.js +25 -0
  65. package/dist/esm/development/react-server/useTimeZone.js +20 -0
  66. package/dist/esm/development/react-server/useTranslations.js +71 -0
  67. package/dist/esm/development/routing/config.js +82 -0
  68. package/dist/esm/development/routing/defineRouting.js +116 -0
  69. package/dist/esm/development/routing.js +16 -0
  70. package/dist/esm/development/server/react-client/index.js +68 -0
  71. package/dist/esm/development/server/react-server/RequestLocale.js +267 -0
  72. package/dist/esm/development/server/react-server/RequestLocaleCache.js +33 -0
  73. package/dist/esm/development/server/react-server/createRequestConfig.js +16 -0
  74. package/dist/esm/development/server/react-server/getConfig.js +283 -0
  75. package/dist/esm/development/server/react-server/getConfigNow.js +166 -0
  76. package/dist/esm/development/server/react-server/getDefaultNow.js +16 -0
  77. package/dist/esm/development/server/react-server/getExtracted.js +176 -0
  78. package/dist/esm/development/server/react-server/getFormats.js +166 -0
  79. package/dist/esm/development/server/react-server/getFormatter.js +186 -0
  80. package/dist/esm/development/server/react-server/getLocale.js +166 -0
  81. package/dist/esm/development/server/react-server/getMessages.js +194 -0
  82. package/dist/esm/development/server/react-server/getNow.js +164 -0
  83. package/dist/esm/development/server/react-server/getRequestConfig.js +15 -0
  84. package/dist/esm/development/server/react-server/getServerExtractor.js +108 -0
  85. package/dist/esm/development/server/react-server/getServerFormatter.js +81 -0
  86. package/dist/esm/development/server/react-server/getServerTranslator.js +70 -0
  87. package/dist/esm/development/server/react-server/getTimeZone.js +180 -0
  88. package/dist/esm/development/server/react-server/getTranslations.js +179 -0
  89. package/dist/esm/development/server/react-server/validateLocale.js +20 -0
  90. package/dist/esm/development/server.react-client.js +40 -0
  91. package/dist/esm/development/server.react-server.js +53 -0
  92. package/dist/esm/development/shared/NextIntlClientProvider.js +79 -0
  93. package/dist/esm/development/shared/constants.js +12 -0
  94. package/dist/esm/development/shared/use.js +59 -0
  95. package/dist/esm/development/shared/utils.js +201 -0
  96. package/dist/esm/production/config.js +13 -0
  97. package/dist/esm/production/extractor/ExtractionCompiler.js +275 -0
  98. package/dist/esm/production/extractor/catalog/CatalogLocales.js +384 -0
  99. package/dist/esm/production/extractor/catalog/CatalogManager.js +1401 -0
  100. package/dist/esm/production/extractor/catalog/CatalogPersister.js +334 -0
  101. package/dist/esm/production/extractor/catalog/SaveScheduler.js +278 -0
  102. package/dist/esm/production/extractor/catalogLoader.js +251 -0
  103. package/dist/esm/production/extractor/extractMessages.js +178 -0
  104. package/dist/esm/production/extractor/extractionLoader.js +27 -0
  105. package/dist/esm/production/extractor/extractor/LRUCache.js +59 -0
  106. package/dist/esm/production/extractor/extractor/MessageExtractor.js +259 -0
  107. package/dist/esm/production/extractor/format/ExtractorCodec.js +13 -0
  108. package/dist/esm/production/extractor/format/codecs/JSONCodec.js +83 -0
  109. package/dist/esm/production/extractor/format/codecs/POCodec.js +210 -0
  110. package/dist/esm/production/extractor/format/index.js +278 -0
  111. package/dist/esm/production/extractor/normalizeExtractorConfig.js +54 -0
  112. package/dist/esm/production/extractor/source/SourceFileFilter.js +99 -0
  113. package/dist/esm/production/extractor/source/SourceFileScanner.js +293 -0
  114. package/dist/esm/production/extractor/source/SourceFileWatcher.js +579 -0
  115. package/dist/esm/production/extractor/utils.js +108 -0
  116. package/dist/esm/production/extractor.js +25 -0
  117. package/dist/esm/production/index.react-client.js +59 -0
  118. package/dist/esm/production/index.react-server.js +61 -0
  119. package/dist/esm/production/middleware/getAlternateLinksHeaderValue.js +104 -0
  120. package/dist/esm/production/middleware/middleware.js +155 -0
  121. package/dist/esm/production/middleware/resolveLocale.js +99 -0
  122. package/dist/esm/production/middleware/syncCookie.js +81 -0
  123. package/dist/esm/production/middleware/utils.js +315 -0
  124. package/dist/esm/production/middleware.js +16 -0
  125. package/dist/esm/production/navigation/react-client/createNavigation.js +174 -0
  126. package/dist/esm/production/navigation/react-client/useBasePathname.js +32 -0
  127. package/dist/esm/production/navigation/react-server/createNavigation.js +110 -0
  128. package/dist/esm/production/navigation/react-server/getServerLocale.js +162 -0
  129. package/dist/esm/production/navigation/shared/BaseLink.js +98 -0
  130. package/dist/esm/production/navigation/shared/createSharedNavigationFns.js +182 -0
  131. package/dist/esm/production/navigation/shared/syncLocaleCookie.js +113 -0
  132. package/dist/esm/production/navigation/shared/utils.js +264 -0
  133. package/dist/esm/production/navigation.react-client.js +16 -0
  134. package/dist/esm/production/navigation.react-server.js +16 -0
  135. package/dist/esm/production/plugin/config.js +22 -0
  136. package/dist/esm/production/plugin/createNextIntlPlugin.js +48 -0
  137. package/dist/esm/production/plugin/declaration/createMessagesDeclaration.js +72 -0
  138. package/dist/esm/production/plugin/extractor/initExtractionCompiler.js +33 -0
  139. package/dist/esm/production/plugin/getNextConfig.js +242 -0
  140. package/dist/esm/production/plugin/nextFlags.js +44 -0
  141. package/dist/esm/production/plugin/utils.js +35 -0
  142. package/dist/esm/production/plugin/watchFile.js +26 -0
  143. package/dist/esm/production/plugin.js +16 -0
  144. package/dist/esm/production/react-client/index.js +57 -0
  145. package/dist/esm/production/react-server/NextIntlClientProviderServer.js +327 -0
  146. package/dist/esm/production/react-server/useConfig.js +35 -0
  147. package/dist/esm/production/react-server/useExtracted.js +21 -0
  148. package/dist/esm/production/react-server/useFormatter.js +21 -0
  149. package/dist/esm/production/react-server/useLocale.js +19 -0
  150. package/dist/esm/production/react-server/useMessages.js +21 -0
  151. package/dist/esm/production/react-server/useNow.js +22 -0
  152. package/dist/esm/production/react-server/useTimeZone.js +19 -0
  153. package/dist/esm/production/react-server/useTranslations.js +71 -0
  154. package/dist/esm/production/routing/config.js +77 -0
  155. package/dist/esm/production/routing/defineRouting.js +13 -0
  156. package/dist/esm/production/routing.js +16 -0
  157. package/dist/esm/production/server/react-client/index.js +51 -0
  158. package/dist/esm/production/server/react-server/RequestLocale.js +246 -0
  159. package/dist/esm/production/server/react-server/RequestLocaleCache.js +30 -0
  160. package/dist/esm/production/server/react-server/createRequestConfig.js +16 -0
  161. package/dist/esm/production/server/react-server/getConfig.js +262 -0
  162. package/dist/esm/production/server/react-server/getConfigNow.js +162 -0
  163. package/dist/esm/production/server/react-server/getDefaultNow.js +14 -0
  164. package/dist/esm/production/server/react-server/getExtracted.js +166 -0
  165. package/dist/esm/production/server/react-server/getFormats.js +157 -0
  166. package/dist/esm/production/server/react-server/getFormatter.js +179 -0
  167. package/dist/esm/production/server/react-server/getLocale.js +157 -0
  168. package/dist/esm/production/server/react-server/getMessages.js +190 -0
  169. package/dist/esm/production/server/react-server/getNow.js +164 -0
  170. package/dist/esm/production/server/react-server/getRequestConfig.js +13 -0
  171. package/dist/esm/production/server/react-server/getServerExtractor.js +20 -0
  172. package/dist/esm/production/server/react-server/getServerFormatter.js +78 -0
  173. package/dist/esm/production/server/react-server/getServerTranslator.js +69 -0
  174. package/dist/esm/production/server/react-server/getTimeZone.js +176 -0
  175. package/dist/esm/production/server/react-server/getTranslations.js +166 -0
  176. package/dist/esm/production/server.react-client.js +40 -0
  177. package/dist/esm/production/server.react-server.js +53 -0
  178. package/dist/esm/production/shared/NextIntlClientProvider.js +77 -0
  179. package/dist/esm/production/shared/constants.js +11 -0
  180. package/dist/esm/production/shared/use.js +51 -0
  181. package/dist/esm/production/shared/utils.js +156 -0
  182. package/dist/types/config.d.ts +1 -0
  183. package/dist/types/extractor/ExtractionCompiler.d.ts +16 -0
  184. package/dist/types/extractor/catalog/CatalogLocales.d.ts +29 -0
  185. package/dist/types/extractor/catalog/CatalogManager.d.ts +76 -0
  186. package/dist/types/extractor/catalog/CatalogPersister.d.ts +20 -0
  187. package/dist/types/extractor/catalog/SaveScheduler.d.ts +18 -0
  188. package/dist/types/extractor/extractMessages.d.ts +2 -0
  189. package/dist/types/extractor/extractor/LRUCache.d.ts +7 -0
  190. package/dist/types/extractor/extractor/MessageExtractor.bench.d.ts +1 -0
  191. package/dist/types/extractor/extractor/MessageExtractor.d.ts +17 -0
  192. package/dist/types/extractor/format/ExtractorCodec.d.ts +33 -0
  193. package/dist/types/extractor/format/codecs/JSONCodec.d.ts +2 -0
  194. package/dist/types/extractor/format/codecs/POCodec.d.ts +2 -0
  195. package/dist/types/extractor/format/codecs/fixtures/JSONCodecStructured.d.ts +2 -0
  196. package/dist/types/extractor/format/codecs/fixtures/POCodecSourceMessageKey.d.ts +2 -0
  197. package/dist/types/extractor/format/index.d.ts +15 -0
  198. package/dist/types/extractor/format/types.d.ts +8 -0
  199. package/dist/types/extractor/index.d.ts +2 -0
  200. package/dist/types/extractor/normalizeExtractorConfig.d.ts +5 -0
  201. package/dist/types/extractor/source/SourceFileFilter.d.ts +8 -0
  202. package/dist/types/extractor/source/SourceFileScanner.d.ts +4 -0
  203. package/dist/types/extractor/source/SourceFileWatcher.d.ts +15 -0
  204. package/dist/types/extractor/types.d.ts +79 -0
  205. package/dist/types/extractor/utils.d.ts +9 -0
  206. package/dist/types/extractor.d.ts +1 -0
  207. package/dist/types/index.react-client.d.ts +8 -0
  208. package/dist/types/index.react-server.d.ts +1 -0
  209. package/dist/types/middleware/getAlternateLinksHeaderValue.d.ts +13 -0
  210. package/dist/types/middleware/index.d.ts +4 -0
  211. package/dist/types/middleware/middleware.d.ts +4 -0
  212. package/dist/types/middleware/resolveLocale.d.ts +9 -0
  213. package/dist/types/middleware/syncCookie.d.ts +7 -0
  214. package/dist/types/middleware/utils.d.ts +26 -0
  215. package/dist/types/middleware.d.ts +1 -0
  216. package/dist/types/navigation/react-client/createNavigation.d.ts +465 -0
  217. package/dist/types/navigation/react-client/index.d.ts +2 -0
  218. package/dist/types/navigation/react-client/useBasePathname.d.ts +5 -0
  219. package/dist/types/navigation/react-server/createNavigation.d.ts +384 -0
  220. package/dist/types/navigation/react-server/getServerLocale.d.ts +5 -0
  221. package/dist/types/navigation/react-server/index.d.ts +2 -0
  222. package/dist/types/navigation/shared/BaseLink.d.ts +11 -0
  223. package/dist/types/navigation/shared/StrictParams.d.ts +8 -0
  224. package/dist/types/navigation/shared/createSharedNavigationFns.d.ts +370 -0
  225. package/dist/types/navigation/shared/syncLocaleCookie.d.ts +8 -0
  226. package/dist/types/navigation/shared/utils.d.ts +53 -0
  227. package/dist/types/navigation.react-client.d.ts +1 -0
  228. package/dist/types/navigation.react-server.d.ts +1 -0
  229. package/dist/types/plugin/catalog/catalogLoader.d.ts +10 -0
  230. package/dist/types/plugin/config.d.ts +3 -0
  231. package/dist/types/plugin/createNextIntlPlugin.d.ts +3 -0
  232. package/dist/types/plugin/declaration/createMessagesDeclaration.d.ts +1 -0
  233. package/dist/types/plugin/declaration/index.d.ts +1 -0
  234. package/dist/types/plugin/extractor/extractionLoader.d.ts +3 -0
  235. package/dist/types/plugin/extractor/initExtractionCompiler.d.ts +2 -0
  236. package/dist/types/plugin/getNextConfig.d.ts +4 -0
  237. package/dist/types/plugin/index.d.ts +1 -0
  238. package/dist/types/plugin/nextFlags.d.ts +2 -0
  239. package/dist/types/plugin/types.d.ts +25 -0
  240. package/dist/types/plugin/utils.d.ts +8 -0
  241. package/dist/types/plugin/watchFile.d.ts +6 -0
  242. package/dist/types/plugin.d.ts +1 -0
  243. package/dist/types/react-client/index.d.ts +16 -0
  244. package/dist/types/react-server/NextIntlClientProviderServer.d.ts +5 -0
  245. package/dist/types/react-server/index.d.ts +16 -0
  246. package/dist/types/react-server/testUtils.d.ts +2 -0
  247. package/dist/types/react-server/useConfig.d.ts +2 -0
  248. package/dist/types/react-server/useExtracted.d.ts +2 -0
  249. package/dist/types/react-server/useFormatter.d.ts +2 -0
  250. package/dist/types/react-server/useLocale.d.ts +2 -0
  251. package/dist/types/react-server/useMessages.d.ts +2 -0
  252. package/dist/types/react-server/useNow.d.ts +2 -0
  253. package/dist/types/react-server/useTimeZone.d.ts +2 -0
  254. package/dist/types/react-server/useTranslations.d.ts +2 -0
  255. package/dist/types/routing/config.d.ts +73 -0
  256. package/dist/types/routing/defineRouting.d.ts +3 -0
  257. package/dist/types/routing/index.d.ts +3 -0
  258. package/dist/types/routing/types.d.ts +25 -0
  259. package/dist/types/routing.d.ts +1 -0
  260. package/dist/types/server/react-client/index.d.ts +10 -0
  261. package/dist/types/server/react-server/RequestLocale.d.ts +1 -0
  262. package/dist/types/server/react-server/RequestLocaleCache.d.ts +3 -0
  263. package/dist/types/server/react-server/createRequestConfig.d.ts +3 -0
  264. package/dist/types/server/react-server/getConfig.d.ts +13 -0
  265. package/dist/types/server/react-server/getConfigNow.d.ts +4 -0
  266. package/dist/types/server/react-server/getDefaultNow.d.ts +3 -0
  267. package/dist/types/server/react-server/getExtracted.d.ts +10 -0
  268. package/dist/types/server/react-server/getFormats.d.ts +3 -0
  269. package/dist/types/server/react-server/getFormatter.d.ts +10 -0
  270. package/dist/types/server/react-server/getLocale.d.ts +4 -0
  271. package/dist/types/server/react-server/getMessages.d.ts +6 -0
  272. package/dist/types/server/react-server/getNow.d.ts +4 -0
  273. package/dist/types/server/react-server/getRequestConfig.d.ts +35 -0
  274. package/dist/types/server/react-server/getServerExtractor.d.ts +5 -0
  275. package/dist/types/server/react-server/getServerFormatter.d.ts +29 -0
  276. package/dist/types/server/react-server/getServerTranslator.d.ts +4 -0
  277. package/dist/types/server/react-server/getTimeZone.d.ts +4 -0
  278. package/dist/types/server/react-server/getTranslations.d.ts +8 -0
  279. package/dist/types/server/react-server/index.d.ts +12 -0
  280. package/dist/types/server/react-server/validateLocale.d.ts +1 -0
  281. package/dist/types/server.react-client.d.ts +1 -0
  282. package/dist/types/server.react-server.d.ts +1 -0
  283. package/dist/types/shared/NextIntlClientProvider.d.ts +9 -0
  284. package/dist/types/shared/constants.d.ts +1 -0
  285. package/dist/types/shared/types.d.ts +5 -0
  286. package/dist/types/shared/use.d.ts +3 -0
  287. package/dist/types/shared/utils.d.ts +20 -0
  288. package/extractor/catalogLoader.d.ts +4 -0
  289. package/extractor/extractionLoader.d.ts +4 -0
  290. package/extractor.d.ts +2 -0
  291. package/middleware.d.ts +4 -0
  292. package/navigation.d.ts +2 -0
  293. package/package.json +60 -0
  294. package/plugin.d.cts +3 -0
  295. package/plugin.d.ts +4 -0
  296. package/routing.d.ts +2 -0
  297. package/server.d.ts +2 -0
@@ -0,0 +1,1515 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return CatalogManager;
9
+ }
10
+ });
11
+ var _promises = /*#__PURE__*/ _interopRequireDefault(require("fs/promises"));
12
+ var _path = /*#__PURE__*/ _interopRequireDefault(require("path"));
13
+ var _indexJs = require("../format/index.js");
14
+ var _sourceFileScannerJs = /*#__PURE__*/ _interopRequireDefault(require("../source/SourceFileScanner.js"));
15
+ var _sourceFileWatcherJs = /*#__PURE__*/ _interopRequireDefault(require("../source/SourceFileWatcher.js"));
16
+ var _utilsJs = require("../utils.js");
17
+ var _catalogLocalesJs = /*#__PURE__*/ _interopRequireDefault(require("./CatalogLocales.js"));
18
+ var _catalogPersisterJs = /*#__PURE__*/ _interopRequireDefault(require("./CatalogPersister.js"));
19
+ var _saveSchedulerJs = /*#__PURE__*/ _interopRequireDefault(require("./SaveScheduler.js"));
20
+ function _arrayLikeToArray(arr, len) {
21
+ if (len == null || len > arr.length) len = arr.length;
22
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
23
+ return arr2;
24
+ }
25
+ function _arrayWithHoles(arr) {
26
+ if (Array.isArray(arr)) return arr;
27
+ }
28
+ function _arrayWithoutHoles(arr) {
29
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
30
+ }
31
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
32
+ try {
33
+ var info = gen[key](arg);
34
+ var value = info.value;
35
+ } catch (error) {
36
+ reject(error);
37
+ return;
38
+ }
39
+ if (info.done) {
40
+ resolve(value);
41
+ } else {
42
+ Promise.resolve(value).then(_next, _throw);
43
+ }
44
+ }
45
+ function _asyncToGenerator(fn) {
46
+ return function() {
47
+ var self = this, args = arguments;
48
+ return new Promise(function(resolve, reject) {
49
+ var gen = fn.apply(self, args);
50
+ function _next(value) {
51
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
52
+ }
53
+ function _throw(err) {
54
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
55
+ }
56
+ _next(undefined);
57
+ });
58
+ };
59
+ }
60
+ function _classCallCheck(instance, Constructor) {
61
+ if (!(instance instanceof Constructor)) {
62
+ throw new TypeError("Cannot call a class as a function");
63
+ }
64
+ }
65
+ function _defineProperties(target, props) {
66
+ for(var i = 0; i < props.length; i++){
67
+ var descriptor = props[i];
68
+ descriptor.enumerable = descriptor.enumerable || false;
69
+ descriptor.configurable = true;
70
+ if ("value" in descriptor) descriptor.writable = true;
71
+ Object.defineProperty(target, descriptor.key, descriptor);
72
+ }
73
+ }
74
+ function _createClass(Constructor, protoProps, staticProps) {
75
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
76
+ if (staticProps) _defineProperties(Constructor, staticProps);
77
+ return Constructor;
78
+ }
79
+ function _defineProperty(obj, key, value) {
80
+ if (key in obj) {
81
+ Object.defineProperty(obj, key, {
82
+ value: value,
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true
86
+ });
87
+ } else {
88
+ obj[key] = value;
89
+ }
90
+ return obj;
91
+ }
92
+ function _interopRequireDefault(obj) {
93
+ return obj && obj.__esModule ? obj : {
94
+ default: obj
95
+ };
96
+ }
97
+ function _iterableToArray(iter) {
98
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
99
+ }
100
+ function _iterableToArrayLimit(arr, i) {
101
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
102
+ if (_i == null) return;
103
+ var _arr = [];
104
+ var _n = true;
105
+ var _d = false;
106
+ var _s, _e;
107
+ try {
108
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
109
+ _arr.push(_s.value);
110
+ if (i && _arr.length === i) break;
111
+ }
112
+ } catch (err) {
113
+ _d = true;
114
+ _e = err;
115
+ } finally{
116
+ try {
117
+ if (!_n && _i["return"] != null) _i["return"]();
118
+ } finally{
119
+ if (_d) throw _e;
120
+ }
121
+ }
122
+ return _arr;
123
+ }
124
+ function _nonIterableRest() {
125
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
126
+ }
127
+ function _nonIterableSpread() {
128
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
129
+ }
130
+ function _objectSpread(target) {
131
+ for(var i = 1; i < arguments.length; i++){
132
+ var source = arguments[i] != null ? arguments[i] : {};
133
+ var ownKeys = Object.keys(source);
134
+ if (typeof Object.getOwnPropertySymbols === "function") {
135
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
136
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
137
+ }));
138
+ }
139
+ ownKeys.forEach(function(key) {
140
+ _defineProperty(target, key, source[key]);
141
+ });
142
+ }
143
+ return target;
144
+ }
145
+ function ownKeys(object, enumerableOnly) {
146
+ var keys = Object.keys(object);
147
+ if (Object.getOwnPropertySymbols) {
148
+ var symbols = Object.getOwnPropertySymbols(object);
149
+ if (enumerableOnly) {
150
+ symbols = symbols.filter(function(sym) {
151
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
152
+ });
153
+ }
154
+ keys.push.apply(keys, symbols);
155
+ }
156
+ return keys;
157
+ }
158
+ function _objectSpreadProps(target, source) {
159
+ source = source != null ? source : {};
160
+ if (Object.getOwnPropertyDescriptors) {
161
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
162
+ } else {
163
+ ownKeys(Object(source)).forEach(function(key) {
164
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
165
+ });
166
+ }
167
+ return target;
168
+ }
169
+ function _slicedToArray(arr, i) {
170
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
171
+ }
172
+ function _toConsumableArray(arr) {
173
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
174
+ }
175
+ function _unsupportedIterableToArray(o, minLen) {
176
+ if (!o) return;
177
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
178
+ var n = Object.prototype.toString.call(o).slice(8, -1);
179
+ if (n === "Object" && o.constructor) n = o.constructor.name;
180
+ if (n === "Map" || n === "Set") return Array.from(n);
181
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
182
+ }
183
+ var __generator = (void 0) && (void 0).__generator || function(thisArg, body) {
184
+ var f, y, t, g, _ = {
185
+ label: 0,
186
+ sent: function() {
187
+ if (t[0] & 1) throw t[1];
188
+ return t[1];
189
+ },
190
+ trys: [],
191
+ ops: []
192
+ };
193
+ return g = {
194
+ next: verb(0),
195
+ "throw": verb(1),
196
+ "return": verb(2)
197
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
198
+ return this;
199
+ }), g;
200
+ function verb(n) {
201
+ return function(v) {
202
+ return step([
203
+ n,
204
+ v
205
+ ]);
206
+ };
207
+ }
208
+ function step(op) {
209
+ if (f) throw new TypeError("Generator is already executing.");
210
+ while(_)try {
211
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
212
+ if (y = 0, t) op = [
213
+ op[0] & 2,
214
+ t.value
215
+ ];
216
+ switch(op[0]){
217
+ case 0:
218
+ case 1:
219
+ t = op;
220
+ break;
221
+ case 4:
222
+ _.label++;
223
+ return {
224
+ value: op[1],
225
+ done: false
226
+ };
227
+ case 5:
228
+ _.label++;
229
+ y = op[1];
230
+ op = [
231
+ 0
232
+ ];
233
+ continue;
234
+ case 7:
235
+ op = _.ops.pop();
236
+ _.trys.pop();
237
+ continue;
238
+ default:
239
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
240
+ _ = 0;
241
+ continue;
242
+ }
243
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
244
+ _.label = op[1];
245
+ break;
246
+ }
247
+ if (op[0] === 6 && _.label < t[1]) {
248
+ _.label = t[1];
249
+ t = op;
250
+ break;
251
+ }
252
+ if (t && _.label < t[2]) {
253
+ _.label = t[2];
254
+ _.ops.push(op);
255
+ break;
256
+ }
257
+ if (t[2]) _.ops.pop();
258
+ _.trys.pop();
259
+ continue;
260
+ }
261
+ op = body.call(thisArg, _);
262
+ } catch (e) {
263
+ op = [
264
+ 6,
265
+ e
266
+ ];
267
+ y = 0;
268
+ } finally{
269
+ f = t = 0;
270
+ }
271
+ if (op[0] & 5) throw op[1];
272
+ return {
273
+ value: op[0] ? op[1] : void 0,
274
+ done: true
275
+ };
276
+ }
277
+ };
278
+ var _dispose = Symbol.dispose;
279
+ var CatalogManager = /*#__PURE__*/ function() {
280
+ "use strict";
281
+ function CatalogManager(config, opts) {
282
+ _classCallCheck(this, CatalogManager);
283
+ /**
284
+ * Source of truth for statically extracted source messages,
285
+ * grouped by file and message ID.
286
+ */ _defineProperty(this, "sourceMessagesByFile", new Map());
287
+ /**
288
+ * Reverse index for rebuilding aggregated messages without scanning all files.
289
+ * Contains the same `SourceMessage` arrays as `sourceMessagesByFile` and is
290
+ * kept in sync with it.
291
+ */ _defineProperty(this, "sourceMessagesById", new Map());
292
+ /**
293
+ * Fast lookup for messages by ID, aggregated across all files. This combines
294
+ * metadata from `sourceMessagesById`, e.g. references and descriptions.
295
+ */ _defineProperty(this, "messagesById", new Map());
296
+ /**
297
+ * This potentially also includes outdated ones that were initially available,
298
+ * but are not used anymore. This allows to restore them if they are used again.
299
+ **/ _defineProperty(this, "translationsByTargetLocale", new Map());
300
+ _defineProperty(this, "lastWriteByLocale", new Map());
301
+ var _this = this;
302
+ _defineProperty(this, "onLocalesChange", function() {
303
+ var _ref = _asyncToGenerator(function(params) {
304
+ var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, locale, err, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, locale1;
305
+ return __generator(this, function(_state) {
306
+ switch(_state.label){
307
+ case 0:
308
+ // Chain to existing promise
309
+ _this.loadCatalogsPromise = Promise.all([
310
+ _this.loadCatalogsPromise
311
+ ].concat(_toConsumableArray(params.added.map(function(locale) {
312
+ return _this.reloadLocaleCatalog(locale);
313
+ }))));
314
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
315
+ _state.label = 1;
316
+ case 1:
317
+ _state.trys.push([
318
+ 1,
319
+ 6,
320
+ 7,
321
+ 8
322
+ ]);
323
+ _iterator = params.added[Symbol.iterator]();
324
+ _state.label = 2;
325
+ case 2:
326
+ if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
327
+ 3,
328
+ 5
329
+ ];
330
+ locale = _step.value;
331
+ return [
332
+ 4,
333
+ _this.saveLocale(locale)
334
+ ];
335
+ case 3:
336
+ _state.sent();
337
+ _state.label = 4;
338
+ case 4:
339
+ _iteratorNormalCompletion = true;
340
+ return [
341
+ 3,
342
+ 2
343
+ ];
344
+ case 5:
345
+ return [
346
+ 3,
347
+ 8
348
+ ];
349
+ case 6:
350
+ err = _state.sent();
351
+ _didIteratorError = true;
352
+ _iteratorError = err;
353
+ return [
354
+ 3,
355
+ 8
356
+ ];
357
+ case 7:
358
+ try {
359
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
360
+ _iterator.return();
361
+ }
362
+ } finally{
363
+ if (_didIteratorError) {
364
+ throw _iteratorError;
365
+ }
366
+ }
367
+ return [
368
+ 7
369
+ ];
370
+ case 8:
371
+ _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
372
+ try {
373
+ for(_iterator1 = params.removed[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
374
+ locale1 = _step1.value;
375
+ _this.translationsByTargetLocale.delete(locale1);
376
+ _this.lastWriteByLocale.delete(locale1);
377
+ }
378
+ } catch (err) {
379
+ _didIteratorError1 = true;
380
+ _iteratorError1 = err;
381
+ } finally{
382
+ try {
383
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
384
+ _iterator1.return();
385
+ }
386
+ } finally{
387
+ if (_didIteratorError1) {
388
+ throw _iteratorError1;
389
+ }
390
+ }
391
+ }
392
+ return [
393
+ 2
394
+ ];
395
+ }
396
+ });
397
+ });
398
+ return function(params) {
399
+ return _ref.apply(this, arguments);
400
+ };
401
+ }());
402
+ this.config = config;
403
+ var _saveDebounceMs;
404
+ this.saveScheduler = new _saveSchedulerJs.default((_saveDebounceMs = opts.saveDebounceMs) !== null && _saveDebounceMs !== void 0 ? _saveDebounceMs : 50);
405
+ var _projectRoot;
406
+ this.projectRoot = (_projectRoot = opts.projectRoot) !== null && _projectRoot !== void 0 ? _projectRoot : (0, _utilsJs.getDefaultProjectRoot)();
407
+ var _isDevelopment;
408
+ this.isDevelopment = (_isDevelopment = opts.isDevelopment) !== null && _isDevelopment !== void 0 ? _isDevelopment : false;
409
+ this.extractor = opts.extractor;
410
+ if (this.isDevelopment) {
411
+ // We kick this off as early as possible, so we get notified about changes
412
+ // that happen during the initial project scan (while awaiting it to
413
+ // complete though)
414
+ this.sourceWatcher = new _sourceFileWatcherJs.default(this.getSrcPaths(), this.handleFileEvents.bind(this));
415
+ void this.sourceWatcher.start();
416
+ }
417
+ }
418
+ _createClass(CatalogManager, [
419
+ {
420
+ key: "getCodec",
421
+ value: function getCodec() {
422
+ var _this = this;
423
+ return _asyncToGenerator(function() {
424
+ return __generator(this, function(_state) {
425
+ switch(_state.label){
426
+ case 0:
427
+ if (!!_this.codec) return [
428
+ 3,
429
+ 2
430
+ ];
431
+ return [
432
+ 4,
433
+ (0, _indexJs.resolveCodec)(_this.config.messages.format, _this.projectRoot)
434
+ ];
435
+ case 1:
436
+ _this.codec = _state.sent();
437
+ _state.label = 2;
438
+ case 2:
439
+ return [
440
+ 2,
441
+ _this.codec
442
+ ];
443
+ }
444
+ });
445
+ })();
446
+ }
447
+ },
448
+ {
449
+ key: "getPersister",
450
+ value: function getPersister() {
451
+ var _this = this;
452
+ return _asyncToGenerator(function() {
453
+ var _, _tmp;
454
+ return __generator(this, function(_state) {
455
+ switch(_state.label){
456
+ case 0:
457
+ if (!_this.persister) return [
458
+ 3,
459
+ 1
460
+ ];
461
+ return [
462
+ 2,
463
+ _this.persister
464
+ ];
465
+ case 1:
466
+ _ = _catalogPersisterJs.default.bind;
467
+ _tmp = {
468
+ messagesPath: _this.config.extract.path
469
+ };
470
+ return [
471
+ 4,
472
+ _this.getCodec()
473
+ ];
474
+ case 2:
475
+ _this.persister = new (_.apply(_catalogPersisterJs.default, [
476
+ void 0,
477
+ (_tmp.codec = _state.sent(), _tmp.extension = (0, _indexJs.getFormatExtension)(_this.config.messages.format), _tmp)
478
+ ]));
479
+ return [
480
+ 2,
481
+ _this.persister
482
+ ];
483
+ case 3:
484
+ return [
485
+ 2
486
+ ];
487
+ }
488
+ });
489
+ })();
490
+ }
491
+ },
492
+ {
493
+ key: "getCatalogLocales",
494
+ value: function getCatalogLocales() {
495
+ if (this.catalogLocales) {
496
+ return this.catalogLocales;
497
+ } else {
498
+ var messagesDir = _path.default.join(this.projectRoot, this.config.extract.path);
499
+ this.catalogLocales = new _catalogLocalesJs.default({
500
+ messagesDir: messagesDir,
501
+ extension: (0, _indexJs.getFormatExtension)(this.config.messages.format),
502
+ locales: this.config.extract.locales,
503
+ sourceLocale: this.config.extract.sourceLocale
504
+ });
505
+ return this.catalogLocales;
506
+ }
507
+ }
508
+ },
509
+ {
510
+ key: "getTargetLocales",
511
+ value: function getTargetLocales() {
512
+ var _this = this;
513
+ return _asyncToGenerator(function() {
514
+ return __generator(this, function(_state) {
515
+ return [
516
+ 2,
517
+ _this.getCatalogLocales().getTargetLocales()
518
+ ];
519
+ });
520
+ })();
521
+ }
522
+ },
523
+ {
524
+ key: "getSrcPaths",
525
+ value: function getSrcPaths() {
526
+ var _this = this;
527
+ return (Array.isArray(this.config.extract.srcPath) ? this.config.extract.srcPath : [
528
+ this.config.extract.srcPath
529
+ ]).map(function(srcPath) {
530
+ return _path.default.join(_this.projectRoot, srcPath);
531
+ });
532
+ }
533
+ },
534
+ {
535
+ key: "loadMessages",
536
+ value: function loadMessages() {
537
+ var _this = this;
538
+ return _asyncToGenerator(function() {
539
+ var sourceDiskMessages, catalogLocales;
540
+ return __generator(this, function(_state) {
541
+ switch(_state.label){
542
+ case 0:
543
+ return [
544
+ 4,
545
+ _this.loadSourceMessages()
546
+ ];
547
+ case 1:
548
+ sourceDiskMessages = _state.sent();
549
+ _this.loadCatalogsPromise = _this.loadTargetMessages();
550
+ return [
551
+ 4,
552
+ _this.loadCatalogsPromise
553
+ ];
554
+ case 2:
555
+ _state.sent();
556
+ _this.scanCompletePromise = _asyncToGenerator(function() {
557
+ var sourceFiles, _, extractedFiles, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, filePath, messages;
558
+ return __generator(this, function(_state) {
559
+ switch(_state.label){
560
+ case 0:
561
+ _ = Array.from;
562
+ return [
563
+ 4,
564
+ _sourceFileScannerJs.default.getSourceFiles(_this.getSrcPaths())
565
+ ];
566
+ case 1:
567
+ sourceFiles = _.apply(Array, [
568
+ _state.sent()
569
+ ])// Stable file order keeps catalog ties independent of processing timing
570
+ .toSorted(_utilsJs.localeCompare);
571
+ return [
572
+ 4,
573
+ Promise.all(sourceFiles.map(function() {
574
+ var _ref = _asyncToGenerator(function(filePath) {
575
+ var _tmp;
576
+ return __generator(this, function(_state) {
577
+ switch(_state.label){
578
+ case 0:
579
+ _tmp = {
580
+ filePath: filePath
581
+ };
582
+ return [
583
+ 4,
584
+ _this.extractFile(filePath)
585
+ ];
586
+ case 1:
587
+ return [
588
+ 2,
589
+ (_tmp.messages = _state.sent(), _tmp)
590
+ ];
591
+ }
592
+ });
593
+ });
594
+ return function(filePath) {
595
+ return _ref.apply(this, arguments);
596
+ };
597
+ }()))
598
+ ];
599
+ case 2:
600
+ extractedFiles = _state.sent();
601
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
602
+ try {
603
+ for(_iterator = extractedFiles[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
604
+ _value = _step.value, filePath = _value.filePath, messages = _value.messages;
605
+ if (messages) {
606
+ _this.applyFileMessages(filePath, messages);
607
+ }
608
+ }
609
+ } catch (err) {
610
+ _didIteratorError = true;
611
+ _iteratorError = err;
612
+ } finally{
613
+ try {
614
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
615
+ _iterator.return();
616
+ }
617
+ } finally{
618
+ if (_didIteratorError) {
619
+ throw _iteratorError;
620
+ }
621
+ }
622
+ }
623
+ _this.mergeSourceDiskMetadata(sourceDiskMessages);
624
+ return [
625
+ 2
626
+ ];
627
+ }
628
+ });
629
+ })();
630
+ return [
631
+ 4,
632
+ _this.scanCompletePromise
633
+ ];
634
+ case 3:
635
+ _state.sent();
636
+ if (_this.isDevelopment) {
637
+ catalogLocales = _this.getCatalogLocales();
638
+ catalogLocales.subscribeLocalesChange(_this.onLocalesChange);
639
+ }
640
+ return [
641
+ 2
642
+ ];
643
+ }
644
+ });
645
+ })();
646
+ }
647
+ },
648
+ {
649
+ key: "loadSourceMessages",
650
+ value: function loadSourceMessages() {
651
+ var _this = this;
652
+ return _asyncToGenerator(function() {
653
+ var diskMessages, byId, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, diskMessage;
654
+ return __generator(this, function(_state) {
655
+ switch(_state.label){
656
+ case 0:
657
+ return [
658
+ 4,
659
+ _this.loadLocaleMessages(_this.config.extract.sourceLocale)
660
+ ];
661
+ case 1:
662
+ diskMessages = _state.sent();
663
+ byId = new Map();
664
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
665
+ try {
666
+ for(_iterator = diskMessages[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
667
+ diskMessage = _step.value;
668
+ byId.set(diskMessage.id, diskMessage);
669
+ }
670
+ } catch (err) {
671
+ _didIteratorError = true;
672
+ _iteratorError = err;
673
+ } finally{
674
+ try {
675
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
676
+ _iterator.return();
677
+ }
678
+ } finally{
679
+ if (_didIteratorError) {
680
+ throw _iteratorError;
681
+ }
682
+ }
683
+ }
684
+ return [
685
+ 2,
686
+ byId
687
+ ];
688
+ }
689
+ });
690
+ })();
691
+ }
692
+ },
693
+ {
694
+ key: "loadLocaleMessages",
695
+ value: function loadLocaleMessages(locale) {
696
+ var _this = this;
697
+ return _asyncToGenerator(function() {
698
+ var persister, messages, fileTime;
699
+ return __generator(this, function(_state) {
700
+ switch(_state.label){
701
+ case 0:
702
+ return [
703
+ 4,
704
+ _this.getPersister()
705
+ ];
706
+ case 1:
707
+ persister = _state.sent();
708
+ return [
709
+ 4,
710
+ persister.read(locale)
711
+ ];
712
+ case 2:
713
+ messages = _state.sent();
714
+ return [
715
+ 4,
716
+ persister.getLastModified(locale)
717
+ ];
718
+ case 3:
719
+ fileTime = _state.sent();
720
+ _this.lastWriteByLocale.set(locale, fileTime);
721
+ return [
722
+ 2,
723
+ messages
724
+ ];
725
+ }
726
+ });
727
+ })();
728
+ }
729
+ },
730
+ {
731
+ key: "loadTargetMessages",
732
+ value: function loadTargetMessages() {
733
+ var _this = this;
734
+ return _asyncToGenerator(function() {
735
+ var targetLocales;
736
+ return __generator(this, function(_state) {
737
+ switch(_state.label){
738
+ case 0:
739
+ return [
740
+ 4,
741
+ _this.getTargetLocales()
742
+ ];
743
+ case 1:
744
+ targetLocales = _state.sent();
745
+ return [
746
+ 4,
747
+ Promise.all(targetLocales.map(function(locale) {
748
+ return _this.reloadLocaleCatalog(locale);
749
+ }))
750
+ ];
751
+ case 2:
752
+ _state.sent();
753
+ return [
754
+ 2
755
+ ];
756
+ }
757
+ });
758
+ })();
759
+ }
760
+ },
761
+ {
762
+ key: "reloadLocaleCatalog",
763
+ value: function reloadLocaleCatalog(locale) {
764
+ var _this = this;
765
+ return _asyncToGenerator(function() {
766
+ var diskMessages, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, diskMessage, prev, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, key, existingTranslations, hasExistingTranslations, translations, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, message, translations1;
767
+ return __generator(this, function(_state) {
768
+ switch(_state.label){
769
+ case 0:
770
+ return [
771
+ 4,
772
+ _this.loadLocaleMessages(locale)
773
+ ];
774
+ case 1:
775
+ diskMessages = _state.sent();
776
+ if (locale === _this.config.extract.sourceLocale) {
777
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
778
+ try {
779
+ // For source: Merge additional properties like flags
780
+ for(_iterator = diskMessages[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
781
+ diskMessage = _step.value;
782
+ prev = _this.messagesById.get(diskMessage.id);
783
+ if (prev) {
784
+ _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
785
+ try {
786
+ for(_iterator1 = Object.keys(diskMessage)[Symbol.iterator](); !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
787
+ key = _step1.value;
788
+ if (!CatalogManager.extractorOwnedAggregatorKeys.has(key)) {
789
+ // For unknown properties (like flags), disk wins
790
+ prev[key] = diskMessage[key];
791
+ }
792
+ }
793
+ } catch (err) {
794
+ _didIteratorError1 = true;
795
+ _iteratorError1 = err;
796
+ } finally{
797
+ try {
798
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
799
+ _iterator1.return();
800
+ }
801
+ } finally{
802
+ if (_didIteratorError1) {
803
+ throw _iteratorError1;
804
+ }
805
+ }
806
+ }
807
+ }
808
+ }
809
+ } catch (err) {
810
+ _didIteratorError = true;
811
+ _iteratorError = err;
812
+ } finally{
813
+ try {
814
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
815
+ _iterator.return();
816
+ }
817
+ } finally{
818
+ if (_didIteratorError) {
819
+ throw _iteratorError;
820
+ }
821
+ }
822
+ }
823
+ } else {
824
+ existingTranslations = _this.translationsByTargetLocale.get(locale);
825
+ hasExistingTranslations = existingTranslations && existingTranslations.size > 0;
826
+ if (diskMessages.length > 0) {
827
+ translations = new Map();
828
+ _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
829
+ try {
830
+ for(_iterator2 = diskMessages[Symbol.iterator](); !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
831
+ message = _step2.value;
832
+ translations.set(message.id, message);
833
+ }
834
+ } catch (err) {
835
+ _didIteratorError2 = true;
836
+ _iteratorError2 = err;
837
+ } finally{
838
+ try {
839
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
840
+ _iterator2.return();
841
+ }
842
+ } finally{
843
+ if (_didIteratorError2) {
844
+ throw _iteratorError2;
845
+ }
846
+ }
847
+ }
848
+ _this.translationsByTargetLocale.set(locale, translations);
849
+ } else if (hasExistingTranslations) ;
850
+ else {
851
+ translations1 = new Map();
852
+ _this.translationsByTargetLocale.set(locale, translations1);
853
+ }
854
+ }
855
+ return [
856
+ 2
857
+ ];
858
+ }
859
+ });
860
+ })();
861
+ }
862
+ },
863
+ {
864
+ key: "mergeSourceDiskMetadata",
865
+ value: function mergeSourceDiskMetadata(diskMessages) {
866
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
867
+ try {
868
+ for(var _iterator = diskMessages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
869
+ var _value = _slicedToArray(_step.value, 2), id = _value[0], diskMessage = _value[1];
870
+ var existing = this.messagesById.get(id);
871
+ if (!existing) continue;
872
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
873
+ try {
874
+ // Fill unknown metadata from disk without replacing extraction-owned fields.
875
+ for(var _iterator1 = Object.keys(diskMessage)[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
876
+ var key = _step1.value;
877
+ if (!CatalogManager.extractorOwnedAggregatorKeys.has(key) && existing[key] == null) {
878
+ existing[key] = diskMessage[key];
879
+ }
880
+ }
881
+ } catch (err) {
882
+ _didIteratorError1 = true;
883
+ _iteratorError1 = err;
884
+ } finally{
885
+ try {
886
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
887
+ _iterator1.return();
888
+ }
889
+ } finally{
890
+ if (_didIteratorError1) {
891
+ throw _iteratorError1;
892
+ }
893
+ }
894
+ }
895
+ }
896
+ } catch (err) {
897
+ _didIteratorError = true;
898
+ _iteratorError = err;
899
+ } finally{
900
+ try {
901
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
902
+ _iterator.return();
903
+ }
904
+ } finally{
905
+ if (_didIteratorError) {
906
+ throw _iteratorError;
907
+ }
908
+ }
909
+ }
910
+ }
911
+ },
912
+ {
913
+ key: "processFile",
914
+ value: function processFile(absoluteFilePath) {
915
+ var _this = this;
916
+ return _asyncToGenerator(function() {
917
+ var messages;
918
+ return __generator(this, function(_state) {
919
+ switch(_state.label){
920
+ case 0:
921
+ return [
922
+ 4,
923
+ _this.extractFile(absoluteFilePath)
924
+ ];
925
+ case 1:
926
+ messages = _state.sent();
927
+ // `undefined` only when `extractFile()` throws. An empty array is success
928
+ // and must still run `applyFileMessages` to clear stale ids for this file.
929
+ if (!messages) return [
930
+ 2,
931
+ false
932
+ ];
933
+ return [
934
+ 2,
935
+ _this.applyFileMessages(absoluteFilePath, messages)
936
+ ];
937
+ }
938
+ });
939
+ })();
940
+ }
941
+ },
942
+ {
943
+ key: "extractFile",
944
+ value: function extractFile(absoluteFilePath) {
945
+ var _this = this;
946
+ return _asyncToGenerator(function() {
947
+ var messages, content, extraction, e, err;
948
+ return __generator(this, function(_state) {
949
+ switch(_state.label){
950
+ case 0:
951
+ messages = [];
952
+ _state.label = 1;
953
+ case 1:
954
+ _state.trys.push([
955
+ 1,
956
+ 7,
957
+ ,
958
+ 8
959
+ ]);
960
+ return [
961
+ 4,
962
+ _promises.default.readFile(absoluteFilePath, "utf8")
963
+ ];
964
+ case 2:
965
+ content = _state.sent();
966
+ _state.label = 3;
967
+ case 3:
968
+ _state.trys.push([
969
+ 3,
970
+ 5,
971
+ ,
972
+ 6
973
+ ]);
974
+ return [
975
+ 4,
976
+ _this.extractor.extract(absoluteFilePath, content)
977
+ ];
978
+ case 4:
979
+ extraction = _state.sent();
980
+ return [
981
+ 3,
982
+ 6
983
+ ];
984
+ case 5:
985
+ e = _state.sent();
986
+ return [
987
+ 2,
988
+ undefined
989
+ ];
990
+ case 6:
991
+ messages = extraction.messages;
992
+ return [
993
+ 3,
994
+ 8
995
+ ];
996
+ case 7:
997
+ err = _state.sent();
998
+ if (err.code !== "ENOENT") {
999
+ throw err;
1000
+ }
1001
+ return [
1002
+ 3,
1003
+ 8
1004
+ ];
1005
+ case 8:
1006
+ return [
1007
+ 2,
1008
+ messages
1009
+ ];
1010
+ }
1011
+ });
1012
+ })();
1013
+ }
1014
+ },
1015
+ {
1016
+ key: "applyFileMessages",
1017
+ value: function applyFileMessages(absoluteFilePath, messages) {
1018
+ var prevFileMessages = this.sourceMessagesByFile.get(absoluteFilePath);
1019
+ var nextFileMessages = this.groupSourceMessagesById(messages);
1020
+ var ref;
1021
+ var affectedIds = new Set(_toConsumableArray((ref = prevFileMessages === null || prevFileMessages === void 0 ? void 0 : prevFileMessages.keys()) !== null && ref !== void 0 ? ref : []).concat(_toConsumableArray(nextFileMessages.keys())));
1022
+ if (nextFileMessages.size > 0) {
1023
+ this.sourceMessagesByFile.set(absoluteFilePath, nextFileMessages);
1024
+ } else {
1025
+ this.sourceMessagesByFile.delete(absoluteFilePath);
1026
+ }
1027
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1028
+ try {
1029
+ // Clear this file's contribution from the reverse index, then re-insert
1030
+ // fresh rows and rebuild aggregates (messagesById) per touched id.
1031
+ for(var _iterator = affectedIds[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1032
+ var id = _step.value;
1033
+ var sourceMessagesForId = this.sourceMessagesById.get(id);
1034
+ if (sourceMessagesForId) {
1035
+ sourceMessagesForId.delete(absoluteFilePath);
1036
+ // No files left for this id: drop the reverse-index entry.
1037
+ if (sourceMessagesForId.size === 0) {
1038
+ this.sourceMessagesById.delete(id);
1039
+ }
1040
+ }
1041
+ var nextSourceMessagesForId = nextFileMessages.get(id);
1042
+ if (nextSourceMessagesForId) {
1043
+ var sourceMessagesByFile = this.sourceMessagesById.get(id);
1044
+ if (!sourceMessagesByFile) {
1045
+ sourceMessagesByFile = new Map();
1046
+ this.sourceMessagesById.set(id, sourceMessagesByFile);
1047
+ }
1048
+ sourceMessagesByFile.set(absoluteFilePath, nextSourceMessagesForId);
1049
+ }
1050
+ this.rebuildMessageById(id);
1051
+ }
1052
+ } catch (err) {
1053
+ _didIteratorError = true;
1054
+ _iteratorError = err;
1055
+ } finally{
1056
+ try {
1057
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1058
+ _iterator.return();
1059
+ }
1060
+ } finally{
1061
+ if (_didIteratorError) {
1062
+ throw _iteratorError;
1063
+ }
1064
+ }
1065
+ }
1066
+ var changed = this.haveMessagesChangedForFile(prevFileMessages, nextFileMessages);
1067
+ return changed;
1068
+ }
1069
+ },
1070
+ {
1071
+ key: "groupSourceMessagesById",
1072
+ value: function groupSourceMessagesById(messages) {
1073
+ var result = new Map();
1074
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1075
+ try {
1076
+ for(var _iterator = messages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1077
+ var message = _step.value;
1078
+ var messagesById = result.get(message.id);
1079
+ if (messagesById) {
1080
+ messagesById.push(message);
1081
+ } else {
1082
+ result.set(message.id, [
1083
+ message
1084
+ ]);
1085
+ }
1086
+ }
1087
+ } catch (err) {
1088
+ _didIteratorError = true;
1089
+ _iteratorError = err;
1090
+ } finally{
1091
+ try {
1092
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1093
+ _iterator.return();
1094
+ }
1095
+ } finally{
1096
+ if (_didIteratorError) {
1097
+ throw _iteratorError;
1098
+ }
1099
+ }
1100
+ }
1101
+ return result;
1102
+ }
1103
+ },
1104
+ {
1105
+ key: "rebuildMessageById",
1106
+ value: function rebuildMessageById(id) {
1107
+ var ref;
1108
+ var ref1;
1109
+ var sourceMessages = Array.from((ref1 = (ref = this.sourceMessagesById.get(id)) === null || ref === void 0 ? void 0 : ref.values()) !== null && ref1 !== void 0 ? ref1 : []).flat();
1110
+ if (sourceMessages.length === 0) {
1111
+ this.messagesById.delete(id);
1112
+ return;
1113
+ }
1114
+ var previousMessage = this.messagesById.get(id);
1115
+ var aggregate = {
1116
+ description: this.mergeDescriptions(sourceMessages),
1117
+ id: id,
1118
+ message: sourceMessages[0].message,
1119
+ references: sourceMessages.map(function(message) {
1120
+ return message.reference;
1121
+ }).sort(_utilsJs.compareReferences)
1122
+ };
1123
+ if (previousMessage) {
1124
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1125
+ try {
1126
+ for(var _iterator = Object.keys(previousMessage)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1127
+ var key = _step.value;
1128
+ // Preserve extra fields (e.g. from disk/codec) across rebuilds; the
1129
+ // four core fields above are always recomputed from source messages.
1130
+ if (!CatalogManager.extractorOwnedAggregatorKeys.has(key) && aggregate[key] == null) {
1131
+ aggregate[key] = previousMessage[key];
1132
+ }
1133
+ }
1134
+ } catch (err) {
1135
+ _didIteratorError = true;
1136
+ _iteratorError = err;
1137
+ } finally{
1138
+ try {
1139
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1140
+ _iterator.return();
1141
+ }
1142
+ } finally{
1143
+ if (_didIteratorError) {
1144
+ throw _iteratorError;
1145
+ }
1146
+ }
1147
+ }
1148
+ }
1149
+ this.messagesById.set(id, aggregate);
1150
+ }
1151
+ },
1152
+ {
1153
+ key: "mergeDescriptions",
1154
+ value: function mergeDescriptions(messages) {
1155
+ var sortedByReference = messages.toSorted(function(a, b) {
1156
+ return (0, _utilsJs.compareReferences)(a.reference, b.reference);
1157
+ });
1158
+ var merged = [];
1159
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1160
+ try {
1161
+ for(var _iterator = sortedByReference[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1162
+ var message = _step.value;
1163
+ var description = message.description;
1164
+ if (description != null && !merged.includes(description)) {
1165
+ merged.push(description);
1166
+ }
1167
+ }
1168
+ } catch (err) {
1169
+ _didIteratorError = true;
1170
+ _iteratorError = err;
1171
+ } finally{
1172
+ try {
1173
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1174
+ _iterator.return();
1175
+ }
1176
+ } finally{
1177
+ if (_didIteratorError) {
1178
+ throw _iteratorError;
1179
+ }
1180
+ }
1181
+ }
1182
+ return merged;
1183
+ }
1184
+ },
1185
+ {
1186
+ key: "haveMessagesChangedForFile",
1187
+ value: function haveMessagesChangedForFile(beforeMessages, afterMessages) {
1188
+ // If one exists and the other doesn't, there's a change
1189
+ if (!beforeMessages) {
1190
+ return afterMessages.size > 0;
1191
+ }
1192
+ // Different sizes means changes
1193
+ if (beforeMessages.size !== afterMessages.size) {
1194
+ return true;
1195
+ }
1196
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1197
+ try {
1198
+ // Check differences in beforeMessages vs afterMessages
1199
+ for(var _iterator = beforeMessages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1200
+ var _value = _slicedToArray(_step.value, 2), id = _value[0], prevSourceMessages = _value[1];
1201
+ var nextSourceMessages = afterMessages.get(id);
1202
+ if (!nextSourceMessages) {
1203
+ return true;
1204
+ }
1205
+ if (!this.areSourceMessageArraysEqual(prevSourceMessages, nextSourceMessages)) {
1206
+ return true; // Early exit on first difference
1207
+ }
1208
+ }
1209
+ } catch (err) {
1210
+ _didIteratorError = true;
1211
+ _iteratorError = err;
1212
+ } finally{
1213
+ try {
1214
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1215
+ _iterator.return();
1216
+ }
1217
+ } finally{
1218
+ if (_didIteratorError) {
1219
+ throw _iteratorError;
1220
+ }
1221
+ }
1222
+ }
1223
+ return false;
1224
+ }
1225
+ },
1226
+ {
1227
+ key: "areSourceMessageArraysEqual",
1228
+ value: function areSourceMessageArraysEqual(messages1, messages2) {
1229
+ var _this = this;
1230
+ return messages1.length === messages2.length && messages1.every(function(message, index) {
1231
+ return _this.areSourceMessagesEqual(message, messages2[index]);
1232
+ });
1233
+ }
1234
+ },
1235
+ {
1236
+ key: "areSourceMessagesEqual",
1237
+ value: function areSourceMessagesEqual(msg1, msg2) {
1238
+ return msg1.id === msg2.id && msg1.message === msg2.message && msg1.description === msg2.description && msg1.reference.path === msg2.reference.path && msg1.reference.line === msg2.reference.line;
1239
+ }
1240
+ },
1241
+ {
1242
+ key: "save",
1243
+ value: function save() {
1244
+ var _this = this;
1245
+ return _asyncToGenerator(function() {
1246
+ return __generator(this, function(_state) {
1247
+ return [
1248
+ 2,
1249
+ _this.saveScheduler.schedule(function() {
1250
+ return _this.saveImpl();
1251
+ })
1252
+ ];
1253
+ });
1254
+ })();
1255
+ }
1256
+ },
1257
+ {
1258
+ key: "saveImpl",
1259
+ value: function saveImpl() {
1260
+ var _this = this;
1261
+ return _asyncToGenerator(function() {
1262
+ var targetLocales;
1263
+ return __generator(this, function(_state) {
1264
+ switch(_state.label){
1265
+ case 0:
1266
+ return [
1267
+ 4,
1268
+ _this.saveLocale(_this.config.extract.sourceLocale)
1269
+ ];
1270
+ case 1:
1271
+ _state.sent();
1272
+ return [
1273
+ 4,
1274
+ _this.getTargetLocales()
1275
+ ];
1276
+ case 2:
1277
+ targetLocales = _state.sent();
1278
+ return [
1279
+ 4,
1280
+ Promise.all(targetLocales.map(function(locale) {
1281
+ return _this.saveLocale(locale);
1282
+ }))
1283
+ ];
1284
+ case 3:
1285
+ _state.sent();
1286
+ return [
1287
+ 2
1288
+ ];
1289
+ }
1290
+ });
1291
+ })();
1292
+ }
1293
+ },
1294
+ {
1295
+ key: "saveLocale",
1296
+ value: function saveLocale(locale) {
1297
+ var _this = this;
1298
+ return _asyncToGenerator(function() {
1299
+ var messages, persister, isSourceLocale, lastWriteTime, currentFileTime, localeMessages, messagesToPersist, newTime;
1300
+ return __generator(this, function(_state) {
1301
+ switch(_state.label){
1302
+ case 0:
1303
+ return [
1304
+ 4,
1305
+ _this.loadCatalogsPromise
1306
+ ];
1307
+ case 1:
1308
+ _state.sent();
1309
+ messages = Array.from(_this.messagesById.values());
1310
+ return [
1311
+ 4,
1312
+ _this.getPersister()
1313
+ ];
1314
+ case 2:
1315
+ persister = _state.sent();
1316
+ isSourceLocale = locale === _this.config.extract.sourceLocale;
1317
+ lastWriteTime = _this.lastWriteByLocale.get(locale);
1318
+ return [
1319
+ 4,
1320
+ persister.getLastModified(locale)
1321
+ ];
1322
+ case 3:
1323
+ currentFileTime = _state.sent();
1324
+ if (!(currentFileTime && lastWriteTime && currentFileTime > lastWriteTime)) return [
1325
+ 3,
1326
+ 5
1327
+ ];
1328
+ return [
1329
+ 4,
1330
+ _this.reloadLocaleCatalog(locale)
1331
+ ];
1332
+ case 4:
1333
+ _state.sent();
1334
+ _state.label = 5;
1335
+ case 5:
1336
+ localeMessages = isSourceLocale ? _this.messagesById : _this.translationsByTargetLocale.get(locale);
1337
+ messagesToPersist = messages.map(function(message) {
1338
+ var localeMessage = localeMessages === null || localeMessages === void 0 ? void 0 : localeMessages.get(message.id);
1339
+ var ref;
1340
+ return _objectSpreadProps(_objectSpread({}, localeMessage), {
1341
+ id: message.id,
1342
+ description: message.description,
1343
+ references: message.references,
1344
+ message: isSourceLocale ? message.message : (ref = localeMessage === null || localeMessage === void 0 ? void 0 : localeMessage.message) !== null && ref !== void 0 ? ref : ""
1345
+ });
1346
+ });
1347
+ return [
1348
+ 4,
1349
+ persister.write(messagesToPersist, {
1350
+ locale: locale,
1351
+ sourceMessagesById: _this.messagesById
1352
+ })
1353
+ ];
1354
+ case 6:
1355
+ _state.sent();
1356
+ return [
1357
+ 4,
1358
+ persister.getLastModified(locale)
1359
+ ];
1360
+ case 7:
1361
+ newTime = _state.sent();
1362
+ _this.lastWriteByLocale.set(locale, newTime);
1363
+ return [
1364
+ 2
1365
+ ];
1366
+ }
1367
+ });
1368
+ })();
1369
+ }
1370
+ },
1371
+ {
1372
+ key: "handleFileEvents",
1373
+ value: function handleFileEvents(events) {
1374
+ var _this = this;
1375
+ return _asyncToGenerator(function() {
1376
+ var changed, expandedEvents, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, event, hasChanged, err;
1377
+ return __generator(this, function(_state) {
1378
+ switch(_state.label){
1379
+ case 0:
1380
+ if (!_this.loadCatalogsPromise) return [
1381
+ 3,
1382
+ 2
1383
+ ];
1384
+ return [
1385
+ 4,
1386
+ _this.loadCatalogsPromise
1387
+ ];
1388
+ case 1:
1389
+ _state.sent();
1390
+ _state.label = 2;
1391
+ case 2:
1392
+ if (!_this.scanCompletePromise) return [
1393
+ 3,
1394
+ 4
1395
+ ];
1396
+ return [
1397
+ 4,
1398
+ _this.scanCompletePromise
1399
+ ];
1400
+ case 3:
1401
+ _state.sent();
1402
+ _state.label = 4;
1403
+ case 4:
1404
+ changed = false;
1405
+ return [
1406
+ 4,
1407
+ _this.sourceWatcher.expandDirectoryDeleteEvents(events, Array.from(_this.sourceMessagesByFile.keys()))
1408
+ ];
1409
+ case 5:
1410
+ expandedEvents = _state.sent();
1411
+ _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1412
+ _state.label = 6;
1413
+ case 6:
1414
+ _state.trys.push([
1415
+ 6,
1416
+ 11,
1417
+ 12,
1418
+ 13
1419
+ ]);
1420
+ _iterator = expandedEvents.toSorted(function(a, b) {
1421
+ return (0, _utilsJs.localeCompare)(a.path, b.path);
1422
+ })[Symbol.iterator]();
1423
+ _state.label = 7;
1424
+ case 7:
1425
+ if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
1426
+ 3,
1427
+ 10
1428
+ ];
1429
+ event = _step.value;
1430
+ return [
1431
+ 4,
1432
+ _this.processFile(event.path)
1433
+ ];
1434
+ case 8:
1435
+ hasChanged = _state.sent();
1436
+ changed || (changed = hasChanged);
1437
+ _state.label = 9;
1438
+ case 9:
1439
+ _iteratorNormalCompletion = true;
1440
+ return [
1441
+ 3,
1442
+ 7
1443
+ ];
1444
+ case 10:
1445
+ return [
1446
+ 3,
1447
+ 13
1448
+ ];
1449
+ case 11:
1450
+ err = _state.sent();
1451
+ _didIteratorError = true;
1452
+ _iteratorError = err;
1453
+ return [
1454
+ 3,
1455
+ 13
1456
+ ];
1457
+ case 12:
1458
+ try {
1459
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1460
+ _iterator.return();
1461
+ }
1462
+ } finally{
1463
+ if (_didIteratorError) {
1464
+ throw _iteratorError;
1465
+ }
1466
+ }
1467
+ return [
1468
+ 7
1469
+ ];
1470
+ case 13:
1471
+ if (!changed) return [
1472
+ 3,
1473
+ 15
1474
+ ];
1475
+ return [
1476
+ 4,
1477
+ _this.save()
1478
+ ];
1479
+ case 14:
1480
+ _state.sent();
1481
+ _state.label = 15;
1482
+ case 15:
1483
+ return [
1484
+ 2
1485
+ ];
1486
+ }
1487
+ });
1488
+ })();
1489
+ }
1490
+ },
1491
+ {
1492
+ key: _dispose,
1493
+ value: function value() {
1494
+ var ref;
1495
+ (ref = this.sourceWatcher) === null || ref === void 0 ? void 0 : ref.stop();
1496
+ this.sourceWatcher = undefined;
1497
+ this.saveScheduler[Symbol.dispose]();
1498
+ if (this.catalogLocales && this.isDevelopment) {
1499
+ this.catalogLocales.unsubscribeLocalesChange(this.onLocalesChange);
1500
+ }
1501
+ }
1502
+ }
1503
+ ]);
1504
+ return CatalogManager;
1505
+ }();
1506
+ /**
1507
+ * Extraction-derived fields aggregated into `ExtractorMessage`.
1508
+ * Source code is the source of truth for these fields, only ancillary
1509
+ * codec fields may merge from disk (e.g. flags).
1510
+ */ _defineProperty(CatalogManager, "extractorOwnedAggregatorKeys", new Set([
1511
+ "description",
1512
+ "id",
1513
+ "message",
1514
+ "references"
1515
+ ]));