@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
@@ -42,6 +42,216 @@ var __lionrapidAutoExports = (() => {
42
42
  parseConfig: () => parseConfig
43
43
  });
44
44
 
45
+ // src/browser/md5.ts
46
+ function safeAdd(x, y) {
47
+ const lsw = (x & 65535) + (y & 65535);
48
+ const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
49
+ return msw << 16 | lsw & 65535;
50
+ }
51
+ function bitRotateLeft(num, cnt) {
52
+ return num << cnt | num >>> 32 - cnt;
53
+ }
54
+ function md5cmn(q, a, b, x, s, t) {
55
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
56
+ }
57
+ function md5ff(a, b, c, d, x, s, t) {
58
+ return md5cmn(b & c | ~b & d, a, b, x, s, t);
59
+ }
60
+ function md5gg(a, b, c, d, x, s, t) {
61
+ return md5cmn(b & d | c & ~d, a, b, x, s, t);
62
+ }
63
+ function md5hh(a, b, c, d, x, s, t) {
64
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
65
+ }
66
+ function md5ii(a, b, c, d, x, s, t) {
67
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
68
+ }
69
+ function binlMD5(x, len) {
70
+ x[len >> 5] |= 128 << len % 32;
71
+ x[(len + 64 >>> 9 << 4) + 14] = len;
72
+ let a = 1732584193;
73
+ let b = -271733879;
74
+ let c = -1732584194;
75
+ let d = 271733878;
76
+ for (let i = 0; i < x.length; i += 16) {
77
+ const olda = a;
78
+ const oldb = b;
79
+ const oldc = c;
80
+ const oldd = d;
81
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
82
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
83
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
84
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
85
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
86
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
87
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
88
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
89
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
90
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
91
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
92
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
93
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
94
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
95
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
96
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
97
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
98
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
99
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
100
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
101
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
102
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
103
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
104
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
105
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
106
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
107
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
108
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
109
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
110
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
111
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
112
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
113
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
114
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
115
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
116
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
117
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
118
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
119
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
120
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
121
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
122
+ d = md5hh(d, a, b, c, x[i + 0], 11, -358537222);
123
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
124
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
125
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
126
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
127
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
128
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
129
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
130
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
131
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
132
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
133
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
134
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
135
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
136
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
137
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
138
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
139
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
140
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
141
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
142
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
143
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
144
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
145
+ a = safeAdd(a, olda);
146
+ b = safeAdd(b, oldb);
147
+ c = safeAdd(c, oldc);
148
+ d = safeAdd(d, oldd);
149
+ }
150
+ return [a, b, c, d];
151
+ }
152
+ function binl2hex(binarray) {
153
+ const hexTab = "0123456789abcdef";
154
+ let str = "";
155
+ for (let i = 0; i < binarray.length * 4; i++) {
156
+ str += hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
157
+ }
158
+ return str;
159
+ }
160
+ function utf8Bytes(str) {
161
+ if (typeof TextEncoder !== "undefined") {
162
+ return new TextEncoder().encode(str);
163
+ }
164
+ const out = [];
165
+ for (let i = 0; i < str.length; i++) {
166
+ const c = str.charCodeAt(i);
167
+ if (c < 128) {
168
+ out.push(c);
169
+ } else if (c < 2048) {
170
+ out.push(192 | c >> 6, 128 | c & 63);
171
+ } else if (c >= 55296 && c < 56320 && i + 1 < str.length) {
172
+ const c2 = str.charCodeAt(++i);
173
+ const cp = 65536 + (c - 55296 << 10) + (c2 - 56320);
174
+ out.push(
175
+ 240 | cp >> 18,
176
+ 128 | cp >> 12 & 63,
177
+ 128 | cp >> 6 & 63,
178
+ 128 | cp & 63
179
+ );
180
+ } else {
181
+ out.push(
182
+ 224 | c >> 12,
183
+ 128 | c >> 6 & 63,
184
+ 128 | c & 63
185
+ );
186
+ }
187
+ }
188
+ return new Uint8Array(out);
189
+ }
190
+ function bytes2binl(bytes) {
191
+ const bin = [];
192
+ for (let i = 0; i < bytes.length; i++) {
193
+ bin[i >> 2] |= bytes[i] << i % 4 * 8;
194
+ }
195
+ return bin;
196
+ }
197
+ function md5(str) {
198
+ const bytes = utf8Bytes(str);
199
+ return binl2hex(binlMD5(bytes2binl(bytes), bytes.length * 8));
200
+ }
201
+ function generateAutoKey(text) {
202
+ const trimmed = text.trim();
203
+ return "auto_" + md5(trimmed).substring(0, 12);
204
+ }
205
+
206
+ // src/utils/log-safe.ts
207
+ var LOG_VALUE_FULL_MAX = 200;
208
+ var LOG_VALUE_EDGE = 90;
209
+ function contentIdentity(value) {
210
+ return `${value.length} chars, md5:${md5(value.trim()).slice(0, 12)}`;
211
+ }
212
+ function contentExcerpt(value) {
213
+ if (value.length <= LOG_VALUE_FULL_MAX) {
214
+ return JSON.stringify(value);
215
+ }
216
+ return JSON.stringify(
217
+ `${value.slice(0, LOG_VALUE_EDGE)}\u2026${value.slice(-LOG_VALUE_EDGE)}`
218
+ );
219
+ }
220
+ var LOG_ERROR_MAX = 200;
221
+ var LOG_DATA_MAX = 500;
222
+ var LOG_STACK_FRAMES = 2;
223
+ var LOG_FRAME_MAX = 120;
224
+ function bound(text, max) {
225
+ return text.length <= max ? text : `${text.slice(0, max)}\u2026 (${text.length} chars)`;
226
+ }
227
+ function oneLine(text) {
228
+ return JSON.stringify(text).slice(1, -1);
229
+ }
230
+ function describeError(error) {
231
+ if (error instanceof Error) {
232
+ const name = error.name || "Error";
233
+ return bound(oneLine(`${name}: ${error.message}`), LOG_ERROR_MAX);
234
+ }
235
+ return bound(oneLine(String(error)), LOG_ERROR_MAX);
236
+ }
237
+ function describeLogData(data) {
238
+ if (data instanceof Error) {
239
+ const headerLines = String(data.message ?? "").split("\n").length;
240
+ 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));
241
+ return [describeError(data), ...frames].join(" | ");
242
+ }
243
+ let rendered;
244
+ try {
245
+ rendered = JSON.stringify(data);
246
+ } catch {
247
+ return "[unserializable]";
248
+ }
249
+ return bound(rendered ?? oneLine(String(data)), LOG_DATA_MAX);
250
+ }
251
+ function describeContent(value) {
252
+ return `${contentIdentity(value)}, ${contentExcerpt(value)}`;
253
+ }
254
+
45
255
  // src/config/logger.config.ts
