@arborium/arborium 2.8.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/arborium.d.ts +1 -1
  2. package/dist/arborium.iife.js +2 -2
  3. package/dist/arborium.iife.js.map +1 -1
  4. package/dist/arborium.js +268 -253
  5. package/dist/arborium.js.map +1 -1
  6. package/dist/arborium_host.js +3 -3
  7. package/dist/arborium_host_bg.wasm +0 -0
  8. package/dist/loader.d.ts +0 -1
  9. package/dist/plugins-manifest.d.ts +1 -1
  10. package/dist/themes/alabaster.css +41 -8
  11. package/dist/themes/ayu-dark.css +40 -9
  12. package/dist/themes/ayu-light.css +40 -9
  13. package/dist/themes/base-rustdoc.css +39 -4
  14. package/dist/themes/base.css +156 -16
  15. package/dist/themes/catppuccin-frappe.css +41 -8
  16. package/dist/themes/catppuccin-latte.css +41 -8
  17. package/dist/themes/catppuccin-macchiato.css +41 -8
  18. package/dist/themes/catppuccin-mocha.css +41 -8
  19. package/dist/themes/cobalt2.css +42 -8
  20. package/dist/themes/dayfox.css +41 -8
  21. package/dist/themes/desert256.css +61 -9
  22. package/dist/themes/dracula.css +40 -7
  23. package/dist/themes/ef-melissa-dark.css +42 -8
  24. package/dist/themes/github-dark.css +40 -7
  25. package/dist/themes/github-light.css +40 -7
  26. package/dist/themes/gruvbox-dark.css +41 -8
  27. package/dist/themes/gruvbox-light.css +41 -8
  28. package/dist/themes/kanagawa-dragon.css +40 -7
  29. package/dist/themes/light-owl.css +63 -9
  30. package/dist/themes/lucius-light.css +41 -7
  31. package/dist/themes/melange-dark.css +41 -7
  32. package/dist/themes/melange-light.css +41 -7
  33. package/dist/themes/monokai.css +40 -7
  34. package/dist/themes/nord.css +40 -7
  35. package/dist/themes/one-dark.css +41 -8
  36. package/dist/themes/rose-pine-moon.css +42 -8
  37. package/dist/themes/rustdoc-ayu.css +39 -6
  38. package/dist/themes/rustdoc-dark.css +39 -6
  39. package/dist/themes/rustdoc-light.css +39 -6
  40. package/dist/themes/solarized-dark.css +42 -8
  41. package/dist/themes/solarized-light.css +42 -8
  42. package/dist/themes/tokyo-night.css +41 -8
  43. package/dist/themes/zenburn.css +41 -8
  44. package/dist/types.d.ts +80 -15
  45. package/dist/utils.d.ts +0 -3
  46. package/package.json +1 -1
  47. /package/dist/{loader.test.d.ts → highlight.test.d.ts} +0 -0
