@agile-team/mach-report 2.14.0 → 2.16.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 (282) hide show
  1. package/README.md +26 -16
  2. package/THIRD_PARTY_NOTICES.md +3 -1
  3. package/dist/{ExcelBindingWizard-CLT2p7P3.cjs → ExcelBindingWizard-CP6h2x1f.cjs} +1 -1
  4. package/dist/{ExcelBindingWizard-CvsWR8Ga.js → ExcelBindingWizard-HhB3hAJE.js} +3 -3
  5. package/dist/ParamEditor-CUQLgoxa.cjs +1 -0
  6. package/dist/ParamEditor-OKesP_nO.js +594 -0
  7. package/dist/{ReportBatchPanel-DkxTzBkD.cjs → ReportBatchPanel-cZCAMAwH.cjs} +1 -1
  8. package/dist/{ReportBatchPanel-LqVgiqp7.js → ReportBatchPanel-ruxcbfY6.js} +39 -39
  9. package/dist/ReportPreview-BcDKCLiK.js +4834 -0
  10. package/dist/ReportPreview-Bk9nLfO9.cjs +6 -0
  11. package/dist/{ReportTemplateLibrary-cQ1sqNYo.cjs → ReportTemplateLibrary-BDlNT8JN.cjs} +1 -1
  12. package/dist/{ReportTemplateLibrary-MjWEtc7X.js → ReportTemplateLibrary-DcwrH-63.js} +1 -1
  13. package/dist/{RuleEditor-BaR6xUiI.cjs → RuleEditor-BX5S8RSF.cjs} +1 -1
  14. package/dist/{RuleEditor-ChuXMlei.js → RuleEditor-CGl9XY2s.js} +5 -5
  15. package/dist/{TemplateOutlinePanel-BHKP89Xz.cjs → TemplateOutlinePanel-CGrT5DFN.cjs} +1 -1
  16. package/dist/{TemplateOutlinePanel-Dci6aRn1.js → TemplateOutlinePanel-SXCjaPKR.js} +2 -2
  17. package/dist/{TemplateReusePanel-CY5eO2Sh.cjs → TemplateReusePanel-6Z3wRFz8.cjs} +1 -1
  18. package/dist/{TemplateReusePanel-B7Gmyc1z.js → TemplateReusePanel-lHLOS9Wn.js} +2 -2
  19. package/dist/{TemplateReviewPanel-DjlX3xpt.js → TemplateReviewPanel-CJ9PLc48.js} +2 -2
  20. package/dist/{TemplateReviewPanel-JvZe9_4G.cjs → TemplateReviewPanel-Dpk7sLcF.cjs} +1 -1
  21. package/dist/analytics.cjs +1 -1
  22. package/dist/analytics.d.cts +5 -1
  23. package/dist/analytics.d.ts +5 -1
  24. package/dist/analytics.js +154 -60
  25. package/dist/artifact-integrity.json +143 -0
  26. package/dist/assets-CqIbfbTr.js +126 -0
  27. package/dist/assets-e4YSke8n.cjs +1 -0
  28. package/dist/auto-YR7a4BtF.js +240 -0
  29. package/dist/auto-uVBjX1j5.cjs +1 -0
  30. package/dist/batch-WzDIXJAt.js +220 -0
  31. package/dist/batch-z6Aw5GEY.cjs +1 -0
  32. package/dist/capabilities-DDwXr_cA.js +103 -0
  33. package/dist/capabilities-DNLyZdNw.cjs +1 -0
  34. package/dist/codes.d.cts +4 -0
  35. package/dist/codes.d.ts +4 -0
  36. package/dist/component-tree-Ca6YYfHq.js +61 -0
  37. package/dist/component-tree-DkGLEfZC.cjs +1 -0
  38. package/dist/{computed-Bvk0W15F.js → computed-C-4C2S5h.js} +3 -3
  39. package/dist/config-Dg_o8e7m.cjs +1 -0
  40. package/dist/config-XQ4qrQ7Q.js +844 -0
  41. package/dist/designer-BfQSahxq.js +5163 -0
  42. package/dist/designer-CPPdeM5_.cjs +2 -0
  43. package/dist/designer.cjs +1 -1
  44. package/dist/designer.d.cts +197 -16
  45. package/dist/designer.d.ts +197 -16
  46. package/dist/designer.js +1 -1
  47. package/dist/diagnostic-notification-B9K9We3h.cjs +1 -0
  48. package/dist/diagnostic-notification-qGAYZdkB.js +7 -0
  49. package/dist/drill-CsdjgkRM.cjs +1 -0
  50. package/dist/drill-DIGsZfyB.js +145 -0
  51. package/dist/encoding-BOGq4qYL.js +21 -0
  52. package/dist/encoding-BYF9ZTl9.cjs +1 -0
  53. package/dist/{font-loader-DHto6Lra.js → font-loader-CzI1GuBc.js} +1 -1
  54. package/dist/{font-loader-vhCT8znW.cjs → font-loader-EKLzOJxf.cjs} +1 -1
  55. package/dist/index.cjs +8 -9
  56. package/dist/index.d.cts +84 -4
  57. package/dist/index.d.ts +84 -4
  58. package/dist/index.js +829 -833
  59. package/dist/json-snapshot-D6ioHth9.js +1702 -0
  60. package/dist/json-snapshot-DknkjvxP.cjs +2 -0
  61. package/dist/licenses/_bwip-js_generic-4.11.4.txt +24 -0
  62. package/dist/licenses/_fast-csv_format-4.3.5.txt +22 -0
  63. package/dist/licenses/_fast-csv_parse-4.3.6.txt +22 -0
  64. package/dist/licenses/_pdf-lib_fontkit-1.1.1.txt +326 -0
  65. package/dist/licenses/_pdf-lib_standard-fonts-1.0.0.txt +22 -0
  66. package/dist/licenses/_pdf-lib_upng-1.0.1.txt +22 -0
  67. package/dist/licenses/_types_node-14.18.63.txt +22 -0
  68. package/dist/licenses/_types_pako-2.0.3.txt +22 -0
  69. package/dist/licenses/_types_pegjs-0.10.6.txt +22 -0
  70. package/dist/licenses/archiver-5.3.2.txt +23 -0
  71. package/dist/licenses/archiver-utils-2.1.0.txt +23 -0
  72. package/dist/licenses/archiver-utils-3.0.4.txt +23 -0
  73. package/dist/licenses/async-3.2.6.txt +20 -0
  74. package/dist/licenses/balanced-match-1.0.2.txt +22 -0
  75. package/dist/licenses/base64-js-1.5.1.txt +22 -0
  76. package/dist/licenses/big-integer-1.6.52.txt +25 -0
  77. package/dist/licenses/binary-0.3.0.txt +178 -0
  78. package/dist/licenses/bl-4.1.0.txt +14 -0
  79. package/dist/licenses/bluebird-3.4.7.txt +22 -0
  80. package/dist/licenses/brace-expansion-1.1.21.txt +22 -0
  81. package/dist/licenses/brace-expansion-2.1.7.txt +22 -0
  82. package/dist/licenses/buffer-5.7.1.txt +22 -0
  83. package/dist/licenses/buffer-crc32-0.2.13.txt +20 -0
  84. package/dist/licenses/buffer-indexof-polyfill-1.0.2.txt +23 -0
  85. package/dist/licenses/buffers-0.1.1.txt +140 -0
  86. package/dist/licenses/chainsaw-0.1.0.txt +184 -0
  87. package/dist/licenses/compress-commons-4.1.2.txt +23 -0
  88. package/dist/licenses/concat-map-0.0.1.txt +19 -0
  89. package/dist/licenses/core-util-is-1.0.3.txt +20 -0
  90. package/dist/licenses/crc-32-1.2.2.txt +202 -0
  91. package/dist/licenses/crc32-stream-4.0.3.txt +23 -0
  92. package/dist/licenses/dayjs-1.11.23.txt +22 -0
  93. package/dist/licenses/duplexer2-0.1.4.txt +27 -0
  94. package/dist/licenses/end-of-stream-1.4.5.txt +22 -0
  95. package/dist/licenses/exceljs-4.4.0.txt +23 -0
  96. package/dist/licenses/fast-csv-4.3.6.txt +22 -0
  97. package/dist/licenses/fast-png-6.4.0.txt +22 -0
  98. package/dist/licenses/fs-constants-1.0.0.txt +22 -0
  99. package/dist/licenses/fs.realpath-1.0.0.txt +44 -0
  100. package/dist/licenses/fstream-1.0.12.txt +16 -0
  101. package/dist/licenses/glob-7.2.3.txt +22 -0
  102. package/dist/licenses/graceful-fs-4.2.11.txt +16 -0
  103. package/dist/licenses/ieee754-1.2.1.txt +12 -0
  104. package/dist/licenses/immediate-3.0.6.txt +21 -0
  105. package/dist/licenses/inflight-1.0.6.txt +16 -0
  106. package/dist/licenses/inherits-2.0.4.txt +17 -0
  107. package/dist/licenses/iobuffer-5.4.0.txt +23 -0
  108. package/dist/licenses/isarray-1.0.0.txt +61 -0
  109. package/dist/licenses/jszip-3.10.2.txt +652 -0
  110. package/dist/licenses/lazystream-1.0.1.txt +24 -0
  111. package/dist/licenses/lie-3.3.0.txt +8 -0
  112. package/dist/licenses/listenercount-1.0.1.txt +6 -0
  113. package/dist/licenses/lodash.defaults-4.2.0.txt +48 -0
  114. package/dist/licenses/lodash.difference-4.5.0.txt +48 -0
  115. package/dist/licenses/lodash.escaperegexp-4.1.2.txt +48 -0
  116. package/dist/licenses/lodash.flatten-4.4.0.txt +48 -0
  117. package/dist/licenses/lodash.groupby-4.6.0.txt +48 -0
  118. package/dist/licenses/lodash.isboolean-3.0.3.txt +23 -0
  119. package/dist/licenses/lodash.isequal-4.5.0.txt +48 -0
  120. package/dist/licenses/lodash.isfunction-3.0.9.txt +48 -0
  121. package/dist/licenses/lodash.isnil-4.0.0.txt +23 -0
  122. package/dist/licenses/lodash.isplainobject-4.0.6.txt +48 -0
  123. package/dist/licenses/lodash.isundefined-3.0.1.txt +23 -0
  124. package/dist/licenses/lodash.union-4.6.0.txt +48 -0
  125. package/dist/licenses/lodash.uniq-4.5.0.txt +48 -0
  126. package/dist/licenses/minimatch-3.1.5.txt +16 -0
  127. package/dist/licenses/minimatch-5.1.9.txt +16 -0
  128. package/dist/licenses/minimist-1.2.8.txt +19 -0
  129. package/dist/licenses/mkdirp-0.5.6.txt +22 -0
  130. package/dist/licenses/node-sql-parser-5.4.0.txt +202 -0
  131. package/dist/licenses/normalize-path-3.0.0.txt +22 -0
  132. package/dist/licenses/once-1.4.0.txt +16 -0
  133. package/dist/licenses/pako-1.0.11.txt +22 -0
  134. package/dist/licenses/pako-2.2.0.txt +22 -0
  135. package/dist/licenses/path-is-absolute-1.0.1.txt +22 -0
  136. package/dist/licenses/pdf-lib-1.17.1.txt +22 -0
  137. package/dist/licenses/process-nextick-args-2.0.1.txt +20 -0
  138. package/dist/licenses/readable-stream-2.3.8.txt +48 -0
  139. package/dist/licenses/readable-stream-3.6.2.txt +48 -0
  140. package/dist/licenses/readdir-glob-1.1.3.txt +202 -0
  141. package/dist/licenses/rimraf-2.7.1.txt +16 -0
  142. package/dist/licenses/safe-buffer-5.1.2.txt +22 -0
  143. package/dist/licenses/safe-buffer-5.2.1.txt +22 -0
  144. package/dist/licenses/saxes-5.0.1.txt +397 -0
  145. package/dist/licenses/setimmediate-1.0.5.txt +21 -0
  146. package/dist/licenses/string_decoder-1.1.1.txt +49 -0
  147. package/dist/licenses/string_decoder-1.3.0.txt +49 -0
  148. package/dist/licenses/tar-stream-2.2.0.txt +22 -0
  149. package/dist/licenses/tmp-0.2.7.txt +22 -0
  150. package/dist/licenses/traverse-0.3.9.txt +25 -0
  151. package/dist/licenses/tslib-1.14.1.txt +13 -0
  152. package/dist/licenses/unzipper-0.10.14.txt +26 -0
  153. package/dist/licenses/util-deprecate-1.0.2.txt +25 -0
  154. package/dist/licenses/uuid-11.1.1.txt +10 -0
  155. package/dist/licenses/wrappy-1.0.2.txt +16 -0
  156. package/dist/licenses/xmlchars-2.2.0.txt +19 -0
  157. package/dist/licenses/zip-stream-4.1.1.txt +23 -0
  158. package/dist/matrix-CGRGkn5s.js +112 -0
  159. package/dist/matrix-gEO7ZM_u.cjs +1 -0
  160. package/dist/media-B7vnpD8k.cjs +1 -0
  161. package/dist/media-Y90dHK9z.js +70 -0
  162. package/dist/param-validation-C3HlcLLO.cjs +1 -0
  163. package/dist/param-validation-Do7Eg8Zv.js +181 -0
  164. package/dist/{pdf-AyJGb22z.cjs → pdf-ByVCb1i6.cjs} +49 -49
  165. package/dist/{pdf-8UPQebOE.js → pdf-DJ5S6ukC.js} +4924 -4872
  166. package/dist/pdf.cjs +1 -1
  167. package/dist/pdf.d.cts +20 -3
  168. package/dist/pdf.d.ts +20 -3
  169. package/dist/pdf.js +2 -2
  170. package/dist/{plugin-BGKf-Tqg.js → plugin-C2j5_mhx.js} +2 -2
  171. package/dist/{plugin-CktLH_Iy.cjs → plugin-Dr39GBRG.cjs} +1 -1
  172. package/dist/prepared-DdrjLC7L.cjs +1 -0
  173. package/dist/prepared-DqtpvRTn.js +87 -0
  174. package/dist/progress-B0ctFpKf.cjs +1 -0
  175. package/dist/progress-BXzlVbIp.js +29 -0
  176. package/dist/progress-DJBd9Rb9.cjs +1 -0
  177. package/dist/progress-Hc2vxoCs.js +52 -0
  178. package/dist/protocol-BzwMP4Vw.cjs +1 -0
  179. package/dist/protocol-kt4Iy6-3.js +90 -0
  180. package/dist/record-bindings-CZWBJ1fU.js +195 -0
  181. package/dist/record-bindings-DUX1VMlR.cjs +1 -0
  182. package/dist/{region-binding-workflow-DEJbhpCv.js → region-binding-workflow-CWNvIjkV.js} +1 -1
  183. package/dist/{region-binding-workflow-BzfbxRiR.cjs → region-binding-workflow-CqSMxQ4p.cjs} +1 -1
  184. package/dist/report-encoding-worker.cjs +1 -0
  185. package/dist/report-encoding-worker.d.ts +1 -0
  186. package/dist/report-encoding-worker.js +2 -0
  187. package/dist/{report-params-B44imUd4.js → report-params-B1RzkhJj.js} +1 -1
  188. package/dist/{report-params-SJfhKgaX.cjs → report-params-WDGrA4oP.cjs} +1 -1
  189. package/dist/rich-text-layout-ALlMoYOG.cjs +3 -0
  190. package/dist/rich-text-layout-Ct5WrY1g.js +102 -0
  191. package/dist/runtime-BjKBI530.js +168 -0
  192. package/dist/runtime-CBFEPKEs.cjs +1 -0
  193. package/dist/sbom.cdx.json +3982 -0
  194. package/dist/server/node.d.cts +106 -2
  195. package/dist/server/node.d.ts +106 -2
  196. package/dist/server-node.cjs +5 -1
  197. package/dist/server-node.js +4634 -539
  198. package/dist/server.cjs +1 -1
  199. package/dist/server.d.cts +780 -5
  200. package/dist/server.d.ts +780 -5
  201. package/dist/server.js +773 -691
  202. package/dist/sha256-BshdOkCC.cjs +1 -0
  203. package/dist/sha256-DTG-Gq8i.js +157 -0
  204. package/dist/style-67OqfNed.js +73 -0
  205. package/dist/style-C22Pbv3T.cjs +1 -0
  206. package/dist/style.css +1 -1
  207. package/dist/template-bindings-C2SpvsMU.js +58 -0
  208. package/dist/template-bindings-CEtWyiLX.cjs +1 -0
  209. package/dist/template-catalog-BtR2JmCL.js +414 -0
  210. package/dist/template-catalog-C2NLdrwB.cjs +1 -0
  211. package/dist/{template-fragments-DFUpq5QM.cjs → template-fragments-BVsbxs4a.cjs} +1 -1
  212. package/dist/{template-fragments-CLkGo6To.js → template-fragments-By0aZC1D.js} +21 -21
  213. package/dist/{template-outline-B3xVkzSv.cjs → template-outline-BwRV_eRo.cjs} +1 -1
  214. package/dist/{template-outline-CFenM1PV.js → template-outline-cnWfT_LK.js} +3 -3
  215. package/dist/template-registry-C62vpv4a.cjs +1 -0
  216. package/dist/template-registry-Cw3vRTX2.js +801 -0
  217. package/dist/textwrap-BEIg2w8y.js +110 -0
  218. package/dist/textwrap-BI-yJ6Wt.cjs +4 -0
  219. package/dist/{tree-CqcQ99NM.js → tree-CjVZLRw7.js} +1 -1
  220. package/dist/vue/async.d.cts +189 -14
  221. package/dist/vue/async.d.ts +189 -14
  222. package/dist/vue/index.d.cts +246 -22
  223. package/dist/vue/index.d.ts +246 -22
  224. package/dist/vue-async.cjs +1 -1
  225. package/dist/vue-async.js +3 -3
  226. package/dist/vue.cjs +1 -1
  227. package/dist/vue.js +80 -78
  228. package/dist/{workbook-session-BfK1yHOO.js → workbook-session-BeSO8PFB.js} +5460 -5295
  229. package/dist/{workbook-session-DNa2RHNG.cjs → workbook-session-Cbts-22R.cjs} +19 -19
  230. package/dist/worker.cjs +1 -1
  231. package/dist/worker.d.cts +104 -2
  232. package/dist/worker.d.ts +104 -2
  233. package/dist/worker.js +12 -156
  234. package/dist/xlsx-node.cjs +35 -35
  235. package/dist/xlsx-node.js +2138 -2137
  236. package/dist/xlsx.cjs +4 -4
  237. package/dist/xlsx.d.cts +24 -10
  238. package/dist/xlsx.d.ts +24 -10
  239. package/dist/xlsx.js +303 -277
  240. package/package.json +7 -4
  241. package/dist/ParamEditor-CflQV3eQ.js +0 -526
  242. package/dist/ParamEditor-vIDzvpPV.cjs +0 -1
  243. package/dist/ReportPreview-CvbqLUzM.cjs +0 -6
  244. package/dist/ReportPreview-D_ywJ_-H.js +0 -4533
  245. package/dist/assets-C2U-e-Sz.cjs +0 -4
  246. package/dist/assets-Q0wUwNrV.js +0 -217
  247. package/dist/batch-DzaTNLWI.js +0 -371
  248. package/dist/batch-xMkqYiTr.cjs +0 -1
  249. package/dist/capabilities-CK_7hizc.js +0 -63
  250. package/dist/capabilities-CsZ-pNHR.cjs +0 -1
  251. package/dist/config-0UIohTS7.cjs +0 -1
  252. package/dist/config-Dt9NtCPl.js +0 -566
  253. package/dist/data-explanation-BktvER5B.cjs +0 -1
  254. package/dist/data-explanation-C_J6jYNi.js +0 -16
  255. package/dist/defaults-DXhiM1ZD.js +0 -10
  256. package/dist/defaults-xhmcLLrf.cjs +0 -1
  257. package/dist/designer-Ci1LizA9.js +0 -5020
  258. package/dist/designer-rtmVIIdN.cjs +0 -2
  259. package/dist/grid-strokes-Cr7DwUux.cjs +0 -1
  260. package/dist/grid-strokes-DyyG1q_o.js +0 -53
  261. package/dist/json-snapshot-BeFT3Tso.js +0 -1952
  262. package/dist/json-snapshot-D1NTP2oI.cjs +0 -2
  263. package/dist/matrix-DVyWiYsd.cjs +0 -1
  264. package/dist/matrix-yZsGnldA.js +0 -227
  265. package/dist/page-window-index-CIuT4BAv.js +0 -43
  266. package/dist/page-window-index-DEjnM6IB.cjs +0 -1
  267. package/dist/param-validation-BlHHXs6u.js +0 -153
  268. package/dist/param-validation-DCK039V1.cjs +0 -1
  269. package/dist/progress-7OSZbFok.js +0 -39
  270. package/dist/progress-BnLiS5eH.cjs +0 -1
  271. package/dist/render-plan-7xpGrCEl.cjs +0 -1
  272. package/dist/render-plan-Ck6koX9L.js +0 -13
  273. package/dist/style-CQ1PK8ZB.js +0 -67
  274. package/dist/style-UgIJSA1F.cjs +0 -1
  275. package/dist/task-events-DQ276fn2.cjs +0 -1
  276. package/dist/task-events-Dpsvf_t2.js +0 -47
  277. package/dist/template-bindings-BJR4k7qZ.cjs +0 -1
  278. package/dist/template-bindings-Daui7hLF.js +0 -252
  279. package/dist/template-registry-COXDEJEM.js +0 -570
  280. package/dist/template-registry-D3SjENi6.cjs +0 -1
  281. package/dist/validate-BJ5HIWY8.cjs +0 -1
  282. package/dist/validate-CkQBWCeg.js +0 -163
