rip-lang 3.15.2 → 3.15.4

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.
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  </p>
10
10
 
11
11
  <p align="center">
12
- <a href="https://github.com/shreeve/rip-lang/commits/main"><img src="https://img.shields.io/badge/version-3.15.2-blue.svg" alt="Version"></a>
12
+ <a href="https://github.com/shreeve/rip-lang/commits/main"><img src="https://img.shields.io/badge/version-3.15.4-blue.svg" alt="Version"></a>
13
13
  <a href="#zero-dependencies"><img src="https://img.shields.io/badge/dependencies-ZERO-brightgreen.svg" alt="Dependencies"></a>
14
14
  <a href="#"><img src="https://img.shields.io/badge/tests-1%2C436%2F1%2C436-brightgreen.svg" alt="Tests"></a>
15
15
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="License"></a>
package/docs/dist/rip.js CHANGED
@@ -8308,6 +8308,20 @@ if (typeof globalThis !== 'undefined') {
8308
8308
  return JSON.stringify(map);
8309
8309
  }
8310
8310
  }
8311
+ function vlqDecode(str) {
8312
+ const values = [];
8313
+ let i = 0;
8314
+ while (i < str.length) {
8315
+ let value = 0, shift = 0, digit;
8316
+ do {
8317
+ digit = B64.indexOf(str[i++]);
8318
+ value |= (digit & 31) << shift;
8319
+ shift += 5;
8320
+ } while (digit & 32);
8321
+ values.push(value & 1 ? -(value >> 1) : value >> 1);
8322
+ }
8323
+ return values;
8324
+ }
8311
8325
 
8312
8326
  // src/error.js
