@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
@@ -23,14 +23,18 @@ var LionRapid = (() => {
23
23
  // src/index.ts
24
24
  var index_exports = {};
25
25
  __export(index_exports, {
26
+ CORE_CACHE_ENTRY_PREFIX: () => CORE_CACHE_ENTRY_PREFIX,
27
+ CORE_CACHE_NAMES: () => CORE_CACHE_NAMES,
26
28
  CacheManager: () => CacheManager,
27
29
  CacheStorageRepository: () => CacheStorageRepository,
28
30
  Colors: () => Colors,
29
31
  ContentValidator: () => ContentValidator,
32
+ DEFAULT_API_BASE_URL: () => DEFAULT_API_BASE_URL,
30
33
  EventEmitter: () => EventEmitter,
31
34
  ExcludeFilter: () => ExcludeFilter,
32
35
  HTMLSerializer: () => HTMLSerializer,
33
36
  HandlerChain: () => HandlerChain,
37
+ ISO639_2_TO_1: () => ISO639_2_TO_1,
34
38
  LOCALE_TAG_REGEX: () => LOCALE_TAG_REGEX,
35
39
  LionRapidBuilder: () => LionRapidBuilder,
36
40
  LionRapidCore: () => LionRapidCore,
@@ -59,6 +63,7 @@ var LionRapid = (() => {
59
63
  isClientError: () => isClientError,
60
64
  isRetryableError: () => isRetryableError,
61
65
  isTranslationError: () => isTranslationError,
66
+ localeCandidates: () => localeCandidates,
62
67
  localeDir: () => localeDir,
63
68
  logger: () => logger,
64
69
  matchLocale: () => matchLocale,
@@ -82,6 +87,216 @@ var LionRapid = (() => {
82
87
  splitBlocks: () => splitBlocks
83
88
  });
84
89
 
90
+ // src/browser/md5.ts
91
+ function safeAdd(x, y) {
92
+ const lsw = (x & 65535) + (y & 65535);
93
+ const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
94
+ return msw << 16 | lsw & 65535;
95
+ }
96
+ function bitRotateLeft(num, cnt) {
97
+ return num << cnt | num >>> 32 - cnt;
98
+ }
99
+ function md5cmn(q, a, b, x, s, t) {
100
+ return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
101
+ }
102
+ function md5ff(a, b, c, d, x, s, t) {
103
+ return md5cmn(b & c | ~b & d, a, b, x, s, t);
104
+ }
105
+ function md5gg(a, b, c, d, x, s, t) {
106
+ return md5cmn(b & d | c & ~d, a, b, x, s, t);
107
+ }
108
+ function md5hh(a, b, c, d, x, s, t) {
109
+ return md5cmn(b ^ c ^ d, a, b, x, s, t);
110
+ }
111
+ function md5ii(a, b, c, d, x, s, t) {
112
+ return md5cmn(c ^ (b | ~d), a, b, x, s, t);
113
+ }
114
+ function binlMD5(x, len) {
115
+ x[len >> 5] |= 128 << len % 32;
116
+ x[(len + 64 >>> 9 << 4) + 14] = len;
117
+ let a = 1732584193;
118
+ let b = -271733879;
119
+ let c = -1732584194;
120
+ let d = 271733878;
121
+ for (let i = 0; i < x.length; i += 16) {
122
+ const olda = a;
123
+ const oldb = b;
124
+ const oldc = c;
125
+ const oldd = d;
126
+ a = md5ff(a, b, c, d, x[i], 7, -680876936);
127
+ d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
128
+ c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
129
+ b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
130
+ a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
131
+ d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
132
+ c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
133
+ b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
134
+ a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
135
+ d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
136
+ c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
137
+ b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
138
+ a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
139
+ d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
140
+ c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
141
+ b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
142
+ a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
143
+ d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
144
+ c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
145
+ b = md5gg(b, c, d, a, x[i], 20, -373897302);
146
+ a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
147
+ d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
148
+ c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
149
+ b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
150
+ a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
151
+ d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
152
+ c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
153
+ b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
154
+ a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
155
+ d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
156
+ c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
157
+ b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
158
+ a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
159
+ d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
160
+ c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
161
+ b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
162
+ a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
163
+ d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
164
+ c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
165
+ b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
166
+ a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
167
+ d = md5hh(d, a, b, c, x[i + 0], 11, -358537222);
168
+ c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
169
+ b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
170
+ a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
171
+ d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
172
+ c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
173
+ b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
174
+ a = md5ii(a, b, c, d, x[i], 6, -198630844);
175
+ d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
176
+ c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
177
+ b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
178
+ a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
179
+ d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
180
+ c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
181
+ b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
182
+ a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
183
+ d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
184
+ c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
185
+ b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
186
+ a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
187
+ d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
188
+ c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
189
+ b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
190
+ a = safeAdd(a, olda);
191
+ b = safeAdd(b, oldb);
192
+ c = safeAdd(c, oldc);
193
+ d = safeAdd(d, oldd);
194
+ }
195
+ return [a, b, c, d];
196
+ }
197
+ function binl2hex(binarray) {
198
+ const hexTab = "0123456789abcdef";
199
+ let str = "";
200
+ for (let i = 0; i < binarray.length * 4; i++) {
201
+ str += hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
202
+ }
203
+ return str;
204
+ }
205
+ function utf8Bytes(str) {
206
+ if (typeof TextEncoder !== "undefined") {
207
+ return new TextEncoder().encode(str);
208
+ }
209
+ const out = [];
210
+ for (let i = 0; i < str.length; i++) {
211
+ const c = str.charCodeAt(i);
212
+ if (c < 128) {
213
+ out.push(c);
214
+ } else if (c < 2048) {
215
+ out.push(192 | c >> 6, 128 | c & 63);
216
+ } else if (c >= 55296 && c < 56320 && i + 1 < str.length) {
217
+ const c2 = str.charCodeAt(++i);
218
+ const cp = 65536 + (c - 55296 << 10) + (c2 - 56320);
219
+ out.push(
220
+ 240 | cp >> 18,
221
+ 128 | cp >> 12 & 63,
222
+ 128 | cp >> 6 & 63,
223
+ 128 | cp & 63
224
+ );
225
+ } else {
226
+ out.push(
227
+ 224 | c >> 12,
228
+ 128 | c >> 6 & 63,
229
+ 128 | c & 63
230
+ );
231
+ }
232
+ }
233
+ return new Uint8Array(out);
234
+ }
235
+ function bytes2binl(bytes) {
236
+ const bin = [];
237
+ for (let i = 0; i < bytes.length; i++) {
238
+ bin[i >> 2] |= bytes[i] << i % 4 * 8;
239
+ }
240
+ return bin;
241
+ }
242
+ function md5(str) {
243
+ const bytes = utf8Bytes(str);
244
+ return binl2hex(binlMD5(bytes2binl(bytes), bytes.length * 8));
245
+ }
246
+ function generateAutoKey(text) {
247
+ const trimmed = text.trim();
248
+ return "auto_" + md5(trimmed).substring(0, 12);
249
+ }
250
+
251
+ // src/utils/log-safe.ts
252
+ var LOG_VALUE_FULL_MAX = 200;
253
+ var LOG_VALUE_EDGE = 90;
254
+ function contentIdentity(value) {
255
+ return `${value.length} chars, md5:${md5(value.trim()).slice(0, 12)}`;
256
+ }
257
+ function contentExcerpt(value) {
258
+ if (value.length <= LOG_VALUE_FULL_MAX) {
259
+ return JSON.stringify(value);
260
+ }
261
+ return JSON.stringify(
262
+ `${value.slice(0, LOG_VALUE_EDGE)}\u2026${value.slice(-LOG_VALUE_EDGE)}`
263
+ );
264
+ }
265
+ var LOG_ERROR_MAX = 200;
266
+ var LOG_DATA_MAX = 500;
267
+ var LOG_STACK_FRAMES = 2;
268
+ var LOG_FRAME_MAX = 120;
269
+ function bound(text, max) {
270
+ return text.length <= max ? text : `${text.slice(0, max)}\u2026 (${text.length} chars)`;
271
+ }
272
+ function oneLine(text) {
273
+ return JSON.stringify(text).slice(1, -1);
274
+ }
275
+ function describeError(error) {
276
+ if (error instanceof Error) {
277
+ const name = error.name || "Error";
278
+ return bound(oneLine(`${name}: ${error.message}`), LOG_ERROR_MAX);
279
+ }
280
+ return bound(oneLine(String(error)), LOG_ERROR_MAX);
281
+ }
282
+ function describeLogData(data) {
283
+ if (data instanceof Error) {
284
+ const headerLines = String(data.message ?? "").split("\n").length;
285
+ 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));
286
+ return [describeError(data), ...frames].join(" | ");
287
+ }
288
+ let rendered;
289
+ try {
290
+ rendered = JSON.stringify(data);
291
+ } catch {
292
+ return "[unserializable]";
293
+ }
294
+ return bound(rendered ?? oneLine(String(data)), LOG_DATA_MAX);
295
+ }
296
+ function describeContent(value) {
297
+ return `${contentIdentity(value)}, ${contentExcerpt(value)}`;
298
+ }
299
+
85
300
  // src/config/logger.config.ts
86
301
  var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
87
302
  LogLevel2[LogLevel2["DEBUG"] = 0] = "DEBUG";
@@ -209,7 +424,7 @@ var LionRapid = (() => {
209
424
  const locationInfo2 = callSite ? ` (${callSite.fileName}:${callSite.lineNumber})` : "";
210
425
  let logMessage = `${this.config.prefix} ${emoji} ${levelName} ${message}${locationInfo2}`;
211
426
  if (data !== void 0) {
212
- logMessage += ` ${JSON.stringify(data)}`;
427
+ logMessage += ` ${describeLogData(data)}`;
213
428
  }
214
429
  return logMessage;
215
430
  }
@@ -220,7 +435,7 @@ var LionRapid = (() => {
220
435
  const coloredLevel = `${levelColor}${Colors.BOLD}${levelName}${reset}`;
221
436
  const coloredMessage = `${levelColor}${message}${reset}`;
222
437
  const locationInfo = callSite ? `${Colors.DIM}${Colors.BRIGHT_BLACK} (${callSite.fileName}:${callSite.lineNumber})${reset}` : "";
223
- const dataInfo = data !== void 0 ? `${Colors.DIM}${Colors.CYAN} ${JSON.stringify(data)}${reset}` : "";
438
+ const dataInfo = data !== void 0 ? `${Colors.DIM}${Colors.CYAN} ${describeLogData(data)}${reset}` : "";
224
439
  return `${coloredPrefix} ${coloredEmoji} ${coloredLevel} ${coloredMessage}${locationInfo}${dataInfo}`;
225
440
  }
226
441
  getLevelColor(level) {
@@ -451,6 +666,65 @@ var LionRapid = (() => {
451
666
  }
452
667
  return out.join("-");
453
668
  }
669
+ var ISO639_2_TO_1 = Object.freeze({
670
+ ara: "ar",
671
+ ben: "bn",
672
+ bul: "bg",
673
+ ces: "cs",
674
+ cmn: "zh",
675
+ dan: "da",
676
+ deu: "de",
677
+ ell: "el",
678
+ eng: "en",
679
+ est: "et",
680
+ fas: "fa",
681
+ fin: "fi",
682
+ fra: "fr",
683
+ heb: "he",
684
+ hin: "hi",
685
+ hrv: "hr",
686
+ hun: "hu",
687
+ ind: "id",
688
+ isl: "is",
689
+ ita: "it",
690
+ jpn: "ja",
691
+ kor: "ko",
692
+ lav: "lv",
693
+ lit: "lt",
694
+ msa: "ms",
695
+ nld: "nl",
696
+ nor: "no",
697
+ pol: "pl",
698
+ por: "pt",
699
+ ron: "ro",
700
+ rus: "ru",
701
+ slk: "sk",
702
+ slv: "sl",
703
+ spa: "es",
704
+ srp: "sr",
705
+ swe: "sv",
706
+ tha: "th",
707
+ tur: "tr",
708
+ ukr: "uk",
709
+ urd: "ur",
710
+ vie: "vi",
711
+ yid: "yi",
712
+ zho: "zh"
713
+ });
714
+ function localeCandidates(tag) {
715
+ const normalized = tag.trim().toLowerCase();
716
+ if (!normalized) return [];
717
+ const parts = normalized.split("-");
718
+ const out = [];
719
+ while (parts.length > 0) {
720
+ const candidate = parts.join("-");
721
+ if (!out.includes(candidate)) out.push(candidate);
722
+ const twoLetter = ISO639_2_TO_1[candidate];
723
+ if (twoLetter && !out.includes(twoLetter)) out.push(twoLetter);
724
+ parts.pop();
725
+ }
726
+ return out;
727
+ }
454
728
  function matchLocale(requested, available, fallback) {
455
729
  if (available.length === 0) return fallback;
456
730
  const avail = available.map((raw) => ({
@@ -459,12 +733,10 @@ var LionRapid = (() => {
459
733
  }));
460
734
  for (const req of requested) {
461
735
  if (!req) continue;
462
- const reqLower = normalizeLocale(req).toLowerCase();
463
- const exact = avail.find((a) => a.lower === reqLower);
464
- if (exact) return exact.raw;
465
- const primary = primarySubtag(req);
466
- const byPrimary = avail.find((a) => a.lower === primary);
467
- if (byPrimary) return byPrimary.raw;
736
+ for (const candidate of localeCandidates(req)) {
737
+ const hit = avail.find((a) => a.lower === candidate);
738
+ if (hit) return hit.raw;
739
+ }
468
740
  }
469
741
  return fallback;
470
742
  }
@@ -2284,6 +2556,15 @@ var LionRapid = (() => {
2284
2556
  const config = this.repository.getConfig();
2285
2557
  return config.options?.preloadNamespaces || [];
2286
2558
  }
2559
+ /**
2560
+ * The host this handler talks to. Exposed so a failure can NAME it: "the
2561
+ * server is unreachable" is not actionable, and a default pointing at a dead
2562
+ * host is exactly the case where the reader needs to be told which host.
2563
+ */
2564
+ getBaseUrl() {
2565
+ const config = this.repository.getConfig();
2566
+ return config.options?.baseUrl || "";
2567
+ }
2287
2568
  };
2288
2569
 
2289
2570
  // src/content/canonical-tag.ts
@@ -3156,7 +3437,9 @@ var LionRapid = (() => {
3156
3437
  const processedText = this.processTranslationValue(unit.text, request);
3157
3438
  return processedText.replace(/<\/?[0-9]+\/?>/g, "");
3158
3439
  } catch (error) {
3159
- logger.warn(`ContentUnit processing failed for "${value}":`, error);
3440
+ logger.warn(
3441
+ `ContentUnit processing failed for key "${request.cleanKey}" \u2014 ${describeContent(value)}: ${describeError(error)}`
3442
+ );
3160
3443
  return this.processTranslationValue(value, request);
3161
3444
  }
3162
3445
  }
@@ -3209,7 +3492,9 @@ var LionRapid = (() => {
3209
3492
  }
3210
3493
  return processedValue;
3211
3494
  } catch (error) {
3212
- logger.warn(`Translation processing failed for "${value}":`, error);
3495
+ logger.warn(
3496
+ `Translation processing failed for key "${resolvedKey ?? "(no key)"}" \u2014 ${describeContent(value)}: ${describeError(error)}`
3497
+ );
3213
3498
  return value;
3214
3499
  }
3215
3500
  }
@@ -3926,8 +4211,9 @@ var LionRapid = (() => {
3926
4211
  const warnLoudlyOnce = (namespaceKey, error) => {
3927
4212
  if (!isLoudPreloadFailure(error) || warnedLoudly) return;
3928
4213
  warnedLoudly = true;
4214
+ const baseUrl = networkHandler.getBaseUrl() || "(no base URL configured)";
3929
4215
  console.warn(
3930
- `[LionRapid] Could not load translations for ${namespaceKey} \u2014 the page stays untranslated until the server is reachable.`,
4216
+ `[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).`,
3931
4217
  error
3932
4218
  );
3933
4219
  };
@@ -4055,7 +4341,7 @@ var LionRapid = (() => {
4055
4341
  throw new TranslationNotFoundError(key);
4056
4342
  }
4057
4343
  if (typeof translation === "object" && "text" in translation) {
4058
- logger.debug(`ContentUnit text: "${translation.text}"`);
4344
+ logger.debug(`ContentUnit text: ${describeContent(translation.text)}`);
4059
4345
  return translation.text;
4060
4346
  }
4061
4347
  return String(translation);
@@ -4090,13 +4376,18 @@ var LionRapid = (() => {
4090
4376
  throw new TranslationNotFoundError(key);
4091
4377
  }
4092
4378
  if (typeof translation === "object" && "text" in translation) {
4093
- logger.debug(`ContentUnit for "${key}": text="${translation.text}", styles=`, translation.styles);
4379
+ logger.debug(
4380
+ `ContentUnit for "${key}": text=${describeContent(translation.text)}, styles=`,
4381
+ translation.styles
4382
+ );
4094
4383
  return {
4095
4384
  text: translation.text,
4096
4385
  styles: translation.styles || {}
4097
4386
  };
4098
4387
  }
4099
- logger.debug(`Plain string for "${key}": "${translation}" (no styles)`);
4388
+ logger.debug(
4389
+ `Plain string for "${key}": ${describeContent(String(translation))} (no styles)`
4390
+ );
4100
4391
  return {
4101
4392
  text: String(translation),
4102
4393
  styles: {}
@@ -4904,167 +5195,6 @@ var LionRapid = (() => {
4904
5195
  return result;
4905
5196
  }
4906
5197
 
4907
- // src/browser/md5.ts
4908
- function safeAdd(x, y) {
4909
- const lsw = (x & 65535) + (y & 65535);
4910
- const msw = (x >> 16) + (y >> 16) + (lsw >> 16);
4911
- return msw << 16 | lsw & 65535;
4912
- }
4913
- function bitRotateLeft(num, cnt) {
4914
- return num << cnt | num >>> 32 - cnt;
4915
- }
4916
- function md5cmn(q, a, b, x, s, t) {
4917
- return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);
4918
- }
4919
- function md5ff(a, b, c, d, x, s, t) {
4920
- return md5cmn(b & c | ~b & d, a, b, x, s, t);
4921
- }
4922
- function md5gg(a, b, c, d, x, s, t) {
4923
- return md5cmn(b & d | c & ~d, a, b, x, s, t);
4924
- }
4925
- function md5hh(a, b, c, d, x, s, t) {
4926
- return md5cmn(b ^ c ^ d, a, b, x, s, t);
4927
- }
4928
- function md5ii(a, b, c, d, x, s, t) {
4929
- return md5cmn(c ^ (b | ~d), a, b, x, s, t);
4930
- }
4931
- function binlMD5(x, len) {
4932
- x[len >> 5] |= 128 << len % 32;
4933
- x[(len + 64 >>> 9 << 4) + 14] = len;
4934
- let a = 1732584193;
4935
- let b = -271733879;
4936
- let c = -1732584194;
4937
- let d = 271733878;
4938
- for (let i = 0; i < x.length; i += 16) {
4939
- const olda = a;
4940
- const oldb = b;
4941
- const oldc = c;
4942
- const oldd = d;
4943
- a = md5ff(a, b, c, d, x[i], 7, -680876936);
4944
- d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);
4945
- c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);
4946
- b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
4947
- a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);
4948
- d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
4949
- c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
4950
- b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);
4951
- a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
4952
- d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
4953
- c = md5ff(c, d, a, b, x[i + 10], 17, -42063);
4954
- b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
4955
- a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
4956
- d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);
4957
- c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
4958
- b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
4959
- a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);
4960
- d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
4961
- c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);
4962
- b = md5gg(b, c, d, a, x[i], 20, -373897302);
4963
- a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);
4964
- d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);
4965
- c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);
4966
- b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);
4967
- a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);
4968
- d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
4969
- c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);
4970
- b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
4971
- a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
4972
- d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);
4973
- c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
4974
- b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
4975
- a = md5hh(a, b, c, d, x[i + 5], 4, -378558);
4976
- d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
4977
- c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
4978
- b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);
4979
- a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
4980
- d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
4981
- c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);
4982
- b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
4983
- a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);
4984
- d = md5hh(d, a, b, c, x[i + 0], 11, -358537222);
4985
- c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);
4986
- b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);
4987
- a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);
4988
- d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);
4989
- c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);
4990
- b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);
4991
- a = md5ii(a, b, c, d, x[i], 6, -198630844);
4992
- d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
4993
- c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
4994
- b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);
4995
- a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
4996
- d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
4997
- c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);
4998
- b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
4999
- a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
5000
- d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);
5001
- c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
5002
- b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
5003
- a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);
5004
- d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
5005
- c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);
5006
- b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);
5007
- a = safeAdd(a, olda);
5008
- b = safeAdd(b, oldb);
5009
- c = safeAdd(c, oldc);
5010
- d = safeAdd(d, oldd);
5011
- }
5012
- return [a, b, c, d];
5013
- }
5014
- function binl2hex(binarray) {
5015
- const hexTab = "0123456789abcdef";
5016
- let str = "";
5017
- for (let i = 0; i < binarray.length * 4; i++) {
5018
- str += hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 + 4 & 15) + hexTab.charAt(binarray[i >> 2] >> i % 4 * 8 & 15);
5019
- }
5020
- return str;
5021
- }
5022
- function utf8Bytes(str) {
5023
- if (typeof TextEncoder !== "undefined") {
5024
- return new TextEncoder().encode(str);
5025
- }
5026
- const out = [];
5027
- for (let i = 0; i < str.length; i++) {
5028
- const c = str.charCodeAt(i);
5029
- if (c < 128) {
5030
- out.push(c);
5031
- } else if (c < 2048) {
5032
- out.push(192 | c >> 6, 128 | c & 63);
5033
- } else if (c >= 55296 && c < 56320 && i + 1 < str.length) {
5034
- const c2 = str.charCodeAt(++i);
5035
- const cp = 65536 + (c - 55296 << 10) + (c2 - 56320);
5036
- out.push(
5037
- 240 | cp >> 18,
5038
- 128 | cp >> 12 & 63,
5039
- 128 | cp >> 6 & 63,
5040
- 128 | cp & 63
5041
- );
5042
- } else {
5043
- out.push(
5044
- 224 | c >> 12,
5045
- 128 | c >> 6 & 63,
5046
- 128 | c & 63
5047
- );
5048
- }
5049
- }
5050
- return new Uint8Array(out);
5051
- }
5052
- function bytes2binl(bytes) {
5053
- const bin = [];
5054
- for (let i = 0; i < bytes.length; i++) {
5055
- bin[i >> 2] |= bytes[i] << i % 4 * 8;
5056
- }
5057
- return bin;
5058
- }
5059
- function md5(str) {
5060
- const bytes = utf8Bytes(str);
5061
- return binl2hex(binlMD5(bytes2binl(bytes), bytes.length * 8));
5062
- }
5063
- function generateAutoKey(text) {
5064
- const trimmed = text.trim();
5065
- return "auto_" + md5(trimmed).substring(0, 12);
5066
- }
5067
-
5068
5198
  // src/browser/exclude-filter.ts
5069
5199
  var DEFAULT_PATTERNS = {
5070
5200
  emails: true,
@@ -5463,9 +5593,16 @@ var LionRapid = (() => {
5463
5593
  }
5464
5594
  };
5465
5595
 
5596
+ // src/browser/storage/cache-names.ts
5597
+ var CORE_CACHE_NAMES = Object.freeze({
5598
+ translations: "lionrapid-v1",
5599
+ offlineFloor: "lionrapid-offline-v1"
5600
+ });
5601
+ var CORE_CACHE_ENTRY_PREFIX = "https://cache.lionrapid.internal/";
5602
+
5466
5603
  // src/browser/storage/cache-storage-repository.ts
5467
- var CACHE_NAME = "lionrapid-v1";
5468
- var CACHE_PREFIX = "https://cache.lionrapid.internal/";
5604
+ var CACHE_NAME = CORE_CACHE_NAMES.translations;
5605
+ var CACHE_PREFIX = CORE_CACHE_ENTRY_PREFIX;
5469
5606
  var CacheStorageRepository = class {
5470
5607
  constructor(config = {}) {
5471
5608
  __publicField(this, "name", "CacheStorageRepository");
@@ -5665,8 +5802,11 @@ var LionRapid = (() => {
5665
5802
  }
5666
5803
  };
5667
5804
 
5805
+ // src/config/api.config.ts
5806
+ var DEFAULT_API_BASE_URL = "https://app.lionrapid.com";
5807
+
5668
5808
  // src/index.ts
5669
- var VERSION = "1.0.0";
5809
+ var VERSION = "0.6.6";
5670
5810
  return __toCommonJS(index_exports);
5671
5811
  })();
5672
5812
  //# sourceMappingURL=lionrapid.iife.js.map