@@ -1,2 +0,0 @@
1
- "use strict";const Z=require("./render-plan-7xpGrCEl.cjs"),je=require("./validate-BJ5HIWY8.cjs"),St=require("./report-params-SJfhKgaX.cjs"),N=require("./template-registry-D3SjENi6.cjs"),fe=require("./param-validation-DCK039V1.cjs"),we=require("./grid-geometry-CZ_cYB6O.cjs"),Ke=require("./number-format-CZ2T_5kF.cjs"),$t=require("./task-events-DQ276fn2.cjs"),Rt=require("./data-explanation-BktvER5B.cjs"),ye=require("./dataset-BkRmwgeJ.cjs"),W=require("./defaults-xhmcLLrf.cjs"),G=require("./assets-C2U-e-Sz.cjs"),x=require("./template-bindings-BJR4k7qZ.cjs"),be=require("./computed-CGV2a809.cjs"),Be=require("./matrix-DVyWiYsd.cjs"),ee=require("./tree-BX380Rr7.cjs"),C=require("./style-UgIJSA1F.cjs"),Et=require("./capabilities-CsZ-pNHR.cjs");function Tt(e,t,r){const n=new Set,o=e.cells.map((a,s)=>{const c=[];let i=0;for(const l of a){for(;n.has(`${s}:${i}`);)i++;const d=l?.colSpan??1,u=l?.rowSpan??1;let f=0;for(let m=i;m<i+d;m++){t.has(m)&&f++;for(let p=s+1;p<s+u;p++)n.add(`${p}:${m}`)}f&&c.push(l?{...l,colSpan:f}:null),i+=d}return c});return{...e,cells:o,colWidthsMm:r}}function He(e){if(!e.columns.some(n=>n.hidden))return e;const t=new Set,r=e.columns.filter((n,o)=>n.hidden?!1:(t.add(o),!0));if(!r.length)throw new Error("列表至少需要一列可见列");return{...e,columns:r,...e.headerGrid?{headerGrid:Tt(e.headerGrid,t,r.map(n=>n.widthMm))}:{}}}function*Pt(e){const{page:t}=e;N.validateReportPageFlow(t.components,t.flow);let r=0,n=0;for(const o of N.reportFlowGroups(t.components,t.flow)){e.active();const a=o.band,s=o.components.some(d=>d.kind==="list"&&d.cardinality!=="record"),c=s?0:o.components.reduce((d,u)=>Math.max(d,u.topMm-a.topMm+(u.kind==="list"?e.height(u):u.heightMm)),a.heightMm);let i=Math.max(e.top(),n+a.topMm-r);if(!s&&c>e.bottom()-e.top()+.001)throw new Error(`静态区域 ${a.componentIds.join(",")} 高度超出单页可用范围`);!s&&i+c>e.bottom()+.001&&(e.nextPage(),yield*e.takePages(),e.active(),i=e.top());let l=i+c;for(const d of o.components){const u=i+d.topMm-a.topMm;d.kind==="list"?(yield*e.list(d,u,f=>{l=s?f:Math.max(l,f)}),e.active()):e.append({...d,topMm:u})}n=l,r=a.topMm+a.heightMm}}function It(e){return!!(e.computed?.length||e.groups?.length||e.groupBy||e.grandTotal||e.rowVisibleWhen||e.matrix||e.tree||e.detail||e.columns.some(t=>t.rules?.length||t.visibleWhen))}function te(e){return e.pages.some(t=>t.components.some(r=>r.kind==="list"&&It(r)))}const Ct=512,Ie=256*1024;function kt(){const e=new Map;let t=0,r;return(n,o,a,s)=>{s!==r&&(e.clear(),t=0,r=s);const c=JSON.stringify([n,o,a.fontSizePt,a.fontFamily,a.bold,a.italic,a.letterSpacingPt]),i=e.get(c);if(i)return e.delete(c),e.set(c,i),i.lines.slice();const l=G.wrapText(n,o,a,s),d=c.length+l.reduce((u,f)=>u+f.length,0);if(d<=Ie){for(;e.size>=Ct||t+d>Ie;){const u=e.keys().next().value;t-=e.get(u).units,e.delete(u)}e.set(c,{lines:l.slice(),units:d}),t+=d}return l}}class L extends Error{constructor(t,r){super(`报表页数超出上限 ${t}(至少 ${r} 页)`),this.limit=t,this.actual=r,this.code="page-limit",this.name="PaginatePageLimitError"}}class H extends Error{constructor(t,r){super(`报表单元格数量超出上限 ${t}(至少 ${r} 格)`),this.limit=t,this.actual=r,this.code="cell-limit",this.name="PaginateCellLimitError"}}const De=1e4,Ce=25e4;function ve(e){if(e?.aborted)throw e.reason??new DOMException("标签生成已取消","AbortError")}function Ge(e,t,r){const n=typeof e.copies=="object"?x.readRecordScalar(t,e.copies.field,r):e.copies??1;if(typeof n!="number"||!Number.isSafeInteger(n)||n<1||n>1e3)throw new x.ReportBindingError(`$.datasets.${r.dataset}[${r.rowIndex}]`,"每条记录复制数必须是 1..1000 的数值型整数",r.rowIndex,typeof e.copies=="object"?e.copies.field:void 0);return n}function Ve(e,t,r){if(e.rowKey===void 0)return;const n=x.readRecordScalar(t,e.rowKey,r);if(typeof n=="string"&&n.trim()||typeof n=="number"&&Number.isFinite(n))return n;throw new x.ReportBindingError(`$.datasets.${r.dataset}[${r.rowIndex}].${e.rowKey}`,"业务主键必须是非空字符串或有限数字",r.rowIndex,e.rowKey)}function Ft(e){const t=r=>1+(r.grid?.cells.reduce((n,o)=>n+1+o.length+o.reduce((a,s)=>a+(s?.children?.reduce((c,i)=>c+t(i),0)??0),0),0)??0);return e.pages.reduce((r,n)=>r+n.components.reduce((o,a)=>o+t(a),0),0)}function At(e,t,r){const n=e.repeat,o=Object.prototype.hasOwnProperty.call(t,n.dataset)?t[n.dataset]:void 0;if(!Array.isArray(o))throw new x.ReportBindingError(`$.datasets.${n.dataset}`,"逐记录标签数据集缺失,应提供对象数组(允许空数组)");const a=new Set,s=r.maxPages??De,c=Ft(e);let i=0,l=0;for(const[d,u]of o.entries()){if(ve(r.signal),!u||typeof u!="object"||Array.isArray(u))throw new x.ReportBindingError(`$.datasets.${n.dataset}[${d}]`,"标签记录应为对象",d);const f={rowIndex:d,dataset:n.dataset},m=Ve(n,u,f);if(m!==void 0){const g=JSON.stringify([typeof m,m]);if(a.has(g))throw new x.ReportBindingError(`$.datasets.${n.dataset}[${d}].${n.rowKey}`,"业务主键重复;请先确认记录来源,避免重复打印标签",d,n.rowKey);a.add(g)}const p=Ge(n,u,f);if(i+=p*e.pages.length,l+=p*c,i>s)throw new L(s,i);if(l>Ce)throw new x.ReportBindingError("$.repeat",`标签组件总量(含网格行、槽位及嵌套组件)超过安全预算 ${Ce},请分批生成`,d)}return o}function Ot(e,t,r){if(!e.binding)return e;const{binding:n,...o}=e,a=x.resolveComponentBinding(n,t.row,t);if(e.kind==="image"){if(!a)return;if(!x.isLabelImageData(a))throw new x.ReportBindingError(`${r}.binding`,"图片字段只接受 PNG/JPEG base64 data URL;业务 URL 应由宿主安全加载后转换",t.rowIndex,n.field);return{...o,imageData:a}}return e.kind==="barcode"||e.kind==="qrcode"?(delete o.imageData,{...o,code:{...o.code,value:a},fallbackText:a}):(delete o.lines,delete o.richParagraphs,{...o,text:a})}function Nt(e,t,r){if(e.kind!=="text"||e.grid||e.richParagraphs?.length)return e;const n=e.style??{},o=C.resolveFontSize(n).fontSizePt,a=e.text??e.lines?.join(`
2
- `)??"";if(a.length>16384)throw new x.ReportBindingError(r,"标签文本超过 16384 字符预算,请缩小字段内容",t.rowIndex);const s=t.wrapText(a,e.widthMm,{fontSizePt:o,bold:n.bold,italic:n.italic,fontFamily:n.fontFamily,letterSpacingPt:n.letterSpacing},t.options.measurer??G.heuristicMeasurer),c=s.length*o*C.resolveLineHeight(n)*25.4/72;if(c>e.heightMm+.05)throw new x.ReportBindingError(r,`标签文字需要约 ${c.toFixed(2)}mm 高,超出 ${e.heightMm}mm;请增大文本区域、减少内容或调整字号`,t.rowIndex,e.binding?.field);return{...e,lines:s}}function We(e,t,r){ve(t.options.signal);const n=Ot(e,t,r);if(!n)return;let o=n.grid;return o&&(o={...o,cells:o.cells.map((a,s)=>a.map((c,i)=>c?.children?.length?{...c,children:c.children.flatMap((l,d)=>{const u=We(l,t,`${r}.grid.cells.${s}.${i}.children.${d}`);return u?[u]:[]})}:c))}),Nt(o===n.grid?n:{...n,grid:o},t,r)}function Lt(e,t,r,n,o,a){return{...e,components:e.components.flatMap((s,c)=>{const i=We(s,r,`$.pages.${t}.components.${c}`);return i?[{...i,meta:{...i.meta,labelSource:{pageIndex:t,componentIndex:c}}}]:[]}),meta:{...e.meta,record:{dataset:r.dataset,rowIndex:r.rowIndex,...a===void 0?{}:{rowKey:a},copyIndex:n,copyCount:o,templatePageIndex:t}}}}function*jt(e,t,r){const n=[];if(N.validateTemplateRepeat(e,n),n.length)throw new x.ReportBindingError(n[0].path,n[0].message);if(!e.repeat){for(const[c,i]of e.pages.entries())yield{page:i,pageIndex:c};return}const o=e.repeat,a=At(e,t,r),s=kt();for(const[c,i]of a.entries()){const l={row:i,rowIndex:c,dataset:o.dataset,options:r,wrapText:s},d=Ge(o,i,l),u=Ve(o,i,l);for(let f=0;f<d;f++)for(const[m,p]of e.pages.entries())ve(r.signal),yield{page:Lt(p,m,l,f,d,u),pageIndex:m}}}function Kt(e){return{widthMm:e.widthMm,heightMm:e.heightMm,marginTopMm:e.marginTopMm??0,marginBottomMm:e.marginBottomMm??0,marginLeftMm:e.marginLeftMm??0,marginRightMm:e.marginRightMm??0,components:[]}}function Y(e,t){const r=t.heightMm-(e.layout==="wide"?t.marginBottomMm:e.marginBottomMm??t.marginBottomMm);return e.components.reduce((n,o)=>o.kind!=="list"&&o.pageAnchor==="footer"?Math.min(n,o.topMm):n,r)}function _(e){return e.components.reduce((t,r)=>r.kind!=="list"&&r.pageAnchor==="header"?Math.max(t,r.topMm+r.heightMm):t,0)}function qe(e,t){let r=e.textMetrics.get(t);if(!r){const n=C.resolveFontSize(t).fontSizePt;r={measureOptions:{fontSizePt:n,fontFamily:t.fontFamily??W.DEFAULT_FONT_FAMILY,italic:t.italic,bold:t.bold,letterSpacingPt:t.letterSpacing},lineMm:n*(t.lineHeight??W.LINE_HEIGHT)*25.4/72},e.textMetrics.set(t,r)}return r}function Bt(e){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e}function Me(e,t){const r=e.fontSizePt??W.DEFAULT_FONT_PT,n=e.paddingMm??1,o=e.columns.map(g=>g.align??g.style?.align??e.align??"left"),a=e.columns.map((g,w)=>({...C.mergeComponentStyles({fontSize:r,verticalAlign:"middle"},g.style),align:o[w]==="auto"?"left":o[w]})),s=a.map((g,w)=>o[w]==="auto"?{left:g,center:{...g,align:"center"},right:{...g,align:"right"}}:void 0),c=e.columns.map((g,w)=>g.rules?.map(v=>{const M=s[w];if(M)return{left:C.mergeComponentStyles(M.left,v.style),center:C.mergeComponentStyles(M.center,v.style),right:C.mergeComponentStyles(M.right,v.style)};const y=C.mergeComponentStyles(a[w],v.style);return{left:y,center:y,right:y}})),i=e.columns.map(g=>x.resolveListHeaderStyle(e,g)),l=e.columns.map(g=>g.header);let d=e.rowHeightMm??0;for(let g=0;g<l.length;g++){const w=i[g],v=C.resolveFontSize(w).fontSizePt,M=G.wrapText(l[g],e.columns[g].widthMm-n*2,{fontSizePt:v,fontFamily:w.fontFamily??W.DEFAULT_FONT_FAMILY,italic:w.italic,bold:w.bold,letterSpacingPt:w.letterSpacing},t),y=v*(w.lineHeight??W.LINE_HEIGHT)*25.4/72;d=Math.max(d,Math.max(M.length,1)*y+n*2)}const u=l.map((g,w)=>({text:g,style:i[w]})),f=e.border===!1?{borderTop:!1,borderRight:!1,borderBottom:!1,borderLeft:!1}:{borderBottom:!0,borderLeft:!0,borderRight:!0,borderTop:!0},m=e.columns.map(g=>g.widthMm),p=Ht(e.headerGrid,m,{cells:[u],colWidthsMm:m,rowHeightsMm:[d],paddingMm:n});return{fontSizePt:r,paddingMm:n,cellStyles:a,autoStyles:s,ruleStyles:c,textMetrics:new WeakMap,numberFormats:e.columns.map(g=>x.toExcelNumberFormat(g.format)),derivedFields:new Set(e.computed?.map(g=>g.field)),borderStyle:f,headerHeightMm:p.rowHeightsMm.reduce((g,w)=>g+w,0),headerGrid:p,colWidthsMm:m,columns:e.columns}}function Ht(e,t,r){if(!e)return r;if(!e.cells.length)throw new Error("自定义列表表头至少需要一行");const n=e.rowHeightsMm??e.cells.map(()=>r.rowHeightsMm[0]);if(n.length!==e.cells.length||n.some(o=>!Number.isFinite(o)||o<=0))throw new Error("自定义列表表头行高无效");return{...e,colWidthsMm:t,rowHeightsMm:n}}function Dt(e,t,r){const n=t.format?.kind==="number"||t.format?.kind==="percent";t.valueType!==void 0?e.valueType=t.valueType:n&&(e.valueType="number"),t.editable!==void 0&&(e.editable=t.editable),(typeof e.value=="number"||e.value==null)&&r!==void 0&&(e.numberFormat=r)}function J(e,t,r){const n=e.columns,o=e.tree?.rows.get(t);let a=e.rowHeightFloorMm;const s=new Array(n.length);for(let c=0;c<n.length;c++){const i=n[c],l=i.visibleWhen&&!x.evalStyleRule(t,i.visibleWhen)?null:t[i.field],d=e.autoStyles[c]?x.resolveListAutoAlignment(l,i.format,i.semanticRole):"left";let u=e.autoStyles[c]?.[d]??e.cellStyles[c];if(i.rules)for(let M=0;M<i.rules.length;M++){const y=i.rules[M];if(x.evalStyleRule(t,y.when)){u=e.ruleStyles[c][M][d];break}}const f=i.format?x.formatValue(l,i.format):x.listCellText(l),m=Gt(e,i,o);u=Vt(e,i,u,o);const p=qe(e,u),g=G.wrapText(f,Math.max(1,i.widthMm-e.paddingMm*2-m),p.measureOptions,r);a=Math.max(a,g.length*p.lineMm+e.paddingMm*2);const w=Bt(l),v={text:f,style:u};w!==void 0&&(v.value=w),Dt(v,i,e.numberFormats[c]),Wt(v,i,e,o,m),e.derivedFields.has(i.field)&&(v.derived=!0,v.editable=!1),i.visibleWhen&&l===null&&!x.evalStyleRule(t,i.visibleWhen)&&(v.editable=!1),s[c]=v}return{grid:{cells:[s],colWidthsMm:e.colWidthsMm,rowHeightsMm:[a],paddingMm:e.paddingMm},heightMm:a}}function Gt(e,t,r){return!r||t.field!==e.tree.list.tree.labelField?0:x.listTreeIndent(e.tree.list,t,r,e.paddingMm)}function Vt(e,t,r,n){return!n||t.field!==e.tree.list.tree.labelField||r.align==="left"?r:{...r,align:"left"}}function Wt(e,t,r,n,o=0){n&&(o&&(e.indentMm=o),x.applyListTreeMetadata(e,t,n,r.tree.list))}function _e(e){if(e!=null&&typeof e!="string"&&typeof e!="boolean"&&!(typeof e=="number"&&Number.isFinite(e)))throw new Error("分组字段应为有限 JSON 标量");return JSON.stringify([typeof e,e??null])}function*Je(e,t,r=0){const n=t[r];if(!n){for(const a of e)yield{kind:"row",row:a};return}const o=new Map;for(const a of e){const s=_e(a[n.field]),c=o.get(s);c?c.push(a):o.set(s,[a])}for(const a of o.values())yield{kind:"groupHeader",label:(n.headerTemplate??"{value}").replace(/\{value\}/g,x.listCellText(a[0][n.field])),firstRow:a[0],group:n,depth:r,rows:a},yield*Je(a,t,r+1),(n.subtotal?.length||n.aggregates?.length)&&(yield{kind:"subtotal",label:n.subtotalLabel??"小计",rows:a,group:n,depth:r}),yield{kind:"groupEnd",depth:r}}function ze(e,t,r,n=[]){const o=[...r.filter(a=>!n.some(s=>s.field===a)).map(a=>({field:a,op:"sum"})),...n];return new Map(o.map(a=>{const s=e.find(i=>i.field===a.field)?.format??{kind:"number",thousands:!0},c=be.aggregateRows(t,{...a,field:a.valueField??a.field});return[a.field,{text:x.formatValue(c,s),...c===null?{}:{value:c},...typeof c=="number"?{numberFormat:x.toExcelNumberFormat(s)}:{}}]}))}function Ue(e,t){const r=e.findIndex(n=>t.includes(n.field));return r<0?1:r}function q(e,t,r,n,o,a){const s=[],c=Math.max(0,Math.min(a,e.columns.length)),i=C.mergeComponentStyles({fontSize:e.fontSizePt},o);c&&s.push({text:r,colSpan:c,style:{bold:!0,...i}});for(let f=c;f<e.columns.length;f++){const m=e.columns[f],p=n.get(m.field),g=e.autoStyles[f]?.[x.resolveListAutoAlignment(p?.value,m.format)]??e.cellStyles[f];s.push({...p,text:p?.text??"",style:C.mergeComponentStyles(g,o)})}const l={text:r,colSpan:e.columns.length,style:{bold:!0,...i}},d=c?[s]:[[l],s],u=d.map(f=>qt(e,f,t));return{grid:{cells:d,colWidthsMm:e.colWidthsMm,rowHeightsMm:u,paddingMm:e.paddingMm},heightMm:u.reduce((f,m)=>f+m,0)}}function qt(e,t,r){let n=e.rowHeightFloorMm,o=0;for(const a of t){let s=0;const c=o+(a.colSpan??1);for(;o<c;o++)s+=e.colWidthsMm[o]??0;const i=qe(e,a.style),l=G.wrapText(a.text??"",s-e.paddingMm*2,i.measureOptions,r);n=Math.max(n,l.length*i.lineMm+e.paddingMm*2)}return n}function _t(e,t,r){const{templatePage:n,current:o,warnings:a,nextId:s,pushCurrent:c}=r,i=()=>Y(n,o),l=Math.max(o.marginTopMm,_(n)),d=n.layout==="wide"?_(n):l,u={id:r.tableId,columnKeys:e.columns.map(h=>h.field),...e.layout===void 0?{}:{layout:e.layout},...e.title===void 0?{}:{title:e.title}},f=new Map,m=new Map,p={kind:"rect",leftMm:e.leftMm,topMm:0,widthMm:e.widthMm,heightMm:t.headerHeightMm,grid:t.headerGrid,nid:s("listh"),table:{...u,role:"header",rowIndex:-1},style:t.borderStyle,...e.meta?{meta:e.meta}:{}},g=h=>o.components.push({...p,topMm:h});if(r.flow&&e.header!==!1&&t.headerHeightMm>i()-l+.001)throw new Error(`流式列表 ${e.id??e.dataset} 的表头高度超出单页可用范围`);let w=Math.max(r.startTop??e.topMm,l);e.header!==!1&&(g(w),w+=t.headerHeightMm+r.mmPerRow);function v(){const h=Math.max(r.flow||n.layout==="wide"?0:e.topMm,d);return(e.header!==!1&&e.headerEveryPage!==!1?h+t.headerHeightMm:d)+[...m.values()].reduce(($,E)=>$+E.heightMm,0)}function M(){const h=n.layout==="wide"?0:o.marginBottomMm;return Math.min(n.heightMm-h,Y(n,o))-v()}function y(h){if(w+h<=i())return;c(),o.components=[],o.heightMm=n.heightMm,n.layout==="wide"&&(o.marginTopMm=0,o.marginBottomMm=0);const S=Math.max(r.flow||n.layout==="wide"?0:e.topMm,d);e.header!==!1&&e.headerEveryPage!==!1?(g(S),w=S+t.headerHeightMm):w=d;for(const $ of m.values())A($,"listgr","group-header")}function K(h,S,$,E){const T=M();if(r.flow&&h.heightMm>T+.001)throw new Error(`流式列表 ${e.id??e.dataset} 的单行高度超出单页可用范围`);h.heightMm>T&&a.push(`列表 ${e.id??e.dataset} 行高 ${h.heightMm.toFixed(2)}mm 超出单页可用高度 ${T.toFixed(2)}mm,预览与打印可能截断内容`),y(h.heightMm),A(h,S,$,E)}function A(h,S,$,E){const T=h.table?.id??u.id,O=$==="header"?-1:f.get(T)??0;$!=="header"&&f.set(T,O+h.grid.cells.length),o.components.push({kind:"rect",leftMm:e.leftMm,topMm:w,widthMm:e.widthMm,heightMm:h.heightMm,grid:h.grid,nid:s(S),table:{...u,...h.table,role:$,rowIndex:O,...E?{source:E}:{}},style:t.borderStyle,...e.meta?{meta:e.meta}:{}}),w+=h.heightMm}function P(h){h<=M()&&y(h)}return{keepTogether:P,placeGridRow:K,setGroupHeader:(h,S)=>{S?m.set(h,S):m.delete(h)},bottom:()=>w}}function Jt(e,t){if(!e.rowKey)return;const r=t[e.rowKey];if((typeof r!="string"||!r.trim())&&!(typeof r=="number"&&Number.isFinite(r)))throw new Error(`数据集 ${e.dataset} 的 ${e.rowKey} 应为稳定的字符串或有限数字主键`);const n=e.revisionField?t[e.revisionField]:void 0,o=e.sourceTokenField?t[e.sourceTokenField]:void 0;if(n!==void 0&&typeof n!="string"&&!(typeof n=="number"&&Number.isFinite(n)))throw new Error("业务修订号应为字符串或有限数字");if(o!==void 0&&typeof o!="string")throw new Error("来源令牌应为字符串");return{datasetId:e.dataset,rowKey:r,...n===void 0?{}:{revision:n},...o===void 0?{}:{sourceToken:o}}}function re(e,t){const r=new Map;if(!e.rowKey)return r;const n=new Set;for(const o of t){const a=Jt(e,o),s=JSON.stringify(a.rowKey);if(n.has(s))throw new Error(`数据集 ${e.dataset} 的业务主键重复:${String(a.rowKey)}`);n.add(s),r.set(o,a)}return r}function zt(e,t,r,n,o){if(!e.grandTotal)return;const a=typeof e.grandTotal=="object"?e.grandTotal:void 0,s=ne(e)[0],c=a?.fields??s?.subtotal??[],i=a?.aggregates??s?.aggregates??[];if(c.length===0&&i.length===0){n.warnings.push(`列表 ${e.id??""} 配置了 grandTotal 但未提供合计字段(groupBy.subtotal 或 grandTotal.fields)`);return}const l=q(r,n.measurer,a?.label??"合计",ze(e.columns,t,c,i),a?.style??{},Ue(e.columns,[...c,...i.map(d=>d.field)]));o.placeGridRow(l,"listgt","grand-total")}function z(e){if(e?.aborted){const t=new Error("报表排版已取消");throw t.name="AbortError",t}}function ne(e){const t=e.groups??(e.groupBy?[e.groupBy]:[]);if(t.length>16)throw new Error("列表最多支持 16 级分组");return t}function xe(e){const t=He(e),r=t.columns.reduce((o,a)=>o+a.widthMm,0),n=r>t.widthMm?t.widthMm/r:1;return n===1?t:{...t,columns:t.columns.map(o=>({...o,widthMm:o.widthMm*n}))}}function Ut(e,t,r){const n=e.detail;if(!n)return;const o=new Set;for(const l of t){const d=me(l[n.parentKey]);if(o.has(d))throw new Error("主从明细的主表关联键重复");o.add(d)}const a=r.datasets[n.dataset]??[],s=new Map,c=[];for(const l of a){const d=l[n.foreignKey];if(!Xe(d)&&n.unmatched==="ignore")continue;const u=me(d);if(!o.has(u)){if(n.unmatched!=="ignore")throw new Error(`明细数据集 ${n.dataset} 存在未关联的业务键`);continue}const f=s.get(u);f?f.push(l):s.set(u,[l]),c.push(l)}const i=xe({...e,id:`${e.id??e.dataset}:detail`,dataset:n.dataset,rowKey:n.rowKey,revisionField:n.revisionField,sourceTokenField:n.sourceTokenField,computed:void 0,columns:n.columns,headerGrid:void 0,rowHeightMm:n.rowHeightMm??e.rowHeightMm,detail:void 0});return{list:i,inter:{...Me(i,r.measurer),rowHeightFloorMm:i.rowHeightMm??0},rows:s,sources:re(i,c)}}function Xe(e){return typeof e=="string"&&!!e.trim()||typeof e=="number"&&Number.isFinite(e)}function me(e){if(!Xe(e))throw new Error("主从关联键必须是非空字符串或有限数字");return _e(e)}function*Xt(e,t,r,n,o){if(!r)return;const a=r.rows.get(me(t[e.detail.parentKey]))??[];if(!a.length)return;const s={id:`${n.tableId}:detail`,columnKeys:r.list.columns.map(c=>c.field),title:e.detail.label};e.detail.label&&o.placeGridRow({...q(r.inter,n.measurer,e.detail.label,new Map,{},r.list.columns.length),table:s},"listdl","group-header"),e.detail.header!==!1&&o.placeGridRow({grid:r.inter.headerGrid,heightMm:r.inter.headerHeightMm,table:s},"listdh","header"),yield*n.takePages();for(const c of a)z(n.signal),o.placeGridRow({...J(r.inter,c,n.measurer),table:s},"listdr","body",r.sources.get(c)),yield*n.takePages()}function Yt(e,t){if(!e.matrix)return{list:e,rows:t};if(e.detail||e.groupBy||e.groups?.length||e.grandTotal)throw new Error("矩阵不能同时配置普通分组、总计或主从明细");const r=Be.createMatrixTable(t,e.matrix),n=r.columns.map((a,s)=>({...a,widthMm:s===0?e.matrix.rowWidthMm??40:e.matrix.columnWidthMm??28,editable:!1,align:s===0?"center":"right"})),o={...e,columns:n,headerGrid:void 0,rowKey:void 0,revisionField:void 0,sourceTokenField:void 0};return e.layout==="wide"&&(o.widthMm=n.reduce((a,s)=>a+s.widthMm,0)),{list:o,rows:r.rows}}function Ye(e){if(e.matrix||e.detail||e.groups?.length||e.groupBy||e.rowVisibleWhen)throw new Error("树形布局不能同时配置普通分组、矩阵、主从或行可见条件");if(e.rowKey&&e.rowKey!==e.tree.idField)throw new Error("树形布局的 rowKey 应与 idField 一致");if(!e.columns.some(t=>t.field===e.tree.labelField&&!t.hidden))throw new Error("树形布局需要可见的标签列");ee.validateTreeComputed(e.tree,e.computed)}function Qt(e,t,r){Ye(e);const n=ee.createTreeTable(t,e.tree,{signal:r.signal,computed:e.computed?.length?{fields:e.computed,formula:r.formula}:void 0}),o={...e,rowKey:e.tree.idField},a=re(o,n.entries.map(i=>i.original)),s=new Map,c=new WeakMap;for(const i of n.entries)s.set(i.row,a.get(i.original)),c.set(i.row,i);return{list:o,rows:n.rows,sources:s,treeRows:c,totalRows:n.leaves}}function Zt(e,t){if(e.cardinality==="record"){if(t.length>1)throw new Error(`单记录区域 ${e.id??e.dataset} 仅允许 0 或 1 行数据`);if(e.tree||e.matrix||e.detail||e.groups?.length||e.groupBy||e.grandTotal||e.rowVisibleWhen)throw new Error("单记录区域不能配置树、矩阵、主从、分组、总计或行过滤");if(!t.length)return{list:{...e,columns:e.columns.map(r=>({...r,editable:!1}))},rows:[{}],sources:new Map}}}function Qe(e,t,r){const n=r.prepared.get(e);if(n)return n;const o=Zt(e,t);if(o)return r.prepared.set(e,o),o;if(e.tree){const i=Qt(e,t,r);return r.prepared.set(e,i),i}let a=e.computed?.length?be.computeDataset(t,{fields:e.computed,signal:r.signal,formula:r.formula}).rows:t;const s=a===t?void 0:new Map(a.map((i,l)=>[i,t[l]]));e.rowVisibleWhen&&(a=a.filter(i=>x.evalStyleRule(i,e.rowVisibleWhen)));const c=Yt(e,a);if(!e.matrix){const i=re(e,s?a.map(l=>s.get(l)):a);c.sources=s?new Map(a.map(l=>[l,i.get(s.get(l))])):i}return r.prepared.set(e,c),c}function er(e,t,r,n){if(!n.flow)return;const{current:o,templatePage:a}=n,s=Math.max(o.marginTopMm,_(a)),c=Math.max(n.startTop??e.topMm,s),i=(e.header===!1?0:t.headerHeightMm)+(r[0]?J(t,r[0],n.measurer).heightMm:0);c+i<=Y(a,o)+.001||c<=s+.001||(n.pushCurrent(),o.components=[],o.heightMm=a.heightMm,a.layout==="wide"&&(o.marginTopMm=0,o.marginBottomMm=0),n.startTop=Math.max(o.marginTopMm,_(a)))}function*tr(e,t,r){const n=Qe(e,t,r),o=n.rows;e=n.list,e.layout==="wide"&&(r.current.widthMm=Math.max(r.current.widthMm,e.leftMm+e.widthMm+r.current.marginRightMm));const a=n.sources??re(e,o),s=xe(e),c=ne(s),i={...Me(s,r.measurer),rowHeightFloorMm:s.rowHeightMm??0,...n.treeRows?{tree:{list:s,rows:n.treeRows}}:{}};er(s,i,o,r);const l=_t(s,i,r),d=Ut(s,o,r);let u;for(const f of Je(o,c)){if(z(r.signal),f.kind==="row")l.placeGridRow(u??J(i,f.row,r.measurer),"listr","body",a.get(f.row)),u=void 0,yield*r.takePages(),yield*Xt(s,f.row,d,r,l);else if(f.kind==="groupHeader"){const m=q(i,r.measurer,f.label,new Map,f.group.headerStyle??{},s.columns.length);u??=J(i,f.firstRow,r.measurer);const p=c.slice(f.depth+1).reduce((g,w)=>g+q(i,r.measurer,(w.headerTemplate??"{value}").replace(/\{value\}/g,x.listCellText(f.firstRow[w.field])),new Map,w.headerStyle??{},s.columns.length).heightMm,0);f.group.keepWithNext!==!1&&l.keepTogether(m.heightMm+p+u.heightMm),l.placeGridRow(m,"listg","group-header"),f.group.repeatHeader&&l.setGroupHeader(f.depth,m)}else if(f.kind==="subtotal"){const m=f.group.subtotal??[],p=f.group.aggregates??[],g=q(i,r.measurer,f.label,ze(s.columns,f.rows,m,p),f.group.subtotalStyle??{},Ue(s.columns,[...m,...p.map(w=>w.field)]));l.placeGridRow(g,"listst","subtotal")}else l.setGroupHeader(f.depth);yield*r.takePages()}zt(s,n.totalRows??o,i,r,l),r.finished?.(l.bottom()),yield*r.takePages()}function oe(e){return e.kind!=="list"&&(e.pageAnchor!==void 0||e.kind==="text"&&typeof e.text=="string"&&(e.text.includes("{page}")||e.text.includes("{totalPages}")))}function ae(e,t){return{...e,...e.text===void 0?{}:{text:t(e.text)},...e.lines?{lines:e.lines.map(t)}:{},...e.richParagraphs?{richParagraphs:e.richParagraphs.map(r=>({...r,segments:r.segments.map(n=>({...n,...n.text===void 0?{}:{text:t(n.text)}}))}))}:{},...e.grid?{grid:{...e.grid,cells:e.grid.cells.map(r=>r.map(n=>n?{...n,...n.text===void 0?{}:{text:t(n.text)},...n.children?{children:n.children.map(o=>ae(o,t))}:{}}:null))}}:{}}}function rr(e){let t=!1;for(const r of e.pages)for(const n of r.components)oe(n)&&ae(n,o=>(o.includes("{totalPages}")&&(t=!0),o));return t}function nr(e,t,r,n,o,a){const s={pageWidthMm:t.widthMm,pageHeightMm:t.heightMm,...e.layout===void 0?{}:{layout:e.layout},marginTopMm:t.marginTopMm,marginBottomMm:t.marginBottomMm,marginLeftMm:t.marginLeftMm,marginRightMm:t.marginRightMm,components:t.components,...e.meta?{meta:e.meta}:{}},c=i=>{const l=i.replace(/\{page\}/g,String(n));return a===void 0?l:l.replace(/\{totalPages\}/g,String(a))};for(const i of r)s.components.push(ae(i,c));if(e.layout==="wide"){const i=s.components.reduce((l,d)=>Math.max(l,d.topMm+d.heightMm),0);s.marginBottomMm=o?e.marginBottomMm??0:0,s.pageHeightMm=Math.max(1,i+s.marginBottomMm)}return s}function Se(e){return e.cells.reduce((t,r)=>t+r.reduce((n,o)=>n+(o?1+(o.children?.reduce((a,s)=>a+Ze(s),0)??0):0),0),0)}function Ze(e){return e.grid?Se(e.grid):0}function $e(e){for(const t of["maxPages","maxCells","knownTotalPages"])if(e[t]!==void 0&&(!Number.isSafeInteger(e[t])||e[t]<1))throw new RangeError(`${t} 应为正安全整数`)}function or(e,t){const r=Qe(e,t.datasets[e.dataset]??[],t),n=xe(r.list),o={...Me(n,t.measurer),rowHeightFloorMm:n.rowHeightMm??0};return(n.header===!1?0:o.headerHeightMm)+r.rows.reduce((a,s)=>a+J(o,s,t.measurer).heightMm,0)}function*ar(e){const{templatePage:t,current:r}=e,n=new Map(t.components.map((a,s)=>[a,s])),o=(a,s,c)=>{const i=e.datasets[a.dataset];return Array.isArray(i)||e.warnings.push(`数据集 ${a.dataset} 未提供数据,列表 ${a.id??""} 输出为空`),tr(a,Array.isArray(i)?i:[],{...e,tableId:`${e.tableId}:${n.get(a)}`,startTop:s,finished:c,flow:!!t.flow})};if(t.flow){yield*Pt({page:t,active:()=>z(e.signal),top:()=>Math.max(r.marginTopMm,_(t)),bottom:()=>Y(t,r),append:a=>{r.components.push(a)},nextPage:()=>{e.pushCurrent(),r.components=[],r.heightMm=t.heightMm,t.layout==="wide"&&(r.marginTopMm=0,r.marginBottomMm=0)},takePages:e.takePages,height:a=>or(a,e),list:o});return}for(const a of t.components)oe(a)||(a.kind==="list"?yield*o(a):r.components.push(a))}function*Q(e,t,r,n,o,a=new WeakMap){let s=0,c=0,i=0;const l=d=>`${d}_${(++s).toString(36)}`;for(const{pageIndex:d,page:u}of jt(e,t,r)){z(r.signal);const f=Kt(u),m=u.components.filter(oe);let p=[];const g=(v=!1)=>{if(z(r.signal),r.maxPages!==void 0&&c>=r.maxPages)throw new L(r.maxPages,c+1);if(r.maxCells!==void 0&&(i+=[...f.components,...m].reduce((M,y)=>M+Ze(y),0),i>r.maxCells))throw new H(r.maxCells,i);p.push(nr(u,f,m,++c,v,o))},w=()=>{const v=p;return p=[],v};yield*ar({templatePage:u,current:f,warnings:n,nextId:l,pushCurrent:g,takePages:w,datasets:t,signal:r.signal,formula:r.formula,prepared:a,measurer:r.measurer??G.heuristicMeasurer,mmPerRow:r.mmPerRow??0,tableId:`table:${d}`}),g(!0),yield*w()}}function sr(e,t,r={}){$e(r);let n=0;for(const o of Q(e,t,{...r,onWarning:void 0},[]))n++;return n}function*et(e,t,r={}){$e(r);const n=rr(e),o=new WeakMap;let a=r.knownTotalPages;if(n&&a===void 0){a=0;for(const i of Q(e,t,r,[],void 0,o))a++}const s=[];let c=0;for(const i of Q(e,t,r,s,a,o)){for(;c<s.length;c++)r.onWarning?.(s[c]);yield i}}function se(e,t,r={}){const n=typeof r=="number"?{mmPerRow:r}:r;$e(n);const o=[],a=[...Q(e,t,n,o,n.knownTotalPages)];for(const s of a)s.components=s.components.map(c=>oe(c)?ae(c,i=>i.replace(/\{totalPages\}/g,String(a.length))):c);return o.forEach(s=>n.onWarning?.(s)),{plan:{schemaVersion:Z.RENDER_PLAN_SCHEMA_VERSION,...te(e)?{requiresRecalculation:!0}:{},pages:a},warnings:o}}function ir(e){const t=e.columns.find(a=>!a.hidden)?.field;if(!t)return{groups:0,total:0};const r=ne(e),n=(a=[],s=[])=>a.includes(t)||s.some(c=>c.field===t),o=typeof e.grandTotal=="object"?e.grandTotal:void 0;return{groups:r.filter(a=>n(a.subtotal,a.aggregates)).length,total:Number(n(o?.fields??r[0]?.subtotal,o?.aggregates??r[0]?.aggregates))}}function cr(e,t,r){Ye(e);const n=ee.flattenTreeInput(t[e.dataset]??[],e.tree,r),o=e.columns.filter(s=>!s.hidden).length,a=e.header===!1?0:e.headerGrid?Se(e.headerGrid):o;return n.length*o+a+ +!!e.grandTotal*2*o}function lr(e,t,r={}){if(e.tree)return cr(e,t,r.signal);if(e.matrix){let i=t[e.dataset]??[];e.computed?.length&&(i=be.computeDataset(i,{fields:e.computed,...r}).rows),e.rowVisibleWhen&&(i=i.filter(d=>x.evalStyleRule(d,e.rowVisibleWhen)));const l=Be.estimateMatrixTable(i,e.matrix);return l.cells+l.columnCount}const n=t[e.dataset]?.length??0,o=e.columns.filter(i=>!i.hidden).length,a=ne(e).length,s=ir(e);let c=(n*(1+2*a+s.groups)+ +!!e.grandTotal*(1+s.total))*o;if(c+=e.header===!1?0:e.headerGrid?Se(e.headerGrid):o,e.cardinality==="record"&&n===0&&(c+=o),e.detail){const i=t[e.detail.dataset]?.length??0,l=e.detail.columns.filter(d=>!d.hidden).length;c+=(i+n*(+(e.detail.header!==!1)+ +!!e.detail.label))*l}if(!Number.isSafeInteger(c))throw new RangeError("报表单元格估算超出安全整数预算");return c}function tt(e){return!e||typeof e!="object"?!1:[e.pageIndex,e.componentIndex,e.rowIndex,e.columnIndex].every(t=>Number.isInteger(t)&&t>=0)}function rt(e,t,r){const n=e.grid;if(!n)return null;const o=n.cells[t];if(!o)return null;const s=we.resolveGridLayout(n,e.widthMm,e.heightMm).cells.filter(i=>i.ri===t).findIndex(i=>i.ci===r),c=o[s];return c?{cell:c,sourceColumnIndex:s}:null}function dr(e){return e.value!==void 0?e.value:e.rawText??e.text??null}function ur(e,t){return e.valueType?e.valueType:typeof t=="number"?"number":typeof t=="boolean"?"boolean":t===null&&e.numberFormat&&/[0#?]/.test(e.numberFormat)?"number":"text"}function fr(e,t){if(e.derived)return"derived";if(e.editable===!1)return"cell";if(e.formula!==void 0)return"formula";if(e.children?.length)return"complex";if(t.table&&t.table.role!=="body"&&e.editable!==!0)return"structure"}function mr(e,t){const r=e.table;if(r)return{id:r.id,rowIndex:r.rowIndex+t.rowIndex,role:r.role,columnKey:r.columnKeys[t.columnIndex]}}function gr(e,t,r){if(e.derived)return;if(e.source)return{...e.source};const n=t.table?.source,o=t.table?.columnKeys[r.columnIndex];if(!(!n||n.rowKey===void 0||o===void 0))return{...n,rowKey:n.rowKey,field:o}}function nt(e,t,r){const n=dr(r),o=fr(r,e);return{address:{...t},cell:r,component:e,value:n,valueType:ur(r,n),table:mr(e,t),source:gr(r,e,t),editable:o===void 0,readOnlyReason:o}}function ie(e,t){if(!tt(t))return null;const r=e.pages[t.pageIndex]?.components[t.componentIndex];if(!r)return null;const n=rt(r,t.rowIndex,t.columnIndex);return n?nt(r,t,n.cell):null}function j(e){const t=new Map;return r=>{if(!tt(r))return null;const n=e.pages[r.pageIndex]?.components[r.componentIndex];if(!n?.grid)return null;let o=t.get(n);if(!o){const s=new Map;o=new Map;for(const c of we.resolveGridLayout(n.grid,n.widthMm,n.heightMm).cells){const i=s.get(c.ri)??0;s.set(c.ri,i+1);const l=n.grid.cells[c.ri]?.[i];l&&o.set(`${c.ri}:${c.ci}`,l)}t.set(n,o)}const a=o.get(`${r.rowIndex}:${r.columnIndex}`);return a?nt(n,r,a):null}}class b extends Error{constructor(t){super(`Invalid report cell edit: ${t}`),this.code=t,this.name="ReportCellEditError"}}function pr(e,t){let r=e.trim();const n=t&&r.endsWith("%");if(n&&(r=r.slice(0,-1).trim()),/^[+-]?\d{1,3}(?:,\d{3})+(?:\.\d*)?(?:[eE][+-]?\d+)?$/.test(r)&&(r=r.replace(/,/g,"")),!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(r))throw new b("number");return Number(r)/(n?100:1)}function hr(e,t){if(e===null||typeof e=="string"&&e.trim()==="")return null;if(typeof e!="string"&&typeof e!="number")throw new b("number");const r=typeof e=="number"?e:pr(e,Ke.isExcelPercentageFormat(t.cell.numberFormat));if(!Number.isFinite(r)||Number.isInteger(r)&&!Number.isSafeInteger(r))throw new b("number");return r}function wr(e){if(e===null||typeof e=="string"&&e.trim()==="")return null;if(typeof e=="boolean")return e;const t=String(e).trim().toLowerCase();if(["true","yes","是","1"].includes(t))return!0;if(["false","no","否","0"].includes(t))return!1;throw new b("boolean")}function Re(e,t){return e.valueType==="number"?hr(t,e):e.valueType==="boolean"?wr(t):t===null?null:String(t)}function yr(e,t){const r=t.cell.text,o=[["是","否"],["TRUE","FALSE"],["True","False"],["true","false"],["1","0"]].find(a=>a.includes(r??""));return o?o[e?0:1]:String(e)}function V(e,t){return t===null?"":typeof t=="boolean"?yr(t,e):typeof t=="number"?Ke.formatExcelNumber(t,e.cell.numberFormat):String(t)}function br(e,t,r){const n=ie(e,t);if(!n)throw new b("missing");return U(n,r)}function U(e,t){if(!e.editable)throw new b("readonly");const r=Re(e,t);return{address:{...e.address},table:e.table,source:e.source,previousValue:e.value,previousText:e.cell.text??"",value:r,text:V(e,r)}}function vr(e,t){const r=e.table,n=t.table;return!r||!n||r.columnKey===void 0?!1:r.id===n.id&&r.rowIndex===n.rowIndex&&r.role===n.role&&r.columnKey===n.columnKey}function ot(e,t,r){const n=e.grid,{rowIndex:o,columnIndex:a}=t.address,s=rt(e,o,a),c=[...n.cells],i=[...c[o]],l=V(t,r.value),d={...s.cell,value:r.value,text:l,rawText:l};return i[s.sourceColumnIndex]=d,c[o]=i,{...e,grid:{...n,cells:c}}}function Mr(e,t){const r=e.table?.columnKeys,n=t.table?.columnKey;return r&&n!==void 0?r.flatMap((o,a)=>o===n?[a]:[]):[]}function xr(e,t,r,n,o,a){const s=t.table,c=o.table;if(!s||!c||s.id!==c.id||s.role!==c.role||!t.grid)return t;const i=c.rowIndex-s.rowIndex;if(i<0||i>=t.grid.cells.length)return t;let l=t;for(const d of Mr(t,o)){const u=ie(e,{pageIndex:r,componentIndex:n,rowIndex:i,columnIndex:d});u?.editable&&vr(o,u)&&(l=ot(l,u,a))}return l}function Sr(e,t,r,n,o,a){const s=o.address;return o.table?.columnKey!==void 0?xr(e,t,r,n,o,a):s.pageIndex===r&&s.componentIndex===n?ot(t,o,a):t}function Ee(e,t){const r=t.source;if(!r)return!1;const n=e.source;return!n||["datasetId","rowKey","field","revision","sourceToken"].some(o=>!Object.is(n[o],r[o]))}function $r(e,t){const r=ie(e,t.address);if(!r)throw new b("missing");if(!r.editable)throw new b("readonly");if(Ee(r,t))throw new b("conflict");if(!Object.is(r.value,t.previousValue)||(r.cell.text??"")!==t.previousText)throw new b("conflict");const n=Re(r,t.value),o={...t,value:n,text:V(r,n)};if(Object.is(n,r.value)&&o.text===r.cell.text)return e;const a=e.pages.map((s,c)=>{const i=s.components.map((l,d)=>Sr(e,l,c,d,r,o));return i.every((l,d)=>l===s.components[d])?s:{...s,components:i}});return{...e,pages:a}}function at(e,t,r){if(!r||r.revision===void 0&&r.sourceToken===void 0)return e;const n=new Set(t.edits.flatMap(s=>s.source?[s.source.datasetId]:[]));if(!n.size)return e;function o(s){return!s.datasetId||!n.has(s.datasetId)||(r.revision===void 0||Object.is(r.revision,s.revision))&&(r.sourceToken===void 0||r.sourceToken===s.sourceToken)?s:{...s,...r.revision!==void 0?{revision:r.revision}:{},...r.sourceToken!==void 0?{sourceToken:r.sourceToken}:{}}}const a=e.pages.map(s=>{const c=s.components.map(i=>{const l=i.table?.source?o(i.table.source):void 0,d=i.table&&l!==i.table.source?{...i.table,source:l}:i.table,u=i.grid?.cells.map(m=>{const p=m.map(g=>{if(!g?.source)return g;const w=o(g.source);return w===g.source?g:{...g,source:w}});return p.some((g,w)=>g!==m[w])?p:m}),f=i.grid&&u?.some((m,p)=>m!==i.grid.cells[p])?{...i.grid,cells:u}:i.grid;return d!==i.table||f!==i.grid?{...i,table:d,grid:f}:i});return c.some((i,l)=>i!==s.components[l])?{...s,components:c}:s});return a.some((s,c)=>s!==e.pages[c])?{...e,pages:a}:e}function Rr(e){return JSON.stringify([e.pageIndex,e.componentIndex,e.rowIndex,e.columnIndex])}function ke(e){const t=e.table;return t?.columnKey!==void 0?JSON.stringify([t.id,t.role,t.rowIndex,t.columnKey]):Rr(e.address)}function Er(e,t){if(!t.length)return e;const r=new Map(t.map(i=>[ke(i),i])),n=new Set(t.flatMap(i=>i.table?[i.table.id]:[])),o=new Set(t.map(i=>`${i.address.pageIndex}:${i.address.componentIndex}`)),a=j(e);function s(i,l,d){const u=i.grid;if(!u||!o.has(`${l}:${d}`)&&!n.has(i.table?.id??""))return i;const f=new Map,m=new Map;for(const p of we.resolveGridLayout(u,i.widthMm,i.heightMm).cells){const g=m.get(p.ri)??0;m.set(p.ri,g+1);const w=a({pageIndex:l,componentIndex:d,rowIndex:p.ri,columnIndex:p.ci}),v=w&&r.get(ke(w));if(!v||!w.editable)continue;const M=f.get(p.ri)??[...u.cells[p.ri]],y=V(w,v.value);Object.is(w.value,v.value)&&y===w.cell.text||(M[g]={...p.cell,value:v.value,text:y,rawText:y},f.set(p.ri,M))}return f.size?{...i,grid:{...u,cells:u.cells.map((p,g)=>f.get(g)??p)}}:i}const c=e.pages.map((i,l)=>{const d=i.components.map((u,f)=>s(u,l,f));return d.every((u,f)=>u===i.components[f])?i:{...i,components:d}});return c.every((i,l)=>i===e.pages[l])?e:{...e,pages:c}}function F(e){const t=e.source;if(t)return JSON.stringify([t.datasetId,t.rowKey,t.field]);const r=e.table;if(r?.columnKey!==void 0)return JSON.stringify([r.id,r.role,r.rowIndex,r.columnKey]);const n=e.address;return JSON.stringify([n.pageIndex,n.componentIndex,n.rowIndex,n.columnIndex])}function Tr(e,t,r){if(typeof r!="string"||!r.trim()||!Array.isArray(t))throw new b("missing");if(t.length>1e4)throw new b("limit");const n=new Set,o=j(e),a=t.map(({address:s,value:c})=>{const i=o(s);if(!i)throw new b("missing");const l=U(i,c),d=F(l);if(n.has(d))throw new b("duplicate");return n.add(d),l});return{requestId:r,edits:a}}function Pr(e,t){if(t.edits.length>1e4)throw new b("limit");const r=j(e),n=new Set,o=t.edits.map(a=>{const s=r(a.address);if(!s)throw new b("missing");const c=F(a);if(n.has(c))throw new b("duplicate");if(n.add(c),Ee(s,a)||!Object.is(s.value,a.previousValue)||(s.cell.text??"")!==a.previousText)throw new b("conflict");return U(s,a.value)});return Er(e,o)}function Ir(e){const t=new Map;for(const r of e){const n=F(r),o=t.get(n),a=o?{...r,previousValue:o.previousValue,previousText:o.previousText}:{...r};Object.is(a.previousValue,a.value)?t.delete(n):t.set(n,a)}return[...t.values()]}function D(e,t){for(let r=0;r<t.length;r++){const n=t.charCodeAt(r);e.first=Math.imul(e.first^n,16777619),e.second=Math.imul(e.second,33)^n,e.count++}}function Cr(e,t,r){const n=Object.getOwnPropertyDescriptor(e,t);if(!n||n.get||n.set)throw new b("conflict");D(r,`${t.length}:${t}`),st(n.value,r)}function kr(e,t){if(Object.getOwnPropertyDescriptor(e,"toJSON"))throw new b("conflict");if(t.active.has(e))throw new b("conflict");if(t.active.add(e),e instanceof Date)D(t,`date:${Date.prototype.getTime.call(e)};`);else{const r=Object.getPrototypeOf(e);if(!Array.isArray(e)&&r!==Object.prototype&&r!==null)throw new b("conflict");const n=Object.keys(e);D(t,`${Array.isArray(e)?"array":"object"}:${Array.isArray(e)?e.length:n.length}:{`),n.forEach(o=>Cr(e,o,t)),D(t,"}")}t.active.delete(e)}function st(e,t){if(++t.nodes>1e6)throw new b("limit");if(e===null){D(t,"null;");return}if(typeof e=="object"){kr(e,t);return}if(typeof e=="function"||typeof e=="symbol")throw new b("conflict");const r=String(e);D(t,`${typeof e}:${r.length}:${r};`)}function Fe(e){const t={first:2166136261,second:5381,count:0,nodes:0,active:new Set};return st(e,t),`${t.count}:${t.first>>>0}:${t.second>>>0}`}function ge(e,t,r){if(++r.nodes>1e6)throw new b("limit");if(typeof e=="string"&&(r.text+=e.length,r.text>32*1024*1024))throw new b("limit");if(e===null||typeof e!="object")return e;if(t.has(e))throw new b("conflict");if(e instanceof Date)return new Date(Date.prototype.getTime.call(e));t.add(e);const n=Array.isArray(e)?e.map(o=>ge(o,t,r)):Object.fromEntries(Object.entries(e).map(([o,a])=>[o,ge(a,t,r)]));return t.delete(e),n}function Fr(e){return ge(e,new Set,{nodes:0,text:0})}function it(e){const t=[];for(const r of e.template.pages)for(const n of r.components)n.kind==="list"&&(t.push(n.tree?{...n,rowKey:n.tree.idField}:n),n.detail&&t.push({...n.detail,relation:{detail:n.detail,parentRows:e.datasets[n.dataset]??[]}}));return t}function Ae(e){return JSON.stringify([e.datasetId,e.rowKey])}function ct(e){const t=new Map,r=new Set;return e.forEach((n,o)=>{for(const a of it(n)){if(!a.rowKey)continue;const s=a.relation,c=s?new Set(s.parentRows.map(i=>JSON.stringify(i[s.detail.parentKey]))):void 0;(n.datasets[a.dataset]??[]).forEach((i,l)=>{if(s&&!c.has(JSON.stringify(i[s.detail.foreignKey])))return;const d=i[a.rowKey];if(typeof d!="string"&&typeof d!="number")return;const u=`${o}:${a.dataset}:${l}:${a.rowKey}`;if(r.has(u))return;r.add(u);const f=Ae({datasetId:a.dataset,rowKey:d}),m=t.get(f)??[];m.push({partIndex:o,dataset:a.dataset,rowIndex:l,row:i,binding:a}),t.set(f,m)})}}),n=>{const o=t.get(Ae(n));if(!o?.length)throw new b("missing");if(new Set(o.map(a=>`${a.partIndex}:${a.dataset}`)).size!==o.length)throw new b("conflict");return o}}function lt(e,t){const r=e.map(o=>({...o,datasets:{...o.datasets}})),n=new Set;for(const{row:o,field:a,value:s}of t){const c=r[o.partIndex],i=`${o.partIndex}:${o.dataset}`;n.has(i)||(c.datasets[o.dataset]=[...c.datasets[o.dataset]],n.add(i)),c.datasets[o.dataset][o.rowIndex]={...c.datasets[o.dataset][o.rowIndex],[a]:s}}return r}function Ar(e,t,r){const n=[],o=new Set;return e.forEach((a,s)=>{for(const c of it(a))t.has(c.dataset)&&(a.datasets[c.dataset]??[]).forEach((i,l)=>{const d={partIndex:s,dataset:c.dataset,rowIndex:l,row:i,binding:c};for(const[u,f]of[[c.revisionField,r.revision],[c.sourceTokenField,r.sourceToken]]){if(!u||f===void 0)continue;const m=`${s}:${c.dataset}:${l}:${u}`;o.has(m)||(o.add(m),n.push({row:d,field:u,value:f}))}})}),n}function dt(e){const t=new Map,r=j(e);return e.pages.forEach((n,o)=>n.components.forEach((a,s)=>{if(!(!a.grid||a.table?.role!=="body"))for(let c=0;c<a.grid.cells.length;c++)for(let i=0;i<a.table.columnKeys.length;i++){const l=r({pageIndex:o,componentIndex:s,rowIndex:c,columnIndex:i});l?.source&&l.editable&&t.set(F(l),l)}})),t}function Or(e,t,r){const n=dt(e),o=j(e);return t.map(a=>{const s=a.source?n.get(F(a)):o(a.address);if(!s||F(s)!==F(a))throw new b("missing");return{address:{...s.address},value:a[r]}})}async function ut(e,t,r={}){const n=[],o={...r,knownTotalPages:void 0};for(const a of et(e,t,o))n.push(a),n.length%8===0&&await new Promise(s=>setTimeout(s,0));if(r.signal?.aborted){const a=new Error("报表重算已取消");throw a.name="AbortError",a}return{schemaVersion:Z.RENDER_PLAN_SCHEMA_VERSION,...te(e)?{requiresRecalculation:!0}:{},pages:n}}const pe=new WeakMap;function Nr(e){return pe.get(e)}function X(e){if(e?.aborted){const t=new Error("报表重算已取消");throw t.name="AbortError",t}}function ft(e,t){return e[t]===void 0?"":e[t]}function Lr(e,t){if(t.edits.length>1e4)throw new b("limit");const r=j(e),n=new Set,o=[],a=t.edits.map(s=>{const c=r(s.address);if(!c?.source)throw new b("missing");const i=F(s);if(n.has(i))throw new b("duplicate");if(n.add(i),Ee(c,s)||!Object.is(c.value,s.previousValue)||(c.cell.text??"")!==s.previousText)throw new b("conflict");return o.push(c),U(c,s.value)});return{batch:{requestId:t.requestId,edits:a},contexts:o}}function jr(e,t){const r=ct(e);return t.flatMap(n=>{if(!n.source)throw new b("missing");return r(n.source).map(o=>{if(!Object.is(ft(o.row,n.source.field),n.previousValue))throw new b("conflict");if(o.binding.rowKey===n.source.field)throw new b("readonly");return{row:o,field:n.source.field,value:n.value}})})}function ue(e,t,r){const n={...e,value:t,source:{...e.source,...r?.revision===void 0?{}:{revision:r.revision},...r?.sourceToken===void 0?{}:{sourceToken:r.sourceToken}}};return n.cell={...e.cell,value:n.value,text:V(n,n.value)},n}function Kr(e,t,r){if(!r||r.revision===void 0&&r.sourceToken===void 0)return[...e];const n=new Set(t.edits.flatMap(o=>o.source?[o.source.datasetId]:[]));return lt(e,Ar(e,n,r))}function Te(e,t){let r=t.parts;const n=t.rebuild,o=Fe(r);let a=e,s;const c=new Map;function i(u){if(u!==a)throw new b("conflict");if(s)return s;if(Fe(r)!==o)throw new b("conflict");return Fr(r)}async function l(u,f,m,p={}){X(p.signal),f={requestId:f.requestId,edits:f.edits.map(y=>({...y,address:{...y.address},source:y.source?{...y.source}:void 0,table:y.table?{...y.table}:void 0}))},m=m.map(y=>({...y,address:{...y.address},source:y.source?{...y.source}:void 0,table:y.table?{...y.table}:void 0,cell:{...y.cell}})),await new Promise(y=>setTimeout(y,0)),X(p.signal);const g=i(u),w=lt(g,jr(g,f.edits)),v=await n(w,p.signal);X(p.signal);let M=!1;return{plan:v,commit(y){if(X(p.signal),M||a!==u)throw new b("conflict");if(y?.conflicts?.length)throw new b("conflict");const K=Kr(w,f,y),A=at(v,f,y);if(y){const P=new Set(f.edits.map(I=>I.source.datasetId));for(const[I,h]of c)P.has(h.source.datasetId)&&c.set(I,ue(h,h.value,y))}return m.forEach((P,I)=>c.set(F(P),ue(P,f.edits[I].value,y))),M=!0,s=K,r=void 0,a=A,pe.set(a,d),a}}}const d={get plan(){return a},async prepare(u,f,m){const p=Lr(u,f);return l(u,p.batch,p.contexts,m)},async prepareHistory(u,f,m,p,g){if(!p.trim()||f.length>1e4)throw new b("limit");const w=i(u),v=ct(w),M=dt(u),y=new Set,A=f.map(h=>{if(!h.source)throw new b("missing");const S=F(h);if(y.has(S))throw new b("duplicate");y.add(S);const $=M.get(S)??c.get(S);if(!$?.source)throw new b("missing");const E=v($.source)[0];return ue($,ft(E.row,$.source.field))}).map((h,S)=>({context:h,edit:U(h,f[S][m])})).filter(({edit:h})=>!Object.is(h.previousValue,h.value)),P={requestId:p,edits:A.map(({edit:h})=>h)},I=A.map(({context:h})=>h);return{batch:P,contexts:I,prepared:await l(u,P,I,g)}}};return pe.set(e,d),d}function Br(e){const t=se(e.template,e.datasets,e.pagination).plan;return Te(t,{parts:[{template:e.template,datasets:e.datasets}],rebuild:(r,n)=>ut(r[0].template,r[0].datasets,{...e.pagination,signal:n})})}function Pe(e,t,r={}){const n=new Map;for(const a of e.pages)for(const s of a.components){if(s.kind!=="list"||s.tree?.input!=="nested")continue;const c=n.get(s.dataset);if(c&&(c.childrenField??"children")!==(s.tree.childrenField??"children"))throw new Error("同一数据集的嵌套树应使用相同 childrenField");n.set(s.dataset,s.tree)}if(!n.size)return t;const o={...t};for(const[a,s]of n){const c=Math.min(s.maxRows??1e5,r.maxRows??1/0);o[a]=ee.flattenTreeInput(t[a]??[],{...s,maxRows:c},r.signal)}return o}function mt(e,t,r={}){return Object.values(Pe(e,t,r)).reduce((n,o)=>n+o.length,0)}function Hr(e,t,r){const n=ye.datasetJsonSchema(r),o=e?.pages.flatMap(c=>c.components).find(c=>c.kind==="list"&&c.dataset===t&&c.tree?.input==="nested");if(!o||o.kind!=="list"||!o.tree)return n;const a=n.items,s=o.tree.childrenField??"children";return{...n,items:{$ref:"#/$defs/treeNode"},$defs:{treeNode:{...a,properties:{...a.properties,[s]:{anyOf:[{type:"null"},{type:"array",items:{$ref:"#/$defs/treeNode"}}]}}}}}}function Dr(e){if(!("mapData"in e))return e;const{load:t,mapData:r,...n}=e;return{...n,load:async o=>{const a=await t(o);k(o.signal);try{return r(a,o)}catch(s){throw new R("validate",`报表 ${o.reportId} 数据映射失败`,s)}}}}class R extends Error{constructor(t,r,n){super(r),this.name="ReportSourceError",this.code=t,this.cause=n}}function ce(e){const t=new Error("报表加载已取消");return t.name="AbortError",Object.defineProperty(t,"cause",{value:e.reason}),t}function k(e){if(e?.aborted)throw ce(e)}function he(e,t){return t?new Promise((r,n)=>{const o=()=>t.removeEventListener("abort",a),a=()=>{o(),n(ce(t))};t.addEventListener("abort",a,{once:!0}),t.aborted&&a(),Promise.resolve(e).then(s=>{o(),r(s)},s=>{o(),n(s)})}):Promise.resolve(e)}function Gr(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new R("validate",`报表 ${t} 的数据集应为对象`);for(const[r,n]of Object.entries(e))if(!Array.isArray(n)||n.some(o=>!o||typeof o!="object"||Array.isArray(o)))throw new R("validate",`报表 ${t} 的数据集 ${r} 应为对象数组`)}async function Vr(e,t,r){const{reportId:n,signal:o}=t;try{const a=await he(e(t),o);k(o);const s=N.validateReportTemplate(a);if(!s.ok)throw new R("validate",`报表 ${n} 模板校验失败:${s.errors.slice(0,3).map(c=>`${c.path}: ${c.message}`).join("; ")}`);return r.push(...s.warnings.map(c=>`${n}: ${c.path}: ${c.message}`)),a}catch(a){throw o?.aborted?ce(o):a instanceof R?a:a instanceof N.ReportTemplateError?new R("validate",`报表 ${n} 模板校验失败:${a.message}`,a):new R("fetch",`报表 ${n} 模板加载失败:${a instanceof Error?a.message:String(a)}`,a)}}async function Wr(e,t,r,n){const o=t.signal;let a;try{if(e.load)a=await he(e.load(t),o);else if(e.provider){const s=await he(e.provider.query(t),o);k(o),qr(s,r),a=s.datasets,n?.(r,s)}else a=e.datasets??{}}catch(s){throw o?.aborted?ce(o):s instanceof R?s:new R("fetch",`报表 ${r} 取数失败:${s instanceof Error?s.message:String(s)}`,s)}return k(o),a}function qr(e,t){if(!e||typeof e!="object"||Array.isArray(e))throw new R("validate",`报表 ${t} Provider 应返回 datasets 结果对象`);for(const r of["revision","sourceToken"])if(e[r]!==void 0&&typeof e[r]!="string")throw new R("validate",`报表 ${t} Provider ${r} 应为字符串`);if(e.diagnostics!==void 0&&(!Array.isArray(e.diagnostics)||e.diagnostics.some(r=>!r||typeof r.code!="string"||typeof r.message!="string"||!["info","warning","error"].includes(r.severity))))throw new R("validate",`报表 ${t} Provider diagnostics 不符合结构化诊断契约`);if(e.diagnostics?.some(r=>!Rt.hasValidDataExplanation(r)))throw new R("validate",`报表 ${t} Provider 数据说明缺少有效的字段身份或值状态`)}function _r(e,t,r,n,o){try{t=Pe(n,t,{maxRows:e.dataValidation?.maxRows,signal:o})}catch(a){throw new R("validate",`报表 ${r} 树形数据无效:${a instanceof Error?a.message:String(a)}`,a)}for(const[a,s]of Object.entries(e.dataSchema??{})){let c;try{c=ye.validateDatasetRows(Object.prototype.hasOwnProperty.call(t,a)?t[a]:void 0,s,{...e.dataValidation,path:`$.datasets.${a}`})}catch(i){throw new R("config",`报表 ${r} 数据集 ${a} 字段契约配置无效`,i)}if(!c.ok)throw new R("validate",`报表 ${r} 数据集 ${a} 不符合字段契约:${c.issues[0]?.message}`,{issues:c.issues})}}function gt(e,t){if(!e.repeat)return!1;const r=Object.prototype.hasOwnProperty.call(t,e.repeat.dataset)?t[e.repeat.dataset]:void 0;return Array.isArray(r)&&r.length===0}function pt(e){const t=r=>r.grid?.cells.reduce((n,o)=>n+o.reduce((a,s)=>a+(s?1+(s.children?.reduce((c,i)=>c+t(i),0)??0):0),0),0)??0;return e.pages.reduce((r,n)=>r+n.components.reduce((o,a)=>o+t(a),0),0)}function ht(e,t,r,n){return{...e,signal:n??e?.signal,...t===void 0?{}:{maxPages:Math.max(1,Math.min(t,e?.maxPages??t))},...r===void 0?{}:{maxCells:Math.max(1,Math.min(r,e?.maxCells??r))}}}function Jr(e,t,r,n,o,a){const s=o.maxPages===void 0?void 0:o.maxPages-o.usedPages,c=o.maxCells===void 0?void 0:o.maxCells-o.usedCells;try{if(s!==void 0&&s<1&&e.pages.length&&!gt(e,t))throw new L(0,1);const i=ht(r.pagination,s,c,a),l=se(e,t,i),d=pt(l.plan);if(c!==void 0&&d>c)throw new H(c,d);return{...l,cells:d}}catch(i){let l=i;throw i instanceof L&&o.maxPages!==void 0&&i.limit===s&&(l=new L(o.maxPages,o.usedPages+i.actual)),i instanceof H&&o.maxCells!==void 0&&(l=new H(o.maxCells,o.usedCells+i.actual)),new R("validate",`报表 ${n} 排版失败:${l instanceof Error?l.message:String(l)}`,l)}}function wt(e,t,r,n){const o=new Map,a=s=>{let c=o.get(s);return c===void 0&&(c=JSON.stringify([r,n,s]),o.set(s,c)),c};for(const s of t.pages)e.push({...s,meta:{...s.meta,reportScope:JSON.stringify([r,n])},components:s.components.map(c=>c.table?{...c,table:{...c.table,id:a(c.table.id)}}:c)})}async function zr(e,t,r,n,o){const a=[];let s=0;for(const[l,d]of e.entries()){k(o);const u=n.maxPages===void 0?void 0:n.maxPages-a.length,f=n.maxCells===void 0?void 0:n.maxCells-s;if(u!==void 0&&u<1&&d.template.pages.length&&!gt(d.template,d.datasets))throw new L(n.maxPages,a.length+1);const m=await ut(d.template,d.datasets,ht(t[l]?.pagination,u,f,o));if(s+=pt(m),n.maxCells!==void 0&&s>n.maxCells)throw new H(n.maxCells,s);wt(a,m,l,r[l])}const c={schemaVersion:Z.RENDER_PLAN_SCHEMA_VERSION,...e.some(l=>te(l.template))?{requiresRecalculation:!0}:{},pages:a},i=je.validateRenderPlan(c);if(!i.ok)throw new R("validate",`重算渲染计划校验失败:${i.errors[0]?.message}`);return c}function Ur(e,t={}){if(t.maxPages!==void 0&&(!Number.isSafeInteger(t.maxPages)||t.maxPages<1))throw new R("config","maxPages 应为正安全整数");if(t.maxCells!==void 0&&(!Number.isSafeInteger(t.maxCells)||t.maxCells<1))throw new R("config","maxCells 应为正安全整数");function r(o){const a=Object.prototype.hasOwnProperty.call(e,o)?e[o]:void 0;if(!a)throw new R("config",`未注册报表 ${o}`);return a}return Object.assign(async({reportIds:o,params:a,signal:s,onWarning:c,onQueryResult:i,...l})=>{k(s);const d=$t.createReportTaskReporter({...l,signal:s}),u=[...o],f={...a};if(u.length===0)throw new R("config","缺少报表 ID");const m=u.map(r),p=d.runSync("validate",()=>m.map(h=>fe.assertReportParams(h.params??(typeof h.template=="function"?[]:h.template.params)??[],f))),g=[],w=[];let v=0;const M=[];for(const[h,S]of m.entries()){k(s);const $=u[h],E={reportId:$,params:p[h],signal:s},T=typeof S.template=="function"?await d.run("query",()=>Vr(S.template,E,M),$):S.template;E.params=d.runSync("validate",()=>fe.assertReportParams(S.params??T.params??[],E.params),$);const O=await d.run("query",()=>Wr(S,E,$,(de,xt)=>i?.(de,xt,h)),$);d.runSync("validate",()=>{Gr(O,$),t.onDatasets?.($,O,T),_r(S,O,$,T,s)},$),k(s);const le=d.runSync("layout",()=>Jr(T,O,S,$,{maxPages:t.maxPages,usedPages:g.length,maxCells:t.maxCells,usedCells:v},s),$);v+=le.cells,w.push({template:T,datasets:O}),wt(g,le.plan,h,$),M.push(...le.warnings.map(de=>`${$}: ${de}`))}k(s);const y={schemaVersion:Z.RENDER_PLAN_SCHEMA_VERSION,...w.some(h=>te(h.template))?{requiresRecalculation:!0}:{},pages:g},K=d.runSync("validate",()=>{const h=je.validateRenderPlan(y);if(!h.ok)throw new R("validate",`渲染计划校验失败:${h.errors.slice(0,3).map(S=>`${S.path}: ${S.message}`).join("; ")}`);return h});M.push(...K.warnings.map(h=>`${h.path}: ${h.message}`));const A=m.map(h=>({...h,pagination:{...h.pagination}})),P={maxPages:t.maxPages,maxCells:t.maxCells};try{Te(y,{parts:w,rebuild:(h,S)=>zr(h,A,u,P,S)})}catch{M.push("来源数据无法建立本地重算口径;当前预览仅支持计划内编辑,请使用可序列化模板数据启用规则重算")}const I=c??t.onWarning??(h=>console.warn("[mach-report]",h));for(const h of M)k(s),I(h);return k(s),y},{getParamDefs:o=>St.getReportParamDefs(e,o)})}function Oe(e){if(e===void 0)return;const t=typeof e=="string"?e:JSON.stringify(e);return t.length>160?t.slice(0,157)+"…":t}function Xr(e){return/\.(?:repeat|binding)(?:\.|$)/.test(e)?/\.format(?:\.|$)/.test(e)?"format":"binding":/\.tree\.(?:idField|parentField|childrenField|labelField|input)$/.test(e)?"binding":/\.tree\.parentValues$/.test(e)?"calculation":/\.tree\.indentMm$/.test(e)?"format":/\.(?:computed|computeOptions|groups|groupBy|aggregates|grandTotal)(?:\.|\[|$)/.test(e)?"calculation":/\.(?:dataset|field|rowKey|revisionField|sourceTokenField|foreignKey|parentKey)$/.test(e)?"binding":/\.(?:style|headerStyle|format|rules|align|headerAlign|semanticRole|unit)(?:\.|\[|$)/.test(e)?"format":e.startsWith("$.template")?"structure":"metadata"}function Ne(e){const t=new Map;for(const r of e){if(!r||typeof r!="object"||!("field"in r)||typeof r.field!="string"||t.has(r.field))return;t.set(r.field,r)}return t}function Yr(e,t,r){return!e.startsWith("$.template.params")||t==="moved"?!1:/\.(?:type|required|min|max|minLength|maxLength|options|defaultValue)(?:\[|$)/.test(e)?!0:t!=="added"?!1:Array.isArray(r)?r.some(n=>!!n&&typeof n=="object"&&"required"in n&&n.required===!0):!!r&&typeof r=="object"&&"required"in r&&r.required===!0}function yt(e,t,r={}){const n=N.parseReportTemplate(e),o=N.parseReportTemplate(t),a=r.maxChanges??500;if(!Number.isSafeInteger(a)||a<1||a>1e4)throw new RangeError("maxChanges must be between 1 and 10000");const s={changes:[],totalChanges:0,breakingChanges:0,truncated:!1};function c(d,u,f,m){const p=Xr(u),g=d!=="moved"&&(p==="binding"||u==="$.id"||d==="removed"&&p==="structure"||Yr(u,d,m));s.totalChanges++,g&&s.breakingChanges++,s.changes.length<a&&s.changes.push({kind:d,category:p,path:u,before:Oe(f),after:Oe(m),breaking:g})}function i(d,u,f){const m=Ne(d),p=Ne(u);if(!m||!p)return!1;const g=new Map(u.map((w,v)=>[w.field,v]));Array.from(m).forEach(([w,v],M)=>{const y=`${f}[${JSON.stringify(w)}]`;p.has(w)?(g.get(w)!==M&&c("moved",y,M,g.get(w)),l(v,p.get(w),y)):c("removed",y,v,void 0)});for(const[w,v]of p)m.has(w)||c("added",`${f}[${JSON.stringify(w)}]`,void 0,v);return!0}function l(d,u,f){if(!(Object.is(d,u)||f==="$.revision")){if(d===void 0||u===void 0){c(d===void 0?"added":"removed",f,d,u);return}if(Array.isArray(d)&&Array.isArray(u)){if((f.endsWith(".columns")||f.endsWith(".params"))&&i(d,u,f))return;for(let m=0;m<Math.max(d.length,u.length);m++)l(d[m],u[m],`${f}[${m}]`)}else if(d&&u&&typeof d=="object"&&typeof u=="object"&&!Array.isArray(d)&&!Array.isArray(u)){const m=d,p=u;for(const g of new Set([...Object.keys(m),...Object.keys(p)]))l(m[g],p[g],`${f}.${g}`)}else c("modified",f,d,u)}}return l(n,o,"$"),s.truncated=s.totalChanges>s.changes.length,s}function Qr(e,t,r){for(const n of x.collectTemplateDatasetBindings(e)){const o=Object.prototype.hasOwnProperty.call(t,n.dataset)?t[n.dataset]:void 0;if(!o){r.push({code:"dataset",severity:"error",path:`${n.path}.dataset`,message:`未声明数据集 ${n.dataset}`});continue}const a=new Set(o.fields.map(s=>s.field));n.fields.forEach(({field:s,path:c,summary:i})=>{!a.has(s)&&!n.generated.has(s)&&!(i&&n.summaries.has(s))&&r.push({code:"field",severity:"error",path:c,field:s,message:`数据集 ${n.dataset} 缺少字段 ${s}`})})}}function Zr(e,t,r,n){const o=r.maxSampleRows??1e3;let a;try{a=Pe(t,e.datasets,{maxRows:o})}catch(i){return n.push({code:"sample",severity:"error",path:"$.fixtures",fixture:e.name,message:i instanceof Error?i.message:String(i)}),!1}const s=Object.values(a).reduce((i,l)=>i+l.length,0);if(s>o)return n.push({code:"sample",severity:"error",path:"$.fixtures",fixture:e.name,message:`样例 ${s} 行超过预算 ${o},请显式选择验收样例`}),!1;const c=new Set(x.collectTemplateDatasetBindings(t).map(i=>i.dataset));for(const[i,l]of Object.entries(r.dataSchemas??{}).filter(([d])=>c.has(d)))try{const d=ye.validateDatasetRows(a[i],l,{path:`$.datasets.${i}`,maxRows:o});if(n.push(...d.issues.map(u=>({...u,code:"sample",severity:"error",fixture:e.name}))),!d.ok)return!1}catch(d){return n.push({code:"dataset",severity:"error",path:`$.dataSchemas.${i}`,message:String(d)}),!1}return!0}function en(e,t){const r=e.pages[t.pageIndex]?.components[t.componentIndex]?.meta?.labelSource;if(r&&typeof r=="object"&&"pageIndex"in r&&"componentIndex"in r&&typeof r.pageIndex=="number"&&typeof r.componentIndex=="number")return{path:`$.template.pages[${r.pageIndex}].components[${r.componentIndex}]`,pageIndex:r.pageIndex,componentIndex:r.componentIndex};const n=e.pages[t.pageIndex]?.meta?.record;if(n&&typeof n=="object"&&"templatePageIndex"in n&&typeof n.templatePageIndex=="number")return{path:`$.template.pages[${n.templatePageIndex}].components[${t.componentIndex}]`,pageIndex:n.templatePageIndex,componentIndex:t.componentIndex}}function tn(e,t,r){const n=en(t,r);if(n)return n;const o=t.pages[r.pageIndex]?.components[r.componentIndex],a=/^table:(\d+):(\d+)(?::|$)/.exec(o?.table?.id??"");if(a)return{path:`$.template.pages[${a[1]}].components[${a[2]}]`,pageIndex:Number(a[1]),componentIndex:Number(a[2])};for(const[s,c]of e.pages.entries()){const i=c.components.findIndex(l=>l===o||o?.nid!==void 0&&"nid"in l&&l.nid===o.nid);if(i>=0)return{path:`$.template.pages[${s}].components[${i}]`,pageIndex:s,componentIndex:i}}return{path:"$.template"}}function rn(e,t,r,n,o){const a=fe.validateReportParams(e.template.params??[],t.params??{});if(o.issues.push(...a.issues.map(s=>({...s,code:"params",severity:"error",fixture:t.name,path:s.path.replace(/^\$\.params/,`$.fixtures[${r}].params`)}))),!!a.ok&&Zr(t,e.template,n,o.issues))try{const{plan:s,warnings:c}=se(e.template,t.datasets,{maxPages:n.maxPages??100,maxCells:n.maxCells??25e4}),i=(n.formats??["pdf","xlsx"]).flatMap(l=>Et.inspectOutputCapabilities(s,l));o.issues.push(...c.map(l=>({code:"layout",severity:"warning",path:"$.template",fixture:t.name,message:l}))),o.issues.push(...i.map(l=>({code:"output",severity:n.strictOutputs?"error":"warning",...tn(e.template,s,l),fixture:t.name,message:`${l.format}: ${l.message}`,diagnostic:l}))),o.samples.push({name:t.name,pages:s.pages.length,rows:mt(e.template,t.datasets),diagnostics:i})}catch(s){o.issues.push({code:"layout",severity:"error",path:"$.template",fixture:t.name,message:s instanceof Error?s.message:String(s)})}}function nn(e){for(const[r,n]of[["maxPages",e.maxPages],["maxCells",e.maxCells],["maxSampleRows",e.maxSampleRows]])if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw new RangeError(`${r} must be a positive safe integer`);if((e.fixtures?.length??0)>20)throw new RangeError("At most 20 review fixtures are allowed");const t=new Set;for(const r of e.fixtures??[]){if(typeof r.name!="string"||!r.name.trim()||r.name.length>120||t.has(r.name))throw new Error("Review fixtures require unique non-empty names of at most 120 characters");t.add(r.name)}}function*bt(e,t,r){let n;yield{stage:"template",run:()=>{nn(t),n=N.parseReportTemplate(e)}};const o=t.previous;o&&(yield{stage:"baseline",run:()=>{r.changes=yt(o,n),r.changes.breakingChanges&&!t.allowBreakingChanges&&r.issues.push({code:"compatibility",severity:"error",path:"$.template",message:`${r.changes.breakingChanges} 项字段或结构变更需要明确确认兼容性`})}}),t.dataSchemas&&(yield{stage:"bindings",run:()=>Qr(n.template,t.dataSchemas,r.issues)});for(const[a,s]of(t.fixtures??[]).entries())yield{stage:"fixture",fixture:s.name,run:()=>rn(n,s,a,t,r)};t.fixtures?.length||r.issues.push({code:"sample",severity:"warning",path:"$.fixtures",message:"未提供验收样例,仅完成结构和字段检查,尚未验证排版与输出"})}function vt(e){return e.ok=e.issues.every(t=>t.severity!=="error"),e}function Mt(e,t){e.issues.push({code:"template",severity:"error",path:"$",message:t instanceof Error?t.message:String(t)})}function on(e,t={}){const r={ok:!1,issues:[],samples:[]};try{for(const n of bt(e,t,r))n.run()}catch(n){Mt(r,n)}return vt(r)}function B(e){if(e?.aborted)throw e.reason??new DOMException("Template review was aborted","AbortError")}function an(e){return B(e),new Promise((t,r)=>{const n=()=>{clearTimeout(o),e?.removeEventListener("abort",n),r(e?.reason??new DOMException("Template review was aborted","AbortError"))},o=setTimeout(()=>{e?.removeEventListener("abort",n),t()},0);e?.addEventListener("abort",n,{once:!0}),e?.aborted&&n()})}function Le(e,t){try{e.onProgress?.(t)}catch{}}async function sn(e,t={}){const r={ok:!1,issues:[],samples:[]},n=t.fixtures?.length??0;let o=0;B(t.signal);try{const a=bt(e,t,r),s=a.next();s.done||(s.value.run(),Le(t,{completed:o,total:n,stage:s.value.stage})),B(t.signal);for(const c of a)await an(t.signal),B(t.signal),c.run(),c.stage==="fixture"&&o++,Le(t,{completed:o,total:n,stage:c.stage,...c.fixture?{fixture:c.fixture}:{}}),B(t.signal)}catch(a){B(t.signal),Mt(r,a)}return vt(r)}function cn(e,t){let r=0,n=0;const o=new Set;function a(i,l){if(++r>1e6||l>64)throw t.error("budget","快照节点或深度超过预算");if(r%1024===0&&t.check?.(),typeof i=="string"&&(n+=i.length,n>t.maxBytes))throw t.error("budget","快照文本超过预算");if(i===null||["string","boolean"].includes(typeof i)||typeof i=="number"&&Number.isFinite(i))return i;if(!i||typeof i!="object"||o.has(i))throw t.error("input","快照应为无循环的有限 JSON 值");return s(i,l)}function s(i,l){const d=Array.isArray(i),u=Object.getPrototypeOf(i);if(u!==(d?Array.prototype:Object.prototype)&&!(u===null&&!d)||Object.getOwnPropertySymbols(i).length)throw t.error("input","快照应为普通 JSON 对象");const f=Object.getOwnPropertyNames(i).filter(p=>!(d&&p==="length"));if(d&&(f.length!==i.length||f.some((p,g)=>p!==String(g))))throw t.error("input","快照数组应为连续数组");o.add(i);const m=Object.create(null);for(const p of f){if(n+=p.length,n>t.maxBytes)throw t.error("budget","快照文本超过预算");const g=Object.getOwnPropertyDescriptor(i,p);if(g.get||g.set||!g.enumerable||["__proto__","constructor","prototype"].includes(p))throw t.error("input","快照不允许访问器或危险键");g.value!==void 0&&(m[p]=a(g.value,l+1))}return o.delete(i),d?f.map(p=>m[p]):m}t.check?.();const c=JSON.stringify(a(e,0));if(new TextEncoder().encode(c).byteLength>t.maxBytes)throw t.error("budget","快照超过字节预算");return JSON.parse(c)}exports.DEFAULT_LABEL_PAGE_LIMIT=De;exports.PaginateCellLimitError=H;exports.PaginatePageLimitError=L;exports.ReportCellEditError=b;exports.ReportSourceError=R;exports.applyReportCellEdit=$r;exports.applyReportCellEditBatch=Pr;exports.applyReportEditResult=at;exports.countTemplatePages=sr;exports.createReportCellEdit=br;exports.createReportCellEditBatch=Tr;exports.createReportCellResolver=j;exports.createReportEditSession=Br;exports.createReportSource=Ur;exports.defineReport=Dr;exports.diffReportTemplates=yt;exports.estimateListLayoutCells=lr;exports.formatReportCellEdit=V;exports.getReportCellContext=ie;exports.getReportEditSession=Nr;exports.paginateTemplate=se;exports.paginateTemplatePages=et;exports.parseReportCellInput=Re;exports.projectListColumns=He;exports.registerReportEditSession=Te;exports.relocateReportCellEdits=Or;exports.reportCellEditKey=F;exports.reviewReportTemplate=on;exports.reviewReportTemplateAsync=sn;exports.snapshotReportJson=cn;exports.summarizeReportCellEdits=Ir;exports.templateDatasetJsonSchema=Hr;exports.templateDatasetRowCount=mt;
@@ -1 +0,0 @@
1
- "use strict";const A=require("./computed-CGV2a809.cjs");function g(r,e){return Object.prototype.hasOwnProperty.call(r,e)?r[e]:void 0}function x(r){if(r==null)return"null";if(typeof r!="string"&&typeof r!="boolean"&&!(typeof r=="number"&&Number.isFinite(r)))throw new Error("交叉表维度应为字符串、布尔、有限数字或空值");return JSON.stringify([typeof r,r])}function E(r){return r==null?"":String(r)}function b(r,e){const l=r??e;if(!Number.isInteger(l)||l<1)throw new Error("交叉表预算应为正整数");return l}function O(r,e,l,t){const m=l?1:0;if((r+m)*(e+1+m)>t)throw new Error("交叉表输出单元格超出 maxCells 预算,请减少维度或服务端预聚合")}function M(r,e){if(!Array.isArray(r))throw new Error("交叉表数据应为对象数组");const l=e.aggregate??"sum";if(!["sum","count","avg","min","max","weightedAvg"].includes(l))throw new Error("未知交叉表聚合类型");if(!e.rowField||!e.columnField||l!=="count"&&!e.valueField)throw new Error("交叉表需要明确的行维度、列维度和度量字段");if(r.length>b(e.maxInputRows,1e5))throw new Error("交叉表输入超出预算,请在服务端预聚合");const t=b(e.maxRows,1e3),m=b(e.maxColumns,200),w=b(e.maxCells,2e6),i=()=>A.createAggregateAccumulator({op:l,field:l==="count"&&e.countMode!=="nonNull"?void 0:e.valueField,weightField:e.weightField,numeric:e.numeric,digits:e.digits}),c=new Map,u=new Map,d=new Map,h=i();for(const n of r){const s=x(g(n,e.rowField)),o=x(g(n,e.columnField));if(c.has(o)||c.set(o,E(g(n,e.columnField))),u.has(s)||u.set(s,{label:E(g(n,e.rowField)),cells:new Map,total:i()}),c.size>m||u.size>t)throw new Error("交叉表维度数量超出预算");O(u.size,c.size,e.totals,w);const f=u.get(s);f.cells.has(o)||f.cells.set(o,i()),d.has(o)||d.set(o,i());for(const F of[f.cells.get(o),f.total,d.get(o),h])F.add(n)}const a={columns:[{header:e.rowHeader??e.rowField,field:"rowLabel",semanticRole:"dimension"},...[...c.values()].map((n,s)=>({header:n,field:`c${s}`,semanticRole:"measure"}))],rows:[...u.values()].map(n=>({rowLabel:n.label,...Object.fromEntries([...c.keys()].map((s,o)=>[`c${o}`,n.cells.get(s)?.value()??(l==="count"?0:null)])),...e.totals?{total:n.total.value()}:{}}))};return e.totals&&(a.columns.push({header:"合计",field:"total",semanticRole:"measure"}),r.length&&a.rows.push({rowLabel:"合计",...Object.fromEntries([...c.keys()].map((n,s)=>[`c${s}`,d.get(n)?.value()??(l==="count"?0:null)])),total:h.value()})),a}function y(r,e){const l=e.map(t=>Object.prototype.hasOwnProperty.call(r,t)?r[t]:null);if(l.some(t=>t!=null&&typeof t!="string"&&typeof t!="boolean"&&!(typeof t=="number"&&Number.isFinite(t))))throw new Error("矩阵维度必须是有限 JSON 标量");return{key:JSON.stringify(l.map(t=>[typeof t,t??null])),label:l.map(t=>t==null?"":String(t)).join(" / ")}}function R(r){for(const e of["maxRows","maxColumns","maxInputRows","maxCells"])if(r[e]!==void 0&&(!Number.isSafeInteger(r[e])||r[e]<1))throw new Error("矩阵预算应为正安全整数");for(const e of["columnWidthMm","rowWidthMm"])if(r[e]!==void 0&&(!Number.isFinite(r[e])||r[e]<=0))throw new Error("矩阵列宽应为正数")}function N(r){if(!r||!Array.isArray(r.rowFields)||!Array.isArray(r.columnFields)||!Array.isArray(r.measures))throw new Error("矩阵需要行维度、列维度和度量数组");for(const l of[r.rowFields,r.columnFields])if(l.some(t=>typeof t!="string"||!t.trim())||new Set(l).size!==l.length)throw new Error("矩阵维度字段应非空且唯一");if(R(r),!r.rowFields.length||!r.columnFields.length||r.rowFields.length>16||r.columnFields.length>16)throw new Error("矩阵需要 1–16 个行/列维度");if(!r.measures.length||r.measures.length>32)throw new Error("矩阵需要 1–32 个度量");if(r.measures.map(l=>{if(!l||typeof l!="object")throw new Error("矩阵度量应为对象");if(A.createAggregateAccumulator({...l,field:l.valueField??l.field}),l.label!==void 0&&typeof l.label!="string")throw new Error("矩阵度量标签应为字符串");return l.field}).some(l=>typeof l!="string"||!l.trim()))throw new Error("矩阵度量字段应非空")}function k(r,e){if(N(e),!Array.isArray(r)||r.length>(e.maxInputRows??1e5))throw new Error("矩阵输入超出预算");const l=new Set,t=new Set;for(const i of r){if(!i||typeof i!="object"||Array.isArray(i))throw new Error("矩阵数据行应为对象");if(l.add(y(i,e.rowFields).key),t.add(y(i,e.columnFields).key),l.size>(e.maxRows??1e3)||t.size>(e.maxColumns??200))throw new Error("矩阵维度数量超出预算");if((l.size+ +!!e.totals)*((t.size+ +!!e.totals)*e.measures.length+1)>(e.maxCells??2e6))throw new Error("矩阵输出超出 maxCells 预算")}const m=l.size+ +(!!e.totals&&r.length>0),w=(t.size+ +!!e.totals)*e.measures.length+1;return{rowCount:m,columnCount:w,cells:m*w}}function C(r,e){let l=e;for(;r.some(t=>Object.prototype.hasOwnProperty.call(t,l));)l+="_";return l}function L(r,e){k(r,e);const l=new Map,t=new Map,m=C(r,"__matrix_row"),w=C(r,"__matrix_column"),i=r.map(a=>{const n=y(a,e.rowFields),s=y(a,e.columnFields);return l.set(n.key,n.label),t.set(s.key,s.label),{...a,[m]:n.key,[w]:s.key}}),c=e.maxCells??2e6;if((l.size+ +!!e.totals)*((t.size+ +!!e.totals)*e.measures.length+1)>c)throw new Error("矩阵输出超出 maxCells 预算");const u=e.measures.map(a=>M(i,{rowField:m,columnField:w,valueField:a.valueField??a.field,aggregate:a.op,countMode:"nonNull",weightField:a.weightField,numeric:a.numeric,digits:a.digits,totals:e.totals,maxRows:e.maxRows,maxColumns:e.maxColumns,maxInputRows:e.maxInputRows,maxCells:c})),d=u[0].rows.map(a=>({rowLabel:l.get(String(a.rowLabel))??String(a.rowLabel)})),h=[{field:"rowLabel",header:e.rowHeader??e.rowFields.join(" / "),semanticRole:"dimension"}];for(let a=0;a<u.length;a++){const n=u[a],s=e.measures[a];for(const o of n.columns.slice(1)){const f=`${o.field}_${a}`;h.push({...o,field:f,...s.digits===void 0?{}:{format:{kind:"number",digits:s.digits}},header:`${t.get(o.header)??o.header} · ${s.label??`${s.field} (${s.op})`}`}),n.rows.forEach((F,z)=>{d[z][f]=F[o.field]})}}return{rows:d,columns:h}}exports.createCrossTable=M;exports.createMatrixTable=L;exports.estimateMatrixTable=k;exports.validateMatrixOptions=N;
@@ -1,227 +0,0 @@
1
- import { e as N } from "./computed-Bvk0W15F.js";
2
- function g(r, e) {
3
- return Object.prototype.hasOwnProperty.call(r, e) ? r[e] : void 0;
4
- }
5
- function x(r) {
6
- if (r == null) return "null";
7
- if (typeof r != "string" && typeof r != "boolean" && !(typeof r == "number" && Number.isFinite(r)))
8
- throw new Error("交叉表维度应为字符串、布尔、有限数字或空值");
9
- return JSON.stringify([typeof r, r]);
10
- }
11
- function E(r) {
12
- return r == null ? "" : String(r);
13
- }
14
- function y(r, e) {
15
- const l = r ?? e;
16
- if (!Number.isInteger(l) || l < 1)
17
- throw new Error("交叉表预算应为正整数");
18
- return l;
19
- }
20
- function A(r, e, l, t) {
21
- const m = l ? 1 : 0;
22
- if ((r + m) * (e + 1 + m) > t)
23
- throw new Error(
24
- "交叉表输出单元格超出 maxCells 预算,请减少维度或服务端预聚合"
25
- );
26
- }
27
- function z(r, e) {
28
- if (!Array.isArray(r)) throw new Error("交叉表数据应为对象数组");
29
- const l = e.aggregate ?? "sum";
30
- if (!["sum", "count", "avg", "min", "max", "weightedAvg"].includes(l))
31
- throw new Error("未知交叉表聚合类型");
32
- if (!e.rowField || !e.columnField || l !== "count" && !e.valueField)
33
- throw new Error("交叉表需要明确的行维度、列维度和度量字段");
34
- if (r.length > y(e.maxInputRows, 1e5))
35
- throw new Error("交叉表输入超出预算,请在服务端预聚合");
36
- const t = y(e.maxRows, 1e3), m = y(e.maxColumns, 200), w = y(e.maxCells, 2e6), i = () => N({
37
- op: l,
38
- field: l === "count" && e.countMode !== "nonNull" ? void 0 : e.valueField,
39
- weightField: e.weightField,
40
- numeric: e.numeric,
41
- digits: e.digits
42
- }), c = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map(), h = i();
43
- for (const n of r) {
44
- const s = x(g(n, e.rowField)), o = x(g(n, e.columnField));
45
- if (c.has(o) || c.set(o, E(g(n, e.columnField))), u.has(s) || u.set(s, {
46
- label: E(g(n, e.rowField)),
47
- cells: /* @__PURE__ */ new Map(),
48
- total: i()
49
- }), c.size > m || u.size > t)
50
- throw new Error("交叉表维度数量超出预算");
51
- A(u.size, c.size, e.totals, w);
52
- const d = u.get(s);
53
- d.cells.has(o) || d.cells.set(o, i()), f.has(o) || f.set(o, i());
54
- for (const F of [
55
- d.cells.get(o),
56
- d.total,
57
- f.get(o),
58
- h
59
- ])
60
- F.add(n);
61
- }
62
- const a = {
63
- columns: [
64
- {
65
- header: e.rowHeader ?? e.rowField,
66
- field: "rowLabel",
67
- semanticRole: "dimension"
68
- },
69
- ...[...c.values()].map(
70
- (n, s) => ({
71
- header: n,
72
- field: `c${s}`,
73
- semanticRole: "measure"
74
- })
75
- )
76
- ],
77
- rows: [...u.values()].map((n) => ({
78
- rowLabel: n.label,
79
- ...Object.fromEntries(
80
- [...c.keys()].map((s, o) => [
81
- `c${o}`,
82
- n.cells.get(s)?.value() ?? (l === "count" ? 0 : null)
83
- ])
84
- ),
85
- ...e.totals ? { total: n.total.value() } : {}
86
- }))
87
- };
88
- return e.totals && (a.columns.push({
89
- header: "合计",
90
- field: "total",
91
- semanticRole: "measure"
92
- }), r.length && a.rows.push({
93
- rowLabel: "合计",
94
- ...Object.fromEntries(
95
- [...c.keys()].map((n, s) => [
96
- `c${s}`,
97
- f.get(n)?.value() ?? (l === "count" ? 0 : null)
98
- ])
99
- ),
100
- total: h.value()
101
- })), a;
102
- }
103
- function b(r, e) {
104
- const l = e.map(
105
- (t) => Object.prototype.hasOwnProperty.call(r, t) ? r[t] : null
106
- );
107
- if (l.some(
108
- (t) => t != null && typeof t != "string" && typeof t != "boolean" && !(typeof t == "number" && Number.isFinite(t))
109
- ))
110
- throw new Error("矩阵维度必须是有限 JSON 标量");
111
- return {
112
- key: JSON.stringify(l.map((t) => [typeof t, t ?? null])),
113
- label: l.map((t) => t == null ? "" : String(t)).join(" / ")
114
- };
115
- }
116
- function M(r) {
117
- for (const e of [
118
- "maxRows",
119
- "maxColumns",
120
- "maxInputRows",
121
- "maxCells"
122
- ])
123
- if (r[e] !== void 0 && (!Number.isSafeInteger(r[e]) || r[e] < 1))
124
- throw new Error("矩阵预算应为正安全整数");
125
- for (const e of ["columnWidthMm", "rowWidthMm"])
126
- if (r[e] !== void 0 && (!Number.isFinite(r[e]) || r[e] <= 0))
127
- throw new Error("矩阵列宽应为正数");
128
- }
129
- function R(r) {
130
- if (!r || !Array.isArray(r.rowFields) || !Array.isArray(r.columnFields) || !Array.isArray(r.measures))
131
- throw new Error("矩阵需要行维度、列维度和度量数组");
132
- for (const l of [r.rowFields, r.columnFields])
133
- if (l.some((t) => typeof t != "string" || !t.trim()) || new Set(l).size !== l.length)
134
- throw new Error("矩阵维度字段应非空且唯一");
135
- if (M(r), !r.rowFields.length || !r.columnFields.length || r.rowFields.length > 16 || r.columnFields.length > 16)
136
- throw new Error("矩阵需要 1–16 个行/列维度");
137
- if (!r.measures.length || r.measures.length > 32)
138
- throw new Error("矩阵需要 1–32 个度量");
139
- if (r.measures.map((l) => {
140
- if (!l || typeof l != "object") throw new Error("矩阵度量应为对象");
141
- if (N({
142
- ...l,
143
- field: l.valueField ?? l.field
144
- }), l.label !== void 0 && typeof l.label != "string")
145
- throw new Error("矩阵度量标签应为字符串");
146
- return l.field;
147
- }).some((l) => typeof l != "string" || !l.trim()))
148
- throw new Error("矩阵度量字段应非空");
149
- }
150
- function O(r, e) {
151
- if (R(e), !Array.isArray(r) || r.length > (e.maxInputRows ?? 1e5))
152
- throw new Error("矩阵输入超出预算");
153
- const l = /* @__PURE__ */ new Set(), t = /* @__PURE__ */ new Set();
154
- for (const i of r) {
155
- if (!i || typeof i != "object" || Array.isArray(i))
156
- throw new Error("矩阵数据行应为对象");
157
- if (l.add(b(i, e.rowFields).key), t.add(b(i, e.columnFields).key), l.size > (e.maxRows ?? 1e3) || t.size > (e.maxColumns ?? 200))
158
- throw new Error("矩阵维度数量超出预算");
159
- if ((l.size + +!!e.totals) * ((t.size + +!!e.totals) * e.measures.length + 1) > (e.maxCells ?? 2e6))
160
- throw new Error("矩阵输出超出 maxCells 预算");
161
- }
162
- const m = l.size + +(!!e.totals && r.length > 0), w = (t.size + +!!e.totals) * e.measures.length + 1;
163
- return { rowCount: m, columnCount: w, cells: m * w };
164
- }
165
- function C(r, e) {
166
- let l = e;
167
- for (; r.some((t) => Object.prototype.hasOwnProperty.call(t, l)); )
168
- l += "_";
169
- return l;
170
- }
171
- function S(r, e) {
172
- O(r, e);
173
- const l = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), m = C(r, "__matrix_row"), w = C(r, "__matrix_column"), i = r.map((a) => {
174
- const n = b(a, e.rowFields), s = b(a, e.columnFields);
175
- return l.set(n.key, n.label), t.set(s.key, s.label), { ...a, [m]: n.key, [w]: s.key };
176
- }), c = e.maxCells ?? 2e6;
177
- if ((l.size + +!!e.totals) * ((t.size + +!!e.totals) * e.measures.length + 1) > c)
178
- throw new Error("矩阵输出超出 maxCells 预算");
179
- const u = e.measures.map(
180
- (a) => z(i, {
181
- rowField: m,
182
- columnField: w,
183
- valueField: a.valueField ?? a.field,
184
- aggregate: a.op,
185
- countMode: "nonNull",
186
- weightField: a.weightField,
187
- numeric: a.numeric,
188
- digits: a.digits,
189
- totals: e.totals,
190
- maxRows: e.maxRows,
191
- maxColumns: e.maxColumns,
192
- maxInputRows: e.maxInputRows,
193
- maxCells: c
194
- })
195
- ), f = u[0].rows.map(
196
- (a) => ({
197
- rowLabel: l.get(String(a.rowLabel)) ?? String(a.rowLabel)
198
- })
199
- ), h = [
200
- {
201
- field: "rowLabel",
202
- header: e.rowHeader ?? e.rowFields.join(" / "),
203
- semanticRole: "dimension"
204
- }
205
- ];
206
- for (let a = 0; a < u.length; a++) {
207
- const n = u[a], s = e.measures[a];
208
- for (const o of n.columns.slice(1)) {
209
- const d = `${o.field}_${a}`;
210
- h.push({
211
- ...o,
212
- field: d,
213
- ...s.digits === void 0 ? {} : { format: { kind: "number", digits: s.digits } },
214
- header: `${t.get(o.header) ?? o.header} · ${s.label ?? `${s.field} (${s.op})`}`
215
- }), n.rows.forEach((F, k) => {
216
- f[k][d] = F[o.field];
217
- });
218
- }
219
- }
220
- return { rows: f, columns: h };
221
- }
222
- export {
223
- S as a,
224
- z as c,
225
- O as e,
226
- R as v
227
- };
@@ -1,43 +0,0 @@
1
- function c(a) {
2
- return Number.isFinite(a) ? Math.max(0, a) : 0;
3
- }
4
- function b(a, g = 0) {
5
- const n = a.length, w = c(g), o = new Array(n + 1);
6
- o[0] = 0;
7
- for (let t = 0; t < n; t++)
8
- o[t + 1] = o[t] + c(a[t] ?? 0) + w;
9
- const d = o[n];
10
- function m(t) {
11
- let i = 0, r = n - 1, s = 0;
12
- for (; i <= r; ) {
13
- const e = i + r >>> 1;
14
- o[e] <= t ? (s = e, i = e + 1) : r = e - 1;
15
- }
16
- return s;
17
- }
18
- function P(t, i, r = 1) {
19
- if (n === 0) return { start: 0, end: -1, padTopPx: 0, padBottomPx: 0 };
20
- const s = Math.floor(c(r)), e = c(i), x = m(e), p = Math.max(0, x - s), A = e + c(t);
21
- let f = x, h = n - 1, u = n - 1;
22
- for (; f <= h; ) {
23
- const l = f + h >>> 1;
24
- o[l + 1] < A ? f = l + 1 : (u = l, h = l - 1);
25
- }
26
- const M = Math.min(n - 1, u + s);
27
- return {
28
- start: p,
29
- end: M,
30
- padTopPx: o[p],
31
- padBottomPx: Math.max(0, d - o[M + 1])
32
- };
33
- }
34
- return {
35
- totalHeightPx: d,
36
- pageAt: m,
37
- offsetAt: (t) => o[Math.max(0, Math.min(n, Math.floor(t)))] ?? 0,
38
- window: P
39
- };
40
- }
41
- export {
42
- b as c
43
- };
@@ -1 +0,0 @@
1
- "use strict";function c(a){return Number.isFinite(a)?Math.max(0,a):0}function b(a,g=0){const e=a.length,w=c(g),n=new Array(e+1);n[0]=0;for(let t=0;t<e;t++)n[t+1]=n[t]+c(a[t]??0)+w;const h=n[e];function m(t){let i=0,r=e-1,s=0;for(;i<=r;){const o=i+r>>>1;n[o]<=t?(s=o,i=o+1):r=o-1}return s}function P(t,i,r=1){if(e===0)return{start:0,end:-1,padTopPx:0,padBottomPx:0};const s=Math.floor(c(r)),o=c(i),x=m(o),u=Math.max(0,x-s),A=o+c(t);let d=x,f=e-1,p=e-1;for(;d<=f;){const l=d+f>>>1;n[l+1]<A?d=l+1:(p=l,f=l-1)}const M=Math.min(e-1,p+s);return{start:u,end:M,padTopPx:n[u],padBottomPx:Math.max(0,h-n[M+1])}}return{totalHeightPx:h,pageAt:m,offsetAt:t=>n[Math.max(0,Math.min(e,Math.floor(t)))]??0,window:P}}exports.createPageWindowIndex=b;
@@ -1,153 +0,0 @@
1
- function u(t) {
2
- if (!/^\d{4}-\d{2}-\d{2}$/.test(t) || t.startsWith("0000-")) return !1;
3
- const e = /* @__PURE__ */ new Date(`${t}T00:00:00.000Z`);
4
- return Number.isFinite(e.getTime()) && e.toISOString().slice(0, 10) === t;
5
- }
6
- function c(t) {
7
- return t.length === 4 && /^\d{4}$/.test(t) && t !== "0000";
8
- }
9
- function f(t) {
10
- return t.length === 7 && /^\d{4}-(?:0[1-9]|1[0-2])$/.test(t) && c(t.slice(0, 4));
11
- }
12
- function h(t) {
13
- const [e, r, n] = t.split("/");
14
- if (!(n !== void 0 || !e || !r || !u(e) || !u(r) || e > r))
15
- return { start: e, end: r };
16
- }
17
- function O(t) {
18
- const e = `${t.start}/${t.end}`;
19
- if (!h(e)) throw new RangeError("日期范围必须为完整且有序的 YYYY-MM-DD/YYYY-MM-DD");
20
- return e;
21
- }
22
- function x(t, e) {
23
- return typeof e != "string" ? !1 : t === "month" ? f(e) : t === "year" ? c(e) : (t === "date" || t === "dateRange") && u(e);
24
- }
25
- function $(t, e) {
26
- if (t === "date" && !u(e)) return "应为有效的 YYYY-MM-DD 日期";
27
- if (t === "month" && !f(e)) return "应为有效的 YYYY-MM 月份";
28
- if (t === "year" && !c(e)) return "应为 0001 至 9999 的四位年份";
29
- if (t === "dateRange" && !h(e)) return "应为完整且有序的 YYYY-MM-DD/YYYY-MM-DD 日期范围";
30
- }
31
- class g extends Error {
32
- constructor(e) {
33
- super(e.map((r) => `${r.field}: ${r.message}`).join("; ")), this.issues = e, this.code = "params", this.name = "ReportParamValidationError";
34
- }
35
- }
36
- function y(t) {
37
- return /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(t) && Number.isFinite(Number(t));
38
- }
39
- function b(t, e) {
40
- if (t.type === "number" && !y(e)) return [["type", "应为有限数字"]];
41
- const r = $(t.type, e);
42
- if (r) return [["type", r]];
43
- const n = [];
44
- t.type === "select" && t.options && !t.options.some((i) => i.value === e) && n.push(["option", "不在允许的选项中"]);
45
- const s = Array.from(e).length;
46
- return t.minLength !== void 0 && s < t.minLength && n.push(["minLength", `至少 ${t.minLength} 个字符`]), t.maxLength !== void 0 && s > t.maxLength && n.push(["maxLength", `最多 ${t.maxLength} 个字符`]), n.push(...Y(t, e)), n;
47
- }
48
- function Y(t, e) {
49
- const r = t.type === "dateRange" ? h(e) : void 0, n = r?.start ?? (t.type === "number" ? Number(e) : e), s = r?.end ?? n, i = [];
50
- return t.min !== void 0 && n < t.min && i.push(["minimum", `不能小于 ${t.min}`]), t.max !== void 0 && s > t.max && i.push(["maximum", `不能大于 ${t.max}`]), i;
51
- }
52
- function v(t) {
53
- const e = [];
54
- for (const s of ["min", "max"]) {
55
- const i = t[s];
56
- if (i === void 0) continue;
57
- x(t.type, i) || t.type === "number" && typeof i == "number" && Number.isFinite(i) || e.push(`${s} 应为数字的有限边界或日期/月/年的规范字符串边界`);
58
- }
59
- const r = typeof t.min == "number" && typeof t.max == "number" && t.min > t.max, n = typeof t.min == "string" && typeof t.max == "string" && t.min > t.max;
60
- return (r || n) && e.push("最小边界不能大于最大边界"), [...e, ...L(t)];
61
- }
62
- function L(t) {
63
- const e = [];
64
- t.type === "number" && (t.minLength !== void 0 || t.maxLength !== void 0) && e.push("number 参数使用 min/max 而不是文本长度约束");
65
- for (const r of ["minLength", "maxLength"]) {
66
- const n = t[r];
67
- n !== void 0 && (!Number.isSafeInteger(n) || n < 0) && e.push(`${r} 应为非负整数`);
68
- }
69
- return typeof t.minLength == "number" && typeof t.maxLength == "number" && t.minLength > t.maxLength && e.push("最小长度不能大于最大长度"), e;
70
- }
71
- function d(t) {
72
- if (!Array.isArray(t)) return [{ code: "definition", field: "", path: "$.paramDefs", message: "参数定义应为数组" }];
73
- const e = /* @__PURE__ */ new Set();
74
- return t.flatMap((r, n) => {
75
- const s = r && typeof r.field == "string" ? r.field : "";
76
- return V(r, e).map((o) => ({ code: "definition", field: s, path: `$.paramDefs.${n}`, message: o }));
77
- });
78
- }
79
- function R(t) {
80
- return Array.isArray(t) && t.every((e) => !!e && typeof e == "object" && typeof e.value == "string" && typeof e.label == "string");
81
- }
82
- function D(t) {
83
- const e = [];
84
- return t.type !== void 0 && !["text", "number", "date", "month", "year", "dateRange", "select"].includes(t.type) && e.push("未知参数类型"), t.label !== void 0 && typeof t.label != "string" && e.push("参数标签应为字符串"), t.placeholder !== void 0 && typeof t.placeholder != "string" && e.push("提示文字应为字符串"), t.required !== void 0 && typeof t.required != "boolean" && e.push("required 应为布尔值"), t.defaultValue !== void 0 && typeof t.defaultValue != "string" && e.push("默认值应为字符串"), t.options !== void 0 && !R(t.options) && e.push("选项应为包含字符串 label/value 的数组"), e;
85
- }
86
- function V(t, e) {
87
- if (!t || typeof t != "object" || Array.isArray(t)) return ["参数定义项应为对象"];
88
- const r = D(t);
89
- return typeof t.field != "string" || !t.field.trim() || e.has(t.field) ? r.push("参数名应为非空且不重复的字符串") : e.add(t.field), r.length || (r.push(...v(t)), r.length) || (t.options && new Set(t.options.map((n) => n.value)).size !== t.options.length && r.push("选项值不能重复"), t.defaultValue !== void 0 && (t.required && !t.defaultValue.trim() ? r.push("必填参数的默认值不能为空") : t.defaultValue.trim() && r.push(...b(t, t.defaultValue).map(([, n]) => `默认值${n}`)))), r;
90
- }
91
- function w(t, e, r) {
92
- for (const [n, s] of Object.entries(t))
93
- (typeof s == "string" || typeof s == "number" && Number.isFinite(s)) && (Object.defineProperty(e, n, { value: String(s), writable: !0, enumerable: !0, configurable: !0 }), Object.defineProperty(r, n, { value: s, writable: !0, enumerable: !0, configurable: !0 }));
94
- }
95
- function M(t) {
96
- return t == null || typeof t == "string" && !t.trim();
97
- }
98
- function j(t, e = {}) {
99
- const r = /* @__PURE__ */ Object.create(null), n = /* @__PURE__ */ Object.create(null), s = d(t);
100
- if ((!e || typeof e != "object" || Array.isArray(e)) && s.push({ code: "type", field: "", path: "$.params", message: "参数应为对象" }), s.length) return { ok: !1, values: r, typedValues: n, issues: s };
101
- w(e, r, n);
102
- for (const i of t) {
103
- const o = Object.prototype.hasOwnProperty.call(e, i.field) && e[i.field] !== void 0 ? e[i.field] : i.defaultValue, m = (p, l) => s.push({ code: p, path: `$.params.${i.field}`, field: i.field, message: l });
104
- if (M(o)) {
105
- i.required && m("required", "此参数为必填项"), typeof o == "string" && (r[i.field] = o), delete n[i.field];
106
- continue;
107
- }
108
- if (typeof o != "string" && !(typeof o == "number" && Number.isFinite(o))) {
109
- m("type", "参数应为字符串或有限数字");
110
- continue;
111
- }
112
- const a = String(o);
113
- r[i.field] = a, b(i, a).forEach(([p, l]) => m(p, l)), n[i.field] = i.type === "number" && y(a) ? Number(a) : a;
114
- }
115
- return { ok: s.length === 0, values: r, typedValues: n, issues: s };
116
- }
117
- function P(t, e = {}) {
118
- const r = j(t, e);
119
- if (!r.ok) throw new g(r.issues);
120
- return r.values;
121
- }
122
- function N(t) {
123
- const e = {}, r = "(?![\\s\\S])";
124
- return t.type === "date" && (e.format = "date"), t.type === "month" && (e.pattern = `^(?!0000)[0-9]{4}-(0[1-9]|1[0-2])${r}`), t.type === "year" && (e.pattern = `^(?!0000)[0-9]{4}${r}`), t.type === "dateRange" && (e.pattern = `^[0-9]{4}-[0-9]{2}-[0-9]{2}/[0-9]{4}-[0-9]{2}-[0-9]{2}${r}`), t.type === "dateRange" && (e["x-report-date-range"] = { separator: "/", ordered: !0, calendarDates: !0 }), e;
125
- }
126
- function S(t) {
127
- const e = { type: t.type === "number" ? "number" : "string", title: t.label ?? t.field, ...N(t) };
128
- return t.required && t.type !== "number" && !e.pattern && (e.pattern = "\\S"), t.type === "select" && t.options && (e.enum = t.options.map((r) => r.value)), t.defaultValue !== void 0 && (t.type !== "number" || t.defaultValue.trim()) && (e.default = t.type === "number" ? Number(t.defaultValue) : t.defaultValue), t.minLength !== void 0 && (e.minLength = t.minLength), t.maxLength !== void 0 && (e.maxLength = t.maxLength), typeof t.min == "number" && (e.minimum = t.min), typeof t.max == "number" && (e.maximum = t.max), typeof t.min == "string" && (e["x-report-minimum"] = t.min), typeof t.max == "string" && (e["x-report-maximum"] = t.max), e;
129
- }
130
- function q(t) {
131
- const e = d(t);
132
- if (e.length) throw new g(e);
133
- return {
134
- $schema: "https://json-schema.org/draft/2020-12/schema",
135
- type: "object",
136
- properties: Object.fromEntries(t.map((r) => [r.field, S(r)])),
137
- required: t.filter((r) => r.required).map((r) => r.field),
138
- additionalProperties: !0
139
- };
140
- }
141
- export {
142
- g as R,
143
- P as a,
144
- f as b,
145
- c,
146
- j as d,
147
- x as e,
148
- O as f,
149
- u as i,
150
- h as p,
151
- q as r,
152
- d as v
153
- };
@@ -1 +0,0 @@
1
- "use strict";function u(t){if(!/^\d{4}-\d{2}-\d{2}$/.test(t)||t.startsWith("0000-"))return!1;const e=new Date(`${t}T00:00:00.000Z`);return Number.isFinite(e.getTime())&&e.toISOString().slice(0,10)===t}function m(t){return t.length===4&&/^\d{4}$/.test(t)&&t!=="0000"}function f(t){return t.length===7&&/^\d{4}-(?:0[1-9]|1[0-2])$/.test(t)&&m(t.slice(0,4))}function p(t){const[e,r,n]=t.split("/");if(!(n!==void 0||!e||!r||!u(e)||!u(r)||e>r))return{start:e,end:r}}function Y(t){const e=`${t.start}/${t.end}`;if(!p(e))throw new RangeError("日期范围必须为完整且有序的 YYYY-MM-DD/YYYY-MM-DD");return e}function b(t,e){return typeof e!="string"?!1:t==="month"?f(e):t==="year"?m(e):(t==="date"||t==="dateRange")&&u(e)}function $(t,e){if(t==="date"&&!u(e))return"应为有效的 YYYY-MM-DD 日期";if(t==="month"&&!f(e))return"应为有效的 YYYY-MM 月份";if(t==="year"&&!m(e))return"应为 0001 至 9999 的四位年份";if(t==="dateRange"&&!p(e))return"应为完整且有序的 YYYY-MM-DD/YYYY-MM-DD 日期范围"}class g extends Error{constructor(e){super(e.map(r=>`${r.field}: ${r.message}`).join("; ")),this.issues=e,this.code="params",this.name="ReportParamValidationError"}}function d(t){return/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(t)&&Number.isFinite(Number(t))}function x(t,e){if(t.type==="number"&&!d(e))return[["type","应为有限数字"]];const r=$(t.type,e);if(r)return[["type",r]];const n=[];t.type==="select"&&t.options&&!t.options.some(i=>i.value===e)&&n.push(["option","不在允许的选项中"]);const o=Array.from(e).length;return t.minLength!==void 0&&o<t.minLength&&n.push(["minLength",`至少 ${t.minLength} 个字符`]),t.maxLength!==void 0&&o>t.maxLength&&n.push(["maxLength",`最多 ${t.maxLength} 个字符`]),n.push(...v(t,e)),n}function v(t,e){const r=t.type==="dateRange"?p(e):void 0,n=r?.start??(t.type==="number"?Number(e):e),o=r?.end??n,i=[];return t.min!==void 0&&n<t.min&&i.push(["minimum",`不能小于 ${t.min}`]),t.max!==void 0&&o>t.max&&i.push(["maximum",`不能大于 ${t.max}`]),i}function D(t){const e=[];for(const o of["min","max"]){const i=t[o];if(i===void 0)continue;b(t.type,i)||t.type==="number"&&typeof i=="number"&&Number.isFinite(i)||e.push(`${o} 应为数字的有限边界或日期/月/年的规范字符串边界`)}const r=typeof t.min=="number"&&typeof t.max=="number"&&t.min>t.max,n=typeof t.min=="string"&&typeof t.max=="string"&&t.min>t.max;return(r||n)&&e.push("最小边界不能大于最大边界"),[...e,...L(t)]}function L(t){const e=[];t.type==="number"&&(t.minLength!==void 0||t.maxLength!==void 0)&&e.push("number 参数使用 min/max 而不是文本长度约束");for(const r of["minLength","maxLength"]){const n=t[r];n!==void 0&&(!Number.isSafeInteger(n)||n<0)&&e.push(`${r} 应为非负整数`)}return typeof t.minLength=="number"&&typeof t.maxLength=="number"&&t.minLength>t.maxLength&&e.push("最小长度不能大于最大长度"),e}function y(t){if(!Array.isArray(t))return[{code:"definition",field:"",path:"$.paramDefs",message:"参数定义应为数组"}];const e=new Set;return t.flatMap((r,n)=>{const o=r&&typeof r.field=="string"?r.field:"";return P(r,e).map(s=>({code:"definition",field:o,path:`$.paramDefs.${n}`,message:s}))})}function V(t){return Array.isArray(t)&&t.every(e=>!!e&&typeof e=="object"&&typeof e.value=="string"&&typeof e.label=="string")}function M(t){const e=[];return t.type!==void 0&&!["text","number","date","month","year","dateRange","select"].includes(t.type)&&e.push("未知参数类型"),t.label!==void 0&&typeof t.label!="string"&&e.push("参数标签应为字符串"),t.placeholder!==void 0&&typeof t.placeholder!="string"&&e.push("提示文字应为字符串"),t.required!==void 0&&typeof t.required!="boolean"&&e.push("required 应为布尔值"),t.defaultValue!==void 0&&typeof t.defaultValue!="string"&&e.push("默认值应为字符串"),t.options!==void 0&&!V(t.options)&&e.push("选项应为包含字符串 label/value 的数组"),e}function P(t,e){if(!t||typeof t!="object"||Array.isArray(t))return["参数定义项应为对象"];const r=M(t);return typeof t.field!="string"||!t.field.trim()||e.has(t.field)?r.push("参数名应为非空且不重复的字符串"):e.add(t.field),r.length||(r.push(...D(t)),r.length)||(t.options&&new Set(t.options.map(n=>n.value)).size!==t.options.length&&r.push("选项值不能重复"),t.defaultValue!==void 0&&(t.required&&!t.defaultValue.trim()?r.push("必填参数的默认值不能为空"):t.defaultValue.trim()&&r.push(...x(t,t.defaultValue).map(([,n])=>`默认值${n}`)))),r}function w(t,e,r){for(const[n,o]of Object.entries(t))(typeof o=="string"||typeof o=="number"&&Number.isFinite(o))&&(Object.defineProperty(e,n,{value:String(o),writable:!0,enumerable:!0,configurable:!0}),Object.defineProperty(r,n,{value:o,writable:!0,enumerable:!0,configurable:!0}))}function j(t){return t==null||typeof t=="string"&&!t.trim()}function R(t,e={}){const r=Object.create(null),n=Object.create(null),o=y(t);if((!e||typeof e!="object"||Array.isArray(e))&&o.push({code:"type",field:"",path:"$.params",message:"参数应为对象"}),o.length)return{ok:!1,values:r,typedValues:n,issues:o};w(e,r,n);for(const i of t){const s=Object.prototype.hasOwnProperty.call(e,i.field)&&e[i.field]!==void 0?e[i.field]:i.defaultValue,l=(c,h)=>o.push({code:c,path:`$.params.${i.field}`,field:i.field,message:h});if(j(s)){i.required&&l("required","此参数为必填项"),typeof s=="string"&&(r[i.field]=s),delete n[i.field];continue}if(typeof s!="string"&&!(typeof s=="number"&&Number.isFinite(s))){l("type","参数应为字符串或有限数字");continue}const a=String(s);r[i.field]=a,x(i,a).forEach(([c,h])=>l(c,h)),n[i.field]=i.type==="number"&&d(a)?Number(a):a}return{ok:o.length===0,values:r,typedValues:n,issues:o}}function S(t,e={}){const r=R(t,e);if(!r.ok)throw new g(r.issues);return r.values}function N(t){const e={},r="(?![\\s\\S])";return t.type==="date"&&(e.format="date"),t.type==="month"&&(e.pattern=`^(?!0000)[0-9]{4}-(0[1-9]|1[0-2])${r}`),t.type==="year"&&(e.pattern=`^(?!0000)[0-9]{4}${r}`),t.type==="dateRange"&&(e.pattern=`^[0-9]{4}-[0-9]{2}-[0-9]{2}/[0-9]{4}-[0-9]{2}-[0-9]{2}${r}`),t.type==="dateRange"&&(e["x-report-date-range"]={separator:"/",ordered:!0,calendarDates:!0}),e}function I(t){const e={type:t.type==="number"?"number":"string",title:t.label??t.field,...N(t)};return t.required&&t.type!=="number"&&!e.pattern&&(e.pattern="\\S"),t.type==="select"&&t.options&&(e.enum=t.options.map(r=>r.value)),t.defaultValue!==void 0&&(t.type!=="number"||t.defaultValue.trim())&&(e.default=t.type==="number"?Number(t.defaultValue):t.defaultValue),t.minLength!==void 0&&(e.minLength=t.minLength),t.maxLength!==void 0&&(e.maxLength=t.maxLength),typeof t.min=="number"&&(e.minimum=t.min),typeof t.max=="number"&&(e.maximum=t.max),typeof t.min=="string"&&(e["x-report-minimum"]=t.min),typeof t.max=="string"&&(e["x-report-maximum"]=t.max),e}function O(t){const e=y(t);if(e.length)throw new g(e);return{$schema:"https://json-schema.org/draft/2020-12/schema",type:"object",properties:Object.fromEntries(t.map(r=>[r.field,I(r)])),required:t.filter(r=>r.required).map(r=>r.field),additionalProperties:!0}}exports.ReportParamValidationError=g;exports.assertReportParams=S;exports.formatReportDateRange=Y;exports.isReportDate=u;exports.isReportMonth=f;exports.isReportTemporalBound=b;exports.isReportYear=m;exports.parseReportDateRange=p;exports.reportParamsJsonSchema=O;exports.validateReportParamDefinitions=y;exports.validateReportParams=R;