@bigbinary/neeto-commons-frontend 4.13.98 → 4.13.100

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.
@@ -1,14 +1,112 @@
1
+ /* eslint-disable @bigbinary/neeto/use-array-methods */
2
+ const fs = require("fs");
3
+ const path = require("path");
4
+
5
+ const { watch } = require("chokidar");
6
+
1
7
  const {
2
8
  generateMergedTranslations,
3
9
  writeTranslationsToDisk,
4
10
  } = require("../../utils/packageTranslations");
5
11
 
6
- const packageTranslationsPlugin = () => ({
7
- name: "package-translations",
8
- buildStart() {
9
- const mergedTranslations = generateMergedTranslations();
10
- writeTranslationsToDisk(mergedTranslations);
11
- },
12
- });
12
+ // Only watch host app translations. Package translations inside
13
+ // node_modules/@bigbinary are handled by the nanoDevelopment plugin
14
+ const getTranslationWatchPaths = () => {
15
+ const hostTranslationsDir = path.resolve("app/javascript/src/translations");
16
+
17
+ return fs.existsSync(hostTranslationsDir) ? [hostTranslationsDir] : [];
18
+ };
19
+
20
+ const rebuildTranslations = () => {
21
+ const mergedTranslations = generateMergedTranslations();
22
+ writeTranslationsToDisk(mergedTranslations);
23
+ };
24
+
25
+ const packageTranslationsPlugin = () => {
26
+ let watcher;
27
+ let debounceTimeout;
28
+
29
+ return {
30
+ name: "package-translations",
31
+ buildStart() {
32
+ rebuildTranslations();
33
+ },
34
+ handleHotUpdate({ file }) {
35
+ // Suppress Vite's default full-reload for translation JSON files
36
+ // so that only our plugin controls the rebuild + reload cycle.
37
+ if (file.includes("translations") && file.endsWith(".json")) return [];
38
+
39
+ return undefined;
40
+ },
41
+ configureServer(server) {
42
+ const watchPaths = getTranslationWatchPaths();
43
+ if (watchPaths.length === 0) return;
44
+
45
+ server.watcher.unwatch(watchPaths);
46
+ server.httpServer?.on("close", () => {
47
+ if (!watcher) return;
48
+
49
+ watcher.close();
50
+ watcher = null;
51
+ });
52
+
53
+ const invalidateAllModules = () => {
54
+ const moduleGraph = server.moduleGraph;
55
+
56
+ for (const mod of moduleGraph.idToModuleMap.values()) {
57
+ moduleGraph.invalidateModule(mod);
58
+ }
59
+ };
60
+
61
+ const handleChange = () => {
62
+ clearTimeout(debounceTimeout);
63
+ debounceTimeout = setTimeout(() => {
64
+ try {
65
+ const mergedTranslations = generateMergedTranslations();
66
+ writeTranslationsToDisk(mergedTranslations);
67
+
68
+ // Invalidate all modules so the preval transform re-runs and
69
+ // all import URLs are regenerated with the new browserHash.
70
+ invalidateAllModules();
71
+
72
+ // Update the browserHash on every optimized dep and chunk entry
73
+ // so the ?v= param changes in import URLs, forcing the browser
74
+ // to bypass its immutable cache for pre-bundled deps.
75
+ const depsOptimizer = server.environments?.client?.depsOptimizer;
76
+ if (depsOptimizer?.metadata) {
77
+ const newHash = Date.now().toString(36);
78
+ const { metadata } = depsOptimizer;
79
+ metadata.browserHash = newHash;
80
+
81
+ for (const entry of Object.values(metadata.optimized)) {
82
+ entry.browserHash = newHash;
83
+ }
84
+
85
+ for (const entry of Object.values(metadata.chunks)) {
86
+ entry.browserHash = newHash;
87
+ }
88
+ }
89
+
90
+ server.hot.send({ type: "full-reload" });
91
+ } catch (error) {
92
+ server.config.logger.error(
93
+ `[package-translations] Rebuild failed: ${error}`
94
+ );
95
+ }
96
+ }, 1000);
97
+ };
98
+
99
+ watcher = watch(watchPaths, { ignoreInitial: true })
100
+ .on("add", handleChange)
101
+ .on("change", handleChange)
102
+ .on("unlink", handleChange)
103
+ .on("error", error =>
104
+ server.config.logger.error(
105
+ `[package-translations] Watcher error: ${error}`
106
+ )
107
+ );
108
+ },
109
+ };
110
+ };
13
111
 
