adnbn 0.10.0 → 0.12.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 (716) hide show
  1. package/README.md +3 -0
  2. package/dist/cli/builders/locale/LocaleBuilder.js +2 -11
  3. package/dist/cli/builders/locale/LocaleBuilder.js.map +1 -1
  4. package/dist/cli/builders/locale/index.js +1 -1
  5. package/dist/cli/builders/locale/index.js.map +1 -1
  6. package/dist/cli/builders/manifest/ManifestBase.js +17 -7
  7. package/dist/cli/builders/manifest/ManifestBase.js.map +1 -1
  8. package/dist/cli/builders/manifest/ManifestV2.js +1 -1
  9. package/dist/cli/builders/manifest/ManifestV3.js +12 -5
  10. package/dist/cli/builders/manifest/ManifestV3.js.map +1 -1
  11. package/dist/cli/builders/manifest/utils/data-collection-permissions.d.ts +15 -0
  12. package/dist/cli/builders/manifest/utils/data-collection-permissions.js +26 -0
  13. package/dist/cli/builders/manifest/utils/data-collection-permissions.js.map +1 -0
  14. package/dist/cli/builders/manifest/utils/host-patterns.d.ts +1 -0
  15. package/dist/cli/builders/manifest/utils/host-patterns.js +40 -0
  16. package/dist/cli/builders/manifest/utils/host-patterns.js.map +1 -0
  17. package/dist/cli/builders/manifest/utils/index.d.ts +4 -0
  18. package/dist/cli/builders/manifest/utils/index.js +19 -0
  19. package/dist/cli/builders/manifest/utils/index.js.map +1 -0
  20. package/dist/cli/builders/manifest/utils/permissions.d.ts +14 -0
  21. package/dist/cli/builders/manifest/utils/permissions.js +34 -0
  22. package/dist/cli/builders/manifest/utils/permissions.js.map +1 -0
  23. package/dist/cli/builders/manifest/utils/web-accessible-resources.d.ts +2 -0
  24. package/dist/cli/builders/manifest/utils/web-accessible-resources.js +92 -0
  25. package/dist/cli/builders/manifest/utils/web-accessible-resources.js.map +1 -0
  26. package/dist/cli/bundler/index.d.ts +1 -0
  27. package/dist/cli/bundler/index.js +1 -0
  28. package/dist/cli/bundler/index.js.map +1 -1
  29. package/dist/cli/bundler/layers.d.ts +5 -0
  30. package/dist/cli/bundler/layers.js +12 -0
  31. package/dist/cli/bundler/layers.js.map +1 -0
  32. package/dist/cli/bundler/plugins/build-assets-map/BuildAssetsMapPlugin.d.ts +14 -0
  33. package/dist/cli/bundler/plugins/build-assets-map/BuildAssetsMapPlugin.js +524 -0
  34. package/dist/cli/bundler/plugins/build-assets-map/BuildAssetsMapPlugin.js.map +1 -0
  35. package/dist/cli/bundler/plugins/build-assets-map/index.d.ts +2 -0
  36. package/dist/cli/bundler/plugins/build-assets-map/index.js +5 -0
  37. package/dist/cli/bundler/plugins/build-assets-map/index.js.map +1 -0
  38. package/dist/cli/bundler/plugins/build-assets-map/usage.d.ts +9 -0
  39. package/dist/cli/bundler/plugins/build-assets-map/usage.js +31 -0
  40. package/dist/cli/bundler/plugins/build-assets-map/usage.js.map +1 -0
  41. package/dist/cli/bundler/plugins/chunk-loader/ChunkLoaderPlugin.d.ts +9 -0
  42. package/dist/cli/bundler/plugins/chunk-loader/ChunkLoaderPlugin.js +43 -0
  43. package/dist/cli/bundler/plugins/chunk-loader/ChunkLoaderPlugin.js.map +1 -0
  44. package/dist/cli/bundler/plugins/chunk-loader/index.d.ts +1 -0
  45. package/dist/cli/bundler/plugins/chunk-loader/index.js +5 -0
  46. package/dist/cli/bundler/plugins/chunk-loader/index.js.map +1 -0
  47. package/dist/cli/bundler/plugins/chunk-loader/templates/runtime.template.d.ts +2 -0
  48. package/dist/cli/bundler/plugins/chunk-loader/templates.d.ts +7 -0
  49. package/dist/cli/bundler/plugins/chunk-loader/templates.js +30 -0
  50. package/dist/cli/bundler/plugins/{EntrypointPlugin.d.ts → entrypoint/EntrypointPlugin.d.ts} +7 -2
  51. package/dist/cli/bundler/plugins/{EntrypointPlugin.js → entrypoint/EntrypointPlugin.js} +46 -26
  52. package/dist/cli/bundler/plugins/entrypoint/EntrypointPlugin.js.map +1 -0
  53. package/dist/cli/bundler/plugins/entrypoint/index.d.ts +1 -0
  54. package/dist/cli/bundler/plugins/entrypoint/index.js +7 -0
  55. package/dist/cli/bundler/plugins/entrypoint/index.js.map +1 -0
  56. package/dist/cli/bundler/plugins/{GenerateJsonPlugin.d.ts → generate-json/GenerateJsonPlugin.d.ts} +1 -0
  57. package/dist/cli/bundler/plugins/generate-json/GenerateJsonPlugin.js +73 -0
  58. package/dist/cli/bundler/plugins/generate-json/GenerateJsonPlugin.js.map +1 -0
  59. package/dist/cli/bundler/plugins/generate-json/index.d.ts +1 -0
  60. package/dist/cli/bundler/plugins/generate-json/index.js +5 -0
  61. package/dist/cli/bundler/plugins/generate-json/index.js.map +1 -0
  62. package/dist/cli/bundler/plugins/generate-module/GenerateModulePlugin.d.ts +23 -0
  63. package/dist/cli/bundler/plugins/generate-module/GenerateModulePlugin.js +88 -0
  64. package/dist/cli/bundler/plugins/generate-module/GenerateModulePlugin.js.map +1 -0
  65. package/dist/cli/bundler/plugins/generate-module/index.d.ts +1 -0
  66. package/dist/cli/bundler/plugins/generate-module/index.js +7 -0
  67. package/dist/cli/bundler/plugins/generate-module/index.js.map +1 -0
  68. package/dist/cli/bundler/plugins/index.d.ts +11 -5
  69. package/dist/cli/bundler/plugins/index.js +28 -10
  70. package/dist/cli/bundler/plugins/index.js.map +1 -1
  71. package/dist/cli/bundler/plugins/isolated-styles/IsolatedStylesPlugin.d.ts +21 -0
  72. package/dist/cli/bundler/plugins/isolated-styles/IsolatedStylesPlugin.js +174 -0
  73. package/dist/cli/bundler/plugins/isolated-styles/IsolatedStylesPlugin.js.map +1 -0
  74. package/dist/cli/bundler/plugins/isolated-styles/chunks.d.ts +3 -0
  75. package/dist/cli/bundler/plugins/isolated-styles/chunks.js +32 -0
  76. package/dist/cli/bundler/plugins/isolated-styles/chunks.js.map +1 -0
  77. package/dist/cli/bundler/plugins/isolated-styles/index.d.ts +1 -0
  78. package/dist/cli/bundler/plugins/isolated-styles/index.js +5 -0
  79. package/dist/cli/bundler/plugins/isolated-styles/index.js.map +1 -0
  80. package/dist/cli/bundler/plugins/isolated-styles/templates/css-loader.template.d.ts +1 -0
  81. package/dist/cli/bundler/plugins/isolated-styles/templates/runtime.template.d.ts +7 -0
  82. package/dist/cli/bundler/plugins/isolated-styles/templates.d.ts +18 -0
  83. package/dist/cli/bundler/plugins/isolated-styles/templates.js +174 -0
  84. package/dist/cli/bundler/plugins/manifest/ManifestPlugin.d.ts +10 -0
  85. package/dist/cli/bundler/plugins/manifest/ManifestPlugin.js +54 -0
  86. package/dist/cli/bundler/plugins/manifest/ManifestPlugin.js.map +1 -0
  87. package/dist/cli/bundler/plugins/manifest/index.d.ts +1 -0
  88. package/dist/cli/bundler/plugins/manifest/index.js +6 -0
  89. package/dist/cli/bundler/plugins/manifest/index.js.map +1 -0
  90. package/dist/cli/bundler/plugins/replace/ReplacePlugin.js.map +1 -0
  91. package/dist/cli/bundler/plugins/replace/index.d.ts +1 -0
  92. package/dist/cli/bundler/plugins/replace/index.js +5 -0
  93. package/dist/cli/bundler/plugins/replace/index.js.map +1 -0
  94. package/dist/cli/bundler/plugins/resource-access/ResourceAccessPlugin.d.ts +19 -0
  95. package/dist/cli/bundler/plugins/resource-access/ResourceAccessPlugin.js +20 -0
  96. package/dist/cli/bundler/plugins/resource-access/ResourceAccessPlugin.js.map +1 -0
  97. package/dist/cli/bundler/plugins/resource-access/index.d.ts +1 -0
  98. package/dist/cli/bundler/plugins/resource-access/index.js +5 -0
  99. package/dist/cli/bundler/plugins/resource-access/index.js.map +1 -0
  100. package/dist/cli/bundler/plugins/resource-access/utils.d.ts +8 -0
  101. package/dist/cli/bundler/plugins/resource-access/utils.js +42 -0
  102. package/dist/cli/bundler/plugins/resource-access/utils.js.map +1 -0
  103. package/dist/cli/bundler/plugins/types.d.ts +8 -0
  104. package/dist/cli/bundler/plugins/types.js +1 -0
  105. package/dist/cli/bundler/plugins/types.js.map +1 -0
  106. package/dist/cli/bundler/plugins/utils/compilation-assets.d.ts +4 -0
  107. package/dist/cli/bundler/plugins/utils/compilation-assets.js +12 -0
  108. package/dist/cli/bundler/plugins/utils/compilation-assets.js.map +1 -0
  109. package/dist/cli/bundler/plugins/utils/index.d.ts +5 -0
  110. package/dist/cli/bundler/plugins/utils/index.js +14 -0
  111. package/dist/cli/bundler/plugins/utils/index.js.map +1 -0
  112. package/dist/cli/bundler/plugins/utils/manifest-hooks.d.ts +13 -0
  113. package/dist/cli/bundler/plugins/utils/manifest-hooks.js +17 -0
  114. package/dist/cli/bundler/plugins/utils/manifest-hooks.js.map +1 -0
  115. package/dist/cli/bundler/plugins/utils/runtime-module.d.ts +3 -0
  116. package/dist/cli/bundler/plugins/utils/runtime-module.js +11 -0
  117. package/dist/cli/bundler/plugins/utils/runtime-module.js.map +1 -0
  118. package/dist/cli/bundler/plugins/utils/runtime-template.d.ts +1 -0
  119. package/dist/cli/bundler/plugins/utils/runtime-template.js +18 -0
  120. package/dist/cli/bundler/plugins/utils/runtime-template.js.map +1 -0
  121. package/dist/cli/bundler/plugins/utils/watch-compilation.d.ts +3 -0
  122. package/dist/cli/bundler/plugins/utils/watch-compilation.js +18 -0
  123. package/dist/cli/bundler/plugins/utils/watch-compilation.js.map +1 -0
  124. package/dist/cli/bundler/plugins/watch/WatchPlugin.js +16 -0
  125. package/dist/cli/bundler/plugins/watch/WatchPlugin.js.map +1 -0
  126. package/dist/cli/bundler/plugins/watch/index.d.ts +1 -0
  127. package/dist/cli/bundler/plugins/watch/index.js +5 -0
  128. package/dist/cli/bundler/plugins/watch/index.js.map +1 -0
  129. package/dist/cli/bundler/utils/app-filename.d.ts +2 -0
  130. package/dist/cli/bundler/utils/app-filename.js +19 -0
  131. package/dist/cli/bundler/utils/app-filename.js.map +1 -0
  132. package/dist/cli/bundler/utils/assets.d.ts +3 -0
  133. package/dist/cli/bundler/utils/assets.js +162 -0
  134. package/dist/cli/bundler/utils/assets.js.map +1 -0
  135. package/dist/cli/bundler/utils/chunk-filename.d.ts +6 -0
  136. package/dist/cli/bundler/utils/chunk-filename.js +93 -0
  137. package/dist/cli/bundler/utils/chunk-filename.js.map +1 -0
  138. package/dist/cli/bundler/utils/index.d.ts +2 -1
  139. package/dist/cli/bundler/utils/index.js +2 -1
  140. package/dist/cli/bundler/utils/index.js.map +1 -1
  141. package/dist/cli/entrypoint/file/ExpressionFile.d.ts +4 -1
  142. package/dist/cli/entrypoint/file/ExpressionFile.js +11 -0
  143. package/dist/cli/entrypoint/file/ExpressionFile.js.map +1 -1
  144. package/dist/cli/entrypoint/file/OptionFile.d.ts +4 -2
  145. package/dist/cli/entrypoint/file/OptionFile.js +35 -31
  146. package/dist/cli/entrypoint/file/OptionFile.js.map +1 -1
  147. package/dist/cli/entrypoint/file/SourceFile.d.ts +18 -7
  148. package/dist/cli/entrypoint/file/SourceFile.js +260 -156
  149. package/dist/cli/entrypoint/file/SourceFile.js.map +1 -1
  150. package/dist/cli/entrypoint/file/index.d.ts +2 -0
  151. package/dist/cli/entrypoint/file/index.js +2 -0
  152. package/dist/cli/entrypoint/file/index.js.map +1 -1
  153. package/dist/cli/entrypoint/file/injectors/core.js +22 -1
  154. package/dist/cli/entrypoint/file/injectors/core.js.map +1 -1
  155. package/dist/cli/entrypoint/file/parsers/ExportParser.d.ts +14 -0
  156. package/dist/cli/entrypoint/file/parsers/ExportParser.js +71 -0
  157. package/dist/cli/entrypoint/file/parsers/ExportParser.js.map +1 -0
  158. package/dist/cli/entrypoint/file/parsers/NodeFinder.d.ts +2 -0
  159. package/dist/cli/entrypoint/file/parsers/NodeFinder.js +9 -0
  160. package/dist/cli/entrypoint/file/parsers/NodeFinder.js.map +1 -1
  161. package/dist/cli/entrypoint/file/parsers/ObjectParser.js +5 -1
  162. package/dist/cli/entrypoint/file/parsers/ObjectParser.js.map +1 -1
  163. package/dist/cli/entrypoint/file/parsers/index.d.ts +1 -0
  164. package/dist/cli/entrypoint/file/parsers/index.js +2 -0
  165. package/dist/cli/entrypoint/file/parsers/index.js.map +1 -1
  166. package/dist/cli/entrypoint/file/parsers/types.d.ts +16 -0
  167. package/dist/cli/entrypoint/file/parsers/types.js +13 -0
  168. package/dist/cli/entrypoint/file/parsers/types.js.map +1 -1
  169. package/dist/cli/entrypoint/file/resolvers/ImportResolver.d.ts +1 -0
  170. package/dist/cli/entrypoint/file/resolvers/ImportResolver.js +3 -0
  171. package/dist/cli/entrypoint/file/resolvers/ImportResolver.js.map +1 -1
  172. package/dist/cli/entrypoint/file/types.d.ts +26 -1
  173. package/dist/cli/entrypoint/finder/AbstractEntrypointFinder.js.map +1 -1
  174. package/dist/cli/entrypoint/finder/ContentFinder.d.ts +1 -1
  175. package/dist/cli/entrypoint/parser/AbstractParser.d.ts +3 -2
  176. package/dist/cli/entrypoint/parser/AbstractParser.js +6 -3
  177. package/dist/cli/entrypoint/parser/AbstractParser.js.map +1 -1
  178. package/dist/cli/entrypoint/parser/CommandParser.js +1 -1
  179. package/dist/cli/entrypoint/parser/CommandParser.js.map +1 -1
  180. package/dist/cli/entrypoint/parser/ContentParser.d.ts +7 -3
  181. package/dist/cli/entrypoint/parser/ContentParser.js +42 -6
  182. package/dist/cli/entrypoint/parser/ContentParser.js.map +1 -1
  183. package/dist/cli/entrypoint/parser/RelayParser.d.ts +21 -2
  184. package/dist/cli/entrypoint/parser/RelayParser.js +5 -1
  185. package/dist/cli/entrypoint/parser/RelayParser.js.map +1 -1
  186. package/dist/cli/entrypoint/parser/utils/content/default-render.d.ts +3 -0
  187. package/dist/cli/entrypoint/parser/utils/content/default-render.js +21 -0
  188. package/dist/cli/entrypoint/parser/utils/content/default-render.js.map +1 -0
  189. package/dist/cli/plugins/asset.js +9 -4
  190. package/dist/cli/plugins/asset.js.map +1 -1
  191. package/dist/cli/plugins/background/index.js +1 -1
  192. package/dist/cli/plugins/background/index.js.map +1 -1
  193. package/dist/cli/plugins/content/Content.d.ts +2 -2
  194. package/dist/cli/plugins/content/Content.js +3 -2
  195. package/dist/cli/plugins/content/Content.js.map +1 -1
  196. package/dist/cli/plugins/content/ContentDriver.d.ts +1 -1
  197. package/dist/cli/plugins/content/ContentManager.d.ts +8 -5
  198. package/dist/cli/plugins/content/ContentManager.js +79 -28
  199. package/dist/cli/plugins/content/ContentManager.js.map +1 -1
  200. package/dist/cli/plugins/content/ContentName.d.ts +2 -2
  201. package/dist/cli/plugins/content/ContentName.js +8 -7
  202. package/dist/cli/plugins/content/ContentName.js.map +1 -1
  203. package/dist/cli/plugins/content/Relay.d.ts +2 -2
  204. package/dist/cli/plugins/content/Relay.js +3 -2
  205. package/dist/cli/plugins/content/Relay.js.map +1 -1
  206. package/dist/cli/plugins/content/RelayDriver.d.ts +1 -1
  207. package/dist/cli/plugins/content/RelayDriver.js +1 -1
  208. package/dist/cli/plugins/content/bundler.d.ts +7 -0
  209. package/dist/cli/plugins/content/bundler.js +47 -0
  210. package/dist/cli/plugins/content/bundler.js.map +1 -0
  211. package/dist/cli/plugins/content/index.js +121 -62
  212. package/dist/cli/plugins/content/index.js.map +1 -1
  213. package/dist/cli/plugins/content/relay-module.d.ts +3 -0
  214. package/dist/cli/plugins/content/relay-module.js +11 -0
  215. package/dist/cli/plugins/content/relay-module.js.map +1 -0
  216. package/dist/cli/plugins/content/types.d.ts +2 -2
  217. package/dist/cli/plugins/content/utils.d.ts +3 -1
  218. package/dist/cli/plugins/content/utils.js +8 -1
  219. package/dist/cli/plugins/content/utils.js.map +1 -1
  220. package/dist/cli/plugins/icon/declaration/IconDeclaration.d.ts +1 -1
  221. package/dist/cli/plugins/icon/declaration/IconDeclaration.js +6 -6
  222. package/dist/cli/plugins/icon/declaration/IconDeclaration.js.map +1 -1
  223. package/dist/cli/plugins/icon/declaration/icon.d.ts +3 -5
  224. package/dist/cli/plugins/icon/icon-module.d.ts +2 -0
  225. package/dist/cli/plugins/icon/icon-module.js +11 -0
  226. package/dist/cli/plugins/icon/icon-module.js.map +1 -0
  227. package/dist/cli/plugins/icon/index.js +5 -3
  228. package/dist/cli/plugins/icon/index.js.map +1 -1
  229. package/dist/cli/plugins/index.d.ts +1 -1
  230. package/dist/cli/plugins/index.js +1 -1
  231. package/dist/cli/plugins/locale/Locale.d.ts +9 -2
  232. package/dist/cli/plugins/locale/Locale.js +37 -5
  233. package/dist/cli/plugins/locale/Locale.js.map +1 -1
  234. package/dist/cli/plugins/locale/declaration/locale.d.ts +1 -1
  235. package/dist/cli/plugins/locale/index.js +57 -22
  236. package/dist/cli/plugins/locale/index.js.map +1 -1
  237. package/dist/cli/plugins/locale/locale-module.d.ts +4 -0
  238. package/dist/cli/plugins/locale/locale-module.js +16 -0
  239. package/dist/cli/plugins/locale/locale-module.js.map +1 -0
  240. package/dist/cli/plugins/offscreen/Offscreen.d.ts +2 -3
  241. package/dist/cli/plugins/offscreen/Offscreen.js.map +1 -1
  242. package/dist/cli/plugins/offscreen/index.js +5 -4
  243. package/dist/cli/plugins/offscreen/index.js.map +1 -1
  244. package/dist/cli/plugins/offscreen/offscreen-module.d.ts +3 -0
  245. package/dist/cli/plugins/offscreen/offscreen-module.js +11 -0
  246. package/dist/cli/plugins/offscreen/offscreen-module.js.map +1 -0
  247. package/dist/cli/plugins/output/index.d.ts +2 -0
  248. package/dist/cli/plugins/output/index.js +60 -0
  249. package/dist/cli/plugins/output/index.js.map +1 -0
  250. package/dist/cli/plugins/output/runtime.d.ts +26 -0
  251. package/dist/cli/plugins/output/runtime.js +19 -0
  252. package/dist/cli/plugins/output/runtime.js.map +1 -0
  253. package/dist/cli/plugins/page/declaration/PageDeclaration.js +4 -4
  254. package/dist/cli/plugins/page/declaration/PageDeclaration.js.map +1 -1
  255. package/dist/cli/plugins/page/declaration/page.d.ts +3 -3
  256. package/dist/cli/plugins/page/index.js +14 -10
  257. package/dist/cli/plugins/page/index.js.map +1 -1
  258. package/dist/cli/plugins/page/page-module.d.ts +2 -0
  259. package/dist/cli/plugins/page/page-module.js +11 -0
  260. package/dist/cli/plugins/page/page-module.js.map +1 -0
  261. package/dist/cli/plugins/popup/Popup.d.ts +1 -1
  262. package/dist/cli/plugins/popup/Popup.js +2 -2
  263. package/dist/cli/plugins/popup/Popup.js.map +1 -1
  264. package/dist/cli/plugins/popup/declaration/PopupDeclaration.d.ts +1 -1
  265. package/dist/cli/plugins/popup/declaration/PopupDeclaration.js +6 -6
  266. package/dist/cli/plugins/popup/declaration/PopupDeclaration.js.map +1 -1
  267. package/dist/cli/plugins/popup/declaration/popup.d.ts +3 -3
  268. package/dist/cli/plugins/popup/index.js +6 -5
  269. package/dist/cli/plugins/popup/index.js.map +1 -1
  270. package/dist/cli/plugins/popup/popup-module.d.ts +3 -0
  271. package/dist/cli/plugins/popup/popup-module.js +11 -0
  272. package/dist/cli/plugins/popup/popup-module.js.map +1 -0
  273. package/dist/cli/plugins/sandbox/Sandbox.d.ts +1 -2
  274. package/dist/cli/plugins/sandbox/Sandbox.js.map +1 -1
  275. package/dist/cli/plugins/sandbox/index.js +5 -4
  276. package/dist/cli/plugins/sandbox/index.js.map +1 -1
  277. package/dist/cli/plugins/sandbox/sandbox-module.d.ts +3 -0
  278. package/dist/cli/plugins/sandbox/sandbox-module.js +11 -0
  279. package/dist/cli/plugins/sandbox/sandbox-module.js.map +1 -0
  280. package/dist/cli/plugins/sidebar/Sidebar.d.ts +1 -1
  281. package/dist/cli/plugins/sidebar/Sidebar.js +2 -2
  282. package/dist/cli/plugins/sidebar/Sidebar.js.map +1 -1
  283. package/dist/cli/plugins/sidebar/declaration/SidebarDeclaration.d.ts +1 -1
  284. package/dist/cli/plugins/sidebar/declaration/SidebarDeclaration.js +6 -6
  285. package/dist/cli/plugins/sidebar/declaration/SidebarDeclaration.js.map +1 -1
  286. package/dist/cli/plugins/sidebar/declaration/sidebar.d.ts +3 -3
  287. package/dist/cli/plugins/sidebar/index.js +6 -5
  288. package/dist/cli/plugins/sidebar/index.js.map +1 -1
  289. package/dist/cli/plugins/sidebar/sidebar-module.d.ts +3 -0
  290. package/dist/cli/plugins/sidebar/sidebar-module.js +11 -0
  291. package/dist/cli/plugins/sidebar/sidebar-module.js.map +1 -0
  292. package/dist/cli/plugins/style/index.d.ts +2 -1
  293. package/dist/cli/plugins/style/index.js +52 -25
  294. package/dist/cli/plugins/style/index.js.map +1 -1
  295. package/dist/cli/plugins/style/types.d.ts +5 -0
  296. package/dist/cli/plugins/style/types.js +1 -0
  297. package/dist/cli/plugins/style/types.js.map +1 -0
  298. package/dist/cli/raw.d.ts +4 -0
  299. package/dist/cli/resolvers/bundler.js +9 -7
  300. package/dist/cli/resolvers/bundler.js.map +1 -1
  301. package/dist/cli/resolvers/config.js +2 -1
  302. package/dist/cli/resolvers/config.js.map +1 -1
  303. package/dist/cli/virtual/index.d.ts +2 -2
  304. package/dist/cli/virtual/index.js +11 -8
  305. package/dist/cli/virtual/virtual.d.ts +14 -11
  306. package/dist/content/index.d.ts +3 -0
  307. package/dist/content/index.js +8 -0
  308. package/dist/content/index.js.map +1 -0
  309. package/dist/entry/content/adapters/react/Builder.d.ts +5 -6
  310. package/dist/entry/content/adapters/react/Builder.js +8 -21
  311. package/dist/entry/content/adapters/react/Builder.js.map +1 -1
  312. package/dist/entry/content/adapters/react/Node.d.ts +6 -12
  313. package/dist/entry/content/adapters/react/Node.js +9 -25
  314. package/dist/entry/content/adapters/react/Node.js.map +1 -1
  315. package/dist/entry/content/adapters/react/index.d.ts +2 -1
  316. package/dist/entry/content/adapters/react/index.js +3 -1
  317. package/dist/entry/content/adapters/react/index.js.map +1 -1
  318. package/dist/entry/content/adapters/react/resolvers/definition.d.ts +2 -0
  319. package/dist/entry/content/adapters/react/resolvers/definition.js +12 -0
  320. package/dist/entry/content/adapters/react/resolvers/definition.js.map +1 -0
  321. package/dist/entry/content/adapters/react/resolvers/render.d.ts +2 -2
  322. package/dist/entry/content/adapters/react/resolvers/render.js +4 -6
  323. package/dist/entry/content/adapters/react/resolvers/render.js.map +1 -1
  324. package/dist/entry/content/adapters/vanilla/Builder.d.ts +5 -5
  325. package/dist/entry/content/adapters/vanilla/Builder.js +9 -15
  326. package/dist/entry/content/adapters/vanilla/Builder.js.map +1 -1
  327. package/dist/entry/content/adapters/vanilla/Node.d.ts +5 -10
  328. package/dist/entry/content/adapters/vanilla/Node.js +11 -34
  329. package/dist/entry/content/adapters/vanilla/Node.js.map +1 -1
  330. package/dist/entry/content/adapters/vanilla/index.d.ts +2 -1
  331. package/dist/entry/content/adapters/vanilla/index.js +3 -1
  332. package/dist/entry/content/adapters/vanilla/index.js.map +1 -1
  333. package/dist/entry/content/adapters/vanilla/resolvers/definition.d.ts +2 -0
  334. package/dist/entry/content/adapters/vanilla/resolvers/definition.js +9 -0
  335. package/dist/entry/content/adapters/vanilla/resolvers/definition.js.map +1 -0
  336. package/dist/entry/content/adapters/vanilla/resolvers/render.d.ts +3 -0
  337. package/dist/entry/content/adapters/vanilla/resolvers/render.js +15 -0
  338. package/dist/entry/content/adapters/vanilla/resolvers/render.js.map +1 -0
  339. package/dist/entry/content/index.d.ts +5 -1
  340. package/dist/entry/content/index.js +8 -1
  341. package/dist/entry/content/index.js.map +1 -1
  342. package/dist/entry/content/lifecycle/Builder.d.ts +26 -0
  343. package/dist/entry/content/lifecycle/Builder.js +212 -0
  344. package/dist/entry/content/lifecycle/Builder.js.map +1 -0
  345. package/dist/entry/content/lifecycle/IsolationSetup.d.ts +16 -0
  346. package/dist/entry/content/lifecycle/IsolationSetup.js +37 -0
  347. package/dist/entry/content/lifecycle/IsolationSetup.js.map +1 -0
  348. package/dist/entry/content/lifecycle/MountBuilder.d.ts +8 -0
  349. package/dist/entry/content/lifecycle/MountBuilder.js +57 -0
  350. package/dist/entry/content/lifecycle/MountBuilder.js.map +1 -0
  351. package/dist/entry/content/{core → lifecycle/context}/Context.d.ts +5 -2
  352. package/dist/entry/content/lifecycle/context/Context.js +73 -0
  353. package/dist/entry/content/lifecycle/context/Context.js.map +1 -0
  354. package/dist/entry/content/{core → lifecycle/context}/EventEmitter.d.ts +2 -2
  355. package/dist/entry/content/{core → lifecycle/context}/EventEmitter.js +3 -3
  356. package/dist/entry/content/lifecycle/context/EventEmitter.js.map +1 -0
  357. package/dist/entry/content/lifecycle/context/ManagedContext.d.ts +5 -0
  358. package/dist/entry/content/{core → lifecycle/context}/ManagedContext.js +2 -2
  359. package/dist/entry/content/lifecycle/context/ManagedContext.js.map +1 -0
  360. package/dist/entry/content/lifecycle/context/index.d.ts +3 -0
  361. package/dist/entry/content/lifecycle/context/index.js +9 -0
  362. package/dist/entry/content/lifecycle/context/index.js.map +1 -0
  363. package/dist/entry/content/{core → lifecycle/markers}/AbstractMarker.d.ts +2 -2
  364. package/dist/entry/content/{core → lifecycle/markers}/AbstractMarker.js +3 -3
  365. package/dist/entry/content/lifecycle/markers/AbstractMarker.js.map +1 -0
  366. package/dist/entry/content/{core → lifecycle/markers}/AttributeMarker.d.ts +2 -2
  367. package/dist/entry/content/{core → lifecycle/markers}/AttributeMarker.js +2 -2
  368. package/dist/entry/content/lifecycle/markers/AttributeMarker.js.map +1 -0
  369. package/dist/entry/content/{core → lifecycle/markers}/WeakMarker.d.ts +2 -2
  370. package/dist/entry/content/{core → lifecycle/markers}/WeakMarker.js +2 -2
  371. package/dist/entry/content/lifecycle/markers/WeakMarker.js.map +1 -0
  372. package/dist/entry/content/lifecycle/markers/index.d.ts +3 -0
  373. package/dist/entry/content/lifecycle/markers/index.js +9 -0
  374. package/dist/entry/content/lifecycle/markers/index.js.map +1 -0
  375. package/dist/entry/content/{core → lifecycle/nodes}/EventNode.d.ts +5 -2
  376. package/dist/entry/content/{core → lifecycle/nodes}/EventNode.js +14 -2
  377. package/dist/entry/content/lifecycle/nodes/EventNode.js.map +1 -0
  378. package/dist/entry/content/lifecycle/nodes/FrameNode.d.ts +29 -0
  379. package/dist/entry/content/lifecycle/nodes/FrameNode.js +187 -0
  380. package/dist/entry/content/lifecycle/nodes/FrameNode.js.map +1 -0
  381. package/dist/entry/content/{core → lifecycle/nodes}/MarkerNode.d.ts +4 -2
  382. package/dist/entry/content/{core → lifecycle/nodes}/MarkerNode.js +8 -2
  383. package/dist/entry/content/lifecycle/nodes/MarkerNode.js.map +1 -0
  384. package/dist/entry/content/{core → lifecycle/nodes}/MountNode.d.ts +4 -2
  385. package/dist/entry/content/{core → lifecycle/nodes}/MountNode.js +8 -2
  386. package/dist/entry/content/lifecycle/nodes/MountNode.js.map +1 -0
  387. package/dist/entry/content/{core → lifecycle/nodes}/Node.d.ts +3 -2
  388. package/dist/entry/content/{core → lifecycle/nodes}/Node.js +5 -2
  389. package/dist/entry/content/lifecycle/nodes/Node.js.map +1 -0
  390. package/dist/entry/content/lifecycle/nodes/RenderNode.d.ts +19 -0
  391. package/dist/entry/content/lifecycle/nodes/RenderNode.js +75 -0
  392. package/dist/entry/content/lifecycle/nodes/RenderNode.js.map +1 -0
  393. package/dist/entry/content/lifecycle/nodes/ShadowNode.d.ts +21 -0
  394. package/dist/entry/content/lifecycle/nodes/ShadowNode.js +121 -0
  395. package/dist/entry/content/lifecycle/nodes/ShadowNode.js.map +1 -0
  396. package/dist/entry/content/lifecycle/nodes/index.d.ts +7 -0
  397. package/dist/entry/content/lifecycle/nodes/index.js +17 -0
  398. package/dist/entry/content/lifecycle/nodes/index.js.map +1 -0
  399. package/dist/entry/content/lifecycle/nodes/isolated-styles.d.ts +2 -0
  400. package/dist/entry/content/lifecycle/nodes/isolated-styles.js +14 -0
  401. package/dist/entry/content/lifecycle/nodes/isolated-styles.js.map +1 -0
  402. package/dist/entry/content/resolvers/anchor.d.ts +2 -0
  403. package/dist/entry/content/{core/resolvers → resolvers}/anchor.js +2 -2
  404. package/dist/entry/content/resolvers/anchor.js.map +1 -0
  405. package/dist/entry/content/resolvers/container.d.ts +2 -0
  406. package/dist/entry/content/{core/resolvers → resolvers}/container.js +2 -2
  407. package/dist/entry/content/resolvers/container.js.map +1 -0
  408. package/dist/entry/content/resolvers/definition.d.ts +5 -0
  409. package/dist/entry/content/resolvers/definition.js +24 -0
  410. package/dist/entry/content/resolvers/definition.js.map +1 -0
  411. package/dist/entry/content/{core/resolvers → resolvers}/index.d.ts +1 -1
  412. package/dist/entry/content/{core/resolvers → resolvers}/index.js +1 -1
  413. package/dist/entry/content/resolvers/index.js.map +1 -0
  414. package/dist/entry/content/resolvers/mount.d.ts +2 -0
  415. package/dist/entry/content/{core/resolvers → resolvers}/mount.js +3 -3
  416. package/dist/entry/content/resolvers/mount.js.map +1 -0
  417. package/dist/entry/content/resolvers/target.d.ts +3 -0
  418. package/dist/entry/content/resolvers/target.js +34 -0
  419. package/dist/entry/content/resolvers/target.js.map +1 -0
  420. package/dist/entry/content/resolvers/watch.d.ts +6 -0
  421. package/dist/entry/content/{core/resolvers → resolvers}/watch.js +15 -11
  422. package/dist/entry/content/resolvers/watch.js.map +1 -0
  423. package/dist/entry/relay/Builder.d.ts +8 -8
  424. package/dist/entry/relay/Builder.js +32 -19
  425. package/dist/entry/relay/Builder.js.map +1 -1
  426. package/dist/entry/relay/TransportBuilder.d.ts +3 -2
  427. package/dist/entry/relay/TransportBuilder.js +3 -3
  428. package/dist/entry/relay/TransportBuilder.js.map +1 -1
  429. package/dist/entry/relay/index.d.ts +5 -2
  430. package/dist/entry/relay/index.js +8 -2
  431. package/dist/entry/relay/index.js.map +1 -1
  432. package/dist/entry/relay/resolvers/definition.d.ts +4 -0
  433. package/dist/entry/relay/resolvers/definition.js +16 -0
  434. package/dist/entry/relay/resolvers/definition.js.map +1 -0
  435. package/dist/locale/adapters/react/ReactLocale.d.ts +18 -0
  436. package/dist/locale/adapters/react/ReactLocale.js +41 -0
  437. package/dist/locale/adapters/react/ReactLocale.js.map +1 -0
  438. package/dist/locale/adapters/react/hooks/use-locale-attributes.d.ts +7 -0
  439. package/dist/locale/adapters/react/hooks/use-locale-attributes.js +30 -0
  440. package/dist/locale/adapters/react/hooks/use-locale-attributes.js.map +1 -0
  441. package/dist/locale/adapters/react/hooks/use-locale.d.ts +3 -0
  442. package/dist/locale/adapters/react/hooks/use-locale.js +17 -0
  443. package/dist/locale/adapters/react/hooks/use-locale.js.map +1 -0
  444. package/dist/locale/adapters/react/hooks/use-native-locale.d.ts +3 -0
  445. package/dist/locale/adapters/react/hooks/use-native-locale.js +10 -0
  446. package/dist/locale/adapters/react/hooks/use-native-locale.js.map +1 -0
  447. package/dist/locale/adapters/react/index.d.ts +4 -2
  448. package/dist/locale/adapters/react/index.js +6 -4
  449. package/dist/locale/adapters/react/index.js.map +1 -1
  450. package/dist/locale/adapters/react/types.d.ts +22 -0
  451. package/dist/locale/adapters/react/types.js +1 -0
  452. package/dist/locale/adapters/react/types.js.map +1 -0
  453. package/dist/locale/helpers.d.ts +4 -5
  454. package/dist/locale/helpers.js +1 -1
  455. package/dist/locale/helpers.js.map +1 -1
  456. package/dist/locale/index.d.ts +2 -1
  457. package/dist/locale/index.js +1 -0
  458. package/dist/locale/index.js.map +1 -1
  459. package/dist/locale/providers/AbstractLocale.d.ts +4 -4
  460. package/dist/locale/providers/AbstractLocale.js +13 -94
  461. package/dist/locale/providers/AbstractLocale.js.map +1 -1
  462. package/dist/locale/providers/CustomLocale.d.ts +3 -3
  463. package/dist/locale/providers/CustomLocale.js +6 -5
  464. package/dist/locale/providers/CustomLocale.js.map +1 -1
  465. package/dist/locale/providers/DynamicLocale.d.ts +18 -11
  466. package/dist/locale/providers/DynamicLocale.js +60 -47
  467. package/dist/locale/providers/DynamicLocale.js.map +1 -1
  468. package/dist/locale/providers/NativeLocale.d.ts +4 -7
  469. package/dist/locale/providers/NativeLocale.js +5 -14
  470. package/dist/locale/providers/NativeLocale.js.map +1 -1
  471. package/dist/locale/providers/ObservableLocale.d.ts +35 -0
  472. package/dist/locale/providers/ObservableLocale.js +179 -0
  473. package/dist/locale/providers/ObservableLocale.js.map +1 -0
  474. package/dist/locale/providers/index.d.ts +2 -1
  475. package/dist/locale/providers/index.js +3 -1
  476. package/dist/locale/providers/index.js.map +1 -1
  477. package/dist/locale/storage/LocaleStorage.d.ts +11 -0
  478. package/dist/locale/storage/LocaleStorage.js +40 -0
  479. package/dist/locale/storage/LocaleStorage.js.map +1 -0
  480. package/dist/locale/storage/index.d.ts +1 -0
  481. package/dist/locale/storage/index.js +5 -0
  482. package/dist/locale/storage/index.js.map +1 -0
  483. package/dist/main/content.d.ts +4 -6
  484. package/dist/main/content.js +3 -16
  485. package/dist/main/content.js.map +1 -1
  486. package/dist/main/entrypoint.d.ts +4 -0
  487. package/dist/main/entrypoint.js +20 -0
  488. package/dist/main/entrypoint.js.map +1 -0
  489. package/dist/main/icon.d.ts +2 -3
  490. package/dist/main/icon.js +2 -1
  491. package/dist/main/icon.js.map +1 -1
  492. package/dist/main/index.d.ts +1 -0
  493. package/dist/main/index.js +1 -0
  494. package/dist/main/index.js.map +1 -1
  495. package/dist/main/offscreen.d.ts +2 -5
  496. package/dist/main/offscreen.js +5 -2
  497. package/dist/main/offscreen.js.map +1 -1
  498. package/dist/main/page.d.ts +2 -4
  499. package/dist/main/page.js +2 -1
  500. package/dist/main/page.js.map +1 -1
  501. package/dist/main/popup.d.ts +2 -5
  502. package/dist/main/popup.js +3 -3
  503. package/dist/main/popup.js.map +1 -1
  504. package/dist/main/relay.d.ts +3 -3
  505. package/dist/main/relay.js +2 -1
  506. package/dist/main/relay.js.map +1 -1
  507. package/dist/main/sandbox.d.ts +1 -4
  508. package/dist/main/sandbox.js +2 -1
  509. package/dist/main/sandbox.js.map +1 -1
  510. package/dist/main/service.d.ts +1 -2
  511. package/dist/main/service.js.map +1 -1
  512. package/dist/main/sidebar.d.ts +2 -5
  513. package/dist/main/sidebar.js +3 -3
  514. package/dist/main/sidebar.js.map +1 -1
  515. package/dist/message/index.d.ts +2 -4
  516. package/dist/message/index.js.map +1 -1
  517. package/dist/offscreen/index.d.ts +2 -6
  518. package/dist/offscreen/index.js.map +1 -1
  519. package/dist/relay/RelayPermission.js +1 -1
  520. package/dist/relay/index.d.ts +2 -5
  521. package/dist/relay/index.js.map +1 -1
  522. package/dist/sandbox/index.d.ts +1 -5
  523. package/dist/sandbox/index.js.map +1 -1
  524. package/dist/service/index.d.ts +2 -6
  525. package/dist/service/index.js.map +1 -1
  526. package/dist/shared/content/index.d.ts +1 -0
  527. package/dist/shared/content/index.js +6 -0
  528. package/dist/shared/content/index.js.map +1 -0
  529. package/dist/shared/content/isolation.d.ts +4 -0
  530. package/dist/shared/content/isolation.js +63 -0
  531. package/dist/shared/content/isolation.js.map +1 -0
  532. package/dist/shared/locale/index.d.ts +5 -0
  533. package/dist/shared/locale/index.js +21 -0
  534. package/dist/shared/locale/index.js.map +1 -0
  535. package/dist/shared/locale/keys.d.ts +5 -0
  536. package/dist/shared/locale/keys.js +33 -0
  537. package/dist/shared/locale/keys.js.map +1 -0
  538. package/dist/shared/locale/language.d.ts +4 -0
  539. package/dist/shared/locale/language.js +23 -0
  540. package/dist/shared/locale/language.js.map +1 -0
  541. package/dist/shared/locale/messages.d.ts +3 -0
  542. package/dist/shared/locale/messages.js +9 -0
  543. package/dist/shared/locale/messages.js.map +1 -0
  544. package/dist/shared/locale/plural.d.ts +2 -0
  545. package/dist/shared/locale/plural.js +81 -0
  546. package/dist/shared/locale/plural.js.map +1 -0
  547. package/dist/shared/locale/substitutions.d.ts +10 -0
  548. package/dist/shared/locale/substitutions.js +32 -0
  549. package/dist/shared/locale/substitutions.js.map +1 -0
  550. package/dist/types/background.d.ts +1 -1
  551. package/dist/types/background.js.map +1 -1
  552. package/dist/types/command.d.ts +1 -1
  553. package/dist/types/command.js.map +1 -1
  554. package/dist/types/content/adapters/index.d.ts +2 -0
  555. package/dist/types/content/adapters/index.js +1 -0
  556. package/dist/types/content/adapters/index.js.map +1 -0
  557. package/dist/types/content/adapters/react.d.ts +4 -0
  558. package/dist/types/content/adapters/react.js +1 -0
  559. package/dist/types/content/adapters/react.js.map +1 -0
  560. package/dist/types/content/adapters/vanilla.d.ts +1 -0
  561. package/dist/types/content/adapters/vanilla.js +1 -0
  562. package/dist/types/content/adapters/vanilla.js.map +1 -0
  563. package/dist/types/content/boundary.d.ts +17 -0
  564. package/dist/types/content/boundary.js +1 -0
  565. package/dist/types/content/boundary.js.map +1 -0
  566. package/dist/types/{content.d.ts → content/common.d.ts} +119 -59
  567. package/dist/types/{content.js → content/common.js} +23 -2
  568. package/dist/types/content/common.js.map +1 -0
  569. package/dist/types/content/definition.d.ts +61 -0
  570. package/dist/types/content/definition.js +1 -0
  571. package/dist/types/content/definition.js.map +1 -0
  572. package/dist/types/content/index.d.ts +7 -0
  573. package/dist/types/content/index.js +2 -0
  574. package/dist/types/content/index.js.map +1 -0
  575. package/dist/types/content/prepare.d.ts +9 -0
  576. package/dist/types/content/prepare.js +1 -0
  577. package/dist/types/content/prepare.js.map +1 -0
  578. package/dist/types/content/render.d.ts +6 -0
  579. package/dist/types/content/render.js +1 -0
  580. package/dist/types/content/render.js.map +1 -0
  581. package/dist/types/content/target.d.ts +13 -0
  582. package/dist/types/content/target.js +1 -0
  583. package/dist/types/content/target.js.map +1 -0
  584. package/dist/types/entrypoint.d.ts +20 -0
  585. package/dist/types/entrypoint.js +4 -0
  586. package/dist/types/entrypoint.js.map +1 -1
  587. package/dist/types/icon.d.ts +8 -0
  588. package/dist/types/icon.js.map +1 -1
  589. package/dist/types/language.d.ts +57 -0
  590. package/dist/types/language.js +62 -0
  591. package/dist/types/language.js.map +1 -0
  592. package/dist/types/locale.d.ts +34 -63
  593. package/dist/types/locale.js +62 -119
  594. package/dist/types/locale.js.map +1 -1
  595. package/dist/types/manifest.d.ts +11 -8
  596. package/dist/types/manifest.js.map +1 -1
  597. package/dist/types/message.d.ts +7 -0
  598. package/dist/types/message.js.map +1 -1
  599. package/dist/types/offscreen.d.ts +14 -1
  600. package/dist/types/offscreen.js.map +1 -1
  601. package/dist/types/page.d.ts +8 -0
  602. package/dist/types/popup.d.ts +9 -0
  603. package/dist/types/relay.d.ts +15 -7
  604. package/dist/types/relay.js.map +1 -1
  605. package/dist/types/sandbox.d.ts +12 -0
  606. package/dist/types/sandbox.js.map +1 -1
  607. package/dist/types/service.d.ts +10 -1
  608. package/dist/types/service.js.map +1 -1
  609. package/dist/types/sidebar.d.ts +9 -0
  610. package/dist/types/sidebar.js.map +1 -1
  611. package/dist/types/transport.d.ts +4 -0
  612. package/dist/virtual/icon.d.ts +2 -0
  613. package/dist/virtual/icon.js +5 -0
  614. package/dist/virtual/icon.js.map +1 -0
  615. package/dist/virtual/locale.d.ts +7 -0
  616. package/dist/virtual/locale.js +13 -0
  617. package/dist/virtual/locale.js.map +1 -0
  618. package/dist/virtual/modules.d.ts +41 -0
  619. package/dist/virtual/offscreen.d.ts +3 -0
  620. package/dist/virtual/offscreen.js +5 -0
  621. package/dist/virtual/offscreen.js.map +1 -0
  622. package/dist/virtual/page.d.ts +2 -0
  623. package/dist/virtual/page.js +5 -0
  624. package/dist/virtual/page.js.map +1 -0
  625. package/dist/virtual/popup.d.ts +3 -0
  626. package/dist/virtual/popup.js +5 -0
  627. package/dist/virtual/popup.js.map +1 -0
  628. package/dist/virtual/relay.d.ts +3 -0
  629. package/dist/virtual/relay.js +5 -0
  630. package/dist/virtual/relay.js.map +1 -0
  631. package/dist/virtual/runtime.d.ts +8 -0
  632. package/dist/virtual/runtime.js +9 -0
  633. package/dist/virtual/runtime.js.map +1 -0
  634. package/dist/virtual/sandbox.d.ts +3 -0
  635. package/dist/virtual/sandbox.js +5 -0
  636. package/dist/virtual/sandbox.js.map +1 -0
  637. package/dist/virtual/sidebar.d.ts +3 -0
  638. package/dist/virtual/sidebar.js +5 -0
  639. package/dist/virtual/sidebar.js.map +1 -0
  640. package/package.json +53 -23
  641. package/scripts/clean-dist.js +7 -0
  642. package/scripts/copy-dts.js +11 -1
  643. package/scripts/merge-coverage.mjs +12 -0
  644. package/scripts/pre-commit.mjs +22 -0
  645. package/scripts/test-inventory.mjs +38 -0
  646. package/scripts/test-run.mjs +25 -0
  647. package/types/client.d.ts +15 -0
  648. package/dist/cli/builders/manifest/utils.d.ts +0 -32
  649. package/dist/cli/builders/manifest/utils.js +0 -209
  650. package/dist/cli/builders/manifest/utils.js.map +0 -1
  651. package/dist/cli/bundler/plugins/EntrypointPlugin.js.map +0 -1
  652. package/dist/cli/bundler/plugins/GenerateJsonPlugin.js +0 -40
  653. package/dist/cli/bundler/plugins/GenerateJsonPlugin.js.map +0 -1
  654. package/dist/cli/bundler/plugins/ManifestPlugin.d.ts +0 -10
  655. package/dist/cli/bundler/plugins/ManifestPlugin.js +0 -78
  656. package/dist/cli/bundler/plugins/ManifestPlugin.js.map +0 -1
  657. package/dist/cli/bundler/plugins/ReplacePlugin.js.map +0 -1
  658. package/dist/cli/bundler/plugins/WatchPlugin.js +0 -21
  659. package/dist/cli/bundler/plugins/WatchPlugin.js.map +0 -1
  660. package/dist/cli/bundler/utils/output.d.ts +0 -2
  661. package/dist/cli/bundler/utils/output.js +0 -15
  662. package/dist/cli/bundler/utils/output.js.map +0 -1
  663. package/dist/cli/entrypoint/finder/tests/fixtures/options/discovery/account.options.d.ts +0 -1
  664. package/dist/cli/entrypoint/finder/tests/fixtures/options/discovery/advanced.options/index.d.ts +0 -1
  665. package/dist/cli/plugins/output.d.ts +0 -2
  666. package/dist/cli/plugins/output.js +0 -32
  667. package/dist/cli/plugins/output.js.map +0 -1
  668. package/dist/entry/content/adapters/react/resolvers/index.d.ts +0 -1
  669. package/dist/entry/content/adapters/react/resolvers/index.js +0 -2
  670. package/dist/entry/content/adapters/react/resolvers/index.js.map +0 -1
  671. package/dist/entry/content/core/AbstractMarker.js.map +0 -1
  672. package/dist/entry/content/core/AttributeMarker.js.map +0 -1
  673. package/dist/entry/content/core/Builder.d.ts +0 -27
  674. package/dist/entry/content/core/Builder.js +0 -124
  675. package/dist/entry/content/core/Builder.js.map +0 -1
  676. package/dist/entry/content/core/Context.js +0 -43
  677. package/dist/entry/content/core/Context.js.map +0 -1
  678. package/dist/entry/content/core/EventEmitter.js.map +0 -1
  679. package/dist/entry/content/core/EventNode.js.map +0 -1
  680. package/dist/entry/content/core/ManagedContext.d.ts +0 -5
  681. package/dist/entry/content/core/ManagedContext.js.map +0 -1
  682. package/dist/entry/content/core/MarkerNode.js.map +0 -1
  683. package/dist/entry/content/core/MountBuilder.d.ts +0 -10
  684. package/dist/entry/content/core/MountBuilder.js +0 -40
  685. package/dist/entry/content/core/MountBuilder.js.map +0 -1
  686. package/dist/entry/content/core/MountNode.js.map +0 -1
  687. package/dist/entry/content/core/Node.js.map +0 -1
  688. package/dist/entry/content/core/WeakMarker.js.map +0 -1
  689. package/dist/entry/content/core/resolvers/anchor.d.ts +0 -2
  690. package/dist/entry/content/core/resolvers/anchor.js.map +0 -1
  691. package/dist/entry/content/core/resolvers/container.d.ts +0 -2
  692. package/dist/entry/content/core/resolvers/container.js.map +0 -1
  693. package/dist/entry/content/core/resolvers/definition.d.ts +0 -3
  694. package/dist/entry/content/core/resolvers/definition.js +0 -12
  695. package/dist/entry/content/core/resolvers/definition.js.map +0 -1
  696. package/dist/entry/content/core/resolvers/index.js.map +0 -1
  697. package/dist/entry/content/core/resolvers/mount.d.ts +0 -2
  698. package/dist/entry/content/core/resolvers/mount.js.map +0 -1
  699. package/dist/entry/content/core/resolvers/render.d.ts +0 -3
  700. package/dist/entry/content/core/resolvers/render.js +0 -18
  701. package/dist/entry/content/core/resolvers/render.js.map +0 -1
  702. package/dist/entry/content/core/resolvers/watch.d.ts +0 -4
  703. package/dist/entry/content/core/resolvers/watch.js.map +0 -1
  704. package/dist/locale/adapters/react/LocaleProvider.d.ts +0 -7
  705. package/dist/locale/adapters/react/LocaleProvider.js +0 -58
  706. package/dist/locale/adapters/react/LocaleProvider.js.map +0 -1
  707. package/dist/locale/adapters/react/context.d.ts +0 -14
  708. package/dist/locale/adapters/react/context.js +0 -25
  709. package/dist/locale/adapters/react/context.js.map +0 -1
  710. package/dist/locale/utils.d.ts +0 -11
  711. package/dist/locale/utils.js +0 -67
  712. package/dist/locale/utils.js.map +0 -1
  713. package/dist/types/content.js.map +0 -1
  714. /package/dist/cli/bundler/plugins/{ReplacePlugin.d.ts → replace/ReplacePlugin.d.ts} +0 -0
  715. /package/dist/cli/bundler/plugins/{ReplacePlugin.js → replace/ReplacePlugin.js} +0 -0
  716. /package/dist/cli/bundler/plugins/{WatchPlugin.d.ts → watch/WatchPlugin.d.ts} +0 -0
