@lionrapid/core 0.6.4 → 0.6.6

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 (76) hide show
  1. package/README.md +15 -2
  2. package/dist/browser/auto-init.d.ts.map +1 -1
  3. package/dist/browser/auto-init.js +4 -2
  4. package/dist/browser/auto-init.js.map +1 -1
  5. package/dist/browser/editor/editor-api.d.ts +12 -0
  6. package/dist/browser/editor/editor-api.d.ts.map +1 -1
  7. package/dist/browser/editor/editor-api.js.map +1 -1
  8. package/dist/browser/editor/editor-init.js +2 -1
  9. package/dist/browser/editor/editor-init.js.map +1 -1
  10. package/dist/browser/editor/sidebar.d.ts.map +1 -1
  11. package/dist/browser/editor/sidebar.js +11 -1
  12. package/dist/browser/editor/sidebar.js.map +1 -1
  13. package/dist/browser/lionrapid.auto.dev.js +314 -179
  14. package/dist/browser/lionrapid.auto.dev.js.map +3 -3
  15. package/dist/browser/lionrapid.auto.js +314 -179
  16. package/dist/browser/lionrapid.auto.js.map +3 -3
  17. package/dist/browser/lionrapid.auto.min.js +6 -4
  18. package/dist/browser/lionrapid.auto.min.js.map +4 -4
  19. package/dist/browser/lionrapid.editor.js +5 -2
  20. package/dist/browser/lionrapid.editor.js.map +3 -3
  21. package/dist/browser/lionrapid.editor.min.js +4 -4
  22. package/dist/browser/lionrapid.editor.min.js.map +4 -4
  23. package/dist/browser/lionrapid.esm.js +318 -178
  24. package/dist/browser/lionrapid.esm.js.map +3 -3
  25. package/dist/browser/lionrapid.esm.min.js +5 -3
  26. package/dist/browser/lionrapid.esm.min.js.map +4 -4
  27. package/dist/browser/lionrapid.iife.dev.js +318 -178
  28. package/dist/browser/lionrapid.iife.dev.js.map +3 -3
  29. package/dist/browser/lionrapid.iife.js +318 -178
  30. package/dist/browser/lionrapid.iife.js.map +3 -3
  31. package/dist/browser/lionrapid.iife.min.js +5 -3
  32. package/dist/browser/lionrapid.iife.min.js.map +4 -4
  33. package/dist/browser/lionrapid.umd.js +318 -178
  34. package/dist/browser/lionrapid.umd.js.map +3 -3
  35. package/dist/browser/lionrapid.umd.min.js +5 -3
  36. package/dist/browser/lionrapid.umd.min.js.map +4 -4
  37. package/dist/browser/storage/cache-names.d.ts +51 -0
  38. package/dist/browser/storage/cache-names.d.ts.map +1 -0
  39. package/dist/browser/storage/cache-names.js +51 -0
  40. package/dist/browser/storage/cache-names.js.map +1 -0
  41. package/dist/browser/storage/cache-storage-repository.d.ts.map +1 -1
  42. package/dist/browser/storage/cache-storage-repository.js +6 -2
  43. package/dist/browser/storage/cache-storage-repository.js.map +1 -1
  44. package/dist/builder.d.ts.map +1 -1
  45. package/dist/builder.js +9 -2
  46. package/dist/builder.js.map +1 -1
  47. package/dist/config/api.config.d.ts +35 -0
  48. package/dist/config/api.config.d.ts.map +1 -0
  49. package/dist/config/api.config.js +35 -0
  50. package/dist/config/api.config.js.map +1 -0
  51. package/dist/handlers/network-handler.d.ts +6 -0
  52. package/dist/handlers/network-handler.d.ts.map +1 -1
  53. package/dist/handlers/network-handler.js +9 -0
  54. package/dist/handlers/network-handler.js.map +1 -1
  55. package/dist/index.d.ts +4 -2
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +14 -5
  58. package/dist/index.js.map +1 -1
  59. package/dist/lionRapid.d.ts.map +1 -1
  60. package/dist/lionRapid.js +11 -2
  61. package/dist/lionRapid.js.map +1 -1
  62. package/dist/repositories/network-repository.d.ts.map +1 -1
  63. package/dist/repositories/network-repository.js +4 -3
  64. package/dist/repositories/network-repository.js.map +1 -1
  65. package/dist/utils/locale.d.ts +50 -7
  66. package/dist/utils/locale.d.ts.map +1 -1
  67. package/dist/utils/locale.js +83 -15
  68. package/dist/utils/locale.js.map +1 -1
  69. package/dist/utils/log-safe.d.ts +92 -0
  70. package/dist/utils/log-safe.d.ts.map +1 -0
  71. package/dist/utils/log-safe.js +168 -0
  72. package/dist/utils/log-safe.js.map +1 -0
  73. package/dist/utils/logger.d.ts.map +1 -1
  74. package/dist/utils/logger.js +3 -2
  75. package/dist/utils/logger.js.map +1 -1
  76. package/package.json +7 -3