14
112
  module.exports = { packageTranslationsPlugin };
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var _window;
3
4
  var HEADERS_KEYS = {
4
5
  xCsrfToken: "X-CSRF-TOKEN",
5
6
  contentType: "Content-Type",
@@ -14,9 +15,11 @@ var FORMATS = {
14
15
  };
15
16
  var LIST_FORMATS = [FORMATS.boldList, FORMATS.list];
16
17
  var MAXIMUM_OFFLINE_DURATION = 10000;
18
+ var IS_CHROME_EXTENSION = typeof window !== "undefined" && !!((_window = window) !== null && _window !== void 0 && (_window = _window.chrome) !== null && _window !== void 0 && (_window = _window.runtime) !== null && _window !== void 0 && _window.id);
17
19
 
18
20
  exports.FORMATS = FORMATS;
19
21
  exports.HEADERS_KEYS = HEADERS_KEYS;
22
+ exports.IS_CHROME_EXTENSION = IS_CHROME_EXTENSION;
20
23
  exports.LIST_FORMATS = LIST_FORMATS;
21
24
  exports.LOWERCASED = LOWERCASED;
22
25
  exports.LOWERCASED_GLOBAL_REGEX = LOWERCASED_GLOBAL_REGEX;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../../src/initializers/constants.js"],"sourcesContent":["export const HEADERS_KEYS = {\n xCsrfToken: \"X-CSRF-TOKEN\",\n contentType: \"Content-Type\",\n accept: \"Accept\",\n};\n\nexport const LOWERCASED = \"__LOWERCASED__\";\nexport const LOWERCASED_GLOBAL_REGEX = new RegExp(LOWERCASED, \"g\");\n\nexport const FORMATS = {\n boldList: \"boldList\",\n list: \"list\",\n anyCase: \"anyCase\",\n};\nexport const LIST_FORMATS = [FORMATS.boldList, FORMATS.list];\n\nexport const MAXIMUM_OFFLINE_DURATION = 10000;\n"],"names":["HEADERS_KEYS","xCsrfToken","contentType","accept","LOWERCASED","LOWERCASED_GLOBAL_REGEX","RegExp","FORMATS","boldList","list","anyCase","LIST_FORMATS","MAXIMUM_OFFLINE_DURATION"],"mappings":";;AAAO,IAAMA,YAAY,GAAG;AAC1BC,EAAAA,UAAU,EAAE,cAAc;AAC1BC,EAAAA,WAAW,EAAE,cAAc;AAC3BC,EAAAA,MAAM,EAAE;AACV;AAEO,IAAMC,UAAU,GAAG;AACnB,IAAMC,uBAAuB,GAAG,IAAIC,MAAM,CAACF,UAAU,EAAE,GAAG;AAE1D,IAAMG,OAAO,GAAG;AACrBC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,IAAI,EAAE,MAAM;AACZC,EAAAA,OAAO,EAAE;AACX;AACO,IAAMC,YAAY,GAAG,CAACJ,OAAO,CAACC,QAAQ,EAAED,OAAO,CAACE,IAAI;AAEpD,IAAMG,wBAAwB,GAAG;;;;;;;;;"}
