@reportwright/viewer 0.0.0-stage → 0.12.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 (96) hide show
  1. package/CHANGELOG.md +233 -0
  2. package/LICENSE +23 -0
  3. package/README.md +146 -2
  4. package/dist/chunk-2NAW3MAP.js +1284 -0
  5. package/dist/chunk-2NAW3MAP.js.map +6 -0
  6. package/dist/chunk-3D43XGIN.js +1167 -0
  7. package/dist/chunk-3D43XGIN.js.map +6 -0
  8. package/dist/chunk-5N6OFCHJ.js +1667 -0
  9. package/dist/chunk-5N6OFCHJ.js.map +6 -0
  10. package/dist/chunk-72S6DETS.js +40 -0
  11. package/dist/chunk-72S6DETS.js.map +6 -0
  12. package/dist/chunk-AH47FS6Y.js +13 -0
  13. package/dist/chunk-AH47FS6Y.js.map +6 -0
  14. package/dist/chunk-APRPSQOD.js +301 -0
  15. package/dist/chunk-APRPSQOD.js.map +6 -0
  16. package/dist/chunk-BXKUE45K.js +1284 -0
  17. package/dist/chunk-BXKUE45K.js.map +6 -0
  18. package/dist/chunk-D2NTLAKL.js +14 -0
  19. package/dist/chunk-D2NTLAKL.js.map +6 -0
  20. package/dist/chunk-E7INJHTL.js +1284 -0
  21. package/dist/chunk-E7INJHTL.js.map +6 -0
  22. package/dist/chunk-EOVGKHAS.js +20682 -0
  23. package/dist/chunk-EOVGKHAS.js.map +6 -0
  24. package/dist/chunk-FARG6X2U.js +153 -0
  25. package/dist/chunk-FARG6X2U.js.map +6 -0
  26. package/dist/chunk-FGEFSGJT.js +1284 -0
  27. package/dist/chunk-FGEFSGJT.js.map +6 -0
  28. package/dist/chunk-GJS242RR.js +1652 -0
  29. package/dist/chunk-GJS242RR.js.map +6 -0
  30. package/dist/chunk-J56FRCFU.js +1284 -0
  31. package/dist/chunk-J56FRCFU.js.map +6 -0
  32. package/dist/chunk-KJTRZJHN.js +599 -0
  33. package/dist/chunk-KJTRZJHN.js.map +6 -0
  34. package/dist/chunk-M6GENFAH.js +14806 -0
  35. package/dist/chunk-M6GENFAH.js.map +6 -0
  36. package/dist/chunk-NJWQT6VB.js +1284 -0
  37. package/dist/chunk-NJWQT6VB.js.map +6 -0
  38. package/dist/chunk-ODREGGKA.js +219 -0
  39. package/dist/chunk-ODREGGKA.js.map +6 -0
  40. package/dist/chunk-OLLMACWA.js +35 -0
  41. package/dist/chunk-OLLMACWA.js.map +6 -0
  42. package/dist/chunk-PXXMOP4N.js +1284 -0
  43. package/dist/chunk-PXXMOP4N.js.map +6 -0
  44. package/dist/chunk-RKGIVPK5.js +1284 -0
  45. package/dist/chunk-RKGIVPK5.js.map +6 -0
  46. package/dist/chunk-RYHJUQSV.js +98 -0
  47. package/dist/chunk-RYHJUQSV.js.map +6 -0
  48. package/dist/chunk-SBD55ZES.js +316 -0
  49. package/dist/chunk-SBD55ZES.js.map +6 -0
  50. package/dist/chunk-SR2TQ2ZK.js +70 -0
  51. package/dist/chunk-SR2TQ2ZK.js.map +6 -0
  52. package/dist/designer.d.ts +48 -0
  53. package/dist/designer.js +35865 -0
  54. package/dist/designer.js.map +6 -0
  55. package/dist/peer/chunk-2NJMXASD.js +1282 -0
  56. package/dist/peer/chunk-2NJMXASD.js.map +6 -0
  57. package/dist/peer/chunk-76ZABVTI.js +598 -0
  58. package/dist/peer/chunk-76ZABVTI.js.map +6 -0
  59. package/dist/peer/chunk-BPF3SLL4.js +1282 -0
  60. package/dist/peer/chunk-BPF3SLL4.js.map +6 -0
  61. package/dist/peer/chunk-BWVDLOVL.js +1282 -0
  62. package/dist/peer/chunk-BWVDLOVL.js.map +6 -0
  63. package/dist/peer/chunk-CXM3YSWF.js +1282 -0
  64. package/dist/peer/chunk-CXM3YSWF.js.map +6 -0
  65. package/dist/peer/chunk-DQFZ6LVB.js +1282 -0
  66. package/dist/peer/chunk-DQFZ6LVB.js.map +6 -0
  67. package/dist/peer/chunk-GBITRNHE.js +14806 -0
  68. package/dist/peer/chunk-GBITRNHE.js.map +6 -0
  69. package/dist/peer/chunk-IMQRHDR4.js +12 -0
  70. package/dist/peer/chunk-IMQRHDR4.js.map +6 -0
  71. package/dist/peer/chunk-IPU2YRL2.js +300 -0
  72. package/dist/peer/chunk-IPU2YRL2.js.map +6 -0
  73. package/dist/peer/chunk-KBT6ZGGO.js +1666 -0
  74. package/dist/peer/chunk-KBT6ZGGO.js.map +6 -0
  75. package/dist/peer/chunk-M4AGFUWE.js +97 -0
  76. package/dist/peer/chunk-M4AGFUWE.js.map +6 -0
  77. package/dist/peer/chunk-MCJPN2KL.js +152 -0
  78. package/dist/peer/chunk-MCJPN2KL.js.map +6 -0
  79. package/dist/peer/chunk-NPYKZINU.js +6040 -0
  80. package/dist/peer/chunk-NPYKZINU.js.map +6 -0
  81. package/dist/peer/chunk-PG2PNYDX.js +1282 -0
  82. package/dist/peer/chunk-PG2PNYDX.js.map +6 -0
  83. package/dist/peer/chunk-QRAJXW2D.js +1282 -0
  84. package/dist/peer/chunk-QRAJXW2D.js.map +6 -0
  85. package/dist/peer/chunk-SHVCNAUG.js +1282 -0
  86. package/dist/peer/chunk-SHVCNAUG.js.map +6 -0
  87. package/dist/peer/chunk-Y5CAHLXS.js +218 -0
  88. package/dist/peer/chunk-Y5CAHLXS.js.map +6 -0
  89. package/dist/peer/designer.js +35841 -0
  90. package/dist/peer/designer.js.map +6 -0
  91. package/dist/peer/viewer.js +1061 -0
  92. package/dist/peer/viewer.js.map +6 -0
  93. package/dist/viewer.d.ts +77 -0
  94. package/dist/viewer.js +1066 -0
  95. package/dist/viewer.js.map +6 -0
  96. package/package.json +76 -4