@@ -2,6 +2,216 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
4
 
5
+ // src/browser/md5.ts
6
+ function safeAdd(x, y) {
7
+ const lsw = (x & 65535) + (y & 65535);
8
+ const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
9
+ return msw << 16 | lsw & 65535;
10
+ }
11
+ function bitRotateLeft(num, cnt) {
12
+ return num << cnt | num >>> 32 - cnt;
13
+ }
14
+ function md5cmn(q, a, b, x, s, t) {
15
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
16
+ }
17
+ function md5ff(a, b, c, d, x, s, t) {
18
+ return md5cmn(b & c | ~b & d, a, b, x, s, t);
19
+ }
20
+ function md5gg(a, b, c, d, x, s, t) {
21
+ return md5cmn(b & d | c & ~d, a, b, x, s, t);
22
+ }
23
+ function md5hh(a, b, c, d, x, s, t) {
24
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
25
+ }
26
+ function md5ii(a, b, c, d, x, s, t) {
27
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
28
+ }
29
+ function binlMD5(x, len) {
30
+ x[len >> 5] |= 128 << len % 32;
31
+ x[(len + 64 >>> 9 << 4) + 14] = len;
32
+ let a = 1732584193;
33
+ let b = -271733879;
34
+ let c = -1732584194;
35
+ let d = 271733878;
36
+ for (let i = 0; i < x.length; i += 16) {
37
+ const olda = a;
38
+ const oldb = b;
39
+ const oldc = c;
40
+ const oldd = d;
41
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
42
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
43
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
44
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
45
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
46
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
47
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
48
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
49
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
50
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
51
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
52
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
53
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
54
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
55
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
56
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
57
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
58
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
59
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
60
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
61
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
62
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
63
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
64
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
65
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
66
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
67
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
68
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
69
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
70
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
71
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
72
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
73
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
74
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
75
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
76
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
77
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
78
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
79
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
80
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
81
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
82
+ d = md5hh(d, a, b, c, x[i + 0], 11, -358537222);
83
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
84
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
85
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
86
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
87
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
88
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
89
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
90
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
91
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
92
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
93
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
94
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
95
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
96
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
97
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
98
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
99
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
100
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
101
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
102
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
103
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
104
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
105
+ a = safeAdd(a, olda);
106
+ b = safeAdd(b, oldb);
107
+ c = safeAdd(c, oldc);
108
+ d = safeAdd(d, oldd);
109
+ }
110
+ return [a, b, c, d];
111
+ }
112
+ function binl2hex(binarray) {
113
+ const hexTab = "0123456789abcdef";
114
+ let str = "";
115
+ for (let i = 0; i < binarray.length * 4; i++) {
116
+ str += hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
117
+ }
118
+ return str;
119
+ }
120
+ function utf8Bytes(str) {
121
+ if (typeof TextEncoder !== "undefined") {
122
+ return new TextEncoder().encode(str);
123
+ }
124
+ const out = [];
125
+ for (let i = 0; i < str.length; i++) {
126
+ const c = str.charCodeAt(i);
127
+ if (c < 128) {
128
+ out.push(c);
129
+ } else if (c < 2048) {
130
+ out.push(192 | c >> 6, 128 | c & 63);
131
+ } else if (c >= 55296 && c < 56320 && i + 1 < str.length) {
132
+ const c2 = str.charCodeAt(++i);
133
+ const cp = 65536 + (c - 55296 << 10) + (c2 - 56320);
134
+ out.push(
135
+ 240 | cp >> 18,
136
+ 128 | cp >> 12 & 63,
137
+ 128 | cp >> 6 & 63,
138
+ 128 | cp & 63
139
+ );
140
+ } else {
141
+ out.push(
142
+ 224 | c >> 12,
143
+ 128 | c >> 6 & 63,
144
+ 128 | c & 63
145
+ );
146
+ }
147
+ }
148
+ return new Uint8Array(out);
149
+ }
150
+ function bytes2binl(bytes) {
151
+ const bin = [];
152
+ for (let i = 0; i < bytes.length; i++) {
153
+ bin[i >> 2] |= bytes[i] << i % 4 * 8;
154
+ }
155
+ return bin;
156
+ }
157
+ function md5(str) {
158
+ const bytes = utf8Bytes(str);
159
+ return binl2hex(binlMD5(bytes2binl(bytes), bytes.length * 8));
160
+ }
161
+ function generateAutoKey(text) {
162
+ const trimmed = text.trim();
163
+ return "auto_" + md5(trimmed).substring(0, 12);
164
+ }
165
+
166
+ // src/utils/log-safe.ts
167
+ var LOG_VALUE_FULL_MAX = 200;
168
+ var LOG_VALUE_EDGE = 90;
169
+ function contentIdentity(value) {
170
+ return `${value.length} chars, md5:${md5(value.trim()).slice(0, 12)}`;
171
+ }
172
+ function contentExcerpt(value) {
173
+ if (value.length <= LOG_VALUE_FULL_MAX) {
174
+ return JSON.stringify(value);
175
+ }
176
+ return JSON.stringify(
177
+ `${value.slice(0, LOG_VALUE_EDGE)}\u2026${value.slice(-LOG_VALUE_EDGE)}`
178
+ );
179
+ }
180
+ var LOG_ERROR_MAX = 200;
181
+ var LOG_DATA_MAX = 500;
182
+ var LOG_STACK_FRAMES = 2;
183
+ var LOG_FRAME_MAX = 120;
184
+ function bound(text, max) {
185
+ return text.length <= max ? text : `${text.slice(0, max)}\u2026 (${text.length} chars)`;
186
+ }
187
+ function oneLine(text) {
188
+ return JSON.stringify(text).slice(1, -1);
189
+ }
190
+ function describeError(error) {
191
+ if (error instanceof Error) {
192
+ const name = error.name || "Error";
193
+ return bound(oneLine(`${name}: ${error.message}`), LOG_ERROR_MAX);
194
+ }
195
+ return bound(oneLine(String(error)), LOG_ERROR_MAX);
196
+ }
197
+ function describeLogData(data) {
198
+ if (data instanceof Error) {
199
+ const headerLines = String(data.message ?? "").split("\n").length;
200
+ const frames = (data.stack ?? "").split("\n").slice(headerLines).map((frame) => frame.trim()).filter((frame) => frame.startsWith("at ")).slice(0, LOG_STACK_FRAMES).map((frame) => bound(frame, LOG_FRAME_MAX));
201
+ return [describeError(data), ...frames].join(" | ");
202
+ }
203
+ let rendered;
204
+ try {
205
+ rendered = JSON.stringify(data);
206
+ } catch {
207
+ return "[unserializable]";
208
+ }
209
+ return bound(rendered ?? oneLine(String(data)), LOG_DATA_MAX);
210
+ }
211
+ function describeContent(value) {
212
+ return `${contentIdentity(value)}, ${contentExcerpt(value)}`;
213
+ }
214
+
5
215
  // src/config/logger.config.ts