46
256
  var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
47
257
  LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
@@ -169,7 +379,7 @@ var __lionrapidAutoExports = (() => {
169
379
  const locationInfo2 = callSite ? ` (${callSite.fileName}:${callSite.lineNumber})` : "";
170
380
  let logMessage = `${this.config.prefix} ${emoji} ${levelName} ${message}${locationInfo2}`;
171
381
  if (data !== void 0) {
172
- logMessage += ` ${JSON.stringify(data)}`;
382
+ logMessage += ` ${describeLogData(data)}`;
173
383
  }
174
384
  return logMessage;
175
385
  }
@@ -180,7 +390,7 @@ var __lionrapidAutoExports = (() => {
180
390
  const coloredLevel = `${levelColor}${Colors.BOLD}${levelName}${reset}`;
181
391
  const coloredMessage = `${levelColor}${message}${reset}`;
182
392
  const locationInfo = callSite ? `${Colors.DIM}${Colors.BRIGHT_BLACK} (${callSite.fileName}:${callSite.lineNumber})${reset}` : "";
183
- const dataInfo = data !== void 0 ? `${Colors.DIM}${Colors.CYAN} ${JSON.stringify(data)}${reset}` : "";
393
+ const dataInfo = data !== void 0 ? `${Colors.DIM}${Colors.CYAN} ${describeLogData(data)}${reset}` : "";
184
394
  return `${coloredPrefix} ${coloredEmoji} ${coloredLevel} ${coloredMessage}${locationInfo}${dataInfo}`;
185
395
  }
186
396
  getLevelColor(level) {
@@ -358,6 +568,65 @@ var __lionrapidAutoExports = (() => {
358
568
  }
359
569
  return out.join("-");
360
570
  }
571
+ var ISO639_2_TO_1 = Object.freeze({
572
+ ara: "ar",
573
+ ben: "bn",
574
+ bul: "bg",
575
+ ces: "cs",
576
+ cmn: "zh",
577
+ dan: "da",
578
+ deu: "de",
579
+ ell: "el",
580
+ eng: "en",
581
+ est: "et",
582
+ fas: "fa",
583
+ fin: "fi",
584
+ fra: "fr",
585
+ heb: "he",
586
+ hin: "hi",
587
+ hrv: "hr",
588
+ hun: "hu",
589
+ ind: "id",
590
+ isl: "is",
591
+ ita: "it",
592
+ jpn: "ja",
593
+ kor: "ko",
594
+ lav: "lv",
595
+ lit: "lt",
596
+ msa: "ms",
597
+ nld: "nl",
598
+ nor: "no",
599
+ pol: "pl",
600
+ por: "pt",
601
+ ron: "ro",
602
+ rus: "ru",
603
+ slk: "sk",
604
+ slv: "sl",
605
+ spa: "es",
606
+ srp: "sr",
607
+ swe: "sv",
608
+ tha: "th",
609
+ tur: "tr",
610
+ ukr: "uk",
611
+ urd: "ur",
612
+ vie: "vi",
613
+ yid: "yi",
614
+ zho: "zh"
615
+ });
616
+ function localeCandidates(tag) {
617
+ const normalized = tag.trim().toLowerCase();
618
+ if (!normalized) return [];
619
+ const parts = normalized.split("-");
620
+ const out = [];
621
+ while (parts.length > 0) {
622
+ const candidate = parts.join("-");
623
+ if (!out.includes(candidate)) out.push(candidate);
624
+ const twoLetter = ISO639_2_TO_1[candidate];
625
+ if (twoLetter && !out.includes(twoLetter)) out.push(twoLetter);
626
+ parts.pop();
627
+ }
628
+ return out;
629
+ }
361
630
  function matchLocale(requested, available, fallback) {
362
631
  if (available.length === 0) return fallback;
363
632
  const avail = available.map((raw) => ({
@@ -366,12 +635,10 @@ var __lionrapidAutoExports = (() => {
366
635
  }));
367
636
  for (const req of requested) {
368
637
  if (!req) continue;
369
- const reqLower = normalizeLocale(req).toLowerCase();
370
- const exact = avail.find((a) => a.lower === reqLower);
371
- if (exact) return exact.raw;
372
- const primary = primarySubtag(req);
373
- const byPrimary = avail.find((a) => a.lower === primary);
374
- if (byPrimary) return byPrimary.raw;
638
+ for (const candidate of localeCandidates(req)) {
639
+ const hit = avail.find((a) => a.lower === candidate);
640
+ if (hit) return hit.raw;
641
+ }
375
642
  }
376
643
  return fallback;
377
644
  }
@@ -2177,6 +2444,15 @@ var __lionrapidAutoExports = (() => {
2177
2444
  const config = this.repository.getConfig();
2178
2445
  return config.options?.preloadNamespaces || [];
2179
2446
  }
2447
+ /**
2448
+ * The host this handler talks to. Exposed so a failure can NAME it: "the
2449
+ * server is unreachable" is not actionable, and a default pointing at a dead
2450
+ * host is exactly the case where the reader needs to be told which host.
2451
+ */
2452
+ getBaseUrl() {
2453
+ const config = this.repository.getConfig();
2454
+ return config.options?.baseUrl || "";
2455
+ }
2180
2456
  };
2181
2457
 
2182
2458
  // src/content/canonical-tag.ts
@@ -3023,7 +3299,9 @@ var __lionrapidAutoExports = (() => {
3023
3299
  const processedText = this.processTranslationValue(unit.text, request);
3024
3300
  return processedText.replace(/<\/?[0-9]+\/?>/g, "");
3025
3301
  } catch (error) {
3026
- logger.warn(`ContentUnit processing failed for "${value}":`, error);
3302
+ logger.warn(
3303
+ `ContentUnit processing failed for key "${request.cleanKey}" \u2014 ${describeContent(value)}: ${describeError(error)}`
3304
+ );
3027
3305
  return this.processTranslationValue(value, request);
3028
3306
  }
3029
3307
  }
@@ -3076,7 +3354,9 @@ var __lionrapidAutoExports = (() => {
3076
3354
  }
3077
3355
  return processedValue;
3078
3356
  } catch (error) {
3079
- logger.warn(`Translation processing failed for "${value}":`, error);
3357
+ logger.warn(
3358
+ `Translation processing failed for key "${resolvedKey ?? "(no key)"}" \u2014 ${describeContent(value)}: ${describeError(error)}`
3359
+ );
3080
3360
  return value;
3081
3361
  }
3082
3362
  }
@@ -3793,8 +4073,9 @@ var __lionrapidAutoExports = (() => {
3793
4073
  const warnLoudlyOnce = (namespaceKey, error) => {
3794
4074
  if (!isLoudPreloadFailure(error) || warnedLoudly) return;
3795
4075
  warnedLoudly = true;
4076
+ const baseUrl = networkHandler.getBaseUrl() || "(no base URL configured)";
3796
4077
  console.warn(
3797
- `[LionRapid] Could not load translations for ${namespaceKey} \u2014 the page stays untranslated until the server is reachable.`,
4078
+ `[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).`,
3798
4079
  error
3799
4080
  );
3800
4081
  };
@@ -3922,7 +4203,7 @@ var __lionrapidAutoExports = (() => {
3922
4203
  throw new TranslationNotFoundError(key);
3923
4204
  }
3924
4205
  if (typeof translation === "object" && "text" in translation) {
3925
- logger.debug(`ContentUnit text: "${translation.text}"`);
4206
+ logger.debug(`ContentUnit text: ${describeContent(translation.text)}`);
3926
4207
  return translation.text;
3927
4208
  }
3928
4209
  return String(translation);
@@ -3957,13 +4238,18 @@ var __lionrapidAutoExports = (() => {
3957
4238
  throw new TranslationNotFoundError(key);
3958
4239
  }
3959
4240
  if (typeof translation === "object" && "text" in translation) {
3960
- logger.debug(`ContentUnit for "${key}": text="${translation.text}", styles=`, translation.styles);
4241
+ logger.debug(
4242
+ `ContentUnit for "${key}": text=${describeContent(translation.text)}, styles=`,
4243
+ translation.styles
4244
+ );
3961
4245
  return {
3962
4246
  text: translation.text,
3963
4247
  styles: translation.styles || {}
3964
4248
  };
3965
4249
  }
3966
- logger.debug(`Plain string for "${key}": "${translation}" (no styles)`);
4250
+ logger.debug(
4251
+ `Plain string for "${key}": ${describeContent(String(translation))} (no styles)`
4252
+ );
3967
4253
  return {
3968
4254
  text: String(translation),
3969
4255
  styles: {}
@@ -4546,167 +4832,6 @@ var __lionrapidAutoExports = (() => {
4546
4832
  return { text, styles };
4547
4833
  }
4548
4834
 
4549
- // src/browser/md5.ts
4550
- function safeAdd(x, y) {
4551
- const lsw = (x & 65535) + (y & 65535);
4552
- const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
4553
- return msw << 16 | lsw & 65535;
4554
- }
4555
- function bitRotateLeft(num, cnt) {
4556
- return num << cnt | num >>> 32 - cnt;
4557
- }
4558
- function md5cmn(q, a, b, x, s, t) {
4559
- return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
4560
- }
4561
- function md5ff(a, b, c, d, x, s, t) {
4562
- return md5cmn(b & c | ~b & d, a, b, x, s, t);
4563
- }
4564
- function md5gg(a, b, c, d, x, s, t) {
4565
- return md5cmn(b & d | c & ~d, a, b, x, s, t);
4566
- }
4567
- function md5hh(a, b, c, d, x, s, t) {
4568
- return md5cmn(b ^ c ^ d, a, b, x, s, t);
4569
- }
4570
- function md5ii(a, b, c, d, x, s, t) {
4571
- return md5cmn(c ^ (b | ~d), a, b, x, s, t);
4572
- }
4573
- function binlMD5(x, len) {
4574
- x[len >> 5] |= 128 << len % 32;
4575
- x[(len + 64 >>> 9 << 4) + 14] = len;
4576
- let a = 1732584193;
4577
- let b = -271733879;
4578
- let c = -1732584194;
4579
- let d = 271733878;
4580
- for (let i = 0; i < x.length; i += 16) {
4581
- const olda = a;
4582
- const oldb = b;
4583
- const oldc = c;
4584
- const oldd = d;
4585
- a = md5ff(a, b, c, d, x[i], 7, -680876936);
4586
- d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
4587
- c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
4588
- b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
4589
- a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
4590
- d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
4591
- c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
4592
- b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
4593
- a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
4594
- d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
4595
- c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
4596
- b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
4597
- a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
4598
- d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
4599
- c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
4600
- b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
4601
- a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
4602
- d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
4603
- c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
4604
- b = md5gg(b, c, d, a, x[i], 20, -373897302);
4605
- a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
4606
- d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
4607
- c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
4608
- b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
4609
- a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
4610
- d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
4611
- c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
4612
- b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
4613
- a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
4614
- d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
4615
- c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
4616
- b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
4617
- a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
4618
- d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
4619
- c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
4620
- b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
4621
- a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
4622
- d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
4623
- c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
4624
- b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
4625
- a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
4626
- d = md5hh(d, a, b, c, x[i + 0], 11, -358537222);
4627
- c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
4628
- b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
4629
- a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
4630
- d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
4631
- c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
4632
- b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
4633
- a = md5ii(a, b, c, d, x[i], 6, -198630844);
4634
- d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
4635
- c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
4636
- b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
4637
- a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
4638
- d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
4639
- c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
4640
- b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
4641
- a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
4642
- d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
4643
- c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
4644
- b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
4645
- a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
4646
- d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
4647
- c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
4648
- b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
4649
- a = safeAdd(a, olda);
4650
- b = safeAdd(b, oldb);
4651
- c = safeAdd(c, oldc);
4652
- d = safeAdd(d, oldd);
4653
- }
4654
- return [a, b, c, d];
4655
- }
4656
- function binl2hex(binarray) {
4657
- const hexTab = "0123456789abcdef";
4658
- let str = "";
4659
- for (let i = 0; i < binarray.length * 4; i++) {
4660
- str += hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
4661
- }
4662
- return str;
4663
- }
4664
- function utf8Bytes(str) {
4665
- if (typeof TextEncoder !== "undefined") {
4666
- return new TextEncoder().encode(str);
4667
- }
4668
- const out = [];
4669
- for (let i = 0; i < str.length; i++) {
4670
- const c = str.charCodeAt(i);
4671
- if (c < 128) {
4672
- out.push(c);
4673
- } else if (c < 2048) {
4674
- out.push(192 | c >> 6, 128 | c & 63);
4675
- } else if (c >= 55296 && c < 56320 && i + 1 < str.length) {
4676
- const c2 = str.charCodeAt(++i);
4677
- const cp = 65536 + (c - 55296 << 10) + (c2 - 56320);
4678
- out.push(
4679
- 240 | cp >> 18,
4680
- 128 | cp >> 12 & 63,
4681
- 128 | cp >> 6 & 63,
4682
- 128 | cp & 63
4683
- );
4684
- } else {
4685
- out.push(
4686
- 224 | c >> 12,
4687
- 128 | c >> 6 & 63,
4688
- 128 | c & 63
4689
- );
4690
- }
4691
- }
4692
- return new Uint8Array(out);
4693
- }
4694
- function bytes2binl(bytes) {
4695
- const bin = [];
4696
- for (let i = 0; i < bytes.length; i++) {
4697
- bin[i >> 2] |= bytes[i] << i % 4 * 8;
4698
- }
4699
- return bin;
4700
- }
4701
- function md5(str) {
4702
- const bytes = utf8Bytes(str);
4703
- return binl2hex(binlMD5(bytes2binl(bytes), bytes.length * 8));
4704
- }
4705
- function generateAutoKey(text) {
4706
- const trimmed = text.trim();
4707
- return "auto_" + md5(trimmed).substring(0, 12);
4708
- }
4709
-
4710
4835
  // src/browser/block-extractor.ts
4711
4836
  var BLOCK_SELECTOR = "p,h1,h2,h3,h4,h5,h6,li,td,th,label,button,figcaption,dt,dd,summary,caption";
4712
4837
  var INLINE_BLOCK_SELECTOR = "a";
@@ -5988,9 +6113,16 @@ var __lionrapidAutoExports = (() => {
5988
6113
  }
5989
6114
  };
5990
6115
 
6116
+ // src/browser/storage/cache-names.ts
6117
+ var CORE_CACHE_NAMES = Object.freeze({
6118
+ translations: "lionrapid-v1",
6119
+ offlineFloor: "lionrapid-offline-v1"
6120
+ });
6121
+ var CORE_CACHE_ENTRY_PREFIX = "https://cache.lionrapid.internal/";
6122
+
5991
6123
  // src/browser/storage/cache-storage-repository.ts
5992
- var CACHE_NAME = "lionrapid-v1";
5993
- var CACHE_PREFIX = "https://cache.lionrapid.internal/";
6124
+ var CACHE_NAME = CORE_CACHE_NAMES.translations;
6125
+ var CACHE_PREFIX = CORE_CACHE_ENTRY_PREFIX;
5994
6126
  var CacheStorageRepository = class {
5995
6127
  constructor(config = {}) {
5996
6128
  __publicField(this, "name", "CacheStorageRepository");
@@ -6190,6 +6322,9 @@ var __lionrapidAutoExports = (() => {
6190
6322
  }
6191
6323
  };
6192
6324
 
6325
+ // src/config/api.config.ts
6326
+ var DEFAULT_API_BASE_URL = "https://app.lionrapid.com";
6327
+
6193
6328
  // src/browser/auto-init.ts
6194
6329
  function resolveWritePolicy(apiKey) {
6195
6330
  const isPublishable = apiKey.startsWith("pk_");
@@ -6238,7 +6373,7 @@ var __lionrapidAutoExports = (() => {
6238
6373
  }
6239
6374
  function parseConfig(script) {
6240
6375
  const apiKey = script.dataset.apiKey || "";
6241
- const baseUrl = script.dataset.baseUrl || "https://api.lionrapid.com";
6376
+ const baseUrl = script.dataset.baseUrl || DEFAULT_API_BASE_URL;
6242
6377
  const defaultLocale = script.dataset.defaultLocale || "en";
6243
6378
  const namespace = script.dataset.namespace || "default";
6244
6379
  const languages = (script.dataset.languages || defaultLocale).split(",").map((s) => s.trim()).filter(Boolean);
@@ -6396,7 +6531,7 @@ var __lionrapidAutoExports = (() => {
6396
6531
  enabled: true,
6397
6532
  options: {
6398
6533
  ttl: Number.MAX_SAFE_INTEGER,
6399
- cacheName: "lionrapid-offline-v1"
6534
+ cacheName: CORE_CACHE_NAMES.offlineFloor
6400
6535
  }
6401
6536
  })
6402
6537
  );