8313
8327
  class RipError extends Error {
@@ -8880,17 +8894,30 @@ if (typeof globalThis !== 'undefined') {
8880
8894
  this.collectSubExprs(sexpr, subs);
8881
8895
  let codeLines = code.split(`
8882
8896
  `);
8897
+ const lineStarts = [0];
8898
+ for (let i = 0;i < code.length; i++) {
8899
+ if (code.charCodeAt(i) === 10)
8900
+ lineStarts.push(i + 1);
8901
+ }
8902
+ const offsetToLine = (offset) => {
8903
+ let lo = 0, hi = lineStarts.length - 1;
8904
+ while (lo <= hi) {
8905
+ const mid = lo + hi >> 1;
8906
+ if (lineStarts[mid] <= offset)
8907
+ lo = mid + 1;
8908
+ else
8909
+ hi = mid - 1;
8910
+ }
8911
+ return hi;
8912
+ };
8883
8913
  for (let { name, origLine, origCol } of subs) {
8884
8914
  let escaped = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
8885
8915
  let re = new RegExp("\\b" + escaped + "\\b", "g");
8886
8916
  let m, bestMatch = null, bestDist = Infinity;
8887
8917
  let origLineInStmt = origLine - stmtOrigLine;
8888
8918
  while ((m = re.exec(code)) !== null) {
8889
- let before = code.substring(0, m.index);
8890
- let nl = before.split(`
8891
- `);
8892
- let genLineInStmt = nl.length - 1;
8893
- let genCol = nl[nl.length - 1].length;
8919
+ const genLineInStmt = offsetToLine(m.index);
8920
+ const genCol = m.index - lineStarts[genLineInStmt];
8894
8921
  let lineText = codeLines[genLineInStmt];
8895
8922
  if (lineText && CodeEmitter._isColInsideString(lineText, genCol))
8896
8923
  continue;
@@ -12452,9 +12479,216 @@ globalThis.zip ??= (...a) => a[0].map((_, i) => a.map(b => b[i]));
12452
12479
  function getComponentRuntime() {
12453
12480
  return new CodeEmitter({}).getComponentRuntime();
12454
12481
  }
12482
+ // src/sourcemap-merge.js
12483
+ var SEPARATOR = `
12484
+ ;
12485
+ `;
12486
+ var SEPARATOR_LINES = 2;
12487
+ function extractMap(js) {
12488
+ const re = /\n?\/\/# sourceMappingURL=data:application\/json(?:;charset=[^;,]+)?;base64,([A-Za-z0-9+/=]+)\s*$/;
12489
+ const m = js.match(re);
12490
+ if (!m)
12491
+ return { js, mapJSON: null };
12492
+ let mapJSON;
12493
+ try {
12494
+ const bin = atob(m[1]);
12495
+ const bytes = new Uint8Array(bin.length);
12496
+ for (let i = 0;i < bin.length; i++)
12497
+ bytes[i] = bin.charCodeAt(i);
12498
+ mapJSON = new TextDecoder().decode(bytes);
12499
+ } catch {
12500
+ return { js: js.slice(0, m.index), mapJSON: null };
12501
+ }
12502
+ return { js: js.slice(0, m.index), mapJSON };
12503
+ }
12504
+ function countNewlines(str2) {
12505
+ let n = 0;
12506
+ for (let i = 0;i < str2.length; i++)
12507
+ if (str2.charCodeAt(i) === 10)
12508
+ n++;
12509
+ return n;
12510
+ }
12511
+ function decodeMappings(mappingsStr) {
12512
+ const lines = mappingsStr.split(";");
12513
+ const result = [];
12514
+ let src = 0, origLine = 0, origCol = 0, nameIdx = 0;
12515
+ for (const line of lines) {
12516
+ const segs = [];
12517
+ let genCol = 0;
12518
+ if (line.length > 0) {
12519
+ for (const segStr of line.split(",")) {
12520
+ if (segStr.length === 0)
12521
+ continue;
12522
+ const fields = vlqDecode(segStr);
12523
+ genCol += fields[0];
12524
+ if (fields.length === 1) {
12525
+ segs.push({ genCol });
12526
+ } else {
12527
+ src += fields[1];
12528
+ origLine += fields[2];
12529
+ origCol += fields[3];
12530
+ const seg = { genCol, src, origLine, origCol };
12531
+ if (fields.length >= 5) {
12532
+ nameIdx += fields[4];
12533
+ seg.name = nameIdx;
12534
+ }
12535
+ segs.push(seg);
12536
+ }
12537
+ }
12538
+ }
12539
+ result.push(segs);
12540
+ }
12541
+ return result;
12542
+ }
12543
+ function encodeMappings(perLineSegs) {
12544
+ let prevGenCol = 0;
12545
+ let prevSrc = 0, prevOrigLine = 0, prevOrigCol = 0, prevNameIdx = 0;
12546
+ const out = [];
12547
+ for (const segs of perLineSegs) {
12548
+ prevGenCol = 0;
12549
+ const lineParts = [];
12550
+ for (const seg of segs) {
12551
+ if (seg.src == null) {
12552
+ lineParts.push(vlqEncode(seg.genCol - prevGenCol));
12553
+ } else {
12554
+ let s = vlqEncode(seg.genCol - prevGenCol);
12555
+ s += vlqEncode(seg.src - prevSrc);
12556
+ s += vlqEncode(seg.origLine - prevOrigLine);
12557
+ s += vlqEncode(seg.origCol - prevOrigCol);
12558
+ if (seg.name != null) {
12559
+ s += vlqEncode(seg.name - prevNameIdx);
12560
+ prevNameIdx = seg.name;
12561
+ }
12562
+ prevSrc = seg.src;
12563
+ prevOrigLine = seg.origLine;
12564
+ prevOrigCol = seg.origCol;
12565
+ lineParts.push(s);
12566
+ }
12567
+ prevGenCol = seg.genCol;
12568
+ }
12569
+ out.push(lineParts.join(","));
12570
+ }
12571
+ return out.join(";");
12572
+ }
12573
+ function mergeChunks(chunks) {
12574
+ const stripped = chunks.map((c) => {
12575
+ if (c.mapJSON !== undefined)
12576
+ return { js: c.js, mapJSON: c.mapJSON };
12577
+ return extractMap(c.js);
12578
+ });
12579
+ const anyMap = stripped.some((c) => c.mapJSON);
12580
+ const mergedJS = stripped.map((c) => c.js).join(SEPARATOR);
12581
+ if (!anyMap)
12582
+ return { js: mergedJS, mapJSON: null };
12583
+ const mergedSources = [];
12584
+ const mergedSourcesContent = [];
12585
+ const sourceIndexByName = new Map;
12586
+ const mergedNames = [];
12587
+ const nameIndexByName = new Map;
12588
+ function addSource(name, content) {
12589
+ if (sourceIndexByName.has(name))
12590
+ return sourceIndexByName.get(name);
12591
+ const idx = mergedSources.length;
12592
+ mergedSources.push(name);
12593
+ mergedSourcesContent.push(content ?? null);
12594
+ sourceIndexByName.set(name, idx);
12595
+ return idx;
12596
+ }
12597
+ function addName(name) {
12598
+ if (nameIndexByName.has(name))
12599
+ return nameIndexByName.get(name);
12600
+ const idx = mergedNames.length;
12601
+ mergedNames.push(name);
12602
+ nameIndexByName.set(name, idx);
12603
+ return idx;
12604
+ }
12605
+ const chunkInfos = [];
12606
+ let lineOffset = 0;
12607
+ for (let i = 0;i < stripped.length; i++) {
12608
+ const c = stripped[i];
12609
+ const info = { lineOffset, srcRemap: [], nameRemap: [], perLineSegs: null };
12610
+ if (c.mapJSON) {
12611
+ let map;
12612
+ try {
12613
+ map = JSON.parse(c.mapJSON);
12614
+ } catch {
12615
+ map = null;
12616
+ }
12617
+ if (map && typeof map.mappings === "string") {
12618
+ const sources = map.sources || [];
12619
+ const sourcesContent = map.sourcesContent || [];
12620
+ info.srcRemap = sources.map((s, idx) => addSource(s, sourcesContent[idx]));
12621
+ const names = map.names || [];
12622
+ info.nameRemap = names.map((n) => addName(n));
12623
+ info.perLineSegs = decodeMappings(map.mappings);
12624
+ }
12625
+ }
12626
+ chunkInfos.push(info);
12627
+ const chunkLines = countNewlines(c.js);
12628
+ const sepLines = i < stripped.length - 1 ? SEPARATOR_LINES : 0;
12629
+ lineOffset += chunkLines + sepLines;
12630
+ }
12631
+ const totalLines = lineOffset + 1;
12632
+ const mergedPerLineSegs = new Array(totalLines).fill(null).map(() => []);
12633
+ for (const info of chunkInfos) {
12634
+ if (!info.perLineSegs)
12635
+ continue;
12636
+ for (let li = 0;li < info.perLineSegs.length; li++) {
12637
+ const target = info.lineOffset + li;
12638
+ if (target >= mergedPerLineSegs.length) {
12639
+ while (mergedPerLineSegs.length <= target)
12640
+ mergedPerLineSegs.push([]);
12641
+ }
12642
+ for (const seg of info.perLineSegs[li]) {
12643
+ if (seg.src == null) {
12644
+ mergedPerLineSegs[target].push({ genCol: seg.genCol });
12645
+ } else {
12646
+ const remapped = {
12647
+ genCol: seg.genCol,
12648
+ src: info.srcRemap[seg.src],
12649
+ origLine: seg.origLine,
12650
+ origCol: seg.origCol
12651
+ };
12652
+ if (seg.name != null)
12653
+ remapped.name = info.nameRemap[seg.name];
12654
+ mergedPerLineSegs[target].push(remapped);
12655
+ }
12656
+ }
12657
+ }
12658
+ }
12659
+ const mergedMappings = encodeMappings(mergedPerLineSegs);
12660
+ const mergedMap = {
12661
+ version: 3,
12662
+ sources: mergedSources,
12663
+ sourcesContent: mergedSourcesContent,
12664
+ names: mergedNames,
12665
+ mappings: mergedMappings
12666
+ };
12667
+ return { js: mergedJS, mapJSON: JSON.stringify(mergedMap) };
12668
+ }
12669
+ function utf8ToBase64(str2) {
12670
+ if (typeof Buffer !== "undefined") {
12671
+ return Buffer.from(str2, "utf8").toString("base64");
12672
+ }
12673
+ const bytes = new TextEncoder().encode(str2);
12674
+ let bin = "";
12675
+ for (let i = 0;i < bytes.length; i++)
12676
+ bin += String.fromCharCode(bytes[i]);
12677
+ return btoa(bin);
12678
+ }
12679
+ function mergeChunksWithInlineMap(chunks) {
12680
+ const { js, mapJSON } = mergeChunks(chunks);
12681
+ if (!mapJSON)
12682
+ return js;
12683
+ const b64 = utf8ToBase64(mapJSON);
12684
+ return js + `
12685
+ //# sourceMappingURL=data:application/json;base64,` + b64 + `
12686
+ `;
12687
+ }
12688
+
12455
12689
  // src/browser.js
12456
- var VERSION = "3.15.2";
12457
- var BUILD_DATE = "2026-04-27@06:15:56GMT";
12690
+ var VERSION = "3.15.4";
12691
+ var BUILD_DATE = "2026-04-27@08:44:03GMT";
12458
12692
  if (typeof globalThis !== "undefined") {
12459
12693
  if (!globalThis.__rip)
12460
12694
  new Function(getReactiveRuntime())();
@@ -12662,30 +12896,26 @@ ${js}
12662
12896
  }
12663
12897
  }
12664
12898
  if (compiled.length > 0) {
12665
- let anyError = false;
12666
- for (const c of compiled) {
12667
- try {
12668
- await (0, eval)(debug ? wrapForEval(c.js, c.url) : `(async()=>{
12669
- ${c.js}
12670
- })()`);
12671
- } catch (e) {
12672
- anyError = true;
12673
- if (e instanceof SyntaxError)
12674
- console.error(`Rip syntax error in ${c.url}: ${e.message}`);
12675
- else
12676
- console.error(`Rip runtime error in ${c.url}:`, e);
12677
- }
12678
- }
12679
12899
  const mount = runtimeTag?.getAttribute("data-mount");
12680
- if (mount) {
12681
- const target = runtimeTag.getAttribute("data-target") || "body";
12682
- try {
12683
- await (0, eval)(`(async()=>{ ${mount}.mount(${JSON.stringify(target)}); })()`);
12684
- } catch (e) {
12685
- console.error(`Rip mount error (${mount}):`, e);
12686
- }
12900
+ const target = runtimeTag?.getAttribute("data-target") || "body";
12901
+ const mountSnippet = mount ? `
12902
+ ${mount}.mount(${JSON.stringify(target)});
12903
+ ` : "";
12904
+ const mergedBody = mergeChunksWithInlineMap(compiled.map((c) => ({ js: c.js })));
12905
+ const wrapped = mount ? mergedBody.replace(/(\n\/\/# sourceMappingURL=[^\n]*\n?)?$/, mountSnippet + "$1") : mergedBody;
12906
+ let ok = true;
12907
+ try {
12908
+ await (0, eval)(`(async()=>{
12909
+ ${wrapped}
12910
+ })()`);
12911
+ } catch (e) {
12912
+ ok = false;
12913
+ if (e instanceof SyntaxError)
12914
+ console.error(`Rip syntax error: ${e.message}`);
12915
+ else
12916
+ console.error("Rip runtime error:", e);
12687
12917
  }
12688
- if (!anyError)
12918
+ if (ok)
12689
12919
  document.body.classList.add("ready");
12690
12920
  }
12691
12921
  }