6
216
  var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
7
217
  LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
@@ -129,7 +339,7 @@ var DevelopmentLogger = class _DevelopmentLogger {
129
339
  const locationInfo2 = callSite ? ` (${callSite.fileName}:${callSite.lineNumber})` : "";
130
340
  let logMessage = `${this.config.prefix} ${emoji} ${levelName} ${message}${locationInfo2}`;
131
341
  if (data !== void 0) {
132
- logMessage += ` ${JSON.stringify(data)}`;
342
+ logMessage += ` ${describeLogData(data)}`;
133
343
  }
134
344
  return logMessage;
135
345
  }
@@ -140,7 +350,7 @@ var DevelopmentLogger = class _DevelopmentLogger {
140
350
  const coloredLevel = `${levelColor}${Colors.BOLD}${levelName}${reset}`;
141
351
  const coloredMessage = `${levelColor}${message}${reset}`;
142
352
  const locationInfo = callSite ? `${Colors.DIM}${Colors.BRIGHT_BLACK} (${callSite.fileName}:${callSite.lineNumber})${reset}` : "";
143
- const dataInfo = data !== void 0 ? `${Colors.DIM}${Colors.CYAN} ${JSON.stringify(data)}${reset}` : "";
353
+ const dataInfo = data !== void 0 ? `${Colors.DIM}${Colors.CYAN} ${describeLogData(data)}${reset}` : "";
144
354
  return `${coloredPrefix} ${coloredEmoji} ${coloredLevel} ${coloredMessage}${locationInfo}${dataInfo}`;
145
355
  }
