@agile-team/mach-report 2.13.0 → 2.15.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.
- package/README.md +20 -7
- package/THIRD_PARTY_NOTICES.md +3 -1
- package/dist/ExcelBindingWizard-BKH1nGNS.js +1485 -0
- package/dist/ExcelBindingWizard-Bs43BGNp.cjs +1 -0
- package/dist/ParamEditor-Da4akw6V.cjs +1 -0
- package/dist/ParamEditor-DoAhzJsm.js +594 -0
- package/dist/{ReportBatchPanel-CW2HV9I8.js → ReportBatchPanel-BMf6boMA.js} +39 -39
- package/dist/ReportBatchPanel-wP9m9Pj1.cjs +1 -0
- package/dist/ReportPreview-ChV19HBp.js +4619 -0
- package/dist/ReportPreview-DbLvvOUT.cjs +6 -0
- package/dist/{ReportTemplateLibrary-BZB-XWjj.js → ReportTemplateLibrary-C9wutIiT.js} +1 -1
- package/dist/ReportTemplateLibrary-Sxr3eD0J.cjs +1 -0
- package/dist/RuleEditor-C_Clasvd.js +2037 -0
- package/dist/RuleEditor-XhGHK8DE.cjs +1 -0
- package/dist/TemplateOutlinePanel-D6Bkny59.js +96 -0
- package/dist/TemplateOutlinePanel-JTSR53vJ.cjs +1 -0
- package/dist/TemplateReusePanel-Kx35S0Ql.cjs +1 -0
- package/dist/TemplateReusePanel-rVuK1kTz.js +388 -0
- package/dist/TemplateReviewPanel-B0ar9_zf.js +592 -0
- package/dist/TemplateReviewPanel-Dn6X9UmY.cjs +1 -0
- package/dist/analytics.cjs +1 -1
- package/dist/analytics.d.cts +3 -1
- package/dist/analytics.d.ts +3 -1
- package/dist/analytics.js +154 -60
- package/dist/artifact-integrity.json +135 -0
- package/dist/assets-B9ImAi6_.cjs +1 -0
- package/dist/assets-DEaz4qsp.js +124 -0
- package/dist/batch-BaP6pWDE.cjs +1 -0
- package/dist/batch-BfZHN1do.js +220 -0
- package/dist/batch-CGyt-b2W.js +273 -0
- package/dist/batch-CLpELXBl.cjs +1 -0
- package/dist/capabilities-CAh2Nrue.cjs +1 -0
- package/dist/capabilities-DskCHs3V.js +69 -0
- package/dist/codes.d.cts +2 -0
- package/dist/codes.d.ts +2 -0
- package/dist/{computed-Bvk0W15F.js → computed-C-4C2S5h.js} +3 -3
- package/dist/config-BVsJXSqS.js +842 -0
- package/dist/config-D10us76d.cjs +1 -0
- package/dist/data-explanation-B8MZRYVS.js +16 -0
- package/dist/data-explanation-DE55G30w.cjs +1 -0
- package/dist/designer-2bDlcNXQ.js +5136 -0
- package/dist/designer-BT7XCdbW.cjs +2 -0
- package/dist/designer.cjs +1 -2
- package/dist/designer.d.cts +432 -17
- package/dist/designer.d.ts +432 -17
- package/dist/designer.js +21 -4312
- package/dist/drill-ByJviLXS.js +145 -0
- package/dist/drill-DYTxuL3A.cjs +1 -0
- package/dist/font-loader-B_UkxpzC.cjs +1 -0
- package/dist/font-loader-Q3bQjmrI.js +297 -0
- package/dist/index.cjs +8 -8
- package/dist/index.d.cts +239 -5
- package/dist/index.d.ts +239 -5
- package/dist/index.js +939 -893
- package/dist/json-snapshot-DFb2eWkf.js +1416 -0
- package/dist/json-snapshot-WWSGlaHG.cjs +2 -0
- package/dist/licenses/_bwip-js_generic-4.11.4.txt +24 -0
- package/dist/licenses/_fast-csv_format-4.3.5.txt +22 -0
- package/dist/licenses/_fast-csv_parse-4.3.6.txt +22 -0
- package/dist/licenses/_pdf-lib_fontkit-1.1.1.txt +326 -0
- package/dist/licenses/_pdf-lib_standard-fonts-1.0.0.txt +22 -0
- package/dist/licenses/_pdf-lib_upng-1.0.1.txt +22 -0
- package/dist/licenses/_types_node-14.18.63.txt +22 -0
- package/dist/licenses/_types_pako-2.0.3.txt +22 -0
- package/dist/licenses/_types_pegjs-0.10.6.txt +22 -0
- package/dist/licenses/archiver-5.3.2.txt +23 -0
- package/dist/licenses/archiver-utils-2.1.0.txt +23 -0
- package/dist/licenses/archiver-utils-3.0.4.txt +23 -0
- package/dist/licenses/async-3.2.6.txt +20 -0
- package/dist/licenses/balanced-match-1.0.2.txt +22 -0
- package/dist/licenses/base64-js-1.5.1.txt +22 -0
- package/dist/licenses/big-integer-1.6.52.txt +25 -0
- package/dist/licenses/binary-0.3.0.txt +178 -0
- package/dist/licenses/bl-4.1.0.txt +14 -0
- package/dist/licenses/bluebird-3.4.7.txt +22 -0
- package/dist/licenses/brace-expansion-1.1.21.txt +22 -0
- package/dist/licenses/brace-expansion-2.1.7.txt +22 -0
- package/dist/licenses/buffer-5.7.1.txt +22 -0
- package/dist/licenses/buffer-crc32-0.2.13.txt +20 -0
- package/dist/licenses/buffer-indexof-polyfill-1.0.2.txt +23 -0
- package/dist/licenses/buffers-0.1.1.txt +140 -0
- package/dist/licenses/chainsaw-0.1.0.txt +184 -0
- package/dist/licenses/compress-commons-4.1.2.txt +23 -0
- package/dist/licenses/concat-map-0.0.1.txt +19 -0
- package/dist/licenses/core-util-is-1.0.3.txt +20 -0
- package/dist/licenses/crc-32-1.2.2.txt +202 -0
- package/dist/licenses/crc32-stream-4.0.3.txt +23 -0
- package/dist/licenses/dayjs-1.11.23.txt +22 -0
- package/dist/licenses/duplexer2-0.1.4.txt +27 -0
- package/dist/licenses/end-of-stream-1.4.5.txt +22 -0
- package/dist/licenses/exceljs-4.4.0.txt +23 -0
- package/dist/licenses/fast-csv-4.3.6.txt +22 -0
- package/dist/licenses/fast-png-6.4.0.txt +22 -0
- package/dist/licenses/fs-constants-1.0.0.txt +22 -0
- package/dist/licenses/fs.realpath-1.0.0.txt +44 -0
- package/dist/licenses/fstream-1.0.12.txt +16 -0
- package/dist/licenses/glob-7.2.3.txt +22 -0
- package/dist/licenses/graceful-fs-4.2.11.txt +16 -0
- package/dist/licenses/ieee754-1.2.1.txt +12 -0
- package/dist/licenses/immediate-3.0.6.txt +21 -0
- package/dist/licenses/inflight-1.0.6.txt +16 -0
- package/dist/licenses/inherits-2.0.4.txt +17 -0
- package/dist/licenses/iobuffer-5.4.0.txt +23 -0
- package/dist/licenses/isarray-1.0.0.txt +61 -0
- package/dist/licenses/jszip-3.10.2.txt +652 -0
- package/dist/licenses/lazystream-1.0.1.txt +24 -0
- package/dist/licenses/lie-3.3.0.txt +8 -0
- package/dist/licenses/listenercount-1.0.1.txt +6 -0
- package/dist/licenses/lodash.defaults-4.2.0.txt +48 -0
- package/dist/licenses/lodash.difference-4.5.0.txt +48 -0
- package/dist/licenses/lodash.escaperegexp-4.1.2.txt +48 -0
- package/dist/licenses/lodash.flatten-4.4.0.txt +48 -0
- package/dist/licenses/lodash.groupby-4.6.0.txt +48 -0
- package/dist/licenses/lodash.isboolean-3.0.3.txt +23 -0
- package/dist/licenses/lodash.isequal-4.5.0.txt +48 -0
- package/dist/licenses/lodash.isfunction-3.0.9.txt +48 -0
- package/dist/licenses/lodash.isnil-4.0.0.txt +23 -0
- package/dist/licenses/lodash.isplainobject-4.0.6.txt +48 -0
- package/dist/licenses/lodash.isundefined-3.0.1.txt +23 -0
- package/dist/licenses/lodash.union-4.6.0.txt +48 -0
- package/dist/licenses/lodash.uniq-4.5.0.txt +48 -0
- package/dist/licenses/minimatch-3.1.5.txt +16 -0
- package/dist/licenses/minimatch-5.1.9.txt +16 -0
- package/dist/licenses/minimist-1.2.8.txt +19 -0
- package/dist/licenses/mkdirp-0.5.6.txt +22 -0
- package/dist/licenses/node-sql-parser-5.4.0.txt +202 -0
- package/dist/licenses/normalize-path-3.0.0.txt +22 -0
- package/dist/licenses/once-1.4.0.txt +16 -0
- package/dist/licenses/pako-1.0.11.txt +22 -0
- package/dist/licenses/pako-2.2.0.txt +22 -0
- package/dist/licenses/path-is-absolute-1.0.1.txt +22 -0
- package/dist/licenses/pdf-lib-1.17.1.txt +22 -0
- package/dist/licenses/process-nextick-args-2.0.1.txt +20 -0
- package/dist/licenses/readable-stream-2.3.8.txt +48 -0
- package/dist/licenses/readable-stream-3.6.2.txt +48 -0
- package/dist/licenses/readdir-glob-1.1.3.txt +202 -0
- package/dist/licenses/rimraf-2.7.1.txt +16 -0
- package/dist/licenses/safe-buffer-5.1.2.txt +22 -0
- package/dist/licenses/safe-buffer-5.2.1.txt +22 -0
- package/dist/licenses/saxes-5.0.1.txt +397 -0
- package/dist/licenses/setimmediate-1.0.5.txt +21 -0
- package/dist/licenses/string_decoder-1.1.1.txt +49 -0
- package/dist/licenses/string_decoder-1.3.0.txt +49 -0
- package/dist/licenses/tar-stream-2.2.0.txt +22 -0
- package/dist/licenses/tmp-0.2.7.txt +22 -0
- package/dist/licenses/traverse-0.3.9.txt +25 -0
- package/dist/licenses/tslib-1.14.1.txt +13 -0
- package/dist/licenses/unzipper-0.10.14.txt +26 -0
- package/dist/licenses/util-deprecate-1.0.2.txt +25 -0
- package/dist/licenses/uuid-11.1.1.txt +10 -0
- package/dist/licenses/wrappy-1.0.2.txt +16 -0
- package/dist/licenses/xmlchars-2.2.0.txt +19 -0
- package/dist/licenses/zip-stream-4.1.1.txt +23 -0
- package/dist/matrix-CGRGkn5s.js +112 -0
- package/dist/matrix-gEO7ZM_u.cjs +1 -0
- package/dist/media-B7vnpD8k.cjs +1 -0
- package/dist/media-Y90dHK9z.js +70 -0
- package/dist/param-validation-C3HlcLLO.cjs +1 -0
- package/dist/param-validation-Do7Eg8Zv.js +181 -0
- package/dist/pdf-BwNyeGpt.js +36352 -0
- package/dist/pdf-CvvrjPQg.cjs +103 -0
- package/dist/pdf.cjs +1 -101
- package/dist/pdf.d.cts +18 -3
- package/dist/pdf.d.ts +18 -3
- package/dist/pdf.js +9 -36579
- package/dist/plugin-Ca_XZG3l.js +22 -0
- package/dist/{plugin-DzS6pxTA.cjs → plugin-DHO7X8z2.cjs} +1 -1
- package/dist/prepared-CFy9B75C.cjs +1 -0
- package/dist/prepared-ajM-H-9B.js +69 -0
- package/dist/progress-B0ctFpKf.cjs +1 -0
- package/dist/progress-D-OTpEav.js +52 -0
- package/dist/{record-bindings-D-5jQlTj.js → record-bindings-Do_b3h4V.js} +1 -1
- package/dist/{region-binding-workflow-CcUq8W2Q.js → region-binding-workflow-BMhK_TjP.js} +1 -1
- package/dist/{region-binding-workflow-BzfbxRiR.cjs → region-binding-workflow-DIYJdCUr.cjs} +1 -1
- package/dist/{report-params-B44imUd4.js → report-params-B1RzkhJj.js} +1 -1
- package/dist/{report-params-SJfhKgaX.cjs → report-params-WDGrA4oP.cjs} +1 -1
- package/dist/sbom.cdx.json +3982 -0
- package/dist/server/node.d.cts +66 -12
- package/dist/server/node.d.ts +66 -12
- package/dist/server-node.cjs +1 -1
- package/dist/server-node.js +405 -381
- package/dist/server.cjs +1 -1
- package/dist/server.d.cts +878 -15
- package/dist/server.d.ts +878 -15
- package/dist/server.js +1034 -534
- package/dist/sha256-ArEYjaTI.cjs +1 -0
- package/dist/sha256-DPEuJ3nh.js +155 -0
- package/dist/style.css +1 -1
- package/dist/template-bindings-C2SpvsMU.js +58 -0
- package/dist/template-bindings-CEtWyiLX.cjs +1 -0
- package/dist/template-catalog-FJE_c9Qe.cjs +1 -0
- package/dist/template-catalog-j2B1MJlL.js +414 -0
- package/dist/template-fragments-BGbQLGlV.js +187 -0
- package/dist/template-fragments-DcKeiylI.cjs +1 -0
- package/dist/template-outline-BwRV_eRo.cjs +1 -0
- package/dist/template-outline-cnWfT_LK.js +88 -0
- package/dist/{template-registry-BjE1VS6g.js → template-registry-BtaKPELV.js} +364 -201
- package/dist/template-registry-Co1zPq5e.cjs +1 -0
- package/dist/textwrap-CWHyzkBH.cjs +4 -0
- package/dist/textwrap-DE1kgcJB.js +110 -0
- package/dist/{tree-CqcQ99NM.js → tree-CjVZLRw7.js} +1 -1
- package/dist/{useLocalDraft-C07SYRnC.js → useLocalDraft-BnhcxXk_.js} +1 -1
- package/dist/{useLocalDraft-Yiw1wFgI.cjs → useLocalDraft-CioIfDb6.cjs} +1 -1
- package/dist/vue/async.d.cts +190 -15
- package/dist/vue/async.d.ts +190 -15
- package/dist/vue/index.d.cts +274 -24
- package/dist/vue/index.d.ts +274 -24
- package/dist/vue-async.cjs +1 -1
- package/dist/vue-async.js +5 -5
- package/dist/vue.cjs +1 -1
- package/dist/vue.js +90 -81
- package/dist/{workbook-session-DNa2RHNG.cjs → workbook-session-Bjv1YCRK.cjs} +18 -18
- package/dist/{workbook-session-BPb3TMnT.js → workbook-session-BvToI-Fd.js} +5440 -5288
- package/dist/worker.cjs +1 -1
- package/dist/worker.d.cts +66 -12
- package/dist/worker.d.ts +66 -12
- package/dist/worker.js +61 -56
- package/dist/xlsx-node.cjs +34 -34
- package/dist/xlsx-node.js +878 -870
- package/dist/xlsx.cjs +3 -4
- package/dist/xlsx.d.cts +22 -10
- package/dist/xlsx.d.ts +22 -10
- package/dist/xlsx.js +261 -253
- package/package.json +2 -2
- package/dist/ExcelBindingWizard-CeAf4QSE.js +0 -1465
- package/dist/ExcelBindingWizard-y0mT-AHR.cjs +0 -1
- package/dist/ParamEditor-BLaE5q5W.js +0 -522
- package/dist/ParamEditor-MBBC7lUE.cjs +0 -1
- package/dist/ReportBatchPanel-Fp1ePFag.cjs +0 -1
- package/dist/ReportPreview-BN6fk7Wz.cjs +0 -6
- package/dist/ReportPreview-D2Jkyh1U.js +0 -4243
- package/dist/ReportTemplateLibrary-5fk5CQBO.cjs +0 -1
- package/dist/RuleEditor-ChRzNQuF.cjs +0 -1
- package/dist/RuleEditor-DzAmW5YH.js +0 -2024
- package/dist/TemplateReviewPanel-BKofGrV9.js +0 -222
- package/dist/TemplateReviewPanel-DwtOcLue.cjs +0 -1
- package/dist/assets-C2U-e-Sz.cjs +0 -4
- package/dist/assets-Q0wUwNrV.js +0 -217
- package/dist/batch-Bt3Fd27Z.cjs +0 -1
- package/dist/batch-mRqhhhjt.js +0 -364
- package/dist/capabilities-CK_7hizc.js +0 -63
- package/dist/capabilities-CsZ-pNHR.cjs +0 -1
- package/dist/config-Bb7RiIO5.cjs +0 -1
- package/dist/config-XVwG87IA.js +0 -529
- package/dist/matrix-DVyWiYsd.cjs +0 -1
- package/dist/matrix-yZsGnldA.js +0 -227
- package/dist/page-window-index-CIuT4BAv.js +0 -43
- package/dist/page-window-index-DEjnM6IB.cjs +0 -1
- package/dist/param-validation-BlHHXs6u.js +0 -153
- package/dist/param-validation-DCK039V1.cjs +0 -1
- package/dist/plugin-D4wizDXB.js +0 -22
- package/dist/progress-7OSZbFok.js +0 -39
- package/dist/progress-BnLiS5eH.cjs +0 -1
- package/dist/task-events-DQ276fn2.cjs +0 -1
- package/dist/task-events-Dpsvf_t2.js +0 -47
- package/dist/template-registry-D3SjENi6.cjs +0 -1
- package/dist/template-review-DGwWOoCv.cjs +0 -2
- package/dist/template-review-PgEe_Wr9.js +0 -1742
- package/dist/validate-BJ5HIWY8.cjs +0 -1
- package/dist/validate-DbgEM1Hh.js +0 -163
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { g as w, r as j, e as K } from "./batch-CGyt-b2W.js";
|
|
2
|
+
import { r as D } from "./grid-geometry-BNptEcMm.js";
|
|
3
|
+
function m(e) {
|
|
4
|
+
return Number.isFinite(e) ? Math.max(0, e) : 0;
|
|
5
|
+
}
|
|
6
|
+
function _(e, t = 0) {
|
|
7
|
+
const r = e.length, n = m(t), o = new Array(r + 1);
|
|
8
|
+
o[0] = 0;
|
|
9
|
+
for (let s = 0; s < r; s++)
|
|
10
|
+
o[s + 1] = o[s] + m(e[s] ?? 0) + n;
|
|
11
|
+
const u = o[r];
|
|
12
|
+
function l(s) {
|
|
13
|
+
let i = 0, d = r - 1, g = 0;
|
|
14
|
+
for (; i <= d; ) {
|
|
15
|
+
const p = i + d >>> 1;
|
|
16
|
+
o[p] <= s ? (g = p, i = p + 1) : d = p - 1;
|
|
17
|
+
}
|
|
18
|
+
return g;
|
|
19
|
+
}
|
|
20
|
+
function a(s, i, d = 1) {
|
|
21
|
+
if (r === 0) return { start: 0, end: -1, padTopPx: 0, padBottomPx: 0 };
|
|
22
|
+
const g = Math.floor(m(d)), p = m(i), v = l(p), I = Math.max(0, v - g), M = p + m(s);
|
|
23
|
+
let y = v, b = r - 1, S = r - 1;
|
|
24
|
+
for (; y <= b; ) {
|
|
25
|
+
const h = y + b >>> 1;
|
|
26
|
+
o[h + 1] < M ? y = h + 1 : (S = h, b = h - 1);
|
|
27
|
+
}
|
|
28
|
+
const x = Math.min(r - 1, S + g);
|
|
29
|
+
return {
|
|
30
|
+
start: I,
|
|
31
|
+
end: x,
|
|
32
|
+
padTopPx: o[I],
|
|
33
|
+
padBottomPx: Math.max(0, u - o[x + 1])
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
totalHeightPx: u,
|
|
38
|
+
pageAt: l,
|
|
39
|
+
offsetAt: (s) => o[Math.max(0, Math.min(r, Math.floor(s)))] ?? 0,
|
|
40
|
+
window: a
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
class c extends Error {
|
|
44
|
+
constructor(t) {
|
|
45
|
+
super(`Report drill: ${t}`), this.code = t, this.name = "ReportDrillError";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function f(e) {
|
|
49
|
+
return typeof e == "string" && e.trim().length > 0 && e.length <= 256;
|
|
50
|
+
}
|
|
51
|
+
function O(e) {
|
|
52
|
+
if (typeof e == "number" && Number.isFinite(e) || typeof e == "boolean") return String(e);
|
|
53
|
+
if (typeof e == "string" && e.length > 0 && e.length <= 4096) return e;
|
|
54
|
+
throw new c("missing-value");
|
|
55
|
+
}
|
|
56
|
+
function E(e, t) {
|
|
57
|
+
return Object.getOwnPropertyDescriptor(e, t)?.value;
|
|
58
|
+
}
|
|
59
|
+
function R(e) {
|
|
60
|
+
if (!Array.isArray(e) || e.length > 64) throw new c("config");
|
|
61
|
+
const t = /* @__PURE__ */ new Set();
|
|
62
|
+
for (const r of e) {
|
|
63
|
+
if (!r || !f(r.id) || !f(r.label) || !r.target || !f(r.target.field) || t.has(r.id)) throw new c("config");
|
|
64
|
+
t.add(r.id);
|
|
65
|
+
const n = r.target;
|
|
66
|
+
if (n.datasetId !== void 0 && !f(n.datasetId) || n.reportScope !== void 0 && !f(n.reportScope)) throw new c("config");
|
|
67
|
+
if (n.roles !== void 0 && (!Array.isArray(n.roles) || n.roles.length > 16 || n.roles.some((o) => !f(o)))) throw new c("config");
|
|
68
|
+
z(r.params);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function z(e) {
|
|
72
|
+
if (e !== void 0) {
|
|
73
|
+
if (!e || typeof e != "object" || Array.isArray(e) || Object.keys(e).length > 32) throw new c("config");
|
|
74
|
+
for (const [t, r] of Object.entries(e)) {
|
|
75
|
+
if (!f(t) || ["__proto__", "constructor", "prototype"].includes(t) || !r || typeof r != "object") throw new c("config");
|
|
76
|
+
if ("value" in r)
|
|
77
|
+
try {
|
|
78
|
+
O(r.value);
|
|
79
|
+
} catch {
|
|
80
|
+
throw new c("config");
|
|
81
|
+
}
|
|
82
|
+
else if (!["value", "rowKey", "query", "field"].includes(r.from) || (r.from === "query" || r.from === "field") && !f(r.field)) throw new c("config");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function A(e, t, r) {
|
|
87
|
+
const { target: n } = r, o = t.source?.datasetId ?? t.component.table?.source?.datasetId;
|
|
88
|
+
return (t.source?.field ?? t.table?.columnKey) === n.field && (n.datasetId === void 0 || o === n.datasetId) && (n.reportScope === void 0 || e.pages[t.address.pageIndex]?.meta?.reportScope === n.reportScope) && (n.roles ? n.roles.includes(t.table?.role ?? "") : t.table?.role !== "header");
|
|
89
|
+
}
|
|
90
|
+
function k(e, t, r) {
|
|
91
|
+
R(r);
|
|
92
|
+
const n = w(e, t);
|
|
93
|
+
return n ? r.filter((o) => A(e, n, o)) : [];
|
|
94
|
+
}
|
|
95
|
+
function P(e, t, r, n) {
|
|
96
|
+
if ("value" in e) return e.value;
|
|
97
|
+
switch (e.from) {
|
|
98
|
+
case "value":
|
|
99
|
+
return r.value;
|
|
100
|
+
case "rowKey":
|
|
101
|
+
return r.source?.rowKey;
|
|
102
|
+
case "query":
|
|
103
|
+
return E(n, e.field);
|
|
104
|
+
case "field": {
|
|
105
|
+
const o = r.component.table?.columnKeys.indexOf(e.field) ?? -1;
|
|
106
|
+
return o < 0 ? void 0 : w(t, { ...r.address, columnIndex: o })?.value;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function B(e, t, r, n = {}) {
|
|
111
|
+
R([r]);
|
|
112
|
+
const o = w(e, t);
|
|
113
|
+
if (!o || !A(e, o, r)) throw new c("target");
|
|
114
|
+
const u = Object.fromEntries(Object.entries(r.params ?? {}).map(([s, i]) => [s, O(P(i, e, o, n))])), l = Object.entries(n);
|
|
115
|
+
if (l.length > 128 || l.some(([s, i]) => !f(s) || typeof i != "string" || i.length > 4096)) throw new c("config");
|
|
116
|
+
const a = e.pages[t.pageIndex]?.meta?.reportScope;
|
|
117
|
+
return Object.freeze({ actionId: r.id, params: Object.freeze(u), returnState: Object.freeze({
|
|
118
|
+
params: Object.freeze(Object.fromEntries(l)),
|
|
119
|
+
address: Object.freeze({ ...t }),
|
|
120
|
+
...typeof a == "string" ? { reportScope: a } : {},
|
|
121
|
+
...o.source ? { source: Object.freeze({ sourceScope: o.source.sourceScope, datasetId: o.source.datasetId, rowKey: o.source.rowKey, field: o.source.field }) } : {}
|
|
122
|
+
}) });
|
|
123
|
+
}
|
|
124
|
+
function N(e, t) {
|
|
125
|
+
if (!t.source) return e.pages[t.address.pageIndex]?.meta?.reportScope === t.reportScope && w(e, t.address) ? { ...t.address } : null;
|
|
126
|
+
const r = K(e), n = j({ address: t.address, source: t.source });
|
|
127
|
+
for (const [o, u] of e.pages.entries())
|
|
128
|
+
if (!(t.reportScope !== void 0 && u.meta?.reportScope !== t.reportScope)) {
|
|
129
|
+
for (const [l, a] of u.components.entries())
|
|
130
|
+
if (a.grid)
|
|
131
|
+
for (const s of D(a.grid, a.widthMm, a.heightMm).cells) {
|
|
132
|
+
const i = { pageIndex: o, componentIndex: l, rowIndex: s.ri, columnIndex: s.ci }, d = r(i);
|
|
133
|
+
if (d?.source && j(d) === n) return i;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
export {
|
|
139
|
+
c as R,
|
|
140
|
+
B as a,
|
|
141
|
+
_ as c,
|
|
142
|
+
k as m,
|
|
143
|
+
N as r,
|
|
144
|
+
R as v
|
|
145
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const g=require("./batch-BaP6pWDE.cjs"),D=require("./grid-geometry-CZ_cYB6O.cjs");function m(e){return Number.isFinite(e)?Math.max(0,e):0}function C(e,r=0){const t=e.length,n=m(r),o=new Array(t+1);o[0]=0;for(let i=0;i<t;i++)o[i+1]=o[i]+m(e[i]??0)+n;const u=o[t];function f(i){let c=0,a=t-1,h=0;for(;c<=a;){const p=c+a>>>1;o[p]<=i?(h=p,c=p+1):a=p-1}return h}function l(i,c,a=1){if(t===0)return{start:0,end:-1,padTopPx:0,padBottomPx:0};const h=Math.floor(m(a)),p=m(c),v=f(p),x=Math.max(0,v-h),A=p+m(i);let y=v,b=t-1,I=t-1;for(;y<=b;){const w=y+b>>>1;o[w+1]<A?y=w+1:(I=w,b=w-1)}const S=Math.min(t-1,I+h);return{start:x,end:S,padTopPx:o[x],padBottomPx:Math.max(0,u-o[S+1])}}return{totalHeightPx:u,pageAt:f,offsetAt:i=>o[Math.max(0,Math.min(t,Math.floor(i)))]??0,window:l}}class s extends Error{constructor(r){super(`Report drill: ${r}`),this.code=r,this.name="ReportDrillError"}}function d(e){return typeof e=="string"&&e.trim().length>0&&e.length<=256}function j(e){if(typeof e=="number"&&Number.isFinite(e)||typeof e=="boolean")return String(e);if(typeof e=="string"&&e.length>0&&e.length<=4096)return e;throw new s("missing-value")}function M(e,r){return Object.getOwnPropertyDescriptor(e,r)?.value}function R(e){if(!Array.isArray(e)||e.length>64)throw new s("config");const r=new Set;for(const t of e){if(!t||!d(t.id)||!d(t.label)||!t.target||!d(t.target.field)||r.has(t.id))throw new s("config");r.add(t.id);const n=t.target;if(n.datasetId!==void 0&&!d(n.datasetId)||n.reportScope!==void 0&&!d(n.reportScope))throw new s("config");if(n.roles!==void 0&&(!Array.isArray(n.roles)||n.roles.length>16||n.roles.some(o=>!d(o))))throw new s("config");E(t.params)}}function E(e){if(e!==void 0){if(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).length>32)throw new s("config");for(const[r,t]of Object.entries(e)){if(!d(r)||["__proto__","constructor","prototype"].includes(r)||!t||typeof t!="object")throw new s("config");if("value"in t)try{j(t.value)}catch{throw new s("config")}else if(!["value","rowKey","query","field"].includes(t.from)||(t.from==="query"||t.from==="field")&&!d(t.field))throw new s("config")}}}function O(e,r,t){const{target:n}=t,o=r.source?.datasetId??r.component.table?.source?.datasetId;return(r.source?.field??r.table?.columnKey)===n.field&&(n.datasetId===void 0||o===n.datasetId)&&(n.reportScope===void 0||e.pages[r.address.pageIndex]?.meta?.reportScope===n.reportScope)&&(n.roles?n.roles.includes(r.table?.role??""):r.table?.role!=="header")}function K(e,r,t){R(t);const n=g.getReportCellContext(e,r);return n?t.filter(o=>O(e,n,o)):[]}function q(e,r,t,n){if("value"in e)return e.value;switch(e.from){case"value":return t.value;case"rowKey":return t.source?.rowKey;case"query":return M(n,e.field);case"field":{const o=t.component.table?.columnKeys.indexOf(e.field)??-1;return o<0?void 0:g.getReportCellContext(r,{...t.address,columnIndex:o})?.value}}}function P(e,r,t,n={}){R([t]);const o=g.getReportCellContext(e,r);if(!o||!O(e,o,t))throw new s("target");const u=Object.fromEntries(Object.entries(t.params??{}).map(([i,c])=>[i,j(q(c,e,o,n))])),f=Object.entries(n);if(f.length>128||f.some(([i,c])=>!d(i)||typeof c!="string"||c.length>4096))throw new s("config");const l=e.pages[r.pageIndex]?.meta?.reportScope;return Object.freeze({actionId:t.id,params:Object.freeze(u),returnState:Object.freeze({params:Object.freeze(Object.fromEntries(f)),address:Object.freeze({...r}),...typeof l=="string"?{reportScope:l}:{},...o.source?{source:Object.freeze({sourceScope:o.source.sourceScope,datasetId:o.source.datasetId,rowKey:o.source.rowKey,field:o.source.field})}:{}})})}function z(e,r){if(!r.source)return e.pages[r.address.pageIndex]?.meta?.reportScope===r.reportScope&&g.getReportCellContext(e,r.address)?{...r.address}:null;const t=g.createReportCellResolver(e),n=g.reportCellEditKey({address:r.address,source:r.source});for(const[o,u]of e.pages.entries())if(!(r.reportScope!==void 0&&u.meta?.reportScope!==r.reportScope)){for(const[f,l]of u.components.entries())if(l.grid)for(const i of D.resolveGridLayout(l.grid,l.widthMm,l.heightMm).cells){const c={pageIndex:o,componentIndex:f,rowIndex:i.ri,columnIndex:i.ci},a=t(c);if(a?.source&&g.reportCellEditKey(a)===n)return c}}return null}exports.ReportDrillError=s;exports.createPageWindowIndex=C;exports.createReportDrillRequest=P;exports.matchReportDrillActions=K;exports.resolveReportDrillReturn=z;exports.validateReportDrillActions=R;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=new Map;let b=0,d={maxFonts:8,maxBytes:64*1024*1024,maxFontBytes:24*1024*1024};function O(){for(;f.size>d.maxFonts||b>d.maxBytes;){const t=f.keys().next().value;b-=f.get(t).byteLength,f.delete(t)}}function W(t){const e={...d,...t};if(!Object.values(e).every(n=>Number.isSafeInteger(n)&&n>0))throw new Error("字体缓存预算应为正整数字节/数量");d=e;for(const[n,a]of f)a.byteLength>d.maxFontBytes&&B(n);O()}function p(){return{fonts:f.size,bytes:b,...d}}function j(t){const e=f.get(t);return e&&(f.delete(t),f.set(t,e)),e}function B(t){const e=f.get(t);e&&(b-=e.byteLength),f.delete(t)}function q(){f.clear(),b=0}function H(t,e){B(t),!(e.byteLength>d.maxBytes||e.byteLength>d.maxFontBytes)&&(f.set(t,e),b+=e.byteLength,O())}const V="mach-report-fonts",u="fonts";function $(){return new Promise((t,e)=>{const n=indexedDB.open(V,1);n.onupgradeneeded=()=>{n.result.objectStoreNames.contains(u)||n.result.createObjectStore(u)},n.onsuccess=()=>t(n.result),n.onerror=()=>e(n.error)})}function M(t){if(t instanceof Uint8Array)return{bytes:t,accessedAt:0};const e=t;return e?.bytes instanceof Uint8Array&&Number.isFinite(e.accessedAt)?e:void 0}async function C(t,e){if(typeof indexedDB>"u")return t;let n;try{return n=await $(),await e(n)}catch{return t}finally{n?.close()}}function G(t){return C(null,e=>new Promise((n,a)=>{const r=e.transaction(u,"readwrite"),o=r.objectStore(u),i=o.get(t);let c=null;i.onsuccess=()=>{const s=M(i.result);s&&s.bytes.byteLength<=p().maxFontBytes?(c=s.bytes,o.put({bytes:s.bytes,accessedAt:Date.now()},t)):i.result!==void 0&&o.delete(t)},r.oncomplete=()=>n(c),r.onerror=()=>a(r.error),r.onabort=()=>a(r.error)}))}function J(t,e,n,a){const r=p(),o=e.filter(s=>s.key!==n);t.delete(n),a.byteLength<=Math.min(r.maxFontBytes,r.maxBytes)&&o.unshift({key:n,bytes:a.byteLength,accessedAt:Date.now()}),o.sort((s,h)=>h.accessedAt-s.accessedAt);let i=0,c=0;for(const s of o){if(c>=r.maxFonts||i+s.bytes>r.maxBytes||s.bytes>r.maxFontBytes){t.delete(s.key);continue}i+=s.bytes,c++,s.key===n&&t.put({bytes:a,accessedAt:s.accessedAt},n)}}function _(t,e){return C(void 0,n=>new Promise((a,r)=>{const o=n.transaction(u,"readwrite"),i=o.objectStore(u),c=i.openCursor(),s=[];c.onsuccess=()=>{const h=c.result;if(!h){J(i,s,t,e);return}const x=M(h.value);x?s.push({key:h.key,bytes:x.bytes.byteLength,accessedAt:x.accessedAt}):h.delete(),h.continue()},o.oncomplete=()=>a(),o.onerror=()=>r(o.error),o.onabort=()=>r(o.error)}))}function D(t){return C(void 0,e=>new Promise((n,a)=>{const r=e.transaction(u,"readwrite"),o=r.objectStore(u);t===void 0?o.clear():o.delete(t),r.oncomplete=()=>n(),r.onerror=()=>a(r.error),r.onabort=()=>a(r.error)}))}let L=0,S=0,v=Promise.resolve();const g=new Map;async function N(t){l.set(t,(l.get(t)??0)+1),B(t),w.delete(t);const e=g.get(t),n=(async()=>{await v,await e,await y.get(t),await D(t)})();g.set(t,n);try{await n}finally{g.get(t)===n&&g.delete(t)}}async function I(){L++,q(),w.clear(),l.clear();const t=v,e=(async()=>{await t,await Promise.all(y.values()),await D()})();v=e.catch(()=>{}),await e}const l=new Map,y=new Map,w=new Map,E=new Set;function k(){!S&&!E.size&&l.clear()}const T=new WeakMap;function K(t){const e=new TextDecoder().decode(t.subarray(0,256));return/^\s*(?:\uFEFF)?\s*<(?:!doctype\s+html|html|head|body)(?:\s|>)/i.test(e)}function R(t){if(t.byteLength===0)throw new Error("字体文件为空");if(K(t))throw new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件")}function Q(t){const e=T.get(t);if(e)return e;const n=(async()=>{const a=String.fromCharCode(...t.subarray(0,4));if(!["\0\0\0","true","OTTO","wOFF","wOF2","ttcf"].includes(a))throw new Error("文件内容不是支持的 TTF/OTF/WOFF 字体(可能返回了 JSON 或文本)");const{default:r}=await Promise.resolve().then(()=>require("./pdf-CvvrjPQg.cjs")).then(i=>i.fontkit_es),o=r.create(t);if(!Number.isFinite(o.unitsPerEm)||o.unitsPerEm<=0||!o.characterSet?.length||!o.numGlyphs)throw new Error("字体结构无效或不含可嵌入的单字体;请提供有效的 TTF/OTF/WOFF 文件")})();return T.set(t,n),n}function A(t,e,n=!1){const a=n?"字体加载超时,请检查网络或字体服务":e instanceof Error?e.message:String(e);return Object.assign(new Error(`PDF 字体 ${JSON.stringify(t)} 加载失败:${a}`),{cause:e})}function P(t,e){if(t>e)throw new Error(`字体文件超过单字体下载预算(${e}字节)`)}async function X(t,e,n){const a=Number(t.headers?.get("content-length"));try{Number.isFinite(a)&&P(a,e)}catch(r){throw t.body?.cancel(r).catch(()=>{}),r}if(!t.body){const r=new Uint8Array(await F(t.arrayBuffer(),n));return P(r.byteLength,e),r}return U(t.body,e,n)}async function U(t,e,n){const a=t.getReader(),r=[];let o=0;try{for(;;){const s=await F(a.read(),n);if(s.done)break;o+=s.value.byteLength,P(o,e),r.push(s.value)}const i=new Uint8Array(o);let c=0;for(const s of r)i.set(s,c),c+=s.byteLength;return i}catch(i){throw a.cancel(i).catch(()=>{}),i}finally{a.releaseLock()}}async function Y(t,e,n){if(t[0]!==31||t[1]!==139)return t;if(typeof DecompressionStream>"u")throw new Error("当前环境不支持 gzip 字体解压,请使用未压缩的字体 URL 或支持 DecompressionStream 的浏览器 / Node 环境");const r=new ReadableStream({start(o){o.enqueue(t),o.close()}}).pipeThrough(new DecompressionStream("gzip"));return U(r,e,n)}async function Z(t){const e=new AbortController;let n=!1;const a=setTimeout(()=>{n=!0,e.abort()},15e3);try{const r=await fetch(t,{signal:e.signal});if(!r.ok)throw new Error(`字体请求返回 HTTP ${r.status}`);if(/text\/html|application\/xhtml\+xml/i.test(r.headers?.get("content-type")??""))throw new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件");const o=p().maxFontBytes,i=await X(r,o,e.signal),c=await Y(i,o,e.signal);return R(c),{bytes:c,fromCache:!1}}catch(r){throw e.abort(),A(t,r,n)}finally{clearTimeout(a)}}async function tt(t){await v,await g.get(t);const e=await G(t);if(e)try{return R(e),{bytes:e,fromCache:!0}}catch{}return Z(t)}function et(t){const e=w.get(t);if(e)return e;const n=tt(t);w.set(t,n),E.add(n);const a=()=>{w.get(t)===n&&w.delete(t),E.delete(n),k()};return n.then(a,a),n}async function nt(t,e,n,a){if((l.get(t)??0)!==n||L!==a)return;H(t,e);const r=y.get(t);if(r){await r;return}const o=_(t,e);y.set(t,o),await o,y.get(t)===o&&y.delete(t)}function m(t){return t.reason??new DOMException("字体加载已取消","AbortError")}function F(t,e){return e?e.aborted?Promise.reject(m(e)):new Promise((n,a)=>{const r=()=>{e.removeEventListener("abort",r),a(m(e))};e.addEventListener("abort",r,{once:!0}),t.then(o=>{e.removeEventListener("abort",r),n(o)},o=>{e.removeEventListener("abort",r),a(o)})}):t}async function rt(t,e,n,a,r){try{return await F(Q(e.bytes),n.signal),e.bytes}catch(o){if(n.signal?.aborted)throw m(n.signal);if((l.get(t)??0)!==a||L!==r)throw A(t,o);if(await N(t),e.fromCache)return await z(t,n);throw A(t,o)}}async function z(t,e={}){if(e.signal?.aborted)throw m(e.signal);const n=l.get(t)??0,a=L,r=j(t);if(r&&!e.strict)return r;const o=r?void 0:et(t);S++;try{const i=r?{bytes:r,fromCache:!0}:await F(o,e.signal),c=e.strict?await rt(t,i,e,n,a):i.bytes;if(e.signal?.aborted)throw m(e.signal);return r||await F(nt(t,c,n,a),e.signal),c}catch(i){if(e.signal?.aborted)throw m(e.signal);if(e.strict)throw i;return null}finally{S--,k()}}exports.clearFontCache=I;exports.configureFontCache=W;exports.getFontCacheStats=p;exports.invalidateFontCache=N;exports.loadFontWithCache=z;
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
const f = /* @__PURE__ */ new Map();
|
|
2
|
+
let b = 0, d = { maxFonts: 8, maxBytes: 64 * 1024 * 1024, maxFontBytes: 24 * 1024 * 1024 };
|
|
3
|
+
function D() {
|
|
4
|
+
for (; f.size > d.maxFonts || b > d.maxBytes; ) {
|
|
5
|
+
const t = f.keys().next().value;
|
|
6
|
+
b -= f.get(t).byteLength, f.delete(t);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function nt(t) {
|
|
10
|
+
const e = { ...d, ...t };
|
|
11
|
+
if (!Object.values(e).every((n) => Number.isSafeInteger(n) && n > 0)) throw new Error("字体缓存预算应为正整数字节/数量");
|
|
12
|
+
d = e;
|
|
13
|
+
for (const [n, a] of f) a.byteLength > d.maxFontBytes && P(n);
|
|
14
|
+
D();
|
|
15
|
+
}
|
|
16
|
+
function B() {
|
|
17
|
+
return { fonts: f.size, bytes: b, ...d };
|
|
18
|
+
}
|
|
19
|
+
function U(t) {
|
|
20
|
+
const e = f.get(t);
|
|
21
|
+
return e && (f.delete(t), f.set(t, e)), e;
|
|
22
|
+
}
|
|
23
|
+
function P(t) {
|
|
24
|
+
const e = f.get(t);
|
|
25
|
+
e && (b -= e.byteLength), f.delete(t);
|
|
26
|
+
}
|
|
27
|
+
function z() {
|
|
28
|
+
f.clear(), b = 0;
|
|
29
|
+
}
|
|
30
|
+
function W(t, e) {
|
|
31
|
+
P(t), !(e.byteLength > d.maxBytes || e.byteLength > d.maxFontBytes) && (f.set(t, e), b += e.byteLength, D());
|
|
32
|
+
}
|
|
33
|
+
const j = "mach-report-fonts", u = "fonts";
|
|
34
|
+
function H() {
|
|
35
|
+
return new Promise((t, e) => {
|
|
36
|
+
const n = indexedDB.open(j, 1);
|
|
37
|
+
n.onupgradeneeded = () => {
|
|
38
|
+
n.result.objectStoreNames.contains(u) || n.result.createObjectStore(u);
|
|
39
|
+
}, n.onsuccess = () => t(n.result), n.onerror = () => e(n.error);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function M(t) {
|
|
43
|
+
if (t instanceof Uint8Array) return { bytes: t, accessedAt: 0 };
|
|
44
|
+
const e = t;
|
|
45
|
+
return e?.bytes instanceof Uint8Array && Number.isFinite(e.accessedAt) ? e : void 0;
|
|
46
|
+
}
|
|
47
|
+
async function T(t, e) {
|
|
48
|
+
if (typeof indexedDB > "u") return t;
|
|
49
|
+
let n;
|
|
50
|
+
try {
|
|
51
|
+
return n = await H(), await e(n);
|
|
52
|
+
} catch {
|
|
53
|
+
return t;
|
|
54
|
+
} finally {
|
|
55
|
+
n?.close();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function V(t) {
|
|
59
|
+
return T(null, (e) => new Promise((n, a) => {
|
|
60
|
+
const r = e.transaction(u, "readwrite"), o = r.objectStore(u), i = o.get(t);
|
|
61
|
+
let c = null;
|
|
62
|
+
i.onsuccess = () => {
|
|
63
|
+
const s = M(i.result);
|
|
64
|
+
s && s.bytes.byteLength <= B().maxFontBytes ? (c = s.bytes, o.put({ bytes: s.bytes, accessedAt: Date.now() }, t)) : i.result !== void 0 && o.delete(t);
|
|
65
|
+
}, r.oncomplete = () => n(c), r.onerror = () => a(r.error), r.onabort = () => a(r.error);
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
function $(t, e, n, a) {
|
|
69
|
+
const r = B(), o = e.filter((s) => s.key !== n);
|
|
70
|
+
t.delete(n), a.byteLength <= Math.min(r.maxFontBytes, r.maxBytes) && o.unshift({ key: n, bytes: a.byteLength, accessedAt: Date.now() }), o.sort((s, h) => h.accessedAt - s.accessedAt);
|
|
71
|
+
let i = 0, c = 0;
|
|
72
|
+
for (const s of o) {
|
|
73
|
+
if (c >= r.maxFonts || i + s.bytes > r.maxBytes || s.bytes > r.maxFontBytes) {
|
|
74
|
+
t.delete(s.key);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
i += s.bytes, c++, s.key === n && t.put({ bytes: a, accessedAt: s.accessedAt }, n);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function q(t, e) {
|
|
81
|
+
return T(void 0, (n) => new Promise((a, r) => {
|
|
82
|
+
const o = n.transaction(u, "readwrite"), i = o.objectStore(u), c = i.openCursor(), s = [];
|
|
83
|
+
c.onsuccess = () => {
|
|
84
|
+
const h = c.result;
|
|
85
|
+
if (!h) {
|
|
86
|
+
$(i, s, t, e);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const L = M(h.value);
|
|
90
|
+
L ? s.push({ key: h.key, bytes: L.bytes.byteLength, accessedAt: L.accessedAt }) : h.delete(), h.continue();
|
|
91
|
+
}, o.oncomplete = () => a(), o.onerror = () => r(o.error), o.onabort = () => r(o.error);
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
function C(t) {
|
|
95
|
+
return T(void 0, (e) => new Promise((n, a) => {
|
|
96
|
+
const r = e.transaction(u, "readwrite"), o = r.objectStore(u);
|
|
97
|
+
t === void 0 ? o.clear() : o.delete(t), r.oncomplete = () => n(), r.onerror = () => a(r.error), r.onabort = () => a(r.error);
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
let p = 0, x = 0, v = Promise.resolve();
|
|
101
|
+
const g = /* @__PURE__ */ new Map();
|
|
102
|
+
async function G(t) {
|
|
103
|
+
y.set(t, (y.get(t) ?? 0) + 1), P(t), l.delete(t);
|
|
104
|
+
const e = g.get(t), n = (async () => {
|
|
105
|
+
await v, await e, await w.get(t), await C(t);
|
|
106
|
+
})();
|
|
107
|
+
g.set(t, n);
|
|
108
|
+
try {
|
|
109
|
+
await n;
|
|
110
|
+
} finally {
|
|
111
|
+
g.get(t) === n && g.delete(t);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
async function rt() {
|
|
115
|
+
p++, z(), l.clear(), y.clear();
|
|
116
|
+
const t = v, e = (async () => {
|
|
117
|
+
await t, await Promise.all(w.values()), await C();
|
|
118
|
+
})();
|
|
119
|
+
v = e.catch(() => {
|
|
120
|
+
}), await e;
|
|
121
|
+
}
|
|
122
|
+
const y = /* @__PURE__ */ new Map(), w = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map(), E = /* @__PURE__ */ new Set();
|
|
123
|
+
function N() {
|
|
124
|
+
!x && !E.size && y.clear();
|
|
125
|
+
}
|
|
126
|
+
const O = /* @__PURE__ */ new WeakMap();
|
|
127
|
+
function J(t) {
|
|
128
|
+
const e = new TextDecoder().decode(t.subarray(0, 256));
|
|
129
|
+
return /^\s*(?:\uFEFF)?\s*<(?:!doctype\s+html|html|head|body)(?:\s|>)/i.test(e);
|
|
130
|
+
}
|
|
131
|
+
function k(t) {
|
|
132
|
+
if (t.byteLength === 0) throw new Error("字体文件为空");
|
|
133
|
+
if (J(t)) throw new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件");
|
|
134
|
+
}
|
|
135
|
+
function I(t) {
|
|
136
|
+
const e = O.get(t);
|
|
137
|
+
if (e) return e;
|
|
138
|
+
const n = (async () => {
|
|
139
|
+
const a = String.fromCharCode(...t.subarray(0, 4));
|
|
140
|
+
if (!["\0\0\0", "true", "OTTO", "wOFF", "wOF2", "ttcf"].includes(a))
|
|
141
|
+
throw new Error("文件内容不是支持的 TTF/OTF/WOFF 字体(可能返回了 JSON 或文本)");
|
|
142
|
+
const { default: r } = await import("./pdf-BwNyeGpt.js").then((i) => i.f), o = r.create(t);
|
|
143
|
+
if (!Number.isFinite(o.unitsPerEm) || o.unitsPerEm <= 0 || !o.characterSet?.length || !o.numGlyphs)
|
|
144
|
+
throw new Error("字体结构无效或不含可嵌入的单字体;请提供有效的 TTF/OTF/WOFF 文件");
|
|
145
|
+
})();
|
|
146
|
+
return O.set(t, n), n;
|
|
147
|
+
}
|
|
148
|
+
function S(t, e, n = !1) {
|
|
149
|
+
const a = n ? "字体加载超时,请检查网络或字体服务" : e instanceof Error ? e.message : String(e);
|
|
150
|
+
return Object.assign(new Error(`PDF 字体 ${JSON.stringify(t)} 加载失败:${a}`), { cause: e });
|
|
151
|
+
}
|
|
152
|
+
function A(t, e) {
|
|
153
|
+
if (t > e) throw new Error(`字体文件超过单字体下载预算(${e}字节)`);
|
|
154
|
+
}
|
|
155
|
+
async function _(t, e, n) {
|
|
156
|
+
const a = Number(t.headers?.get("content-length"));
|
|
157
|
+
try {
|
|
158
|
+
Number.isFinite(a) && A(a, e);
|
|
159
|
+
} catch (r) {
|
|
160
|
+
throw t.body?.cancel(r).catch(() => {
|
|
161
|
+
}), r;
|
|
162
|
+
}
|
|
163
|
+
if (!t.body) {
|
|
164
|
+
const r = new Uint8Array(await F(t.arrayBuffer(), n));
|
|
165
|
+
return A(r.byteLength, e), r;
|
|
166
|
+
}
|
|
167
|
+
return R(t.body, e, n);
|
|
168
|
+
}
|
|
169
|
+
async function R(t, e, n) {
|
|
170
|
+
const a = t.getReader(), r = [];
|
|
171
|
+
let o = 0;
|
|
172
|
+
try {
|
|
173
|
+
for (; ; ) {
|
|
174
|
+
const s = await F(a.read(), n);
|
|
175
|
+
if (s.done) break;
|
|
176
|
+
o += s.value.byteLength, A(o, e), r.push(s.value);
|
|
177
|
+
}
|
|
178
|
+
const i = new Uint8Array(o);
|
|
179
|
+
let c = 0;
|
|
180
|
+
for (const s of r)
|
|
181
|
+
i.set(s, c), c += s.byteLength;
|
|
182
|
+
return i;
|
|
183
|
+
} catch (i) {
|
|
184
|
+
throw a.cancel(i).catch(() => {
|
|
185
|
+
}), i;
|
|
186
|
+
} finally {
|
|
187
|
+
a.releaseLock();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async function K(t, e, n) {
|
|
191
|
+
if (t[0] !== 31 || t[1] !== 139) return t;
|
|
192
|
+
if (typeof DecompressionStream > "u") throw new Error("当前环境不支持 gzip 字体解压,请使用未压缩的字体 URL 或支持 DecompressionStream 的浏览器 / Node 环境");
|
|
193
|
+
const r = new ReadableStream({ start(o) {
|
|
194
|
+
o.enqueue(t), o.close();
|
|
195
|
+
} }).pipeThrough(new DecompressionStream("gzip"));
|
|
196
|
+
return R(r, e, n);
|
|
197
|
+
}
|
|
198
|
+
async function Q(t) {
|
|
199
|
+
const e = new AbortController();
|
|
200
|
+
let n = !1;
|
|
201
|
+
const a = setTimeout(() => {
|
|
202
|
+
n = !0, e.abort();
|
|
203
|
+
}, 15e3);
|
|
204
|
+
try {
|
|
205
|
+
const r = await fetch(t, { signal: e.signal });
|
|
206
|
+
if (!r.ok) throw new Error(`字体请求返回 HTTP ${r.status}`);
|
|
207
|
+
if (/text\/html|application\/xhtml\+xml/i.test(r.headers?.get("content-type") ?? ""))
|
|
208
|
+
throw new Error("字体 URL 返回 HTML 页面(可能是 SPA 路由回退),不是字体文件");
|
|
209
|
+
const o = B().maxFontBytes, i = await _(r, o, e.signal), c = await K(i, o, e.signal);
|
|
210
|
+
return k(c), { bytes: c, fromCache: !1 };
|
|
211
|
+
} catch (r) {
|
|
212
|
+
throw e.abort(), S(t, r, n);
|
|
213
|
+
} finally {
|
|
214
|
+
clearTimeout(a);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
async function X(t) {
|
|
218
|
+
await v, await g.get(t);
|
|
219
|
+
const e = await V(t);
|
|
220
|
+
if (e)
|
|
221
|
+
try {
|
|
222
|
+
return k(e), { bytes: e, fromCache: !0 };
|
|
223
|
+
} catch {
|
|
224
|
+
}
|
|
225
|
+
return Q(t);
|
|
226
|
+
}
|
|
227
|
+
function Y(t) {
|
|
228
|
+
const e = l.get(t);
|
|
229
|
+
if (e) return e;
|
|
230
|
+
const n = X(t);
|
|
231
|
+
l.set(t, n), E.add(n);
|
|
232
|
+
const a = () => {
|
|
233
|
+
l.get(t) === n && l.delete(t), E.delete(n), N();
|
|
234
|
+
};
|
|
235
|
+
return n.then(a, a), n;
|
|
236
|
+
}
|
|
237
|
+
async function Z(t, e, n, a) {
|
|
238
|
+
if ((y.get(t) ?? 0) !== n || p !== a) return;
|
|
239
|
+
W(t, e);
|
|
240
|
+
const r = w.get(t);
|
|
241
|
+
if (r) {
|
|
242
|
+
await r;
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const o = q(t, e);
|
|
246
|
+
w.set(t, o), await o, w.get(t) === o && w.delete(t);
|
|
247
|
+
}
|
|
248
|
+
function m(t) {
|
|
249
|
+
return t.reason ?? new DOMException("字体加载已取消", "AbortError");
|
|
250
|
+
}
|
|
251
|
+
function F(t, e) {
|
|
252
|
+
return e ? e.aborted ? Promise.reject(m(e)) : new Promise((n, a) => {
|
|
253
|
+
const r = () => {
|
|
254
|
+
e.removeEventListener("abort", r), a(m(e));
|
|
255
|
+
};
|
|
256
|
+
e.addEventListener("abort", r, { once: !0 }), t.then((o) => {
|
|
257
|
+
e.removeEventListener("abort", r), n(o);
|
|
258
|
+
}, (o) => {
|
|
259
|
+
e.removeEventListener("abort", r), a(o);
|
|
260
|
+
});
|
|
261
|
+
}) : t;
|
|
262
|
+
}
|
|
263
|
+
async function tt(t, e, n, a, r) {
|
|
264
|
+
try {
|
|
265
|
+
return await F(I(e.bytes), n.signal), e.bytes;
|
|
266
|
+
} catch (o) {
|
|
267
|
+
if (n.signal?.aborted) throw m(n.signal);
|
|
268
|
+
if ((y.get(t) ?? 0) !== a || p !== r) throw S(t, o);
|
|
269
|
+
if (await G(t), e.fromCache) return await et(t, n);
|
|
270
|
+
throw S(t, o);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
async function et(t, e = {}) {
|
|
274
|
+
if (e.signal?.aborted) throw m(e.signal);
|
|
275
|
+
const n = y.get(t) ?? 0, a = p, r = U(t);
|
|
276
|
+
if (r && !e.strict) return r;
|
|
277
|
+
const o = r ? void 0 : Y(t);
|
|
278
|
+
x++;
|
|
279
|
+
try {
|
|
280
|
+
const i = r ? { bytes: r, fromCache: !0 } : await F(o, e.signal), c = e.strict ? await tt(t, i, e, n, a) : i.bytes;
|
|
281
|
+
if (e.signal?.aborted) throw m(e.signal);
|
|
282
|
+
return r || await F(Z(t, c, n, a), e.signal), c;
|
|
283
|
+
} catch (i) {
|
|
284
|
+
if (e.signal?.aborted) throw m(e.signal);
|
|
285
|
+
if (e.strict) throw i;
|
|
286
|
+
return null;
|
|
287
|
+
} finally {
|
|
288
|
+
x--, N();
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
export {
|
|
292
|
+
rt as clearFontCache,
|
|
293
|
+
nt as configureFontCache,
|
|
294
|
+
B as getFontCacheStats,
|
|
295
|
+
G as invalidateFontCache,
|
|
296
|
+
et as loadFontWithCache
|
|
297
|
+
};
|