@ereo/dev-inspector 0.1.29 → 0.1.31

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/dist/index.js CHANGED
@@ -1,5 +1,8 @@
1
1
  // @bun
2
2
  // src/inspector.ts
3
+ function escapeHtml(str) {
4
+ return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
5
+ }
3
6
  function generateInspectorHTML(routes) {
4
7
  return `<!DOCTYPE html>
5
8
  <html lang="en">
@@ -138,16 +141,16 @@ function generateInspectorHTML(routes) {
138
141
 
139
142
  <div class="route-tree">
140
143
  ${routes.map((route) => `
141
- <div class="route-item" data-path="${route.path.toLowerCase()}">
142
- <span class="method-badge method-${route.renderMode}">${route.renderMode}</span>
143
- <span class="route-path">${route.path}</span>
144
+ <div class="route-item" data-path="${escapeHtml(route.path.toLowerCase())}">
145
+ <span class="method-badge method-${escapeHtml(route.renderMode)}">${escapeHtml(route.renderMode)}</span>
146
+ <span class="route-path">${escapeHtml(route.path)}</span>
144
147
  <div class="route-tags">
145
148
  ${route.islandCount > 0 ? `<span class="tag tag-islands">${route.islandCount} islands</span>` : ""}
146
149
  ${route.hasLoader ? `<span class="tag tag-loader">loader</span>` : ""}
147
150
  ${route.hasAction ? `<span class="tag tag-action">action</span>` : ""}
148
151
  ${route.authRequired ? `<span class="tag tag-auth">auth</span>` : ""}
149
152
  </div>
150
- <span class="route-file">${route.file}</span>
153
+ <span class="route-file">${escapeHtml(route.file)}</span>
151
154
  </div>
152
155
  `).join("")}
153
156
  </div>
@@ -264,7 +267,7 @@ function generateDataPipelineHTML(data) {
264
267
  <div class="pipeline-header">
265
268
  <h3>Data Pipeline</h3>
266
269
  <div class="route-info">
267
- <span class="route-path">${escapeHtml(route)}</span>
270
+ <span class="route-path">${escapeHtml2(route)}</span>
268
271
  <span class="total-time">${totalTime.toFixed(1)}ms</span>
269
272
  </div>
270
273
  </div>
@@ -322,8 +325,8 @@ function generateLoaderBar(loader, totalTime) {
322
325
  const waitingClass = loader.waitingFor.length > 0 ? "had-wait" : "";
323
326
  return `
324
327
  <div class="loader-row ${cacheClass} ${waitingClass}">
325
- <span class="loader-name" title="${escapeHtml(loader.key)}">
326
- ${escapeHtml(loader.key)}
328
+ <span class="loader-name" title="${escapeHtml2(loader.key)}">
329
+ ${escapeHtml2(loader.key)}
327
330
  </span>
328
331
  <div class="loader-bar-container">
329
332
  ${loader.waitingFor.length > 0 ? `
@@ -388,7 +391,7 @@ function getBarClass(loader) {
388
391
  return "bar-default";
389
392
  }
390
393
  }
391
- function escapeHtml(str) {
394
+ function escapeHtml2(str) {
392
395
  return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
393
396
  }
394
397
  var DATA_PIPELINE_STYLES = `
@@ -760,11 +763,11 @@ function generateRouteRow(route) {
760
763
  features.push(`${route.middleware.length} middleware`);
761
764
  return `
762
765
  <div class="route-row"
763
- data-path="${escapeHtml2(route.path)}"
766
+ data-path="${escapeHtml3(route.path)}"
764
767
  data-mode="${route.renderMode}">
765
768
  <div class="route-path-cell">
766
- <span class="route-path">${escapeHtml2(route.path)}</span>
767
- <span class="route-file">${escapeHtml2(route.file)}</span>
769
+ <span class="route-path">${escapeHtml3(route.path)}</span>
770
+ <span class="route-file">${escapeHtml3(route.file)}</span>
768
771
  </div>
769
772
  <div class="route-mode-cell">
770
773
  <span class="mode-badge ${modeClass}">${route.renderMode.toUpperCase()}</span>
@@ -788,7 +791,7 @@ function calculateRouteStats(routes) {
788
791
  rsc: routes.filter((r) => r.renderMode === "rsc").length
789
792
  };
790
793
  }
791
- function escapeHtml2(str) {
794
+ function escapeHtml3(str) {
792
795
  return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
793
796
  }
794
797
  var ROUTES_TAB_STYLES = `
@@ -1063,19 +1066,19 @@ function generateIslandRow(island) {
1063
1066
  const statusClass = island.hydrated ? "hydrated" : "pending";
1064
1067
  const statusIcon = island.hydrated ? "\u2705" : "\u23F3";
1065
1068
  return `
1066
- <div class="island-row ${statusClass}" data-island-id="${escapeHtml3(island.id)}">
1069
+ <div class="island-row ${statusClass}" data-island-id="${escapeHtml4(island.id)}">
1067
1070
  <div class="island-main">
1068
1071
  <div class="island-status">${statusIcon}</div>
1069
1072
  <div class="island-info">
1070
- <span class="island-component">${escapeHtml3(island.component)}</span>
1071
- <span class="island-selector">${escapeHtml3(island.selector)}</span>
1073
+ <span class="island-component">${escapeHtml4(island.component)}</span>
1074
+ <span class="island-selector">${escapeHtml4(island.selector)}</span>
1072
1075
  </div>
1073
1076
  </div>
1074
1077
  <div class="island-strategy">
1075
1078
  <span class="strategy-badge strategy-${island.strategy}">
1076
1079
  ${getStrategyIcon(island.strategy)} ${island.strategy}
1077
1080
  </span>
1078
- ${island.mediaQuery ? `<span class="media-query">${escapeHtml3(island.mediaQuery)}</span>` : ""}
1081
+ ${island.mediaQuery ? `<span class="media-query">${escapeHtml4(island.mediaQuery)}</span>` : ""}
1079
1082
  </div>
1080
1083
  <div class="island-metrics">
1081
1084
  ${island.hydrationTime !== undefined ? `
@@ -1129,7 +1132,7 @@ function calculateIslandStats(islands) {
1129
1132
  byStrategy
1130
1133
  };
1131
1134
  }
1132
- function escapeHtml3(str) {
1135
+ function escapeHtml4(str) {
1133
1136
  return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
1134
1137
  }
1135
1138
  var ISLANDS_TAB_STYLES = `
@@ -1475,11 +1478,11 @@ function generateEntryRow(entry) {
1475
1478
  const age = Date.now() - entry.created;
1476
1479
  return `
1477
1480
  <div class="cache-entry-row">
1478
- <div class="entry-key" title="${escapeHtml4(entry.key)}">
1479
- ${escapeHtml4(truncateKey(entry.key))}
1481
+ <div class="entry-key" title="${escapeHtml5(entry.key)}">
1482
+ ${escapeHtml5(truncateKey(entry.key))}
1480
1483
  </div>
1481
1484
  <div class="entry-tags">
1482
- ${entry.tags.map((tag) => `<span class="tag">${escapeHtml4(tag)}</span>`).join("")}
1485
+ ${entry.tags.map((tag) => `<span class="tag">${escapeHtml5(tag)}</span>`).join("")}
1483
1486
  </div>
1484
1487
  <div class="entry-size">
1485
1488
  ${formatBytes2(entry.size)}
@@ -1491,10 +1494,10 @@ function generateEntryRow(entry) {
1491
1494
  ${entry.accessCount}
1492
1495
  </div>
1493
1496
  <div class="entry-actions">
1494
- <button class="entry-action" onclick="window.__EREO_DEVTOOLS__.invalidateKey('${escapeHtml4(entry.key)}')" title="Invalidate">
1497
+ <button class="entry-action" onclick="window.__EREO_DEVTOOLS__.invalidateKey('${escapeHtml5(entry.key)}')" title="Invalidate">
1495
1498
  \uD83D\uDDD1\uFE0F
1496
1499
  </button>
1497
- <button class="entry-action" onclick="window.__EREO_DEVTOOLS__.inspectEntry('${escapeHtml4(entry.key)}')" title="Inspect">
1500
+ <button class="entry-action" onclick="window.__EREO_DEVTOOLS__.inspectEntry('${escapeHtml5(entry.key)}')" title="Inspect">
1498
1501
  \uD83D\uDD0D
1499
1502
  </button>
1500
1503
  </div>
@@ -1506,7 +1509,7 @@ function generateTagRow(tag, stats) {
1506
1509
  return `
1507
1510
  <div class="tag-row">
1508
1511
  <div class="tag-name">
1509
- <span class="tag-badge">${escapeHtml4(tag)}</span>
1512
+ <span class="tag-badge">${escapeHtml5(tag)}</span>
1510
1513
  </div>
1511
1514
  <div class="tag-count">${stats.count}</div>
1512
1515
  <div class="tag-hits">${stats.hits}</div>
@@ -1515,7 +1518,7 @@ function generateTagRow(tag, stats) {
1515
1518
  ${(tagHitRate * 100).toFixed(0)}%
1516
1519
  </div>
1517
1520
  <div class="tag-actions">
1518
- <button class="tag-action" onclick="window.__EREO_DEVTOOLS__.invalidateTag('${escapeHtml4(tag)}')" title="Invalidate tag">
1521
+ <button class="tag-action" onclick="window.__EREO_DEVTOOLS__.invalidateTag('${escapeHtml5(tag)}')" title="Invalidate tag">
1519
1522
  \uD83D\uDDD1\uFE0F
1520
1523
  </button>
1521
1524
  </div>
@@ -1561,7 +1564,7 @@ function truncateKey(key, maxLength = 50) {
1561
1564
  return key;
1562
1565
  return key.slice(0, maxLength - 3) + "...";
1563
1566
  }
1564
- function escapeHtml4(str) {
1567
+ function escapeHtml5(str) {
1565
1568
  return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
1566
1569
  }
1567
1570
  var CACHE_TAB_STYLES = `
@@ -1897,8 +1900,8 @@ function generateHMRTabHTML(events) {
1897
1900
  <div class="hmr-event hmr-${event.type}">
1898
1901
  <span class="event-icon">${getEventIcon(event.type)}</span>
1899
1902
  <span class="event-type">${event.type}</span>
1900
- <span class="event-path">${escapeHtml5(event.path)}</span>
1901
- ${event.reason ? `<span class="event-reason">${escapeHtml5(event.reason)}</span>` : ""}
1903
+ <span class="event-path">${escapeHtml6(event.path)}</span>
1904
+ ${event.reason ? `<span class="event-reason">${escapeHtml6(event.reason)}</span>` : ""}
1902
1905
  ${event.duration ? `<span class="event-duration">${event.duration.toFixed(0)}ms</span>` : ""}
1903
1906
  <span class="event-time">${formatTime(event.timestamp)}</span>
1904
1907
  </div>
@@ -1938,7 +1941,7 @@ function getEventIcon(type) {
1938
1941
  function formatTime(timestamp) {
1939
1942
  return new Date(timestamp).toLocaleTimeString();
1940
1943
  }
1941
- function escapeHtml5(str) {
1944
+ function escapeHtml6(str) {
1942
1945
  return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
1943
1946
  }
1944
1947
  function generateTracesTabHTML() {
@@ -1 +1 @@
1
- {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../src/inspector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uBAAuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,6BAA6B;AAC7B,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAuKjE;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAkB5D;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,eAAoB,GAAG,MAAM,CAiCvE;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAiB3D"}
1
+ {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../src/inspector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,8BAA8B;AAC9B,MAAM,WAAW,eAAe;IAC9B,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uBAAuB;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,6BAA6B;AAC7B,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAYD,+CAA+C;AAC/C,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAuKjE;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAkB5D;AAED,sCAAsC;AACtC,wBAAgB,kBAAkB,CAAC,MAAM,GAAE,eAAoB,GAAG,MAAM,CAiCvE;AAED,wCAAwC;AACxC,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAiB3D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ereo/dev-inspector",
3
- "version": "0.1.29",
3
+ "version": "0.1.31",
4
4
  "license": "MIT",
5
5
  "author": "Ereo Team",
6
6
  "homepage": "https://ereo.dev",
@@ -33,9 +33,9 @@
33
33
  "typecheck": "tsc --noEmit"
34
34
  },
35
35
  "dependencies": {
36
- "@ereo/core": "^0.1.29",
37
- "@ereo/router": "^0.1.29",
38
- "@ereo/data": "^0.1.29"
36
+ "@ereo/core": "^0.1.31",
37
+ "@ereo/router": "^0.1.31",
38
+ "@ereo/data": "^0.1.31"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/bun": "^1.1.0",