package/dist/arborium.js CHANGED
@@ -1,4 +1,4 @@
1
- const L = "2.8.0", _ = [
1
+ const x = "2.11.0", $ = [
2
2
  "ada",
3
3
  "agda",
4
4
  "asciidoc",
@@ -10,6 +10,8 @@ const L = "2.8.0", _ = [
10
10
  "c-sharp",
11
11
  "caddy",
12
12
  "capnp",
13
+ "cedar",
14
+ "cedarschema",
13
15
  "clojure",
14
16
  "cmake",
15
17
  "cobol",
@@ -76,6 +78,7 @@ const L = "2.8.0", _ = [
76
78
  "sql",
77
79
  "ssh-config",
78
80
  "starlark",
81
+ "styx",
79
82
  "svelte",
80
83
  "swift",
81
84
  "textproto",
@@ -98,7 +101,7 @@ const L = "2.8.0", _ = [
98
101
  "yuri",
99
102
  "zig",
100
103
  "zsh"
101
- ], M = [
104
+ ], R = [
102
105
  {
103
106
  name: "attribute",
104
107
  tag: "at"
@@ -109,8 +112,8 @@ const L = "2.8.0", _ = [
109
112
  },
110
113
  {
111
114
  name: "constant.builtin",
112
- tag: "co",
113
- parentTag: "co"
115
+ tag: "cb",
116
+ parentTag: "constant"
114
117
  },
115
118
  {
116
119
  name: "constructor",
@@ -119,7 +122,7 @@ const L = "2.8.0", _ = [
119
122
  {
120
123
  name: "function.builtin",
121
124
  tag: "fb",
122
- parentTag: "f"
125
+ parentTag: "function"
123
126
  },
124
127
  {
125
128
  name: "function",
@@ -127,8 +130,8 @@ const L = "2.8.0", _ = [
127
130
  },
128
131
  {
129
132
  name: "function.method",
130
- tag: "f",
131
- parentTag: "f"
133
+ tag: "fm",
134
+ parentTag: "function"
132
135
  },
133
136
  {
134
137
  name: "keyword",
@@ -136,53 +139,53 @@ const L = "2.8.0", _ = [
136
139
  },
137
140
  {
138
141
  name: "keyword.conditional",
139
- tag: "k",
140
- parentTag: "k"
142
+ tag: "kc",
143
+ parentTag: "keyword"
141
144
  },
142
145
  {
143
146
  name: "keyword.coroutine",
144
- tag: "k",
145
- parentTag: "k"
147
+ tag: "ko",
148
+ parentTag: "keyword"
146
149
  },
147
150
  {
148
151
  name: "keyword.debug",
149
- tag: "k",
150
- parentTag: "k"
152
+ tag: "kd",
153
+ parentTag: "keyword"
151
154
  },
152
155
  {
153
156
  name: "keyword.exception",
154
- tag: "k",
155
- parentTag: "k"
157
+ tag: "ke",
158
+ parentTag: "keyword"
156
159
  },
157
160
  {
158
161
  name: "keyword.function",
159
- tag: "k",
160
- parentTag: "k"
162
+ tag: "kf",
163
+ parentTag: "keyword"
161
164
  },
162
165
  {
163
166
  name: "keyword.import",
164
- tag: "k",
165
- parentTag: "k"
167
+ tag: "ki",
168
+ parentTag: "keyword"
166
169
  },
167
170
  {
168
171
  name: "keyword.operator",
169
- tag: "o",
170
- parentTag: "k"
172
+ tag: "kp",
173
+ parentTag: "keyword"
171
174
  },
172
175
  {
173
176
  name: "keyword.repeat",
174
- tag: "k",
175
- parentTag: "k"
177
+ tag: "kr",
178
+ parentTag: "keyword"
176
179
  },
177
180
  {
178
181
  name: "keyword.return",
179
- tag: "k",
180
- parentTag: "k"
182
+ tag: "kt",
183
+ parentTag: "keyword"
181
184
  },
182
185
  {
183
186
  name: "keyword.type",
184
- tag: "k",
185
- parentTag: "k"
187
+ tag: "ky",
188
+ parentTag: "keyword"
186
189
  },
187
190
  {
188
191
  name: "operator",
@@ -198,18 +201,18 @@ const L = "2.8.0", _ = [
198
201
  },
199
202
  {
200
203
  name: "punctuation.bracket",
201
- tag: "p",
202
- parentTag: "p"
204
+ tag: "pb",
205
+ parentTag: "punctuation"
203
206
  },
204
207
  {
205
208
  name: "punctuation.delimiter",
206
- tag: "p",
207
- parentTag: "p"
209
+ tag: "pd",
210
+ parentTag: "punctuation"
208
211
  },
209
212
  {
210
213
  name: "punctuation.special",
211
- tag: "p",
212
- parentTag: "p"
214
+ tag: "ps",
215
+ parentTag: "punctuation"
213
216
  },
214
217
  {
215
218
  name: "string",
@@ -217,8 +220,8 @@ const L = "2.8.0", _ = [
217
220
  },
218
221
  {
219
222
  name: "string.special",
220
- tag: "s",
221
- parentTag: "s"
223
+ tag: "ss",
224
+ parentTag: "string"
222
225
  },
223
226
  {
224
227
  name: "tag",
@@ -226,13 +229,13 @@ const L = "2.8.0", _ = [
226
229
  },
227
230
  {
228
231
  name: "tag.delimiter",
229
- tag: "tg",
230
- parentTag: "tg"
232
+ tag: "td",
233
+ parentTag: "tag"
231
234
  },
232
235
  {
233
236
  name: "tag.error",
234
- tag: "err",
235
- parentTag: "tg"
237
+ tag: "te",
238
+ parentTag: "tag"
236
239
  },
237
240
  {
238
241
  name: "type",
@@ -240,13 +243,13 @@ const L = "2.8.0", _ = [
240
243
  },
241
244
  {
242
245
  name: "type.builtin",
243
- tag: "t",
244
- parentTag: "t"
246
+ tag: "tb",
247
+ parentTag: "type"
245
248
  },
246
249
  {
247
250
  name: "type.qualifier",
248
- tag: "t",
249
- parentTag: "t"
251
+ tag: "tq",
252
+ parentTag: "type"
250
253
  },
251
254
  {
252
255
  name: "variable",
@@ -254,13 +257,13 @@ const L = "2.8.0", _ = [
254
257
  },
255
258
  {
256
259
  name: "variable.builtin",
257
- tag: "v",
258
- parentTag: "v"
260
+ tag: "vb",
261
+ parentTag: "variable"
259
262
  },
260
263
  {
261
264
  name: "variable.parameter",
262
- tag: "v",
263
- parentTag: "v"
265
+ tag: "vp",
266
+ parentTag: "variable"
264
267
  },
265
268
  {
266
269
  name: "comment",
@@ -268,8 +271,8 @@ const L = "2.8.0", _ = [
268
271
  },
269
272
  {
270
273
  name: "comment.documentation",
271
- tag: "c",
272
- parentTag: "c"
274
+ tag: "cd",
275
+ parentTag: "comment"
273
276
  },
274
277
  {
275
278
  name: "macro",
@@ -314,7 +317,7 @@ const L = "2.8.0", _ = [
314
317
  {
315
318
  name: "string.escape",
316
319
  tag: "se",
317
- parentTag: "s"
320
+ parentTag: "string"
318
321
  },
319
322
  {
320
323
  name: "text.title",
@@ -322,11 +325,11 @@ const L = "2.8.0", _ = [
322
325
  },
323
326
  {
324
327
  name: "text.strikethrough",
325
- tag: "ts"
328
+ tag: "tx"
326
329
  },
327
330
  {
328
331
  name: "spell",
329
- tag: ""
332
+ tag: "sp"
330
333
  },
331
334
  {
332
335
  name: "embedded",
@@ -334,7 +337,7 @@ const L = "2.8.0", _ = [
334
337
  },
335
338
  {
336
339
  name: "error",
337
- tag: "err"
340
+ tag: "er"
338
341
  },
339
342
  {
340
343
  name: "namespace",
@@ -342,32 +345,33 @@ const L = "2.8.0", _ = [
342
345
  },
343
346
  {
344
347
  name: "include",
345
- tag: "k",
346
- parentTag: "k"
348
+ tag: "in",
349
+ parentTag: "keyword"
347
350
  },
348
351
  {
349
352
  name: "storageclass",
350
- tag: "k",
351
- parentTag: "k"
353
+ tag: "sc",
354
+ parentTag: "keyword"
352
355
  },
353
356
  {
354
357
  name: "repeat",
355
- tag: "k",
356
- parentTag: "k"
358
+ tag: "rp",
359
+ parentTag: "keyword"
357
360
  },
358
361
  {
359
362
  name: "conditional",
360
- tag: "k",
361
- parentTag: "k"
363
+ tag: "cn",
364
+ parentTag: "keyword"
362
365
  },
363
366
  {
364
367
  name: "exception",
365
- tag: "k",
366
- parentTag: "k"
368
+ tag: "ex",
369
+ parentTag: "keyword"
367
370
  },
368
371
  {
369
372
  name: "preproc",
370
- tag: "pp"
373
+ tag: "pp",
374
+ parentTag: "keyword"
371
375
  },
372
376
  {
373
377
  name: "none",
@@ -376,47 +380,47 @@ const L = "2.8.0", _ = [
376
380
  {
377
381
  name: "character",
378
382
  tag: "ch",
379
- parentTag: "s"
383
+ parentTag: "string"
380
384
  },
381
385
  {
382
386
  name: "character.special",
383
- tag: "ch",
384
- parentTag: "ch"
387
+ tag: "cs",
388
+ parentTag: "string"
385
389
  },
386
390
  {
387
391
  name: "variable.member",
388
- tag: "pr",
389
- parentTag: "v"
392
+ tag: "vm",
393
+ parentTag: "variable"
390
394
  },
391
395
  {
392
396
  name: "function.definition",
393
- tag: "f",
394
- parentTag: "f"
397
+ tag: "fd",
398
+ parentTag: "function"
395
399
  },
396
400
  {
397
401
  name: "type.definition",
398
- tag: "t",
399
- parentTag: "t"
402
+ tag: "tf",
403
+ parentTag: "type"
400
404
  },
401
405
  {
402
406
  name: "function.call",
403
- tag: "f",
404
- parentTag: "f"
407
+ tag: "fc",
408
+ parentTag: "function"
405
409
  },
406
410
  {
407
411
  name: "keyword.modifier",
408
- tag: "k",
409
- parentTag: "k"
412
+ tag: "km",
413
+ parentTag: "keyword"
410
414
  },
411
415
  {
412
416
  name: "keyword.directive",
413
- tag: "k",
414
- parentTag: "k"
417
+ tag: "dr",
418
+ parentTag: "keyword"
415
419
  },
416
420
  {
417
421
  name: "string.regexp",
418
- tag: "sr",
419
- parentTag: "s"
422
+ tag: "rx",
423
+ parentTag: "string"
420
424
  },
421
425
  {
422
426
  name: "nospell",
@@ -424,195 +428,207 @@ const L = "2.8.0", _ = [
424
428
  },
425
429
  {
426
430
  name: "float",
427
- tag: "n",
428
- parentTag: "n"
431
+ tag: "n"
429
432
  },
430
433
  {
431
434
  name: "boolean",
432
- tag: "bo",
433
- parentTag: "co"
435
+ tag: "cb"
434
436
  }
435
437
  ];
436
- function y(t, a) {
437
- const r = [...a].sort((n, o) => n.start - o.start);
438
- let e = "", s = 0;
439
- for (const n of r) {
440
- if (n.start < s) continue;
441
- n.start > s && (e += u(t.slice(s, n.start)));
442
- const o = U(n.capture), i = u(t.slice(n.start, n.end));
443
- o ? e += `<a-${o}>${i}</a-${o}>` : e += i, s = n.end;
444
- }
445
- return s < t.length && (e += u(t.slice(s))), e;
446
- }
447
- function U(t) {
448
- return t.startsWith("keyword") || t === "include" || t === "conditional" ? "k" : t.startsWith("function") || t.startsWith("method") ? "f" : t.startsWith("string") || t === "character" ? "s" : t.startsWith("comment") ? "c" : t.startsWith("type") ? "t" : t.startsWith("variable") ? "v" : t.startsWith("number") || t === "float" ? "n" : t.startsWith("operator") ? "o" : t.startsWith("punctuation") ? "p" : t.startsWith("tag") ? "tg" : t.startsWith("attribute") ? "at" : null;
438
+ function L(e) {
439
+ return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
449
440
  }
450
- function u(t) {
451
- return t.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
452
- }
453
- const v = {
441
+ const y = {
454
442
  manual: !1,
455
443
  theme: "one-dark",
456
444
  selector: "pre code",
457
445
  cdn: "jsdelivr",
458
- version: L,
446
+ version: x,
459
447
  // Precise version from manifest
460
448
  pluginsUrl: "",
461
449
  // Empty means use bundled manifest
462
450
  hostUrl: "",
463
451
  // Empty means use CDN based on version
464
- resolveJs: ({ baseUrl: t, path: a }) => import(
452
+ resolveJs: ({ baseUrl: e, path: t }) => import(
465
453
  /* @vite-ignore */
466
- `${t}/${a}`
454
+ `${e}/${t}`
467
455
  ),
468
- resolveWasm: ({ baseUrl: t, path: a }) => fetch(`${t}/${a}`)
456
+ resolveWasm: ({ baseUrl: e, path: t }) => fetch(`${e}/${t}`)
469
457
  };
470
- let p = null, g = null, d = { ...v };
471
- const h = /* @__PURE__ */ new Map(), T = new Set(_);
472
- let l = null, m = null;
473
- async function E(t) {
474
- if (t.pluginsUrl)
475
- return m || (m = (async () => {
476
- console.debug(`[arborium] Loading local plugins manifest from: ${t.pluginsUrl}`);
477
- const a = await fetch(t.pluginsUrl);
478
- if (!a.ok)
479
- throw new Error(`Failed to load plugins.json: ${a.status}`);
480
- l = await a.json(), console.debug(`[arborium] Loaded local manifest with ${l?.entries.length} entries`);
481
- })(), m);
458
+ let p = null, m = null, g = { ...y };
459
+ const h = /* @__PURE__ */ new Map(), b = /* @__PURE__ */ new Map(), k = new Set($);
460
+ let c = null, u = null;
461
+ async function _(e) {
462
+ if (e.pluginsUrl)
463
+ return u || (u = (async () => {
464
+ console.debug(`[arborium] Loading local plugins manifest from: ${e.pluginsUrl}`);
465
+ const t = await fetch(e.pluginsUrl);
466
+ if (!t.ok)
467
+ throw new Error(`Failed to load plugins.json: ${t.status}`);
468
+ c = await t.json(), console.debug(`[arborium] Loaded local manifest with ${c?.entries.length} entries`);
469
+ })(), u);
482
470
  }
483
- function W(t, a) {
484
- if (l) {
485
- const n = l.entries.find((o) => o.language === t);
486
- if (n)
487
- return n.local_js.substring(0, n.local_js.lastIndexOf("/"));
471
+ function U(e, t) {
472
+ if (c) {
473
+ const r = c.entries.find((o) => o.language === e);
474
+ if (r)
475
+ return r.local_js.substring(0, r.local_js.lastIndexOf("/"));
488
476
  }
489
- const r = a.cdn, e = a.version;
490
- let s;
491
- return r === "jsdelivr" ? s = "https://cdn.jsdelivr.net/npm" : r === "unpkg" ? s = "https://unpkg.com" : s = r, `${s}/@arborium/${t}@${e}`;
477
+ const n = t.cdn, s = t.version;
478
+ let a;
479
+ return n === "jsdelivr" ? a = "https://cdn.jsdelivr.net/npm" : n === "unpkg" ? a = "https://unpkg.com" : a = n, `${a}/@arborium/${e}@${s}`;
492
480
  }
493
- async function w(t, a) {
494
- const r = h.get(t);
495
- if (r)
496
- return console.debug(`[arborium] Grammar '${t}' found in cache`), r;
497
- if (await E(a), !T.has(t) && !l?.entries.some((e) => e.language === t))
498
- return console.debug(`[arborium] Grammar '${t}' not available`), null;
481
+ async function v(e, t) {
482
+ const n = h.get(e);
483
+ if (n)
484
+ return console.debug(`[arborium] Grammar '${e}' found in cache`), n;
485
+ const s = b.get(e);
486
+ if (s)
487
+ return console.debug(`[arborium] Grammar '${e}' already loading, waiting...`), s;
488
+ const a = E(e, t);
489
+ b.set(e, a);
499
490
  try {
500
- const e = W(t, a), s = a.resolveJs === v.resolveJs ? ` from ${e}/grammar.js` : "";
501
- console.debug(`[arborium] Loading grammar '${t}'${s}`);
502
- const n = await a.resolveJs({ language: t, baseUrl: e, path: "grammar.js" }), o = await a.resolveWasm({ language: t, baseUrl: e, path: "grammar_bg.wasm" });
503
- await n.default({ module_or_path: o });
504
- const i = n.language_id();
505
- i !== t && console.warn(`[arborium] Language ID mismatch: expected '${t}', got '${i}'`);
506
- const x = n.injection_languages(), k = {
507
- languageId: t,
508
- injectionLanguages: x,
509
- module: n,
510
- parse: ($) => {
511
- const b = n.create_session();
491
+ return await a;
492
+ } finally {
493
+ b.delete(e);
494
+ }
495
+ }
496
+ async function E(e, t) {
497
+ if (await _(t), !k.has(e) && !c?.entries.some((n) => n.language === e))
498
+ return console.debug(`[arborium] Grammar '${e}' not available`), null;
499
+ try {
500
+ const n = U(e, t), s = t.resolveJs === y.resolveJs ? ` from ${n}/grammar.js` : "";
501
+ console.debug(`[arborium] Loading grammar '${e}'${s}`);
502
+ const a = await t.resolveJs({
503
+ language: e,
504
+ baseUrl: n,
505
+ path: "grammar.js"
506
+ }), r = await t.resolveWasm({ language: e, baseUrl: n, path: "grammar_bg.wasm" });
507
+ await a.default({ module_or_path: r });
508
+ const o = a.language_id();
509
+ o !== e && console.warn(`[arborium] Language ID mismatch: expected '${e}', got '${o}'`);
510
+ const j = a.injection_languages(), w = {
511
+ languageId: e,
512
+ injectionLanguages: j,
513
+ module: a,
514
+ // UTF-8 parsing for Rust host
515
+ parseUtf8: (d) => {
516
+ const l = a.create_session();
517
+ try {
518
+ a.set_text(l, d);
519
+ const i = a.parse(l);
520
+ return {
521
+ spans: i.spans || [],
522
+ injections: i.injections || []
523
+ };
524
+ } catch (i) {
525
+ return console.error("[arborium] Parse error:", i), { spans: [], injections: [] };
526
+ } finally {
527
+ a.free_session(l);
528
+ }
529
+ },
530
+ // UTF-16 parsing for JavaScript public API
531
+ parseUtf16: (d) => {
532
+ const l = a.create_session();
512
533
  try {
513
- n.set_text(b, $);
514
- const c = n.parse(b);
534
+ a.set_text(l, d);
535
+ const i = a.parse_utf16(l);
515
536
  return {
516
- spans: c.spans || [],
517
- injections: c.injections || []
537
+ spans: i.spans || [],
538
+ injections: i.injections || []
518
539
  };
519
- } catch (c) {
520
- return console.error("[arborium] Parse error:", c), { spans: [], injections: [] };
540
+ } catch (i) {
541
+ return console.error("[arborium] Parse error:", i), { spans: [], injections: [] };
521
542
  } finally {
522
- n.free_session(b);
543
+ a.free_session(l);
523
544
  }
524
545
  }
525
546
  };
526
- return h.set(t, k), console.debug(`[arborium] Grammar '${t}' loaded successfully`), k;
527
- } catch (e) {
528
- return console.error(`[arborium] Failed to load grammar '${t}':`, e), null;
547
+ return h.set(e, w), console.debug(`[arborium] Grammar '${e}' loaded successfully`), w;
548
+ } catch (n) {
549
+ return console.error(`[arborium] Failed to load grammar '${e}':`, n), null;
529
550
  }
530
551
  }
531
552
  const f = /* @__PURE__ */ new Map();
532
- let C = 1;
533
- function S(t) {
553
+ let P = 1;
554
+ function q(e) {
534
555
  window.arboriumHost = {
535
556
  /** Check if a language is available (sync) */
536
- isLanguageAvailable(a) {
537
- return T.has(a) || h.has(a);
557
+ isLanguageAvailable(t) {
558
+ return k.has(t) || h.has(t);
538
559
  },
539
560
  /** Load a grammar and return a handle (async) */
540
- async loadGrammar(a) {
541
- const r = await w(a, t);
542
- if (!r) return 0;
543
- for (const [s, n] of f)
544
- if (n === r) return s;
545
- const e = C++;
546
- return f.set(e, r), e;
561
+ async loadGrammar(t) {
562
+ const n = await v(t, e);
563
+ if (!n) return 0;
564
+ for (const [a, r] of f)
565
+ if (r === n) return a;
566
+ const s = P++;
567
+ return f.set(s, n), s;
547
568
  },
548
- /** Parse text using a grammar handle (sync) */
549
- parse(a, r) {
550
- const e = f.get(a);
551
- return e ? e.parse(r) : { spans: [], injections: [] };
569
+ /** Parse text using a grammar handle (sync) - returns UTF-8 offsets for Rust host */
570
+ parse(t, n) {
571
+ const s = f.get(t);
572
+ return s ? s.parseUtf8(n) : { spans: [], injections: [] };
552
573
  }
553
574
  };
554
575
  }
555
- function q(t) {
556
- if (t.hostUrl)
557
- return t.hostUrl;
558
- const a = t.cdn, r = t.version;
559
- let e;
560
- a === "jsdelivr" ? e = "https://cdn.jsdelivr.net/npm" : a === "unpkg" ? e = "https://unpkg.com" : e = a;
561
- const s = r === "latest" ? "" : `@${r}`;
562
- return `${e}/@arborium/arborium${s}/dist`;
576
+ function C(e) {
577
+ if (e.hostUrl)
578
+ return e.hostUrl;
579
+ const t = e.cdn, n = e.version;
580
+ let s;
581
+ t === "jsdelivr" ? s = "https://cdn.jsdelivr.net/npm" : t === "unpkg" ? s = "https://unpkg.com" : s = t;
582
+ const a = n === "latest" ? "" : `@${n}`;
583
+ return `${s}/@arborium/arborium${a}/dist`;
563
584
  }
564
- async function I(t) {
565
- return p || g || (g = (async () => {
566
- S(t);
567
- const a = q(t), r = `${a}/arborium_host.js`, e = `${a}/arborium_host_bg.wasm`;
568
- console.debug(`[arborium] Loading host from ${r}`);
585
+ async function I(e) {
586
+ return p || m || (m = (async () => {
587
+ q(e);
588
+ const t = C(e), n = `${t}/arborium_host.js`, s = `${t}/arborium_host_bg.wasm`;
589
+ console.debug(`[arborium] Loading host from ${n}`);
569
590
  try {
570
- const s = await import(
591
+ const a = await import(
571
592
  /* @vite-ignore */
572
- r
593
+ n
573
594
  );
574
- return await s.default(e), p = {
575
- highlight: s.highlight,
576
- isLanguageAvailable: s.isLanguageAvailable
595
+ return await a.default(s), p = {
596
+ highlight: a.highlight,
597
+ isLanguageAvailable: a.isLanguageAvailable
577
598
  }, console.debug("[arborium] Host loaded successfully"), p;
578
- } catch (s) {
579
- return console.error("[arborium] Failed to load host:", s), null;
599
+ } catch (a) {
600
+ return console.error("[arborium] Failed to load host:", a), null;
580
601
  }
581
- })(), g);
602
+ })(), m);
582
603
  }
583
- async function P(t, a, r) {
584
- const e = j(r), s = await I(e);
585
- if (s)
604
+ async function S(e, t, n) {
605
+ const s = T(n), a = await I(s);
606
+ if (a)
586
607
  try {
587
- return s.highlight(t, a);
588
- } catch (i) {
589
- console.warn("Host highlight failed, falling back to JS:", i);
608
+ return a.highlight(e, t);
609
+ } catch (r) {
610
+ console.error("[arborium] Host highlight failed:", r);
590
611
  }
591
- const n = await w(t, e);
592
- if (!n)
593
- return u(a);
594
- const o = n.parse(a);
595
- return y(a, o.spans);
612
+ return L(t);
596
613
  }
597
- async function A(t, a) {
598
- const r = j(a), e = await w(t, r);
599
- if (!e) return null;
600
- const { module: s } = e;
614
+ async function A(e, t) {
615
+ const n = T(t), s = await v(e, n);
616
+ if (!s) return null;
617
+ const { module: a } = s;
601
618
  return {
602
- languageId: () => e.languageId,
603
- injectionLanguages: () => e.injectionLanguages,
604
- highlight: async (n) => {
605
- const o = e.parse(n);
606
- return y(n, o.spans);
607
- },
608
- parse: (n) => e.parse(n),
619
+ languageId: () => s.languageId,
620
+ injectionLanguages: () => s.injectionLanguages,
621
+ highlight: async (r) => S(e, r, t),
622
+ // Public API returns UTF-16 offsets for JavaScript compatibility
623
+ parse: (r) => s.parseUtf16(r),
609
624
  createSession: () => {
610
- const n = s.create_session();
625
+ const r = a.create_session();
611
626
  return {
612
- setText: (o) => s.set_text(n, o),
627
+ setText: (o) => a.set_text(r, o),
628
+ // Session.parse() returns UTF-16 offsets for JavaScript compatibility
613
629
  parse: () => {
614
630
  try {
615
- const o = s.parse(n);
631
+ const o = a.parse_utf16(r);
616
632
  return {
617
633
  spans: o.spans || [],
618
634
  injections: o.injections || []
@@ -621,21 +637,21 @@ async function A(t, a) {
621
637
  return console.error("[arborium] Session parse error:", o), { spans: [], injections: [] };
622
638
  }
623
639
  },
624
- cancel: () => s.cancel(n),
625
- free: () => s.free_session(n)
640
+ cancel: () => a.cancel(r),
641
+ free: () => a.free_session(r)
626
642
  };
627
643
  },
628
644
  dispose: () => {
629
645
  }
630
646
  };
631
647
  }
632
- function j(t) {
633
- return t ? { ...d, ...t } : { ...d };
648
+ function T(e) {
649
+ return e ? { ...g, ...e } : { ...g };
634
650
  }
635
- function G(t) {
636
- d = { ...d, ...t };
651
+ function H(e) {
652
+ g = { ...g, ...e };
637
653
  }
638
- const R = [
654
+ const G = [
639
655
  [/^#!.*\bpython[23]?\b/, "python"],
640
656
  [/^#!.*\bnode\b/, "javascript"],
641
657
  [/^#!.*\bdeno\b/, "typescript"],
@@ -648,7 +664,7 @@ const R = [
648
664
  [/^#!.*\bsh\b/, "bash"],
649
665
  [/^#!.*\blua\b/, "lua"],
650
666
  [/^#!.*\bawk\b/, "awk"]
651
- ], H = [
667
+ ], M = [
652
668
  // Rust - distinctive keywords
653
669
  [/\b(fn|impl|trait|pub\s+fn|let\s+mut|&mut|->)\b/, "rust"],
654
670
  // Go - distinctive keywords
@@ -708,23 +724,23 @@ const R = [
708
724
  // Zig
709
725
  [/\b(pub\s+fn|const\s+\w+\s*=|@import\(|comptime)\b/, "zig"]
710
726
  ];
711
- function F(t) {
712
- const a = t.split(`
727
+ function F(e) {
728
+ const t = e.split(`
713
729
  `)[0];
714
- for (const [r, e] of R)
715
- if (r.test(a))
716
- return e;
717
- for (const [r, e] of H)
718
- if (r.test(t))
719
- return e;
730
+ for (const [n, s] of G)
731
+ if (n.test(t))
732
+ return s;
733
+ for (const [n, s] of M)
734
+ if (n.test(e))
735
+ return s;
720
736
  return null;
721
737
  }
722
- function O(t) {
723
- const a = t.match(/\blanguage-(\w+)\b/);
724
- if (a) return a[1];
725
- const r = t.match(/\blang-(\w+)\b/);
726
- if (r) return r[1];
727
- const e = /* @__PURE__ */ new Set([
738
+ function z(e) {
739
+ const t = e.match(/\blanguage-(\w+)\b/);
740
+ if (t) return t[1];
741
+ const n = e.match(/\blang-(\w+)\b/);
742
+ if (n) return n[1];
743
+ const s = /* @__PURE__ */ new Set([
728
744
  "rust",
729
745
  "javascript",
730
746
  "typescript",
@@ -760,13 +776,13 @@ function O(t) {
760
776
  "console",
761
777
  "sh"
762
778
  ]);
763
- for (const s of t.split(/\s+/))
764
- if (e.has(s.toLowerCase()))
765
- return s.toLowerCase();
779
+ for (const a of e.split(/\s+/))
780
+ if (s.has(a.toLowerCase()))
781
+ return a.toLowerCase();
766
782
  return null;
767
783
  }
768
- function z(t) {
769
- const a = {
784
+ function N(e) {
785
+ const t = {
770
786
  js: "javascript",
771
787
  ts: "typescript",
772
788
  py: "python",
@@ -786,20 +802,19 @@ function z(t) {
786
802
  plaintext: "text",
787
803
  plain: "text",
788
804
  txt: "text"
789
- }, r = t.toLowerCase();
790
- return a[r] || r;
805
+ }, n = e.toLowerCase();
806
+ return t[n] || n;
791
807
  }
792
808
  export {
793
- _ as availableLanguages,
809
+ $ as availableLanguages,
794
810
  F as detectLanguage,
795
- O as extractLanguageFromClass,
796
- j as getConfig,
797
- P as highlight,
798
- M as highlights,
811
+ z as extractLanguageFromClass,
812
+ T as getConfig,
813
+ S as highlight,
814
+ R as highlights,
799
815
  A as loadGrammar,
800
- z as normalizeLanguage,
801
- L as pluginVersion,
802
- G as setConfig,
803
- y as spansToHtml
816
+ N as normalizeLanguage,
817
+ x as pluginVersion,
818
+ H as setConfig
804
819
  };
805
820
  //# sourceMappingURL=arborium.js.map