146
356
  getLevelColor(level) {
@@ -371,6 +581,65 @@ function normalizeLocale(tag) {
371
581
  }
372
582
  return out.join("-");
373
583
  }
584
+ var ISO639_2_TO_1 = Object.freeze({
585
+ ara: "ar",
586
+ ben: "bn",
587
+ bul: "bg",
588
+ ces: "cs",
589
+ cmn: "zh",
590
+ dan: "da",
591
+ deu: "de",
592
+ ell: "el",
593
+ eng: "en",
594
+ est: "et",
595
+ fas: "fa",
596
+ fin: "fi",
597
+ fra: "fr",
598
+ heb: "he",
599
+ hin: "hi",
600
+ hrv: "hr",
601
+ hun: "hu",
602
+ ind: "id",
603
+ isl: "is",
604
+ ita: "it",
605
+ jpn: "ja",
606
+ kor: "ko",
607
+ lav: "lv",
608
+ lit: "lt",
609
+ msa: "ms",
610
+ nld: "nl",
611
+ nor: "no",
612
+ pol: "pl",
613
+ por: "pt",
614
+ ron: "ro",
615
+ rus: "ru",
616
+ slk: "sk",
617
+ slv: "sl",
618
+ spa: "es",
619
+ srp: "sr",
620
+ swe: "sv",
621
+ tha: "th",
622
+ tur: "tr",
623
+ ukr: "uk",
624
+ urd: "ur",
625
+ vie: "vi",
626
+ yid: "yi",
627
+ zho: "zh"
628
+ });
629
+ function localeCandidates(tag) {
630
+ const normalized = tag.trim().toLowerCase();
631
+ if (!normalized) return [];
632
+ const parts = normalized.split("-");
633
+ const out = [];
634
+ while (parts.length > 0) {
635
+ const candidate = parts.join("-");
636
+ if (!out.includes(candidate)) out.push(candidate);
637
+ const twoLetter = ISO639_2_TO_1[candidate];
638
+ if (twoLetter && !out.includes(twoLetter)) out.push(twoLetter);
639
+ parts.pop();
640
+ }
641
+ return out;
642
+ }
374
643
  function matchLocale(requested, available, fallback) {
375
644
  if (available.length === 0) return fallback;
376
645
  const avail = available.map((raw) => ({
@@ -379,12 +648,10 @@ function matchLocale(requested, available, fallback) {
379
648
  }));
380
649
  for (const req of requested) {
381
650
  if (!req) continue;
382
- const reqLower = normalizeLocale(req).toLowerCase();
383
- const exact = avail.find((a) => a.lower === reqLower);
384
- if (exact) return exact.raw;
385
- const primary = primarySubtag(req);
386
- const byPrimary = avail.find((a) => a.lower === primary);
387
- if (byPrimary) return byPrimary.raw;
651
+ for (const candidate of localeCandidates(req)) {
652
+ const hit = avail.find((a) => a.lower === candidate);
653
+ if (hit) return hit.raw;
654
+ }
388
655
  }
389
656
  return fallback;
390
657
  }
@@ -2204,6 +2471,15 @@ var NetworkHandler = class {
2204
2471
  const config = this.repository.getConfig();
2205
2472
  return config.options?.preloadNamespaces || [];
2206
2473
  }
2474
+ /**
2475
+ * The host this handler talks to. Exposed so a failure can NAME it: "the
2476
+ * server is unreachable" is not actionable, and a default pointing at a dead
2477
+ * host is exactly the case where the reader needs to be told which host.
2478
+ */
2479
+ getBaseUrl() {
2480
+ const config = this.repository.getConfig();
2481
+ return config.options?.baseUrl || "";
2482
+ }
2207
2483
  };