@@ -0,0 +1,153 @@
1
+ "use client";
2
+ import {
3
+ customFonts,
4
+ drillRefs,
5
+ fetchReport,
6
+ loadSources,
7
+ origin,
8
+ pruneSnapshot,
9
+ reportFetch,
10
+ resolveParameters,
11
+ reuseRefs
12
+ } from "./chunk-M6GENFAH.js";
13
+ import "./chunk-GJS242RR.js";
14
+ import "./chunk-72S6DETS.js";
15
+ import {
16
+ ALL_FONT_KEYS,
17
+ SHAPER,
18
+ fontFile,
19
+ fontKeysOf
20
+ } from "./chunk-3D43XGIN.js";
21
+ import "./chunk-OLLMACWA.js";
22
+
23
+ // src/viewer/interactiveHtml.js
24
+ var toB64 = (buf) => {
25
+ const u8 = new Uint8Array(buf);
26
+ let s = "";
27
+ for (let i = 0; i < u8.length; i += 32768) s += String.fromCharCode.apply(null, u8.subarray(i, i + 32768));
28
+ return btoa(s);
29
+ };
30
+ var getBuf = async (url) => {
31
+ const r = await fetch(url);
32
+ if (!r.ok) throw new Error(`HTTP ${r.status} for ${url}`);
33
+ return r.arrayBuffer();
34
+ };
35
+ function reachableReportIds(def) {
36
+ const out = reuseRefs(def);
37
+ for (const r of drillRefs(def)) out.add(r.report);
38
+ return out;
39
+ }
40
+ async function collectReports(def, rootId) {
41
+ const reports = {};
42
+ if (rootId) reports[rootId] = def;
43
+ const queue = [...reachableReportIds(def)];
44
+ const missing = [];
45
+ while (queue.length) {
46
+ const id = queue.shift();
47
+ if (reports[id] || missing.includes(id)) continue;
48
+ try {
49
+ const d = await fetchReport(id);
50
+ reports[id] = d;
51
+ queue.push(...reachableReportIds(d));
52
+ } catch {
53
+ missing.push(id);
54
+ }
55
+ }
56
+ return { reports, missing };
57
+ }
58
+ var MAX_DRILL_SNAPSHOTS = 250;
59
+ async function snapshotData(def, params, model, reports) {
60
+ const snapshot = {};
61
+ const base = origin();
62
+ const recording = async (url, init) => {
63
+ if (url in snapshot) return new Response(JSON.stringify(snapshot[url]), { status: 200, headers: { "content-type": "application/json" } });
64
+ const res = await reportFetch(base)(url, init);
65
+ if (res.ok) {
66
+ try {
67
+ snapshot[url] = await res.clone().json();
68
+ } catch {
69
+ }
70
+ }
71
+ return res;
72
+ };
73
+ const load = async (d, p) => {
74
+ try {
75
+ await loadSources(d, { params: resolveParameters(d, p, { lenient: true }), fetch: recording, baseUrl: base });
76
+ } catch {
77
+ }
78
+ };
79
+ await load(def, params);
80
+ const seen = /* @__PURE__ */ new Set(), jobs = [];
81
+ for (const pg of model?.pages || []) for (const it of pg.items) {
82
+ const a = it.t === "link" && it.action;
83
+ if (!a || a.type !== "drill" || !reports[a.report]) continue;
84
+ const key = a.report + JSON.stringify(a.params || {});
85
+ if (seen.has(key)) continue;
86
+ seen.add(key);
87
+ jobs.push([reports[a.report], Object.fromEntries(Object.entries(a.params || {}).map(([k, v]) => [k, v == null ? "" : String(v)]))]);
88
+ }
89
+ const todo = jobs.slice(0, MAX_DRILL_SNAPSHOTS);
90
+ for (let i = 0; i < todo.length; i += 6) await Promise.all(todo.slice(i, i + 6).map(([d, p]) => load(d, p)));
91
+ return { snapshot, drillTargets: jobs.length, drillSnapshots: todo.length };
92
+ }
93
+ async function exportInteractiveHtml(def, opt = {}) {
94
+ const base = origin();
95
+ const bundleRes = await fetch(`${base}/embed/reportwright-viewer.full.js`);
96
+ if (!bundleRes.ok) throw Object.assign(new Error('The viewer bundle is missing. Run "npm run build:embed" (it also runs in "npm run build").'), { code: "NO_BUNDLE" });
97
+ const bundle = (await bundleRes.text()).replace(/<\/script/gi, "<\\/script");
98
+ const used = fontKeysOf(opt.model);
99
+ const shaped = (opt.model?.pages || []).some((pg) => pg.items.some((it) => it.t === "text" && it.lines.some((l) => l.runs?.some((r) => r.shaped || r.rtl))));
100
+ const keys = [.../* @__PURE__ */ new Set([...ALL_FONT_KEYS, ...used, ...shaped ? [SHAPER] : []])];
101
+ const fonts = {};
102
+ await Promise.all(keys.map(async (k) => {
103
+ fonts[k] = toB64(await getBuf(`${base}/fonts/${fontFile(k)}`));
104
+ }));
105
+ const uploaded = (await customFonts()).filter((f) => keys.includes(`u-${f.id}`));
106
+ let uiCss = "";
107
+ try {
108
+ const faces = [["PW UI", "ibm-plex-sans-latin-400-normal", 400], ["PW UI", "ibm-plex-sans-latin-600-normal", 600], ["PW Mono", "ibm-plex-mono-latin-400-normal", 400]];
109
+ const parts = await Promise.all(faces.map(async ([fam, file, w]) => `@font-face{font-family:"${fam}";src:url(data:font/woff2;base64,${toB64(await getBuf(`${base}/fonts/ui/${file}.woff2`))}) format("woff2");font-weight:${w};font-display:swap}`));
110
+ uiCss = parts.join("\n");
111
+ } catch {
112
+ }
113
+ const { reports, missing } = await collectReports(def, opt.reportId);
114
+ const { snapshot: raw, drillTargets, drillSnapshots } = await snapshotData(def, opt.params || {}, opt.model, reports);
115
+ const snapshot = pruneSnapshot(raw, [def, ...Object.values(reports)]);
116
+ const config = {
117
+ server: base,
118
+ definition: def,
119
+ params: opt.params || {},
120
+ lang: opt.lang || "en",
121
+ reports,
122
+ fonts,
123
+ customFonts: uploaded,
124
+ uiFontCss: uiCss,
125
+ snapshot,
126
+ height: "100vh",
127
+ title: def.name
128
+ };
129
+ const json = JSON.stringify(config).replace(/</g, "\\u003c");
130
+ const esc = (s) => String(s).replace(/&/g, "&amp;").replace(/</g, "&lt;");
131
+ const html = `<!doctype html>
132
+ <html lang="${esc(opt.lang || "en")}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
133
+ <title>${esc(def.name || "Report")}</title>
134
+ <meta name="generator" content="ReportWright interactive HTML">
135
+ <style>html,body{margin:0;height:100%;background:#e6eaee}#report{height:100vh}#report-note{position:fixed;right:8px;bottom:6px;font:11px system-ui,sans-serif;color:#5f6b77;pointer-events:none}</style>
136
+ </head><body>
137
+ <div id="report"></div>
138
+ <div id="report-note">Exported ${esc((/* @__PURE__ */ new Date()).toLocaleString())} · data refreshes when online</div>
139
+ <script>${bundle}<\/script>
140
+ <script type="application/json" id="pw-config">${json}<\/script>
141
+ <script>
142
+ (function(){var c=JSON.parse(document.getElementById('pw-config').textContent);
143
+ var el=document.getElementById('report');var s=el.style;s.height='100vh';
144
+ ReportWright.mountViewer(el,c);})();
145
+ <\/script>
146
+ </body></html>`;
147
+ return { html, info: { reports: Object.keys(reports).length || 1, missing, bytes: html.length, drillTargets, drillSnapshots } };
148
+ }
149
+ export {
150
+ exportInteractiveHtml,
151
+ reachableReportIds
152
+ };
153
+ //# sourceMappingURL=chunk-FARG6X2U.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/viewer/interactiveHtml.js"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }