@agile-team/mach-report 2.16.0 → 2.17.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 (128) hide show
  1. package/README.md +10 -6
  2. package/dist/{ExcelBindingWizard-CP6h2x1f.cjs → ExcelBindingWizard-Bq6FYME6.cjs} +1 -1
  3. package/dist/{ExcelBindingWizard-HhB3hAJE.js → ExcelBindingWizard-Co1svTsw.js} +3 -3
  4. package/dist/{ParamEditor-CUQLgoxa.cjs → ParamEditor-B5UZRgxv.cjs} +1 -1
  5. package/dist/{ParamEditor-OKesP_nO.js → ParamEditor-DNNARyeB.js} +1 -1
  6. package/dist/{ReportBatchPanel-cZCAMAwH.cjs → ReportBatchPanel-Ctvs2t_9.cjs} +1 -1
  7. package/dist/{ReportBatchPanel-ruxcbfY6.js → ReportBatchPanel-uQh06usx.js} +1 -1
  8. package/dist/ReportPreview-BdQawRh0.js +4879 -0
  9. package/dist/ReportPreview-CJC_-j2I.cjs +6 -0
  10. package/dist/{ReportTemplateLibrary-BDlNT8JN.cjs → ReportTemplateLibrary-CnP7_1pH.cjs} +1 -1
  11. package/dist/{ReportTemplateLibrary-DcwrH-63.js → ReportTemplateLibrary-TIL_Oj2l.js} +1 -1
  12. package/dist/RuleEditor-DkRjOLlr.js +2141 -0
  13. package/dist/RuleEditor-h5anGsDB.cjs +1 -0
  14. package/dist/{TemplateOutlinePanel-CGrT5DFN.cjs → TemplateOutlinePanel-BlLxRrfu.cjs} +1 -1
  15. package/dist/{TemplateOutlinePanel-SXCjaPKR.js → TemplateOutlinePanel-BouxsuqQ.js} +1 -1
  16. package/dist/{TemplateReusePanel-lHLOS9Wn.js → TemplateReusePanel-BEACLPaN.js} +2 -2
  17. package/dist/{TemplateReusePanel-6Z3wRFz8.cjs → TemplateReusePanel-yxsHSO40.cjs} +1 -1
  18. package/dist/{TemplateReviewPanel-CJ9PLc48.js → TemplateReviewPanel-B1OGRY2i.js} +1 -1
  19. package/dist/{TemplateReviewPanel-Dpk7sLcF.cjs → TemplateReviewPanel-D9Cx0m2N.cjs} +1 -1
  20. package/dist/analytics.cjs +1 -1
  21. package/dist/analytics.d.cts +63 -1
  22. package/dist/analytics.d.ts +63 -1
  23. package/dist/analytics.js +4 -4
  24. package/dist/artifact-integrity.json +86 -90
  25. package/dist/assets-BIMVwjQe.js +231 -0
  26. package/dist/assets-Dfs2ElxI.cjs +1 -0
  27. package/dist/{auto-YR7a4BtF.js → auto-BIOmtVhk.js} +14 -14
  28. package/dist/{auto-uVBjX1j5.cjs → auto-DDHflI9v.cjs} +1 -1
  29. package/dist/computed-BW5a8QFk.js +612 -0
  30. package/dist/computed-C2GD3XcE.cjs +1 -0
  31. package/dist/dataset-DL83majE.js +161 -0
  32. package/dist/dataset-IrlXbUvh.cjs +1 -0
  33. package/dist/{designer-BfQSahxq.js → designer-D9XAxqSc.js} +1194 -1179
  34. package/dist/designer-uCDo5XSK.cjs +2 -0
  35. package/dist/designer.cjs +1 -1
  36. package/dist/designer.d.cts +125 -3
  37. package/dist/designer.d.ts +125 -3
  38. package/dist/designer.js +1 -1
  39. package/dist/{drill-CsdjgkRM.cjs → drill-ByN8COs_.cjs} +1 -1
  40. package/dist/{drill-DIGsZfyB.js → drill-CKW3Xtfa.js} +11 -11
  41. package/dist/{encoding-BYF9ZTl9.cjs → encoding-BFMFIc4r.cjs} +1 -1
  42. package/dist/{encoding-BOGq4qYL.js → encoding-DP_Eaf0A.js} +2 -2
  43. package/dist/{font-loader-EKLzOJxf.cjs → font-loader-7FWVlykp.cjs} +1 -1
  44. package/dist/{font-loader-CzI1GuBc.js → font-loader-CQZowp0I.js} +1 -1
  45. package/dist/index.cjs +8 -8
  46. package/dist/index.d.cts +173 -1
  47. package/dist/index.d.ts +173 -1
  48. package/dist/index.js +1205 -808
  49. package/dist/json-snapshot-D7PE1NsU.cjs +2 -0
  50. package/dist/{json-snapshot-D6ioHth9.js → json-snapshot-DYmEe3sO.js} +769 -692
  51. package/dist/matrix-JLAXlux-.js +302 -0
  52. package/dist/matrix-gTHpDTGm.cjs +1 -0
  53. package/dist/{pdf-ByVCb1i6.cjs → pdf-B8JouyYv.cjs} +47 -47
  54. package/dist/{pdf-DJ5S6ukC.js → pdf-l3ea86di.js} +13 -15
  55. package/dist/pdf.cjs +1 -1
  56. package/dist/pdf.d.cts +12 -0
  57. package/dist/pdf.d.ts +12 -0
  58. package/dist/pdf.js +2 -2
  59. package/dist/{plugin-C2j5_mhx.js → plugin-BBp74CQZ.js} +1 -1
  60. package/dist/{plugin-Dr39GBRG.cjs → plugin-CtFX9PFG.cjs} +1 -1
  61. package/dist/{prepared-DqtpvRTn.js → prepared-CARicKYh.js} +1 -1
  62. package/dist/{prepared-DdrjLC7L.cjs → prepared-Ch1x_Gog.cjs} +1 -1
  63. package/dist/{protocol-BzwMP4Vw.cjs → protocol-B5A2uom4.cjs} +1 -1
  64. package/dist/{protocol-kt4Iy6-3.js → protocol-BaiWjq5w.js} +3 -3
  65. package/dist/{record-bindings-DUX1VMlR.cjs → record-bindings-B86Sur_y.cjs} +1 -1
  66. package/dist/{record-bindings-CZWBJ1fU.js → record-bindings-D4TuMzHs.js} +1 -1
  67. package/dist/{region-binding-workflow-CWNvIjkV.js → region-binding-workflow-BNasF5kz.js} +2 -2
  68. package/dist/{region-binding-workflow-CqSMxQ4p.cjs → region-binding-workflow-O2Cni3mF.cjs} +1 -1
  69. package/dist/report-encoding-worker.cjs +1 -1
  70. package/dist/report-encoding-worker.js +1 -1
  71. package/dist/runtime-DakRXui3.js +170 -0
  72. package/dist/runtime-dL5ygIfa.cjs +1 -0
  73. package/dist/sbom.cdx.json +1 -1
  74. package/dist/server/node.d.cts +46 -0
  75. package/dist/server/node.d.ts +46 -0
  76. package/dist/server-node.cjs +4 -4
  77. package/dist/server-node.js +2540 -1911
  78. package/dist/server.cjs +1 -1
  79. package/dist/server.d.cts +174 -1
  80. package/dist/server.d.ts +174 -1
  81. package/dist/server.js +787 -544
  82. package/dist/style.css +1 -1
  83. package/dist/template-catalog-Dua8h9ZA.cjs +1 -0
  84. package/dist/{template-catalog-BtR2JmCL.js → template-catalog-wT1fNeAP.js} +4 -4
  85. package/dist/{template-fragments-BVsbxs4a.cjs → template-fragments-BajTajb4.cjs} +1 -1
  86. package/dist/{template-fragments-By0aZC1D.js → template-fragments-DmX5XK4N.js} +1 -1
  87. package/dist/{template-registry-C62vpv4a.cjs → template-registry-CpysHAxy.cjs} +1 -1
  88. package/dist/{template-registry-Cw3vRTX2.js → template-registry-u11fPd8D.js} +5 -5
  89. package/dist/{tree-BX380Rr7.cjs → tree-CLpxYbKa.cjs} +1 -1
  90. package/dist/{tree-CjVZLRw7.js → tree-DNJorJUf.js} +1 -1
  91. package/dist/vue/async.d.cts +108 -2
  92. package/dist/vue/async.d.ts +108 -2
  93. package/dist/vue/index.d.cts +130 -3
  94. package/dist/vue/index.d.ts +130 -3
  95. package/dist/vue-async.cjs +1 -1
  96. package/dist/vue-async.js +3 -3
  97. package/dist/vue.cjs +1 -1
  98. package/dist/vue.js +4 -4
  99. package/dist/{workbook-session-BeSO8PFB.js → workbook-session-B8pNW24X.js} +1 -1
  100. package/dist/{workbook-session-Cbts-22R.cjs → workbook-session-DN5LSA5C.cjs} +1 -1
  101. package/dist/worker.cjs +1 -1
  102. package/dist/worker.js +4 -4
  103. package/dist/xlsx.cjs +4 -4
  104. package/dist/xlsx.d.cts +88 -2
  105. package/dist/xlsx.d.ts +88 -2
  106. package/dist/xlsx.js +232 -230
  107. package/package.json +1 -1
  108. package/dist/ReportPreview-BcDKCLiK.js +0 -4834
  109. package/dist/ReportPreview-Bk9nLfO9.cjs +0 -6
  110. package/dist/RuleEditor-BX5S8RSF.cjs +0 -1
  111. package/dist/RuleEditor-CGl9XY2s.js +0 -2037
  112. package/dist/assets-CqIbfbTr.js +0 -126
  113. package/dist/assets-e4YSke8n.cjs +0 -1
  114. package/dist/capabilities-DDwXr_cA.js +0 -103
  115. package/dist/capabilities-DNLyZdNw.cjs +0 -1
  116. package/dist/computed-C-4C2S5h.js +0 -521
  117. package/dist/computed-CGV2a809.cjs +0 -1
  118. package/dist/dataset-BkRmwgeJ.cjs +0 -1
  119. package/dist/dataset-H5pFuQGU.js +0 -121
  120. package/dist/designer-CPPdeM5_.cjs +0 -2
  121. package/dist/diagnostic-notification-B9K9We3h.cjs +0 -1
  122. package/dist/diagnostic-notification-qGAYZdkB.js +0 -7
  123. package/dist/json-snapshot-DknkjvxP.cjs +0 -2
  124. package/dist/matrix-CGRGkn5s.js +0 -112
  125. package/dist/matrix-gEO7ZM_u.cjs +0 -1
  126. package/dist/runtime-BjKBI530.js +0 -168
  127. package/dist/runtime-CBFEPKEs.cjs +0 -1
  128. package/dist/template-catalog-C2NLdrwB.cjs +0 -1
@@ -0,0 +1 @@
1
+ "use strict";var J=Object.create;var D=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty;var W=(e,t,a,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of N(t))!X.call(e,s)&&s!==a&&D(e,s,{get:()=>t[s],enumerable:!(c=V(t,s))||c.enumerable});return e};var E=(e,t,a)=>(a=e!=null?J(U(e)):{},W(t||!e||!e.__esModule?D(a,"default",{value:e,enumerable:!0}):a,e));const n=require("./json-snapshot-D7PE1NsU.cjs"),F=require("./report-params-WDGrA4oP.cjs"),k=require("./param-validation-C3HlcLLO.cjs"),o=require("./sha256-BshdOkCC.cjs"),z=require("./template-registry-CpysHAxy.cjs"),G=require("./tree-CLpxYbKa.cjs"),M=require("./assets-Dfs2ElxI.cjs"),b=require("./prepared-Ch1x_Gog.cjs");function I(e=[]){return e.map(({code:t,message:a,severity:c,pageIndex:s,componentIndex:r})=>({code:t,message:a,severity:c,path:r<0?`$.pages.${s}`:`$.pages.${s}.components.${r}`}))}async function q(e,t,a=Date.now()){const c=e.prepared;if(e.fidelity==="strict"&&c.diagnostics.some(f=>f.code==="asset-render-failed"||f.code==="asset-budget-exceeded"))throw new n.ReportSourceError("validate","严格输出拒绝已有资产渲染降级,请修复组件后重新准备报表。");const s=e.format==="pdf"?await import("@agile-team/mach-report/pdf"):void 0;o.throwIfAborted(e.signal);const r=e.pdf?.customFontFaces??(e.pdf?.customFontBytes?{regular:e.pdf.customFontBytes}:void 0),u=s&&r?s.createFontBytesMeasurer(r):void 0,m=n.createReportTaskReporter(e),p=await m.run("encode",async()=>{let f;if(e.format==="pdf"){o.throwIfAborted(e.signal);const i=await s.renderPlanToPdf(c.plan,{...e.pdf,...u?{measurer:u}:{},fidelity:e.fidelity,signal:e.signal,onProgress:(w,l)=>m.progress("encode",w,l)});f=i.bytes,c.diagnostics.push(...I(i.diagnostics)),c.diagnostics.push(...i.fidelityWarnings.map(w=>({code:"pdf-fidelity",message:w,severity:"warning"})),...i.pageErrors.map(w=>({code:"pdf-page",message:w,severity:"error"}))),i.unsupportedTextCount&&c.diagnostics.push({code:"pdf-font",message:`${i.unsupportedTextCount} 段文本包含当前字体不支持的字符`,severity:"warning"})}else{const{renderPlanToXlsx:i}=await import("@agile-team/mach-report/xlsx");o.throwIfAborted(e.signal);const w=await i(c.plan,{...e.xlsx,fidelity:e.fidelity,signal:e.signal,onProgress:(l,h)=>m.progress("encode",l,h)});f=new Uint8Array(w.buffer),c.diagnostics.push(...I(w.diagnostics)),c.diagnostics.push(...w.warnings.map(l=>({code:"xlsx-fidelity",message:l,severity:"warning"})))}return o.throwIfAborted(e.signal),f});o.assertBudget(t,"maxOutputBytes",p.byteLength);const{plan:d,...y}=c;return{...y,bytes:p,format:e.format,contentType:e.format==="pdf"?"application/pdf":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",stats:{...y.stats,durationMs:Date.now()-a,outputBytes:p.byteLength}}}function A(e){return{...e,reportIds:[...e.reportIds],...e.params?{params:{...e.params}}:{}}}function $(e,t){if(t.length===0)throw new n.ReportSourceError("config","缺少报表 ID");return t.map(a=>{if(!Object.prototype.hasOwnProperty.call(e,a))throw new n.ReportSourceError("config",`未注册报表 ${a}`);return e[a]})}function T(e){return e.grid?.cells.reduce((t,a)=>t+a.reduce((c,s)=>c+(s?1+(s.children?.reduce((r,u)=>r+T(u),0)??0):0),0),0)??0}function Q(e,t,a){return e.pages.reduce((c,s)=>c+s.components.reduce((r,u)=>u.kind!=="list"?r+T(u):r+n.estimateListLayoutCells(u,t,a),0),0)}function H(e,t=Object.keys(e)){return $(e,t).map((a,c)=>{const s=t[c],r=F.getReportParamDefs(e,[s]);return{id:s,params:JSON.parse(JSON.stringify(r)),paramsSchema:k.reportParamsJsonSchema(r),datasetsSchema:Object.fromEntries(Object.entries(a.dataSchema??{}).map(([u,m])=>[u,n.templateDatasetJsonSchema(typeof a.template=="function"?void 0:a.template,u,m)])),capabilities:{save:!!a.provider?.save,export:!!a.provider?.export,templates:!!a.provider?.templates}}})}function j(e,t){$(e,t.reportIds);const a=k.validateReportParams(F.getReportParamDefs(e,t.reportIds),t.params),c=t.reportIds.flatMap(r=>k.validateReportParams(F.getReportParamDefs(e,[r]),t.params).issues),s=new Map(c.map(r=>[JSON.stringify(r),r]));return{...a,ok:s.size===0,issues:[...s.values()]}}function O(e,t){const a=z.validateRenderPlan(e.plan);if(!a.ok)throw new n.ReportSourceError("validate",`执行器返回无效计划:${a.errors[0]?.path}`);const c=e.plan.pages.length,s=e.plan.pages.reduce((r,u)=>r+u.components.reduce((m,p)=>m+T(p),0),0);return o.assertBudget(t,"maxRows",e.stats.rows),o.assertBudget(t,"maxPages",c),o.assertBudget(t,"maxCells",s),{...e,stats:{...e.stats,pages:c,cells:s}}}function L(e,t){const a=j(e.reports,t);if(!a.ok)throw new k.ReportParamValidationError(a.issues)}function K(e){const t={...o.DEFAULT_REPORT_RUNTIME_BUDGET,...e.budget};o.validateBudget(t);const a=async(s,r)=>{const u=Date.now();let m=0,p=0;const d=[],y={},f=[],i=Object.fromEntries(Object.entries(e.reports).map(([g,x])=>[g,{...x,pagination:{...e.pagination,...x.pagination,...r?{measurer:r}:{}},dataValidation:{...x.dataValidation,maxRows:Math.min(t.maxRows??1e5,x.dataValidation?.maxRows??1/0),maxCells:Math.min(t.maxCells??2e6,x.dataValidation?.maxCells??1/0)}}])),l=await n.createReportSource(i,{maxPages:t.maxPages,maxCells:t.maxCells,onDatasets:(g,x,v)=>{try{m+=n.templateDatasetRowCount(v,x,{maxRows:t.maxRows,signal:s.signal})}catch(R){throw R instanceof G.TreeRowLimitError?new o.ReportRuntimeError("budget",R.message,"$.budget.maxRows"):R}o.assertBudget(t,"maxRows",m),p+=Q(v,x,i[g]?.pagination),o.assertBudget(t,"maxCells",p)}})({...s,params:s.params??{},onWarning:g=>d.push({code:"layout",message:g,severity:"warning"}),onQueryResult:(g,x,v=0)=>{const R=n.reportOccurrenceScope(v,g);Object.defineProperty(y,g,{value:{revision:x.revision,sourceToken:x.sourceToken},enumerable:!0,writable:!0}),f.push({reportId:g,reportIndex:v,reportScope:R,...x.revision===void 0?{}:{revision:x.revision},...x.sourceToken===void 0?{}:{sourceToken:x.sourceToken}}),d.push(...(x.diagnostics??[]).map(P=>({...P,...P.target?{target:{...P.target,reportScope:R,...P.target.tableId?{tableId:JSON.stringify([v,g,P.target.tableId])}:{}}}:{}})))}}).catch(g=>{throw g instanceof n.ReportSourceError&&g.cause instanceof n.PaginatePageLimitError?new o.ReportRuntimeError("budget",g.cause.message,"$.budget.maxPages"):g instanceof n.ReportSourceError&&g.cause instanceof n.PaginateCellLimitError?new o.ReportRuntimeError("budget",g.cause.message,"$.budget.maxCells"):g});o.throwIfAborted(s.signal);const h=e.assets?await n.createReportTaskReporter(s).run("assets",()=>M.resolvePlanAssets(l,{...e.assets,signal:s.signal})):{plan:l,diagnostics:[]},B=h.plan;d.push(...I(h.diagnostics));const C=B.pages.reduce((g,x)=>g+x.components.reduce((v,R)=>v+T(R),0),0);o.assertBudget(t,"maxPages",B.pages.length),o.assertBudget(t,"maxCells",C);const S=b.reportFontFingerprint(s.pdf),_=e.pagination?.measurer||Object.values(e.reports).some(g=>g.pagination?.measurer);return{plan:B,diagnostics:d,revisions:y,sources:f,layout:{textMetrics:S?"font-bytes":_?"provided":"heuristic",...S?{fontFingerprint:S}:{}},stats:{rows:m,pages:B.pages.length,cells:C,durationMs:Date.now()-u}}},c=async s=>{const r=Date.now();if(s.format!=="pdf"&&s.format!=="xlsx")throw new n.ReportSourceError("config","不支持的报表导出格式");const u=s.format==="pdf"?await import("@agile-team/mach-report/pdf"):void 0;o.throwIfAborted(s.signal);const m=s.pdf?.customFontFaces??(s.pdf?.customFontBytes?{regular:s.pdf.customFontBytes}:void 0),p=u&&m?u.createFontBytesMeasurer(m):void 0,d=await a(s,p);return o.throwIfAborted(s.signal),q({...s,prepared:d},t,r)};return{describe:s=>H(e.reports,s),validate:s=>j(e.reports,s),prepare:s=>o.controlled(s.signal,t.maxDurationMs,async r=>{const{signal:u,onEvent:m,...p}=A(s),d={...p,...p.pdf?{pdf:b.snapshotPdfFonts(p.pdf)}:{},taskId:p.taskId??n.reportTaskId()},y=m?h=>n.notifyReportTaskEvent(m,h,r):void 0,f={...d,signal:r,onEvent:y};n.createReportTaskReporter(f).runSync("validate",()=>L(e,d));let i;const w=d.pdf?.customFontFaces??(d.pdf?.customFontBytes?{regular:d.pdf.customFontBytes}:void 0);if(!e.executor&&w){const h=await import("@agile-team/mach-report/pdf");o.throwIfAborted(r),i=h.createFontBytesMeasurer(w)}const l=e.executor?await e.executor.prepare(d,r,y):await a(f,i);return O(l,t)}),exportPrepared:s=>o.controlled(s.signal,t.maxDurationMs,async r=>{const u=Date.now(),{signal:m,onEvent:p,...d}=s,y=O(b.snapshotPreparedReport(s.prepared,t.maxPreparedBytes??64e6,r),t),f={...d,xlsx:b.snapshotXlsxOptions(d.xlsx),prepared:y,...d.pdf?{pdf:b.snapshotPdfFonts(d.pdf)}:{},taskId:d.taskId??n.reportTaskId()};if(f.format!=="pdf"&&f.format!=="xlsx")throw new n.ReportSourceError("config","不支持的报表导出格式");const i=p?l=>n.notifyReportTaskEvent(p,l,r):void 0;if(e.executor){if(!e.executor.exportPrepared)throw new n.ReportSourceError("config","执行器未实现 exportPrepared;请升级执行器或显式使用本地运行时");const l=await e.executor.exportPrepared(f,r,i);return o.assertBudget(t,"maxRows",l.stats.rows),o.assertBudget(t,"maxPages",l.stats.pages),o.assertBudget(t,"maxCells",l.stats.cells),o.assertBudget(t,"maxOutputBytes",l.bytes.byteLength),{...l,stats:{...l.stats,outputBytes:l.bytes.byteLength}}}const w={...f,signal:r,onEvent:i};if(n.createReportTaskReporter(w).runSync("validate",()=>b.checkPreparedFont(w)),e.assets){const l=await n.createReportTaskReporter(w).run("assets",()=>M.resolvePlanAssets(y.plan,{...e.assets,signal:r}));y.plan=l.plan,y.diagnostics.push(...I(l.diagnostics))}return q(w,t,u)}),export:s=>o.controlled(s.signal,t.maxDurationMs,async r=>{const{signal:u,onEvent:m,...p}=A(s),d={...p,xlsx:b.snapshotXlsxOptions(p.xlsx),...p.pdf?{pdf:b.snapshotPdfFonts(p.pdf)}:{},taskId:p.taskId??n.reportTaskId()},y=m?w=>n.notifyReportTaskEvent(m,w,r):void 0,f={...d,signal:r,onEvent:y};if(n.createReportTaskReporter(f).runSync("validate",()=>L(e,d)),d.format!=="pdf"&&d.format!=="xlsx")throw new n.ReportSourceError("config","不支持的报表导出格式");const i=e.executor?await e.executor.export(d,r,y):await c(f);return o.assertBudget(t,"maxRows",i.stats.rows),o.assertBudget(t,"maxPages",i.stats.pages),o.assertBudget(t,"maxCells",i.stats.cells),o.assertBudget(t,"maxOutputBytes",i.bytes.byteLength),{...i,stats:{...i.stats,outputBytes:i.bytes.byteLength}}})}}exports.createReportRuntime=K;exports.enforcePrepared=O;
@@ -6,7 +6,7 @@
6
6
  "component": {
7
7
  "type": "library",
8
8
  "name": "@agile-team/mach-report",
9
- "version": "2.16.0"
9
+ "version": "2.17.0"
10
10
  },
11
11
  "properties": [
12
12
  {
@@ -87,6 +87,14 @@ export declare function createNodeAutoReportExporter(options?: Omit<ReportExport
87
87
  /** 独立 worker_threads 适配器;worker 入口注册自己的模板/Provider,不把函数跨线程序列化。 */
88
88
  export declare function createNodeReportExecutor(options: NodeReportExecutorOptions): ReportRuntimeExecutor;
89
89
 
90
+ export declare interface FileReportDocumentStore extends ReportDocumentStore {
91
+ close(): Promise<void>;
92
+ }
93
+
94
+ export declare interface FileReportDocumentStoreOptions extends ReportDocumentBudget {
95
+ directory: string;
96
+ }
97
+
90
98
  export declare interface FileReportJobStore extends ReportJobStore {
91
99
  close(): Promise<void>;
92
100
  }
@@ -141,6 +149,9 @@ export declare interface NodeReportExecutorOptions extends ReportWorkerOptions {
141
149
  workerOptions?: WorkerOptions_2;
142
150
  }
143
151
 
152
+ /** Exclusive-process disk reference. Pages stay on disk; manifest/page reads and appends are bounded. */
153
+ export declare function openFileReportDocumentStore(options: FileReportDocumentStoreOptions): Promise<FileReportDocumentStore>;
154
+
144
155
  /** Durable local store with one process owner; database adapters provide multi-instance atomic CAS. */
145
156
  export declare function openFileReportJobStore(options: FileReportJobStoreOptions): Promise<FileReportJobStore>;
146
157
 
@@ -294,6 +305,41 @@ declare interface ReportDiagnostic {
294
305
  target?: ReportDataTarget;
295
306
  }
296
307
 
308
+ declare interface ReportDocumentBudget {
309
+ maxDocuments?: number;
310
+ maxBytes?: number;
311
+ maxPages?: number;
312
+ maxPageBytes?: number;
313
+ maxManifestBytes?: number;
314
+ }
315
+
316
+ declare interface ReportDocumentManifest {
317
+ scope: string;
318
+ id: string;
319
+ version: string;
320
+ /** CAS token increases after each append and completion. */
321
+ revision: number;
322
+ state: "building" | "complete" | "failed";
323
+ failure?: {
324
+ code: "cancelled" | "generation";
325
+ message: string;
326
+ };
327
+ pageCount: number;
328
+ bytes: number;
329
+ plan: Omit<RenderPlan, "pages">;
330
+ metadata?: Omit<PreparedReport, "plan">;
331
+ }
332
+
333
+ declare interface ReportDocumentStore {
334
+ create(input: Pick<ReportDocumentManifest, "scope" | "id" | "version" | "plan">, signal?: AbortSignal): Promise<ReportDocumentManifest>;
335
+ append(scope: string, id: string, version: string, expectedRevision: number, page: PlanPage, signal?: AbortSignal): Promise<ReportDocumentManifest>;
336
+ complete(scope: string, id: string, version: string, expectedRevision: number, metadata?: Omit<PreparedReport, "plan">, signal?: AbortSignal): Promise<ReportDocumentManifest>;
337
+ fail(scope: string, id: string, version: string, expectedRevision: number, failure: NonNullable<ReportDocumentManifest["failure"]>): Promise<ReportDocumentManifest>;
338
+ read(scope: string, id: string, signal?: AbortSignal): Promise<ReportDocumentManifest | undefined>;
339
+ readPage(scope: string, id: string, version: string, index: number, signal?: AbortSignal): Promise<PlanPage | undefined>;
340
+ remove(scope: string, id: string, version: string, signal?: AbortSignal): Promise<boolean>;
341
+ }
342
+
297
343
  export declare interface ReportExportDecision {
298
344
  mode: "local" | "worker";
299
345
  reason: ReportExportDecisionReason;
@@ -87,6 +87,14 @@ export declare function createNodeAutoReportExporter(options?: Omit<ReportExport
87
87
  /** 独立 worker_threads 适配器;worker 入口注册自己的模板/Provider,不把函数跨线程序列化。 */
88
88
  export declare function createNodeReportExecutor(options: NodeReportExecutorOptions): ReportRuntimeExecutor;
89
89
 
90
+ export declare interface FileReportDocumentStore extends ReportDocumentStore {
91
+ close(): Promise<void>;
92
+ }
93
+
94
+ export declare interface FileReportDocumentStoreOptions extends ReportDocumentBudget {
95
+ directory: string;
96
+ }
97
+
90
98
  export declare interface FileReportJobStore extends ReportJobStore {
91
99
  close(): Promise<void>;
92
100
  }
@@ -141,6 +149,9 @@ export declare interface NodeReportExecutorOptions extends ReportWorkerOptions {
141
149
  workerOptions?: WorkerOptions_2;
142
150
  }
143
151
 
152
+ /** Exclusive-process disk reference. Pages stay on disk; manifest/page reads and appends are bounded. */
153
+ export declare function openFileReportDocumentStore(options: FileReportDocumentStoreOptions): Promise<FileReportDocumentStore>;
154
+
144
155
  /** Durable local store with one process owner; database adapters provide multi-instance atomic CAS. */
145
156
  export declare function openFileReportJobStore(options: FileReportJobStoreOptions): Promise<FileReportJobStore>;
146
157
 
@@ -294,6 +305,41 @@ declare interface ReportDiagnostic {
294
305
  target?: ReportDataTarget;
295
306
  }
296
307
 
308
+ declare interface ReportDocumentBudget {
309
+ maxDocuments?: number;
310
+ maxBytes?: number;
311
+ maxPages?: number;
312
+ maxPageBytes?: number;
313
+ maxManifestBytes?: number;
314
+ }
315
+
316
+ declare interface ReportDocumentManifest {
317
+ scope: string;
318
+ id: string;
319
+ version: string;
320
+ /** CAS token increases after each append and completion. */
321
+ revision: number;
322
+ state: "building" | "complete" | "failed";
323
+ failure?: {
324
+ code: "cancelled" | "generation";
325
+ message: string;
326
+ };
327
+ pageCount: number;
328
+ bytes: number;
329
+ plan: Omit<RenderPlan, "pages">;
330
+ metadata?: Omit<PreparedReport, "plan">;
331
+ }
332
+
333
+ declare interface ReportDocumentStore {
334
+ create(input: Pick<ReportDocumentManifest, "scope" | "id" | "version" | "plan">, signal?: AbortSignal): Promise<ReportDocumentManifest>;
335
+ append(scope: string, id: string, version: string, expectedRevision: number, page: PlanPage, signal?: AbortSignal): Promise<ReportDocumentManifest>;
336
+ complete(scope: string, id: string, version: string, expectedRevision: number, metadata?: Omit<PreparedReport, "plan">, signal?: AbortSignal): Promise<ReportDocumentManifest>;
337
+ fail(scope: string, id: string, version: string, expectedRevision: number, failure: NonNullable<ReportDocumentManifest["failure"]>): Promise<ReportDocumentManifest>;
338
+ read(scope: string, id: string, signal?: AbortSignal): Promise<ReportDocumentManifest | undefined>;
339
+ readPage(scope: string, id: string, version: string, index: number, signal?: AbortSignal): Promise<PlanPage | undefined>;
340
+ remove(scope: string, id: string, version: string, signal?: AbortSignal): Promise<boolean>;
341
+ }
342
+
297
343
  export declare interface ReportExportDecision {
298
344
  mode: "local" | "worker";
299
345
  reason: ReportExportDecisionReason;