2208
2484
 
2209
2485
  // src/content/canonical-tag.ts
@@ -3076,7 +3352,9 @@ var LionRapidCore = class {
3076
3352
  const processedText = this.processTranslationValue(unit.text, request);
3077
3353
  return processedText.replace(/<\/?[0-9]+\/?>/g, "");
3078
3354
  } catch (error) {
3079
- logger.warn(`ContentUnit processing failed for "${value}":`, error);
3355
+ logger.warn(
3356
+ `ContentUnit processing failed for key "${request.cleanKey}" \u2014 ${describeContent(value)}: ${describeError(error)}`
3357
+ );
3080
3358
  return this.processTranslationValue(value, request);
3081
3359
  }
3082
3360
  }
@@ -3129,7 +3407,9 @@ var LionRapidCore = class {
3129
3407
  }
3130
3408
  return processedValue;
3131
3409
  } catch (error) {
3132
- logger.warn(`Translation processing failed for "${value}":`, error);
3410
+ logger.warn(
3411
+ `Translation processing failed for key "${resolvedKey ?? "(no key)"}" \u2014 ${describeContent(value)}: ${describeError(error)}`
3412
+ );
3133
3413
  return value;
3134
3414
  }
3135
3415
  }
@@ -3846,8 +4126,9 @@ var LionRapidBuilder = class _LionRapidBuilder {
3846
4126
  const warnLoudlyOnce = (namespaceKey, error) => {
3847
4127
  if (!isLoudPreloadFailure(error) || warnedLoudly) return;
3848
4128
  warnedLoudly = true;
4129
+ const baseUrl = networkHandler.getBaseUrl() || "(no base URL configured)";
3849
4130
  console.warn(
3850
- `[LionRapid] Could not load translations for ${namespaceKey} \u2014 the page stays untranslated until the server is reachable.`,
4131
+ `[LionRapid] Could not load translations for ${namespaceKey} from ${baseUrl} \u2014 the page stays untranslated until that host is reachable. If it is wrong, set data-base-url on the snippet tag (or \`baseUrl\` in the network repository options).`,
3851
4132
  error
3852
4133
  );
3853
4134
  };
@@ -3975,7 +4256,7 @@ var _NetworkRepository = class _NetworkRepository {
3975
4256
  throw new TranslationNotFoundError(key);
3976
4257
  }
3977
4258
  if (typeof translation === "object" && "text" in translation) {
3978
- logger.debug(`ContentUnit text: "${translation.text}"`);
4259
+ logger.debug(`ContentUnit text: ${describeContent(translation.text)}`);
3979
4260
  return translation.text;
3980
4261
  }
3981
4262
  return String(translation);
@@ -4010,13 +4291,18 @@ var _NetworkRepository = class _NetworkRepository {
4010
4291
  throw new TranslationNotFoundError(key);
4011
4292
  }
4012
4293
  if (typeof translation === "object" && "text" in translation) {
4013
- logger.debug(`ContentUnit for "${key}": text="${translation.text}", styles=`, translation.styles);
4294
+ logger.debug(
4295
+ `ContentUnit for "${key}": text=${describeContent(translation.text)}, styles=`,
4296
+ translation.styles
4297
+ );
4014
4298
  return {
4015
4299
  text: translation.text,
4016
4300
  styles: translation.styles || {}
4017
4301
  };
4018
4302
  }
4019
- logger.debug(`Plain string for "${key}": "${translation}" (no styles)`);
4303
+ logger.debug(
4304
+ `Plain string for "${key}": ${describeContent(String(translation))} (no styles)`
4305
+ );
4020
4306
  return {
4021
4307
  text: String(translation),
4022
4308
  styles: {}
@@ -4824,167 +5110,6 @@ function replaceBlockInners(html, replacements) {
4824
5110
  return result;
4825
5111
  }
4826
5112
 
4827
- // src/browser/md5.ts
4828
- function safeAdd(x, y) {
4829
- const lsw = (x & 65535) + (y & 65535);
4830
- const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
4831
- return msw << 16 | lsw & 65535;
4832
- }
4833
- function bitRotateLeft(num, cnt) {
4834
- return num << cnt | num >>> 32 - cnt;
4835
- }
4836
- function md5cmn(q, a, b, x, s, t) {
4837
- return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
4838
- }
4839
- function md5ff(a, b, c, d, x, s, t) {
4840
- return md5cmn(b & c | ~b & d, a, b, x, s, t);
4841
- }
4842
- function md5gg(a, b, c, d, x, s, t) {
4843
- return md5cmn(b & d | c & ~d, a, b, x, s, t);
4844
- }
4845
- function md5hh(a, b, c, d, x, s, t) {
4846
- return md5cmn(b ^ c ^ d, a, b, x, s, t);
4847
- }
4848
- function md5ii(a, b, c, d, x, s, t) {
4849
- return md5cmn(c ^ (b | ~d), a, b, x, s, t);
4850
- }
4851
- function binlMD5(x, len) {
4852
- x[len >> 5] |= 128 << len % 32;
4853
- x[(len + 64 >>> 9 << 4) + 14] = len;
4854
- let a = 1732584193;
4855
- let b = -271733879;
4856
- let c = -1732584194;
4857
- let d = 271733878;
4858
- for (let i = 0; i < x.length; i += 16) {
4859
- const olda = a;
4860
- const oldb = b;
4861
- const oldc = c;
4862
- const oldd = d;
4863
- a = md5ff(a, b, c, d, x[i], 7, -680876936);
4864
- d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
4865
- c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
4866
- b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
4867
- a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
4868
- d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
4869
- c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
4870
- b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
4871
- a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
4872
- d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
4873
- c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
4874
- b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
4875
- a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
4876
- d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
4877
- c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
4878
- b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
4879
- a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
4880
- d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
4881
- c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
4882
- b = md5gg(b, c, d, a, x[i], 20, -373897302);
4883
- a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
4884
- d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
4885
- c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
4886
- b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
4887
- a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
4888
- d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
4889
- c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
4890
- b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
4891
- a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
4892
- d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
4893
- c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
4894
- b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
4895
- a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
4896
- d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
4897
- c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
4898
- b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
4899
- a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
4900
- d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
4901
- c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
4902
- b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
4903
- a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
4904
- d = md5hh(d, a, b, c, x[i + 0], 11, -358537222);
4905
- c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
4906
- b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
4907
- a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
4908
- d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
4909
- c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
4910
- b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
4911
- a = md5ii(a, b, c, d, x[i], 6, -198630844);
4912
- d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
4913
- c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
4914
- b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
4915
- a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
4916
- d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
4917
- c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
4918
- b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
4919
- a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
4920
- d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
4921
- c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
4922
- b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
4923
- a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
4924
- d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
4925
- c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
4926
- b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
4927
- a = safeAdd(a, olda);
4928
- b = safeAdd(b, oldb);
4929
- c = safeAdd(c, oldc);
4930
- d = safeAdd(d, oldd);
4931
- }
4932
- return [a, b, c, d];
4933
- }
4934
- function binl2hex(binarray) {
4935
- const hexTab = "0123456789abcdef";
4936
- let str = "";
4937
- for (let i = 0; i < binarray.length * 4; i++) {
4938
- str += hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
4939
- }
4940
- return str;
4941
- }
4942
- function utf8Bytes(str) {
4943
- if (typeof TextEncoder !== "undefined") {
4944
- return new TextEncoder().encode(str);
4945
- }
4946
- const out = [];
4947
- for (let i = 0; i < str.length; i++) {
4948
- const c = str.charCodeAt(i);
4949
- if (c < 128) {
4950
- out.push(c);
4951
- } else if (c < 2048) {
4952
- out.push(192 | c >> 6, 128 | c & 63);
4953
- } else if (c >= 55296 && c < 56320 && i + 1 < str.length) {
4954
- const c2 = str.charCodeAt(++i);
4955
- const cp = 65536 + (c - 55296 << 10) + (c2 - 56320);
4956
- out.push(
4957
- 240 | cp >> 18,
4958
- 128 | cp >> 12 & 63,
4959
- 128 | cp >> 6 & 63,
4960
- 128 | cp & 63
4961
- );
4962
- } else {
4963
- out.push(
4964
- 224 | c >> 12,
4965
- 128 | c >> 6 & 63,
4966
- 128 | c & 63
4967
- );
4968
- }
4969
- }
4970
- return new Uint8Array(out);
4971
- }
4972
- function bytes2binl(bytes) {
4973
- const bin = [];
4974
- for (let i = 0; i < bytes.length; i++) {
4975
- bin[i >> 2] |= bytes[i] << i % 4 * 8;
4976
- }
4977
- return bin;
4978
- }
4979
- function md5(str) {
4980
- const bytes = utf8Bytes(str);
4981
- return binl2hex(binlMD5(bytes2binl(bytes), bytes.length * 8));
4982
- }
4983
- function generateAutoKey(text) {
4984
- const trimmed = text.trim();
4985
- return "auto_" + md5(trimmed).substring(0, 12);
4986
- }
4987
-
4988
5113
  // src/browser/exclude-filter.ts
4989
5114
  var DEFAULT_PATTERNS = {
4990
5115
  emails: true,
@@ -5383,9 +5508,16 @@ var LocalStorageRepository = class {
5383
5508
  }
5384
5509
  };
5385
5510
 
5511
+ // src/browser/storage/cache-names.ts
5512
+ var CORE_CACHE_NAMES = Object.freeze({
5513
+ translations: "lionrapid-v1",
5514
+ offlineFloor: "lionrapid-offline-v1"
5515
+ });
5516
+ var CORE_CACHE_ENTRY_PREFIX = "https://cache.lionrapid.internal/";
5517
+
5386
5518
  // src/browser/storage/cache-storage-repository.ts
5387
- var CACHE_NAME = "lionrapid-v1";
5388
- var CACHE_PREFIX = "https://cache.lionrapid.internal/";
5519
+ var CACHE_NAME = CORE_CACHE_NAMES.translations;
5520
+ var CACHE_PREFIX = CORE_CACHE_ENTRY_PREFIX;
5389
5521
  var CacheStorageRepository = class {
5390
5522
  constructor(config = {}) {
5391
5523
  __publicField(this, "name", "CacheStorageRepository");
@@ -5585,17 +5717,24 @@ var CacheStorageRepository = class {
5585
5717
  }
5586
5718
  };
5587
5719
 
5720
+ // src/config/api.config.ts
5721
+ var DEFAULT_API_BASE_URL = "https://app.lionrapid.com";
5722
+
5588
5723
  // src/index.ts
5589
- var VERSION = "1.0.0";
5724
+ var VERSION = "0.6.6";
5590
5725
  export {
5726
+ CORE_CACHE_ENTRY_PREFIX,
5727
+ CORE_CACHE_NAMES,
5591
5728
  CacheManager,
5592
5729
  CacheStorageRepository,
5593
5730
  Colors,
5594
5731
  ContentValidator,
5732
+ DEFAULT_API_BASE_URL,
5595
5733
  EventEmitter,
5596
5734
  ExcludeFilter,
5597
5735
  HTMLSerializer,
5598
5736
  HandlerChain,
5737
+ ISO639_2_TO_1,
5599
5738
  LOCALE_TAG_REGEX,
5600
5739
  LionRapidBuilder,
5601
5740
  LionRapidCore,
@@ -5624,6 +5763,7 @@ export {
5624
5763
  isClientError,
5625
5764
  isRetryableError,
5626
5765
  isTranslationError,
5766
+ localeCandidates,
5627
5767
  localeDir,
5628
5768
  logger,
5629
5769
  matchLocale,