1
+ {"version":3,"file":"constants.js","sources":["../../../src/initializers/constants.js"],"sourcesContent":["export const HEADERS_KEYS = {\n xCsrfToken: \"X-CSRF-TOKEN\",\n contentType: \"Content-Type\",\n accept: \"Accept\",\n};\n\nexport const LOWERCASED = \"__LOWERCASED__\";\nexport const LOWERCASED_GLOBAL_REGEX = new RegExp(LOWERCASED, \"g\");\n\nexport const FORMATS = {\n boldList: \"boldList\",\n list: \"list\",\n anyCase: \"anyCase\",\n};\nexport const LIST_FORMATS = [FORMATS.boldList, FORMATS.list];\n\nexport const MAXIMUM_OFFLINE_DURATION = 10000;\n\nexport const IS_CHROME_EXTENSION =\n typeof window !== \"undefined\" && !!window?.chrome?.runtime?.id;\n"],"names":["HEADERS_KEYS","xCsrfToken","contentType","accept","LOWERCASED","LOWERCASED_GLOBAL_REGEX","RegExp","FORMATS","boldList","list","anyCase","LIST_FORMATS","MAXIMUM_OFFLINE_DURATION","IS_CHROME_EXTENSION","window","_window","chrome","runtime","id"],"mappings":";;;AAAO,IAAMA,YAAY,GAAG;AAC1BC,EAAAA,UAAU,EAAE,cAAc;AAC1BC,EAAAA,WAAW,EAAE,cAAc;AAC3BC,EAAAA,MAAM,EAAE;AACV;AAEO,IAAMC,UAAU,GAAG;AACnB,IAAMC,uBAAuB,GAAG,IAAIC,MAAM,CAACF,UAAU,EAAE,GAAG;AAE1D,IAAMG,OAAO,GAAG;AACrBC,EAAAA,QAAQ,EAAE,UAAU;AACpBC,EAAAA,IAAI,EAAE,MAAM;AACZC,EAAAA,OAAO,EAAE;AACX;AACO,IAAMC,YAAY,GAAG,CAACJ,OAAO,CAACC,QAAQ,EAAED,OAAO,CAACE,IAAI;AAEpD,IAAMG,wBAAwB,GAAG;AAE3BC,IAAAA,mBAAmB,GAC9B,OAAOC,MAAM,KAAK,WAAW,IAAI,CAAC,GAAAC,OAAA,GAACD,MAAM,MAAA,IAAA,IAAAC,OAAA,KAAAA,MAAAA,IAAAA,CAAAA,OAAA,GAANA,OAAA,CAAQC,MAAM,MAAAD,IAAAA,IAAAA,OAAA,gBAAAA,OAAA,GAAdA,OAAA,CAAgBE,OAAO,MAAAF,IAAAA,IAAAA,OAAA,KAAvBA,MAAAA,IAAAA,OAAA,CAAyBG,EAAE;;;;;;;;;;"}
@@ -462,27 +462,19 @@ var resourcesToBackend = function resourcesToBackend(res) {
462
462
  // eslint-disable-next-line import/no-mutable-exports
463
463
  exports.taxonomies = {};
464
464
  var initializeI18n = /*#__PURE__*/function () {
465
- var _ref = index._asyncToGenerator(/*#__PURE__*/index._regeneratorRuntime.mark(function _callee() {
465
+ var _ref = index._asyncToGenerator(/*#__PURE__*/index._regeneratorRuntime.mark(function _callee(hostTranslations) {
466
466
  var _window$globalProps, _window$globalProps2;
467
- var hostTranslations,
468
- enableDirAttribute,
469
- userLanguage,
470
- translationImports,
471
- englishTranslations,
472
- englishResource,
473
- resources,
474
- defaultTaxonomyKeys,
475
- defaultTaxonomies,
476
- hostTaxonomies,
477
- _args = arguments;
467
+ var userLanguage, translationImports, englishTranslations, englishResource, resources, defaultTaxonomyKeys, defaultTaxonomies, hostTaxonomies;
478
468
  return index._regeneratorRuntime.wrap(function _callee$(_context) {
479
469
  while (1) switch (_context.prev = _context.next) {
480
470
  case 0:
481
- hostTranslations = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};
482
- enableDirAttribute = _args.length > 1 && _args[1] !== undefined ? _args[1] : true;
483
- document.documentElement.removeAttribute("lang");
484
471
  userLanguage = (_window$globalProps = window.globalProps) === null || _window$globalProps === void 0 || (_window$globalProps = _window$globalProps.user) === null || _window$globalProps === void 0 ? void 0 : _window$globalProps.language;
485
- if (userLanguage) document.documentElement.setAttribute("lang", userLanguage);
472
+ if (!initializers_constants.IS_CHROME_EXTENSION) {
473
+ document.documentElement.removeAttribute("lang");
474
+ if (userLanguage) {
475
+ document.documentElement.setAttribute("lang", userLanguage);
476
+ }
477
+ }
486
478
  translationImports = preval.require("../../../configs/scripts/buildTranslationImports.js");
487
479
  englishTranslations = preval.require("../../../configs/scripts/getEnglishTranslation.js");
488
480
  englishResource = {
@@ -500,7 +492,7 @@ var initializeI18n = /*#__PURE__*/function () {
500
492
  }));
501
493
  hostTaxonomies = ((_window$globalProps2 = window.globalProps) === null || _window$globalProps2 === void 0 ? void 0 : _window$globalProps2.taxonomies) || {};
502
494
  exports.taxonomies = initializers_utils_utils.replaceNullValuesWithGetter(ramda.mergeDeepLeft(hostTaxonomies, defaultTaxonomies));
503
- _context.next = 15;
495
+ _context.next = 12;
504
496
  return i18next.use(Browser).use(reactI18next.initReactI18next).use(initializers_utils_customPostProcessors.sentenceCaseProcessor).use(resourcesToBackend(function (language) {
505
497
  return utils_retryImport(translationImports === null || translationImports === void 0 ? void 0 : translationImports[language]);
506
498
  })).init({
@@ -536,20 +528,22 @@ var initializeI18n = /*#__PURE__*/function () {
536
528
  lookupCookie: "lang"
537
529
  }
538
530
  });
539
- case 15:
540
- if (enableDirAttribute) {
541
- document.documentElement.setAttribute("dir", i18next.dir() || "ltr");
542
- }
543
- if (!userLanguage) {
544
- document.documentElement.setAttribute("lang", i18next.resolvedLanguage || "en");
531
+ case 12:
532
+ if (!initializers_constants.IS_CHROME_EXTENSION) {
533
+ _context.next = 14;
534
+ break;
545
535
  }
546
- case 17:
536
+ return _context.abrupt("return");
537
+ case 14:
538
+ document.documentElement.setAttribute("dir", i18next.dir() || "ltr");
539
+ document.documentElement.setAttribute("lang", i18next.resolvedLanguage || "en");
540
+ case 16:
547
541
  case "end":
548
542
  return _context.stop();
549
543
  }
550
544
  }, _callee);
551
545
  }));
552
- return function initializeI18n() {
546
+ return function initializeI18n(_x) {
553
547
  return _ref.apply(this, arguments);
554
548
  };
555
549
  }();