@@ -1,7 +1,7 @@
1
- import { convertLocaleKey } from "../utils.js";
1
+ import { convertLocaleKey } from "./../../shared/locale/index.js";
2
2
  import AbstractLocale from "./AbstractLocale.js";
3
3
  import { Language } from "./../../types/locale.js";
4
- class CustomLocale_default extends AbstractLocale {
4
+ class CustomLocale extends AbstractLocale {
5
5
  constructor(language = Language.English, data = {}) {
6
6
  super();
7
7
  this.language = language;
@@ -23,11 +23,12 @@ class CustomLocale_default extends AbstractLocale {
23
23
  keys() {
24
24
  return new Set(Object.keys(this.data));
25
25
  }
26
- languages() {
26
+ langs() {
27
27
  return /* @__PURE__ */ new Set([this.lang()]);
28
28
  }
29
29
  value(key) {
30
- const value = this.data[convertLocaleKey(key)];
30
+ const name = convertLocaleKey(key);
31
+ const value = Object.hasOwn(this.data, name) ? this.data[name] : void 0;
31
32
  if (value === void 0) {
32
33
  return void 0;
33
34
  }
@@ -35,6 +36,6 @@ class CustomLocale_default extends AbstractLocale {
35
36
  }
36
37
  }
37
38
  export {
38
- CustomLocale_default as default
39
+ CustomLocale as default
39
40
  };
40
41
  //# sourceMappingURL=CustomLocale.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/locale/providers/CustomLocale.ts"],"sourcesContent":["import {convertLocaleKey} from \"../utils\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {Language, LocaleStructure} from \"@typing/locale\";\n\nexport type CustomLocaleData = Record<string, string>;\n\nexport default class<T extends object = LocaleStructure> extends AbstractLocale<T> {\n constructor(\n protected language: Language = Language.English,\n protected data: CustomLocaleData = {}\n ) {\n super();\n }\n\n public setLang(lang: Language): this {\n this.language = lang;\n\n return this;\n }\n\n public setData(data: CustomLocaleData): this {\n this.data = data;\n\n return this;\n }\n\n public lang(): Language {\n return this.language;\n }\n\n public keys(): Set<keyof T> {\n return new Set(Object.keys(this.data)) as Set<keyof T>;\n }\n\n public languages(): Set<Language> {\n return new Set([this.lang()]);\n }\n\n protected value(key: string): string | undefined {\n const value = this.data[convertLocaleKey(key)];\n\n if (value === undefined) {\n return undefined;\n }\n\n return value;\n }\n}\n"],"mappings":"AAAA,SAAQ,wBAAuB;AAE/B,OAAO,oBAAoB;AAE3B,SAAQ,gBAAgC;AAIxC,MAAO,6BAA0D,eAAkB;AAAA,EAC/E,YACc,WAAqB,SAAS,SAC9B,OAAyB,CAAC,GACtC;AACE,UAAM;AAHI;AACA;AAAA,EAGd;AAAA,EAJc;AAAA,EACA;AAAA,EAKP,QAAQ,MAAsB;AACjC,SAAK,WAAW;AAEhB,WAAO;AAAA,EACX;AAAA,EAEO,QAAQ,MAA8B;AACzC,SAAK,OAAO;AAEZ,WAAO;AAAA,EACX;AAAA,EAEO,OAAiB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAqB;AACxB,WAAO,IAAI,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EACzC;AAAA,EAEO,YAA2B;AAC9B,WAAO,oBAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AAAA,EAChC;AAAA,EAEU,MAAM,KAAiC;AAC7C,UAAM,QAAQ,KAAK,KAAK,iBAAiB,GAAG,CAAC;AAE7C,QAAI,UAAU,QAAW;AACrB,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/locale/providers/CustomLocale.ts"],"sourcesContent":["import {convertLocaleKey} from \"@shared/locale\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {Language, LocaleStructure} from \"@typing/locale\";\n\nexport type CustomLocaleData = Readonly<Record<string, string>>;\n\nexport default class CustomLocale<T extends object = LocaleStructure> extends AbstractLocale<T> {\n constructor(\n protected language: Language = Language.English,\n protected data: CustomLocaleData = {}\n ) {\n super();\n }\n\n public setLang(lang: Language): this {\n this.language = lang;\n\n return this;\n }\n\n public setData(data: CustomLocaleData): this {\n this.data = data;\n\n return this;\n }\n\n public lang(): Language {\n return this.language;\n }\n\n public keys(): Set<keyof T> {\n return new Set(Object.keys(this.data)) as Set<keyof T>;\n }\n\n public langs(): ReadonlySet<Language> {\n return new Set([this.lang()]);\n }\n\n protected value(key: string): string | undefined {\n const name = convertLocaleKey(key);\n const value = Object.hasOwn(this.data, name) ? this.data[name] : undefined;\n\n if (value === undefined) {\n return undefined;\n }\n\n return value;\n }\n}\n"],"mappings":"AAAA,SAAQ,wBAAuB;AAE/B,OAAO,oBAAoB;AAE3B,SAAQ,gBAAgC;AAIxC,MAAO,qBAAuE,eAAkB;AAAA,EAC5F,YACc,WAAqB,SAAS,SAC9B,OAAyB,CAAC,GACtC;AACE,UAAM;AAHI;AACA;AAAA,EAGd;AAAA,EAJc;AAAA,EACA;AAAA,EAKP,QAAQ,MAAsB;AACjC,SAAK,WAAW;AAEhB,WAAO;AAAA,EACX;AAAA,EAEO,QAAQ,MAA8B;AACzC,SAAK,OAAO;AAEZ,WAAO;AAAA,EACX;AAAA,EAEO,OAAiB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAqB;AACxB,WAAO,IAAI,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EACzC;AAAA,EAEO,QAA+B;AAClC,WAAO,oBAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AAAA,EAChC;AAAA,EAEU,MAAM,KAAiC;AAC7C,UAAM,OAAO,iBAAiB,GAAG;AACjC,UAAM,QAAQ,OAAO,OAAO,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI;AAEjE,QAAI,UAAU,QAAW;AACrB,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
@@ -1,19 +1,26 @@
1
- import { type StorageProvider } from "@addon-core/storage";
2
- import NativeLocale, { LocaleNativeStructure } from "./NativeLocale.js";
3
- import CustomLocale, { CustomLocaleData } from "./CustomLocale.js";
4
- import { Language, LocaleDynamicProvider } from "../../types/locale.js";
5
- export default class<T extends object = LocaleNativeStructure> extends NativeLocale<T> implements LocaleDynamicProvider<T> {
6
- protected cache: Map<Language, CustomLocaleData>;
7
- protected locale?: CustomLocale<T>;
8
- protected storage?: StorageProvider<Record<string, Language>>;
9
- protected storageKey?: string;
1
+ import AbstractLocale from "./AbstractLocale.js";
2
+ import { Language, type LocaleDynamicProvider, type LocaleRegistry, type LocaleStorageDriver } from "../../types/locale.js";
3
+ export default class DynamicLocale<T extends object = LocaleRegistry> extends AbstractLocale<T> implements LocaleDynamicProvider<T> {
4
+ private language;
5
+ private data;
6
+ protected storage?: LocaleStorageDriver;
10
7
  protected unsubscribe?: () => void;
11
- constructor(storage?: string | false);
8
+ constructor(storage?: LocaleStorageDriver | false);
9
+ /**
10
+ * Selects a language synchronously without saving it.
11
+ * With storage enabled, a later sync() or watched storage update can replace this local selection.
12
+ * @throws If the language is absent from the catalogue.
13
+ */
14
+ select(lang: Language): Language;
15
+ /** Selects a language immediately and saves it when storage is enabled. */
12
16
  change(lang: Language): Promise<Language>;
13
17
  sync(): Promise<Language>;
14
18
  watch(handler?: (lang: Language) => void): () => void;
15
19
  unwatch(): void;
16
20
  lang(): Language;
21
+ /** Completed messages for the current language, with underscore keys and no substitutions applied. */
22
+ messages(): Readonly<Record<string, string>>;
23
+ keys(): Set<keyof T>;
24
+ langs(): ReadonlySet<Language>;
17
25
  protected value(key: Extract<keyof T, string>): string | undefined;
18
- protected fetch(lang: Language): Promise<CustomLocaleData>;
19
26
  }
@@ -1,58 +1,74 @@
1
- import { flattenLocaleMessages, getLocaleFilename } from "../utils.js";
2
- import { Storage } from "@addon-core/storage";
3
- import NativeLocale from "./NativeLocale.js";
4
- import CustomLocale from "./CustomLocale.js";
5
- import { LanguageCodes } from "./../../types/locale.js";
6
- class DynamicLocale_default extends NativeLocale {
7
- cache = /* @__PURE__ */ new Map();
8
- locale;
1
+ import { getI18nMessage } from "@addon-core/browser";
2
+ import catalogue, { keys, lang as defaultLanguage, languages } from "#adnbn/locale";
3
+ import AbstractLocale from "./AbstractLocale.js";
4
+ import { LocaleStorage } from "../storage/index.js";
5
+ import { convertLocaleKey, resolveLanguage } from "./../../shared/locale/index.js";
6
+ import {
7
+ LocaleCustomKeyForLanguage
8
+ } from "./../../types/locale.js";
9
+ class DynamicLocale extends AbstractLocale {
10
+ language;
11
+ data;
9
12
  storage;
10
- storageKey;
11
13
  unsubscribe;
12
- constructor(storage = "lang") {
14
+ constructor(storage) {
13
15
  super();
14
- if (storage) {
15
- this.storageKey = storage;
16
- this.storage = Storage.Local();
16
+ let marker;
17
+ try {
18
+ marker = getI18nMessage(LocaleCustomKeyForLanguage);
19
+ } catch {
17
20
  }
21
+ this.select(resolveLanguage(marker) ?? defaultLanguage);
22
+ this.storage = storage === false ? void 0 : storage ?? new LocaleStorage();
18
23
  }
19
- async change(lang) {
20
- if (lang === this.lang()) {
21
- return lang;
24
+ /**
25
+ * Selects a language synchronously without saving it.
26
+ * With storage enabled, a later sync() or watched storage update can replace this local selection.
27
+ * @throws If the language is absent from the catalogue.
28
+ */
29
+ select(lang) {
30
+ if (!Object.hasOwn(catalogue, lang)) {
31
+ throw new Error(`[DynamicLocale] Language "${lang}" is not available in the catalogue.`);
22
32
  }
23
- const messages = await this.fetch(lang);
24
- (this.locale ?? (this.locale = new CustomLocale())).setLang(lang).setData(messages);
25
- if (this.storage && this.storageKey) {
26
- await this.storage.set(this.storageKey, lang);
33
+ this.language = lang;
34
+ this.data = catalogue[lang];
35
+ return lang;
36
+ }
37
+ /** Selects a language immediately and saves it when storage is enabled. */
38
+ async change(lang) {
39
+ this.select(lang);
40
+ if (this.storage) {
41
+ await this.storage.set(lang);
27
42
  }
28
43
  return lang;
29
44
  }
30
45
  async sync() {
31
- if (!this.storage || !this.storageKey) {
46
+ if (!this.storage) {
32
47
  throw new Error("Language is not saving in storage");
33
48
  }
34
- const lang = await this.storage.get(this.storageKey);
49
+ const lang = await this.storage.get();
35
50
  if (!lang) {
36
51
  return this.lang();
37
52
  }
38
- if (!LanguageCodes.has(lang)) {
53
+ if (!Object.hasOwn(catalogue, lang)) {
39
54
  console.warn(`Incorrect language code in storage - "${lang}"`);
40
55
  return this.lang();
41
56
  }
42
- return this.change(lang);
57
+ return this.select(lang);
43
58
  }
44
59
  watch(handler) {
45
- if (!this.storage || !this.storageKey) {
60
+ if (!this.storage) {
46
61
  throw new Error("Language is not saved in storage");
47
62
  }
48
63
  if (this.unsubscribe) {
49
64
  throw new Error("Already subscribed to language changes in storage");
50
65
  }
51
- this.unsubscribe = this.storage.watch({
52
- [this.storageKey]: (newValue) => {
53
- if (newValue) {
54
- this.change(newValue).then(() => handler && handler(newValue)).catch((err) => console.error("Error while changing language:", err));
55
- }
66
+ this.unsubscribe = this.storage.watch((lang) => {
67
+ try {
68
+ this.select(lang);
69
+ handler == null ? void 0 : handler(lang);
70
+ } catch (error) {
71
+ console.error("Error while changing language:", error);
56
72
  }
57
73
  });
58
74
  return this.unwatch.bind(this);
@@ -63,27 +79,24 @@ class DynamicLocale_default extends NativeLocale {
63
79
  this.unsubscribe = void 0;
64
80
  }
65
81
  lang() {
66
- var _a;
67
- return ((_a = this.locale) == null ? void 0 : _a.lang()) || super.lang();
82
+ return this.language;
68
83
  }
69
- value(key) {
70
- var _a;
71
- return ((_a = this.locale) == null ? void 0 : _a.get(key)) ?? super.value(key);
84
+ /** Completed messages for the current language, with underscore keys and no substitutions applied. */
85
+ messages() {
86
+ return this.data;
72
87
  }
73
- async fetch(lang) {
74
- let messages = this.cache.get(lang);
75
- if (!messages) {
76
- const response = await (await fetch(getLocaleFilename(lang))).json();
77
- if (!response || typeof response !== "object") {
78
- throw new Error(`Invalid or empty locale data for "${lang}"`);
79
- }
80
- messages = flattenLocaleMessages(response);
81
- this.cache.set(lang, messages);
82
- }
83
- return messages;
88
+ keys() {
89
+ return new Set(keys);
90
+ }
91
+ langs() {
92
+ return new Set(languages);
93
+ }
94
+ value(key) {
95
+ const name = convertLocaleKey(key);
96
+ return Object.hasOwn(this.data, name) ? this.data[name] : void 0;
84
97
  }
85
98
  }
86
99
  export {
87
- DynamicLocale_default as default
100
+ DynamicLocale as default
88
101
  };
89
102
  //# sourceMappingURL=DynamicLocale.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/locale/providers/DynamicLocale.ts"],"sourcesContent":["import {flattenLocaleMessages, getLocaleFilename} from \"../utils\";\n\nimport {Storage, type StorageProvider} from \"@addon-core/storage\";\n\nimport NativeLocale, {LocaleNativeStructure} from \"./NativeLocale\";\nimport CustomLocale, {CustomLocaleData} from \"./CustomLocale\";\n\nimport {Language, LanguageCodes, LocaleDynamicProvider, LocaleMessages} from \"@typing/locale\";\n\nexport default class<T extends object = LocaleNativeStructure>\n extends NativeLocale<T>\n implements LocaleDynamicProvider<T>\n{\n protected cache = new Map<Language, CustomLocaleData>();\n\n protected locale?: CustomLocale<T>;\n\n protected storage?: StorageProvider<Record<string, Language>>;\n protected storageKey?: string;\n\n protected unsubscribe?: () => void;\n\n constructor(storage: string | false = \"lang\") {\n super();\n\n if (storage) {\n this.storageKey = storage;\n this.storage = Storage.Local();\n }\n }\n\n public async change(lang: Language): Promise<Language> {\n if (lang === this.lang()) {\n return lang;\n }\n\n const messages = await this.fetch(lang);\n\n (this.locale ??= new CustomLocale()).setLang(lang).setData(messages);\n\n if (this.storage && this.storageKey) {\n await this.storage.set(this.storageKey, lang);\n }\n\n return lang;\n }\n\n public async sync(): Promise<Language> {\n if (!this.storage || !this.storageKey) {\n throw new Error(\"Language is not saving in storage\");\n }\n\n const lang = await this.storage.get(this.storageKey);\n\n if (!lang) {\n return this.lang();\n }\n\n if (!LanguageCodes.has(lang)) {\n console.warn(`Incorrect language code in storage - \"${lang}\"`);\n\n return this.lang();\n }\n\n return this.change(lang);\n }\n\n public watch(handler?: (lang: Language) => void): () => void {\n if (!this.storage || !this.storageKey) {\n throw new Error(\"Language is not saved in storage\");\n }\n\n if (this.unsubscribe) {\n throw new Error(\"Already subscribed to language changes in storage\");\n }\n\n this.unsubscribe = this.storage.watch({\n [this.storageKey]: newValue => {\n if (newValue) {\n this.change(newValue)\n .then(() => handler && handler(newValue))\n .catch(err => console.error(\"Error while changing language:\", err));\n }\n },\n });\n\n return this.unwatch.bind(this);\n }\n\n public unwatch(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n public lang(): Language {\n return this.locale?.lang() || super.lang();\n }\n\n protected value(key: Extract<keyof T, string>): string | undefined {\n return this.locale?.get(key) ?? super.value(key);\n }\n\n protected async fetch(lang: Language): Promise<CustomLocaleData> {\n let messages = this.cache.get(lang);\n\n if (!messages) {\n const response: LocaleMessages = await (await fetch(getLocaleFilename(lang))).json();\n\n if (!response || typeof response !== \"object\") {\n throw new Error(`Invalid or empty locale data for \"${lang}\"`);\n }\n\n messages = flattenLocaleMessages(response);\n\n this.cache.set(lang, messages);\n }\n\n return messages;\n }\n}\n"],"mappings":"AAAA,SAAQ,uBAAuB,yBAAwB;AAEvD,SAAQ,eAAoC;AAE5C,OAAO,kBAA2C;AAClD,OAAO,kBAAsC;AAE7C,SAAkB,qBAA2D;AAE7E,MAAO,8BACK,aAEZ;AAAA,EACc,QAAQ,oBAAI,IAAgC;AAAA,EAE5C;AAAA,EAEA;AAAA,EACA;AAAA,EAEA;AAAA,EAEV,YAAY,UAA0B,QAAQ;AAC1C,UAAM;AAEN,QAAI,SAAS;AACT,WAAK,aAAa;AAClB,WAAK,UAAU,QAAQ,MAAM;AAAA,IACjC;AAAA,EACJ;AAAA,EAEA,MAAa,OAAO,MAAmC;AACnD,QAAI,SAAS,KAAK,KAAK,GAAG;AACtB,aAAO;AAAA,IACX;AAEA,UAAM,WAAW,MAAM,KAAK,MAAM,IAAI;AAEtC,KAAC,KAAK,WAAL,KAAK,SAAW,IAAI,aAAa,IAAG,QAAQ,IAAI,EAAE,QAAQ,QAAQ;AAEnE,QAAI,KAAK,WAAW,KAAK,YAAY;AACjC,YAAM,KAAK,QAAQ,IAAI,KAAK,YAAY,IAAI;AAAA,IAChD;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAa,OAA0B;AACnC,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,YAAY;AACnC,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACvD;AAEA,UAAM,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,UAAU;AAEnD,QAAI,CAAC,MAAM;AACP,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,QAAI,CAAC,cAAc,IAAI,IAAI,GAAG;AAC1B,cAAQ,KAAK,yCAAyC,IAAI,GAAG;AAE7D,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,WAAO,KAAK,OAAO,IAAI;AAAA,EAC3B;AAAA,EAEO,MAAM,SAAgD;AACzD,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,YAAY;AACnC,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACtD;AAEA,QAAI,KAAK,aAAa;AAClB,YAAM,IAAI,MAAM,mDAAmD;AAAA,IACvE;AAEA,SAAK,cAAc,KAAK,QAAQ,MAAM;AAAA,MAClC,CAAC,KAAK,UAAU,GAAG,cAAY;AAC3B,YAAI,UAAU;AACV,eAAK,OAAO,QAAQ,EACf,KAAK,MAAM,WAAW,QAAQ,QAAQ,CAAC,EACvC,MAAM,SAAO,QAAQ,MAAM,kCAAkC,GAAG,CAAC;AAAA,QAC1E;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,WAAO,KAAK,QAAQ,KAAK,IAAI;AAAA,EACjC;AAAA,EAEO,UAAgB;AAzF3B;AA0FQ,eAAK,gBAAL;AACA,SAAK,cAAc;AAAA,EACvB;AAAA,EAEO,OAAiB;AA9F5B;AA+FQ,aAAO,UAAK,WAAL,mBAAa,WAAU,MAAM,KAAK;AAAA,EAC7C;AAAA,EAEU,MAAM,KAAmD;AAlGvE;AAmGQ,aAAO,UAAK,WAAL,mBAAa,IAAI,SAAQ,MAAM,MAAM,GAAG;AAAA,EACnD;AAAA,EAEA,MAAgB,MAAM,MAA2C;AAC7D,QAAI,WAAW,KAAK,MAAM,IAAI,IAAI;AAElC,QAAI,CAAC,UAAU;AACX,YAAM,WAA2B,OAAO,MAAM,MAAM,kBAAkB,IAAI,CAAC,GAAG,KAAK;AAEnF,UAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC3C,cAAM,IAAI,MAAM,qCAAqC,IAAI,GAAG;AAAA,MAChE;AAEA,iBAAW,sBAAsB,QAAQ;AAEzC,WAAK,MAAM,IAAI,MAAM,QAAQ;AAAA,IACjC;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/locale/providers/DynamicLocale.ts"],"sourcesContent":["import {getI18nMessage} from \"@addon-core/browser\";\n\nimport catalogue, {keys, lang as defaultLanguage, languages} from \"#adnbn/locale\";\n\nimport AbstractLocale from \"./AbstractLocale\";\nimport {LocaleStorage} from \"../storage\";\n\nimport {convertLocaleKey, resolveLanguage} from \"@shared/locale\";\nimport {\n Language,\n LocaleCustomKeyForLanguage,\n type LocaleDynamicProvider,\n type LocaleRegistry,\n type LocaleStorageDriver,\n} from \"@typing/locale\";\n\nexport default class DynamicLocale<T extends object = LocaleRegistry>\n extends AbstractLocale<T>\n implements LocaleDynamicProvider<T>\n{\n private language!: Language;\n private data!: Readonly<Record<string, string>>;\n\n protected storage?: LocaleStorageDriver;\n protected unsubscribe?: () => void;\n\n constructor(storage?: LocaleStorageDriver | false) {\n super();\n\n let marker: string | undefined;\n\n try {\n marker = getI18nMessage(LocaleCustomKeyForLanguage);\n } catch {\n // MAIN has no extension i18n; use the configured language from the bundled catalogue.\n }\n\n this.select(resolveLanguage(marker) ?? defaultLanguage);\n\n this.storage = storage === false ? undefined : (storage ?? new LocaleStorage());\n }\n\n /**\n * Selects a language synchronously without saving it.\n * With storage enabled, a later sync() or watched storage update can replace this local selection.\n * @throws If the language is absent from the catalogue.\n */\n public select(lang: Language): Language {\n if (!Object.hasOwn(catalogue, lang)) {\n throw new Error(`[DynamicLocale] Language \"${lang}\" is not available in the catalogue.`);\n }\n\n this.language = lang;\n this.data = catalogue[lang]!;\n\n return lang;\n }\n\n /** Selects a language immediately and saves it when storage is enabled. */\n public async change(lang: Language): Promise<Language> {\n this.select(lang);\n\n if (this.storage) {\n await this.storage.set(lang);\n }\n\n return lang;\n }\n\n public async sync(): Promise<Language> {\n if (!this.storage) {\n throw new Error(\"Language is not saving in storage\");\n }\n\n const lang = await this.storage.get();\n\n if (!lang) {\n return this.lang();\n }\n\n if (!Object.hasOwn(catalogue, lang)) {\n console.warn(`Incorrect language code in storage - \"${lang}\"`);\n\n return this.lang();\n }\n\n return this.select(lang);\n }\n\n public watch(handler?: (lang: Language) => void): () => void {\n if (!this.storage) {\n throw new Error(\"Language is not saved in storage\");\n }\n\n if (this.unsubscribe) {\n throw new Error(\"Already subscribed to language changes in storage\");\n }\n\n this.unsubscribe = this.storage.watch(lang => {\n try {\n this.select(lang);\n handler?.(lang);\n } catch (error) {\n console.error(\"Error while changing language:\", error);\n }\n });\n\n return this.unwatch.bind(this);\n }\n\n public unwatch(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n public lang(): Language {\n return this.language;\n }\n\n /** Completed messages for the current language, with underscore keys and no substitutions applied. */\n public messages(): Readonly<Record<string, string>> {\n return this.data;\n }\n\n public keys(): Set<keyof T> {\n return new Set(keys) as Set<keyof T>;\n }\n\n public langs(): ReadonlySet<Language> {\n return new Set(languages);\n }\n\n protected value(key: Extract<keyof T, string>): string | undefined {\n const name = convertLocaleKey(key);\n\n return Object.hasOwn(this.data, name) ? this.data[name] : undefined;\n }\n}\n"],"mappings":"AAAA,SAAQ,sBAAqB;AAE7B,OAAO,aAAY,MAAM,QAAQ,iBAAiB,iBAAgB;AAElE,OAAO,oBAAoB;AAC3B,SAAQ,qBAAoB;AAE5B,SAAQ,kBAAkB,uBAAsB;AAChD;AAAA,EAEI;AAAA,OAIG;AAEP,MAAO,sBACK,eAEZ;AAAA,EACY;AAAA,EACA;AAAA,EAEE;AAAA,EACA;AAAA,EAEV,YAAY,SAAuC;AAC/C,UAAM;AAEN,QAAI;AAEJ,QAAI;AACA,eAAS,eAAe,0BAA0B;AAAA,IACtD,QAAQ;AAAA,IAER;AAEA,SAAK,OAAO,gBAAgB,MAAM,KAAK,eAAe;AAEtD,SAAK,UAAU,YAAY,QAAQ,SAAa,WAAW,IAAI,cAAc;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,OAAO,MAA0B;AACpC,QAAI,CAAC,OAAO,OAAO,WAAW,IAAI,GAAG;AACjC,YAAM,IAAI,MAAM,6BAA6B,IAAI,sCAAsC;AAAA,IAC3F;AAEA,SAAK,WAAW;AAChB,SAAK,OAAO,UAAU,IAAI;AAE1B,WAAO;AAAA,EACX;AAAA;AAAA,EAGA,MAAa,OAAO,MAAmC;AACnD,SAAK,OAAO,IAAI;AAEhB,QAAI,KAAK,SAAS;AACd,YAAM,KAAK,QAAQ,IAAI,IAAI;AAAA,IAC/B;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAa,OAA0B;AACnC,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACvD;AAEA,UAAM,OAAO,MAAM,KAAK,QAAQ,IAAI;AAEpC,QAAI,CAAC,MAAM;AACP,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,QAAI,CAAC,OAAO,OAAO,WAAW,IAAI,GAAG;AACjC,cAAQ,KAAK,yCAAyC,IAAI,GAAG;AAE7D,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,WAAO,KAAK,OAAO,IAAI;AAAA,EAC3B;AAAA,EAEO,MAAM,SAAgD;AACzD,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACtD;AAEA,QAAI,KAAK,aAAa;AAClB,YAAM,IAAI,MAAM,mDAAmD;AAAA,IACvE;AAEA,SAAK,cAAc,KAAK,QAAQ,MAAM,UAAQ;AAC1C,UAAI;AACA,aAAK,OAAO,IAAI;AAChB,2CAAU;AAAA,MACd,SAAS,OAAO;AACZ,gBAAQ,MAAM,kCAAkC,KAAK;AAAA,MACzD;AAAA,IACJ,CAAC;AAED,WAAO,KAAK,QAAQ,KAAK,IAAI;AAAA,EACjC;AAAA,EAEO,UAAgB;AA9G3B;AA+GQ,eAAK,gBAAL;AACA,SAAK,cAAc;AAAA,EACvB;AAAA,EAEO,OAAiB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGO,WAA6C;AAChD,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAqB;AACxB,WAAO,IAAI,IAAI,IAAI;AAAA,EACvB;AAAA,EAEO,QAA+B;AAClC,WAAO,IAAI,IAAI,SAAS;AAAA,EAC5B;AAAA,EAEU,MAAM,KAAmD;AAC/D,UAAM,OAAO,iBAAiB,GAAG;AAEjC,WAAO,OAAO,OAAO,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI;AAAA,EAC9D;AACJ;","names":[]}
@@ -1,15 +1,12 @@
1
1
  import AbstractLocale from "./AbstractLocale.js";
2
- import { Language, LocaleProvider } from "../../types/locale.js";
3
- /** Augmented by the generated .adnbn/locale.d.ts for the current app. */
4
- export interface LocaleNativeStructure {
5
- }
6
- export default class NativeLocale<S extends object = LocaleNativeStructure> extends AbstractLocale<S> {
2
+ import { Language, type LocaleRegistry } from "../../types/locale.js";
3
+ export default class NativeLocale<S extends object = LocaleRegistry> extends AbstractLocale<S> {
7
4
  private static instance?;
8
- static getInstance(): LocaleProvider<LocaleNativeStructure>;
5
+ static getInstance(): NativeLocale<LocaleRegistry>;
9
6
  private readonly language?;
10
7
  constructor();
11
8
  lang(): Language;
12
9
  keys(): Set<keyof S>;
13
- languages(): Set<Language>;
10
+ langs(): ReadonlySet<Language>;
14
11
  protected value(key: Extract<keyof S, string>): string | undefined;
15
12
  }
@@ -1,6 +1,7 @@
1
1
  import { getI18nMessage } from "@addon-core/browser";
2
+ import { keys, languages } from "#adnbn/locale";
2
3
  import AbstractLocale from "./AbstractLocale.js";
3
- import { convertLocaleKey, resolveLanguage } from "./../../locale/utils.js";
4
+ import { convertLocaleKey, resolveLanguage } from "./../../shared/locale/index.js";
4
5
  import { LocaleCustomKeyForLanguage } from "./../../types/locale.js";
5
6
  class NativeLocale extends AbstractLocale {
6
7
  static instance;
@@ -27,20 +28,10 @@ class NativeLocale extends AbstractLocale {
27
28
  return this.language;
28
29
  }
29
30
  keys() {
30
- try {
31
- return new Set(__ADNBN_LOCALE_KEYS__);
32
- } catch (e) {
33
- console.error("[NativeLocale] Failed to access locale keys. Ensure the bundler plugin is active.", e);
34
- return /* @__PURE__ */ new Set();
35
- }
31
+ return new Set(keys);
36
32
  }
37
- languages() {
38
- try {
39
- return new Set(__ADNBN_DEFINED_LOCALES__);
40
- } catch (e) {
41
- console.error("[NativeLocale] Failed to access defined locales. Check virtual variables configuration.", e);
42
- return /* @__PURE__ */ new Set();
43
- }
33
+ langs() {
34
+ return new Set(languages);
44
35
  }
45
36
  value(key) {
46
37
  const value = getI18nMessage(convertLocaleKey(key));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/locale/providers/NativeLocale.ts"],"sourcesContent":["import {getI18nMessage} from \"@addon-core/browser\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {convertLocaleKey, resolveLanguage} from \"@locale/utils\";\n\nimport {Language, LocaleCustomKeyForLanguage, LocaleProvider} from \"@typing/locale\";\n\n/** Augmented by the generated .adnbn/locale.d.ts for the current app. */\nexport interface LocaleNativeStructure {}\n\nexport default class NativeLocale<S extends object = LocaleNativeStructure> extends AbstractLocale<S> {\n private static instance?: LocaleProvider<LocaleNativeStructure>;\n\n public static getInstance(): LocaleProvider<LocaleNativeStructure> {\n return (NativeLocale.instance ??= new NativeLocale());\n }\n\n private readonly language?: Language;\n\n constructor() {\n super();\n\n /**\n Locale detection note:\n Chrome does NOT expose an API to get the effective translation locale.\n getUILanguage() returns browser UI language (e.g., es-MX),\n even if extension translations fall back to default_locale (e.g., en).\n To detect the actual language used by i18n, we read a locale marker\n from messages.json via chrome.i18n.getMessage().\n */\n const markerLang = getI18nMessage(LocaleCustomKeyForLanguage);\n const resolvedLang = resolveLanguage(markerLang);\n\n if (!resolvedLang) {\n console.warn(`[NativeLocale] Unsupported language detected: \"${markerLang}\".`);\n }\n\n if (markerLang && resolvedLang && markerLang !== resolvedLang) {\n console.info(`[NativeLocale] Language normalized: using \"${resolvedLang}\" instead of \"${markerLang}\".`);\n }\n\n this.language = resolvedLang;\n }\n\n public lang(): Language {\n if (!this.language) {\n throw new Error(\"[NativeLocale] Language is not defined. Failed to determine a supported locale.\");\n }\n\n return this.language;\n }\n\n public keys(): Set<keyof S> {\n try {\n // @ts-expect-error: __ADNBN_LOCALE_KEYS__ is a virtual variable generated by the bundler `src/cli/plugins/locale/index.ts`\n return new Set<string>(__ADNBN_LOCALE_KEYS__) as Set<keyof S>;\n } catch (e) {\n console.error(\"[NativeLocale] Failed to access locale keys. Ensure the bundler plugin is active.\", e);\n\n return new Set<keyof S>();\n }\n }\n\n public languages(): Set<Language> {\n try {\n // @ts-expect-error: __ADNBN_DEFINED_LOCALES__ is a virtual variable generated by the bundler `src/cli/plugins/locale/index.ts`\n return new Set<Language>(__ADNBN_DEFINED_LOCALES__);\n } catch (e) {\n console.error(\"[NativeLocale] Failed to access defined locales. Check virtual variables configuration.\", e);\n\n return new Set<Language>();\n }\n }\n\n protected value(key: Extract<keyof S, string>): string | undefined {\n const value = getI18nMessage(convertLocaleKey(key));\n\n // Native i18n returns an empty string for missing messages too; build keys distinguish valid empty translations.\n if (value === \"\" && !this.keys().has(key)) {\n return undefined;\n }\n\n return value;\n }\n}\n"],"mappings":"AAAA,SAAQ,sBAAqB;AAE7B,OAAO,oBAAoB;AAE3B,SAAQ,kBAAkB,uBAAsB;AAEhD,SAAkB,kCAAiD;AAKnE,MAAO,qBAA6E,eAAkB;AAAA,EAClG,OAAe;AAAA,EAEf,OAAc,cAAqD;AAC/D,WAAQ,aAAa,aAAb,aAAa,WAAa,IAAI,aAAa;AAAA,EACvD;AAAA,EAEiB;AAAA,EAEjB,cAAc;AACV,UAAM;AAUN,UAAM,aAAa,eAAe,0BAA0B;AAC5D,UAAM,eAAe,gBAAgB,UAAU;AAE/C,QAAI,CAAC,cAAc;AACf,cAAQ,KAAK,kDAAkD,UAAU,IAAI;AAAA,IACjF;AAEA,QAAI,cAAc,gBAAgB,eAAe,cAAc;AAC3D,cAAQ,KAAK,8CAA8C,YAAY,iBAAiB,UAAU,IAAI;AAAA,IAC1G;AAEA,SAAK,WAAW;AAAA,EACpB;AAAA,EAEO,OAAiB;AACpB,QAAI,CAAC,KAAK,UAAU;AAChB,YAAM,IAAI,MAAM,iFAAiF;AAAA,IACrG;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAqB;AACxB,QAAI;AAEA,aAAO,IAAI,IAAY,qBAAqB;AAAA,IAChD,SAAS,GAAG;AACR,cAAQ,MAAM,qFAAqF,CAAC;AAEpG,aAAO,oBAAI,IAAa;AAAA,IAC5B;AAAA,EACJ;AAAA,EAEO,YAA2B;AAC9B,QAAI;AAEA,aAAO,IAAI,IAAc,yBAAyB;AAAA,IACtD,SAAS,GAAG;AACR,cAAQ,MAAM,2FAA2F,CAAC;AAE1G,aAAO,oBAAI,IAAc;AAAA,IAC7B;AAAA,EACJ;AAAA,EAEU,MAAM,KAAmD;AAC/D,UAAM,QAAQ,eAAe,iBAAiB,GAAG,CAAC;AAGlD,QAAI,UAAU,MAAM,CAAC,KAAK,KAAK,EAAE,IAAI,GAAG,GAAG;AACvC,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/locale/providers/NativeLocale.ts"],"sourcesContent":["import {getI18nMessage} from \"@addon-core/browser\";\nimport {keys, languages} from \"#adnbn/locale\";\n\nimport AbstractLocale from \"./AbstractLocale\";\n\nimport {convertLocaleKey, resolveLanguage} from \"@shared/locale\";\n\nimport {Language, LocaleCustomKeyForLanguage, type LocaleRegistry} from \"@typing/locale\";\n\nexport default class NativeLocale<S extends object = LocaleRegistry> extends AbstractLocale<S> {\n private static instance?: NativeLocale<LocaleRegistry>;\n\n public static getInstance(): NativeLocale<LocaleRegistry> {\n return (NativeLocale.instance ??= new NativeLocale());\n }\n\n private readonly language?: Language;\n\n constructor() {\n super();\n\n /**\n Locale detection note:\n Chrome does NOT expose an API to get the effective translation locale.\n getUILanguage() returns browser UI language (e.g., es-MX),\n even if extension translations fall back to default_locale (e.g., en).\n To detect the actual language used by i18n, we read a locale marker\n from messages.json via chrome.i18n.getMessage().\n */\n const markerLang = getI18nMessage(LocaleCustomKeyForLanguage);\n const resolvedLang = resolveLanguage(markerLang);\n\n if (!resolvedLang) {\n console.warn(`[NativeLocale] Unsupported language detected: \"${markerLang}\".`);\n }\n\n if (markerLang && resolvedLang && markerLang !== resolvedLang) {\n console.info(`[NativeLocale] Language normalized: using \"${resolvedLang}\" instead of \"${markerLang}\".`);\n }\n\n this.language = resolvedLang;\n }\n\n public lang(): Language {\n if (!this.language) {\n throw new Error(\"[NativeLocale] Language is not defined. Failed to determine a supported locale.\");\n }\n\n return this.language;\n }\n\n public keys(): Set<keyof S> {\n return new Set(keys) as Set<keyof S>;\n }\n\n public langs(): ReadonlySet<Language> {\n return new Set(languages);\n }\n\n protected value(key: Extract<keyof S, string>): string | undefined {\n const value = getI18nMessage(convertLocaleKey(key));\n\n // Native i18n returns an empty string for missing messages too; build keys distinguish valid empty translations.\n if (value === \"\" && !this.keys().has(key)) {\n return undefined;\n }\n\n return value;\n }\n}\n"],"mappings":"AAAA,SAAQ,sBAAqB;AAC7B,SAAQ,MAAM,iBAAgB;AAE9B,OAAO,oBAAoB;AAE3B,SAAQ,kBAAkB,uBAAsB;AAEhD,SAAkB,kCAAsD;AAExE,MAAO,qBAAsE,eAAkB;AAAA,EAC3F,OAAe;AAAA,EAEf,OAAc,cAA4C;AACtD,WAAQ,aAAa,aAAb,aAAa,WAAa,IAAI,aAAa;AAAA,EACvD;AAAA,EAEiB;AAAA,EAEjB,cAAc;AACV,UAAM;AAUN,UAAM,aAAa,eAAe,0BAA0B;AAC5D,UAAM,eAAe,gBAAgB,UAAU;AAE/C,QAAI,CAAC,cAAc;AACf,cAAQ,KAAK,kDAAkD,UAAU,IAAI;AAAA,IACjF;AAEA,QAAI,cAAc,gBAAgB,eAAe,cAAc;AAC3D,cAAQ,KAAK,8CAA8C,YAAY,iBAAiB,UAAU,IAAI;AAAA,IAC1G;AAEA,SAAK,WAAW;AAAA,EACpB;AAAA,EAEO,OAAiB;AACpB,QAAI,CAAC,KAAK,UAAU;AAChB,YAAM,IAAI,MAAM,iFAAiF;AAAA,IACrG;AAEA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAqB;AACxB,WAAO,IAAI,IAAI,IAAI;AAAA,EACvB;AAAA,EAEO,QAA+B;AAClC,WAAO,IAAI,IAAI,SAAS;AAAA,EAC5B;AAAA,EAEU,MAAM,KAAmD;AAC/D,UAAM,QAAQ,eAAe,iBAAiB,GAAG,CAAC;AAGlD,QAAI,UAAU,MAAM,CAAC,KAAK,KAAK,EAAE,IAAI,GAAG,GAAG;AACvC,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AACJ;","names":[]}
@@ -0,0 +1,35 @@
1
+ import type { Language, LocaleDynamicProvider, LocaleNonPluralKeys, LocalePluralKeys, LocaleRegistry, LocaleSnapshot, LocaleStorageDriver, LocaleSubstitutionArgs, LocaleSubstitutionValue } from "../../types/locale.js";
2
+ /** Dynamic translations with shared instances and subscriptions independent of any UI framework. */
3
+ export default class ObservableLocale<T extends object = LocaleRegistry> implements LocaleDynamicProvider<T> {
4
+ private static defaultInstance?;
5
+ private static memoryInstance?;
6
+ private static readonly drivers;
7
+ static getInstance(storage?: LocaleStorageDriver | false): ObservableLocale;
8
+ private readonly locale;
9
+ private readonly storage?;
10
+ private readonly listeners;
11
+ private readonly languages;
12
+ private readonly languageNames;
13
+ private currentSnapshot;
14
+ private revision;
15
+ private writes;
16
+ private pendingWrites;
17
+ private unsubscribe?;
18
+ constructor(storage?: LocaleStorageDriver | false);
19
+ lang(): Language;
20
+ langs(): ReadonlySet<Language>;
21
+ langNames(): ReadonlyMap<Language, string>;
22
+ keys(): Set<keyof T>;
23
+ get<K extends keyof T & string>(key: K, substitutions?: Record<string, LocaleSubstitutionValue>): string;
24
+ trans<K extends LocaleNonPluralKeys<T>>(key: K, ...args: LocaleSubstitutionArgs<T, K>): string;
25
+ choice<K extends LocalePluralKeys<T>>(key: K, count: number, ...args: LocaleSubstitutionArgs<T, K>): string;
26
+ readonly snapshot: () => LocaleSnapshot<T>;
27
+ readonly subscribe: (listener: () => void) => (() => void);
28
+ readonly change: (lang: Language) => Promise<Language>;
29
+ sync(): Promise<Language>;
30
+ private connect;
31
+ private disconnect;
32
+ private refresh;
33
+ private createSnapshot;
34
+ private publish;
35
+ }
@@ -0,0 +1,179 @@
1
+ import DynamicLocale from "./DynamicLocale.js";
2
+ import CustomLocale from "./CustomLocale.js";
3
+ import { LocaleStorage } from "../storage/index.js";
4
+ class ObservableLocale {
5
+ static defaultInstance;
6
+ static memoryInstance;
7
+ static drivers = /* @__PURE__ */ new WeakMap();
8
+ static getInstance(storage) {
9
+ if (typeof storage === "object") {
10
+ let instance = this.drivers.get(storage);
11
+ if (!instance) {
12
+ instance = new ObservableLocale(storage);
13
+ this.drivers.set(storage, instance);
14
+ }
15
+ return instance;
16
+ }
17
+ if (storage === false) {
18
+ return this.memoryInstance ?? (this.memoryInstance = new ObservableLocale(false));
19
+ }
20
+ return this.defaultInstance ?? (this.defaultInstance = new ObservableLocale());
21
+ }
22
+ locale = new DynamicLocale(false);
23
+ storage;
24
+ listeners = /* @__PURE__ */ new Set();
25
+ languages;
26
+ languageNames;
27
+ currentSnapshot;
28
+ revision = 0;
29
+ writes = Promise.resolve();
30
+ pendingWrites = 0;
31
+ unsubscribe;
32
+ constructor(storage) {
33
+ this.storage = storage === false ? void 0 : storage ?? new LocaleStorage();
34
+ this.languages = this.langs();
35
+ this.languageNames = this.langNames();
36
+ this.currentSnapshot = this.createSnapshot();
37
+ }
38
+ lang() {
39
+ return this.locale.lang();
40
+ }
41
+ langs() {
42
+ return this.locale.langs();
43
+ }
44
+ langNames() {
45
+ return this.locale.langNames();
46
+ }
47
+ keys() {
48
+ return this.locale.keys();
49
+ }
50
+ get(key, substitutions) {
51
+ return this.locale.get(key, substitutions);
52
+ }
53
+ trans(key, ...args) {
54
+ return this.locale.trans(key, ...args);
55
+ }
56
+ choice(key, count, ...args) {
57
+ return this.locale.choice(key, count, ...args);
58
+ }
59
+ snapshot = () => this.currentSnapshot;
60
+ subscribe = (listener) => {
61
+ const notify = () => listener();
62
+ this.listeners.add(notify);
63
+ try {
64
+ this.connect();
65
+ } catch (error) {
66
+ this.listeners.delete(notify);
67
+ throw error;
68
+ }
69
+ if (this.listeners.size === 1) {
70
+ void this.refresh();
71
+ }
72
+ return () => {
73
+ this.listeners.delete(notify);
74
+ this.disconnect();
75
+ };
76
+ };
77
+ change = async (lang) => {
78
+ this.locale.select(lang);
79
+ const storage = this.storage;
80
+ if (!storage) {
81
+ this.publish();
82
+ return lang;
83
+ }
84
+ this.revision++;
85
+ this.pendingWrites++;
86
+ const saved = this.writes.then(() => storage.set(lang));
87
+ this.writes = saved.catch(() => void 0);
88
+ this.publish();
89
+ let succeeded = false;
90
+ try {
91
+ await saved;
92
+ succeeded = true;
93
+ return lang;
94
+ } finally {
95
+ if (--this.pendingWrites === 0 && succeeded) {
96
+ void this.refresh();
97
+ }
98
+ }
99
+ };
100
+ async sync() {
101
+ if (!this.storage) {
102
+ throw new Error("Language is not saving in storage");
103
+ }
104
+ if (this.pendingWrites) {
105
+ return this.lang();
106
+ }
107
+ const revision = ++this.revision;
108
+ const lang = await this.storage.get();
109
+ if (revision !== this.revision || this.pendingWrites) {
110
+ return this.lang();
111
+ }
112
+ if (lang === void 0) {
113
+ return this.lang();
114
+ }
115
+ if (!this.langs().has(lang)) {
116
+ console.warn(`Incorrect language code in storage - "${lang}"`);
117
+ return this.lang();
118
+ }
119
+ this.locale.select(lang);
120
+ this.publish();
121
+ return this.lang();
122
+ }
123
+ connect() {
124
+ if (!this.storage || this.unsubscribe) {
125
+ return;
126
+ }
127
+ this.unsubscribe = this.storage.watch(() => {
128
+ void this.refresh();
129
+ });
130
+ }
131
+ disconnect() {
132
+ var _a;
133
+ if (this.listeners.size) {
134
+ return;
135
+ }
136
+ this.revision++;
137
+ (_a = this.unsubscribe) == null ? void 0 : _a.call(this);
138
+ this.unsubscribe = void 0;
139
+ }
140
+ async refresh() {
141
+ if (!this.storage || this.pendingWrites) {
142
+ return;
143
+ }
144
+ try {
145
+ await this.sync();
146
+ } catch (error) {
147
+ console.error("[ObservableLocale] Cannot synchronize language:", error);
148
+ }
149
+ }
150
+ createSnapshot() {
151
+ const lang = this.lang();
152
+ const langs = this.languages;
153
+ const langNames = this.languageNames;
154
+ const reader = new CustomLocale(lang, this.locale.messages());
155
+ return Object.freeze({
156
+ lang: () => lang,
157
+ langs: () => langs,
158
+ langNames: () => langNames,
159
+ get: reader.get.bind(reader)
160
+ });
161
+ }
162
+ publish() {
163
+ if (this.currentSnapshot.lang() === this.lang()) {
164
+ return;
165
+ }
166
+ this.currentSnapshot = this.createSnapshot();
167
+ for (const listener of [...this.listeners]) {
168
+ try {
169
+ listener();
170
+ } catch (error) {
171
+ console.error("[ObservableLocale] Language subscriber failed:", error);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ export {
177
+ ObservableLocale as default
178
+ };
179
+ //# sourceMappingURL=ObservableLocale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/locale/providers/ObservableLocale.ts"],"sourcesContent":["import DynamicLocale from \"./DynamicLocale\";\nimport CustomLocale from \"./CustomLocale\";\n\nimport {LocaleStorage} from \"../storage\";\n\nimport type {\n Language,\n LocaleDynamicProvider,\n LocaleNonPluralKeys,\n LocalePluralKeys,\n LocaleRegistry,\n LocaleSnapshot,\n LocaleStorageDriver,\n LocaleSubstitutionArgs,\n LocaleSubstitutionValue,\n} from \"@typing/locale\";\n\n/** Dynamic translations with shared instances and subscriptions independent of any UI framework. */\nexport default class ObservableLocale<T extends object = LocaleRegistry> implements LocaleDynamicProvider<T> {\n private static defaultInstance?: ObservableLocale;\n private static memoryInstance?: ObservableLocale;\n\n private static readonly drivers = new WeakMap<LocaleStorageDriver, ObservableLocale>();\n\n public static getInstance(storage?: LocaleStorageDriver | false): ObservableLocale {\n if (typeof storage === \"object\") {\n let instance = this.drivers.get(storage);\n\n if (!instance) {\n instance = new ObservableLocale(storage);\n this.drivers.set(storage, instance);\n }\n\n return instance;\n }\n\n if (storage === false) {\n return (this.memoryInstance ??= new ObservableLocale(false));\n }\n\n return (this.defaultInstance ??= new ObservableLocale());\n }\n\n private readonly locale = new DynamicLocale<T>(false);\n private readonly storage?: LocaleStorageDriver;\n private readonly listeners = new Set<() => void>();\n private readonly languages: ReadonlySet<Language>;\n private readonly languageNames: ReadonlyMap<Language, string>;\n private currentSnapshot: LocaleSnapshot<T>;\n private revision = 0;\n private writes: Promise<void> = Promise.resolve();\n private pendingWrites = 0;\n private unsubscribe?: () => void;\n\n constructor(storage?: LocaleStorageDriver | false) {\n this.storage = storage === false ? undefined : (storage ?? new LocaleStorage());\n this.languages = this.langs();\n this.languageNames = this.langNames();\n this.currentSnapshot = this.createSnapshot();\n }\n\n public lang(): Language {\n return this.locale.lang();\n }\n\n public langs(): ReadonlySet<Language> {\n return this.locale.langs();\n }\n\n public langNames(): ReadonlyMap<Language, string> {\n return this.locale.langNames();\n }\n\n public keys(): Set<keyof T> {\n return this.locale.keys();\n }\n\n public get<K extends keyof T & string>(key: K, substitutions?: Record<string, LocaleSubstitutionValue>): string {\n return this.locale.get(key, substitutions);\n }\n\n public trans<K extends LocaleNonPluralKeys<T>>(key: K, ...args: LocaleSubstitutionArgs<T, K>): string {\n return this.locale.trans(key, ...args);\n }\n\n public choice<K extends LocalePluralKeys<T>>(key: K, count: number, ...args: LocaleSubstitutionArgs<T, K>): string {\n return this.locale.choice(key, count, ...args);\n }\n\n public readonly snapshot = (): LocaleSnapshot<T> => this.currentSnapshot;\n\n public readonly subscribe = (listener: () => void): (() => void) => {\n // Each subscription owns its cleanup, even when the same callback is subscribed twice.\n const notify = () => listener();\n\n this.listeners.add(notify);\n\n try {\n this.connect();\n } catch (error) {\n this.listeners.delete(notify);\n throw error;\n }\n\n if (this.listeners.size === 1) {\n void this.refresh();\n }\n\n return () => {\n this.listeners.delete(notify);\n this.disconnect();\n };\n };\n\n public readonly change = async (lang: Language): Promise<Language> => {\n this.locale.select(lang);\n\n const storage = this.storage;\n\n if (!storage) {\n this.publish();\n return lang;\n }\n\n this.revision++;\n\n // Register persistence before notifying: a subscriber may select another language immediately.\n this.pendingWrites++;\n\n const saved = this.writes.then(() => storage.set(lang));\n\n this.writes = saved.catch(() => undefined);\n\n this.publish();\n\n let succeeded = false;\n\n try {\n await saved;\n succeeded = true;\n\n return lang;\n } finally {\n if (--this.pendingWrites === 0 && succeeded) {\n void this.refresh();\n }\n }\n };\n\n public async sync(): Promise<Language> {\n if (!this.storage) {\n throw new Error(\"Language is not saving in storage\");\n }\n\n if (this.pendingWrites) {\n return this.lang();\n }\n\n const revision = ++this.revision;\n const lang = await this.storage.get();\n\n if (revision !== this.revision || this.pendingWrites) {\n return this.lang();\n }\n\n if (lang === undefined) {\n return this.lang();\n }\n\n if (!this.langs().has(lang)) {\n console.warn(`Incorrect language code in storage - \"${lang}\"`);\n\n return this.lang();\n }\n\n this.locale.select(lang);\n\n this.publish();\n\n return this.lang();\n }\n\n private connect(): void {\n if (!this.storage || this.unsubscribe) {\n return;\n }\n\n this.unsubscribe = this.storage.watch(() => {\n void this.refresh();\n });\n }\n\n private disconnect(): void {\n if (this.listeners.size) {\n return;\n }\n\n this.revision++;\n\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n }\n\n private async refresh(): Promise<void> {\n if (!this.storage || this.pendingWrites) {\n return;\n }\n\n try {\n await this.sync();\n } catch (error) {\n console.error(\"[ObservableLocale] Cannot synchronize language:\", error);\n }\n }\n\n private createSnapshot(): LocaleSnapshot<T> {\n const lang = this.lang();\n const langs = this.languages;\n const langNames = this.languageNames;\n\n const reader = new CustomLocale<T>(lang, this.locale.messages());\n\n return Object.freeze({\n lang: () => lang,\n langs: () => langs,\n langNames: () => langNames,\n get: reader.get.bind(reader),\n });\n }\n\n private publish(): void {\n if (this.currentSnapshot.lang() === this.lang()) {\n return;\n }\n\n this.currentSnapshot = this.createSnapshot();\n\n for (const listener of [...this.listeners]) {\n try {\n listener();\n } catch (error) {\n console.error(\"[ObservableLocale] Language subscriber failed:\", error);\n }\n }\n }\n}\n"],"mappings":"AAAA,OAAO,mBAAmB;AAC1B,OAAO,kBAAkB;AAEzB,SAAQ,qBAAoB;AAe5B,MAAO,iBAAsG;AAAA,EACzG,OAAe;AAAA,EACf,OAAe;AAAA,EAEf,OAAwB,UAAU,oBAAI,QAA+C;AAAA,EAErF,OAAc,YAAY,SAAyD;AAC/E,QAAI,OAAO,YAAY,UAAU;AAC7B,UAAI,WAAW,KAAK,QAAQ,IAAI,OAAO;AAEvC,UAAI,CAAC,UAAU;AACX,mBAAW,IAAI,iBAAiB,OAAO;AACvC,aAAK,QAAQ,IAAI,SAAS,QAAQ;AAAA,MACtC;AAEA,aAAO;AAAA,IACX;AAEA,QAAI,YAAY,OAAO;AACnB,aAAQ,KAAK,mBAAL,KAAK,iBAAmB,IAAI,iBAAiB,KAAK;AAAA,IAC9D;AAEA,WAAQ,KAAK,oBAAL,KAAK,kBAAoB,IAAI,iBAAiB;AAAA,EAC1D;AAAA,EAEiB,SAAS,IAAI,cAAiB,KAAK;AAAA,EACnC;AAAA,EACA,YAAY,oBAAI,IAAgB;AAAA,EAChC;AAAA,EACA;AAAA,EACT;AAAA,EACA,WAAW;AAAA,EACX,SAAwB,QAAQ,QAAQ;AAAA,EACxC,gBAAgB;AAAA,EAChB;AAAA,EAER,YAAY,SAAuC;AAC/C,SAAK,UAAU,YAAY,QAAQ,SAAa,WAAW,IAAI,cAAc;AAC7E,SAAK,YAAY,KAAK,MAAM;AAC5B,SAAK,gBAAgB,KAAK,UAAU;AACpC,SAAK,kBAAkB,KAAK,eAAe;AAAA,EAC/C;AAAA,EAEO,OAAiB;AACpB,WAAO,KAAK,OAAO,KAAK;AAAA,EAC5B;AAAA,EAEO,QAA+B;AAClC,WAAO,KAAK,OAAO,MAAM;AAAA,EAC7B;AAAA,EAEO,YAA2C;AAC9C,WAAO,KAAK,OAAO,UAAU;AAAA,EACjC;AAAA,EAEO,OAAqB;AACxB,WAAO,KAAK,OAAO,KAAK;AAAA,EAC5B;AAAA,EAEO,IAAgC,KAAQ,eAAiE;AAC5G,WAAO,KAAK,OAAO,IAAI,KAAK,aAAa;AAAA,EAC7C;AAAA,EAEO,MAAwC,QAAW,MAA4C;AAClG,WAAO,KAAK,OAAO,MAAM,KAAK,GAAG,IAAI;AAAA,EACzC;AAAA,EAEO,OAAsC,KAAQ,UAAkB,MAA4C;AAC/G,WAAO,KAAK,OAAO,OAAO,KAAK,OAAO,GAAG,IAAI;AAAA,EACjD;AAAA,EAEgB,WAAW,MAAyB,KAAK;AAAA,EAEzC,YAAY,CAAC,aAAuC;AAEhE,UAAM,SAAS,MAAM,SAAS;AAE9B,SAAK,UAAU,IAAI,MAAM;AAEzB,QAAI;AACA,WAAK,QAAQ;AAAA,IACjB,SAAS,OAAO;AACZ,WAAK,UAAU,OAAO,MAAM;AAC5B,YAAM;AAAA,IACV;AAEA,QAAI,KAAK,UAAU,SAAS,GAAG;AAC3B,WAAK,KAAK,QAAQ;AAAA,IACtB;AAEA,WAAO,MAAM;AACT,WAAK,UAAU,OAAO,MAAM;AAC5B,WAAK,WAAW;AAAA,IACpB;AAAA,EACJ;AAAA,EAEgB,SAAS,OAAO,SAAsC;AAClE,SAAK,OAAO,OAAO,IAAI;AAEvB,UAAM,UAAU,KAAK;AAErB,QAAI,CAAC,SAAS;AACV,WAAK,QAAQ;AACb,aAAO;AAAA,IACX;AAEA,SAAK;AAGL,SAAK;AAEL,UAAM,QAAQ,KAAK,OAAO,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC;AAEtD,SAAK,SAAS,MAAM,MAAM,MAAM,MAAS;AAEzC,SAAK,QAAQ;AAEb,QAAI,YAAY;AAEhB,QAAI;AACA,YAAM;AACN,kBAAY;AAEZ,aAAO;AAAA,IACX,UAAE;AACE,UAAI,EAAE,KAAK,kBAAkB,KAAK,WAAW;AACzC,aAAK,KAAK,QAAQ;AAAA,MACtB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAa,OAA0B;AACnC,QAAI,CAAC,KAAK,SAAS;AACf,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACvD;AAEA,QAAI,KAAK,eAAe;AACpB,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,UAAM,WAAW,EAAE,KAAK;AACxB,UAAM,OAAO,MAAM,KAAK,QAAQ,IAAI;AAEpC,QAAI,aAAa,KAAK,YAAY,KAAK,eAAe;AAClD,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,QAAI,SAAS,QAAW;AACpB,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,QAAI,CAAC,KAAK,MAAM,EAAE,IAAI,IAAI,GAAG;AACzB,cAAQ,KAAK,yCAAyC,IAAI,GAAG;AAE7D,aAAO,KAAK,KAAK;AAAA,IACrB;AAEA,SAAK,OAAO,OAAO,IAAI;AAEvB,SAAK,QAAQ;AAEb,WAAO,KAAK,KAAK;AAAA,EACrB;AAAA,EAEQ,UAAgB;AACpB,QAAI,CAAC,KAAK,WAAW,KAAK,aAAa;AACnC;AAAA,IACJ;AAEA,SAAK,cAAc,KAAK,QAAQ,MAAM,MAAM;AACxC,WAAK,KAAK,QAAQ;AAAA,IACtB,CAAC;AAAA,EACL;AAAA,EAEQ,aAAmB;AAhM/B;AAiMQ,QAAI,KAAK,UAAU,MAAM;AACrB;AAAA,IACJ;AAEA,SAAK;AAEL,eAAK,gBAAL;AACA,SAAK,cAAc;AAAA,EACvB;AAAA,EAEA,MAAc,UAAyB;AACnC,QAAI,CAAC,KAAK,WAAW,KAAK,eAAe;AACrC;AAAA,IACJ;AAEA,QAAI;AACA,YAAM,KAAK,KAAK;AAAA,IACpB,SAAS,OAAO;AACZ,cAAQ,MAAM,mDAAmD,KAAK;AAAA,IAC1E;AAAA,EACJ;AAAA,EAEQ,iBAAoC;AACxC,UAAM,OAAO,KAAK,KAAK;AACvB,UAAM,QAAQ,KAAK;AACnB,UAAM,YAAY,KAAK;AAEvB,UAAM,SAAS,IAAI,aAAgB,MAAM,KAAK,OAAO,SAAS,CAAC;AAE/D,WAAO,OAAO,OAAO;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,WAAW,MAAM;AAAA,MACjB,KAAK,OAAO,IAAI,KAAK,MAAM;AAAA,IAC/B,CAAC;AAAA,EACL;AAAA,EAEQ,UAAgB;AACpB,QAAI,KAAK,gBAAgB,KAAK,MAAM,KAAK,KAAK,GAAG;AAC7C;AAAA,IACJ;AAEA,SAAK,kBAAkB,KAAK,eAAe;AAE3C,eAAW,YAAY,CAAC,GAAG,KAAK,SAAS,GAAG;AACxC,UAAI;AACA,iBAAS;AAAA,MACb,SAAS,OAAO;AACZ,gBAAQ,MAAM,kDAAkD,KAAK;AAAA,MACzE;AAAA,IACJ;AAAA,EACJ;AACJ;","names":[]}
@@ -1,3 +1,4 @@
1
1
  export { default as AbstractLocale } from "./AbstractLocale.js";
2
2
  export { default as DynamicLocale } from "./DynamicLocale.js";
3
- export { default as NativeLocale, type LocaleNativeStructure } from "./NativeLocale.js";
3
+ export { default as NativeLocale } from "./NativeLocale.js";
4
+ export { default as ObservableLocale } from "./ObservableLocale.js";
@@ -1,9 +1,11 @@
1
1
  import { default as default2 } from "./AbstractLocale.js";
2
2
  import { default as default3 } from "./DynamicLocale.js";
3
3
  import { default as default4 } from "./NativeLocale.js";
4
+ import { default as default5 } from "./ObservableLocale.js";
4
5
  export {
5
6
  default2 as AbstractLocale,
6
7
  default3 as DynamicLocale,
7
- default4 as NativeLocale
8
+ default4 as NativeLocale,
9
+ default5 as ObservableLocale
8
10
  };
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/locale/providers/index.ts"],"sourcesContent":["export {default as AbstractLocale} from \"./AbstractLocale\";\nexport {default as DynamicLocale} from \"./DynamicLocale\";\nexport {default as NativeLocale, type LocaleNativeStructure} from \"./NativeLocale\";\n"],"mappings":"AAAA,SAAmB,WAAXA,gBAAgC;AACxC,SAAmB,WAAXA,gBAA+B;AACvC,SAAmB,WAAXA,gBAA0D;","names":["default"]}
1
+ {"version":3,"sources":["../../../src/locale/providers/index.ts"],"sourcesContent":["export {default as AbstractLocale} from \"./AbstractLocale\";\nexport {default as DynamicLocale} from \"./DynamicLocale\";\nexport {default as NativeLocale} from \"./NativeLocale\";\nexport {default as ObservableLocale} from \"./ObservableLocale\";\n"],"mappings":"AAAA,SAAmB,WAAXA,gBAAgC;AACxC,SAAmB,WAAXA,gBAA+B;AACvC,SAAmB,WAAXA,gBAA8B;AACtC,SAAmB,WAAXA,gBAAkC;","names":["default"]}
@@ -0,0 +1,11 @@
1
+ import { Language, type LocaleStorageDriver } from "../../types/locale.js";
2
+ /** Stores the selected language in extension local storage under the framework namespace. */
3
+ export default class LocaleStorage implements LocaleStorageDriver {
4
+ protected key: string;
5
+ private readonly storage;
6
+ constructor(key?: string);
7
+ get(): Promise<Language | undefined>;
8
+ set(lang: Language): Promise<void>;
9
+ watch(handler: (lang: Language) => void): () => void;
10
+ private parse;
11
+ }