ooxml-core 0.9.0 → 0.10.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 (286) hide show
  1. package/README.md +14 -13
  2. package/dist/crypto/aes-ecb.d.ts +13 -0
  3. package/dist/crypto/aes-ecb.d.ts.map +1 -0
  4. package/dist/crypto/decrypt.d.ts +63 -0
  5. package/dist/crypto/decrypt.d.ts.map +1 -0
  6. package/dist/crypto/detect.d.ts +56 -0
  7. package/dist/crypto/detect.d.ts.map +1 -0
  8. package/dist/crypto/encrypt.d.ts +27 -0
  9. package/dist/crypto/encrypt.d.ts.map +1 -0
  10. package/dist/crypto/encryption-info-write.d.ts +46 -0
  11. package/dist/crypto/encryption-info-write.d.ts.map +1 -0
  12. package/dist/crypto/encryption-info.d.ts +22 -0
  13. package/dist/crypto/encryption-info.d.ts.map +1 -0
  14. package/dist/crypto/errors.d.ts +39 -0
  15. package/dist/crypto/errors.d.ts.map +1 -0
  16. package/dist/crypto/index.cjs +1805 -0
  17. package/dist/crypto/index.d.ts +26 -0
  18. package/dist/crypto/index.d.ts.map +1 -0
  19. package/dist/crypto/index.mjs +1774 -0
  20. package/dist/crypto/key-derivation.d.ts +73 -0
  21. package/dist/crypto/key-derivation.d.ts.map +1 -0
  22. package/dist/crypto/types.d.ts +104 -0
  23. package/dist/crypto/types.d.ts.map +1 -0
  24. package/dist/docx/embedded.cjs +2 -0
  25. package/dist/docx/embedded.mjs +2 -0
  26. package/dist/docx/index.cjs +2 -0
  27. package/dist/docx/index.mjs +2 -0
  28. package/dist/docx/load/detect.d.ts +14 -2
  29. package/dist/docx/load/detect.d.ts.map +1 -1
  30. package/dist/docx/load/index.cjs +8995 -7728
  31. package/dist/docx/load/index.d.ts +3 -1
  32. package/dist/docx/load/index.d.ts.map +1 -1
  33. package/dist/docx/load/index.mjs +8990 -7729
  34. package/dist/docx/load/legacy-doc.d.ts.map +1 -1
  35. package/dist/index.cjs +749 -19
  36. package/dist/index.mjs +749 -19
  37. package/dist/opc/index.cjs +797 -1
  38. package/dist/opc/index.d.ts +2 -0
  39. package/dist/opc/index.d.ts.map +1 -1
  40. package/dist/opc/index.mjs +784 -3
  41. package/dist/opc/properties/app.d.ts +10 -0
  42. package/dist/opc/properties/app.d.ts.map +1 -0
  43. package/dist/opc/properties/core.d.ts +13 -0
  44. package/dist/opc/properties/core.d.ts.map +1 -0
  45. package/dist/opc/properties/custom.d.ts +15 -0
  46. package/dist/opc/properties/custom.d.ts.map +1 -0
  47. package/dist/opc/properties/index.d.ts +5 -0
  48. package/dist/opc/properties/index.d.ts.map +1 -0
  49. package/dist/opc/properties/types.d.ts +114 -0
  50. package/dist/opc/properties/types.d.ts.map +1 -0
  51. package/dist/opc/relationship-types.d.ts +1 -0
  52. package/dist/opc/relationship-types.d.ts.map +1 -1
  53. package/dist/opc/safe-href.d.ts +34 -0
  54. package/dist/opc/safe-href.d.ts.map +1 -1
  55. package/dist/opc/signature/constants.d.ts +42 -0
  56. package/dist/opc/signature/constants.d.ts.map +1 -0
  57. package/dist/opc/signature/detection.d.ts +97 -0
  58. package/dist/opc/signature/detection.d.ts.map +1 -0
  59. package/dist/opc/signature/digest.d.ts +16 -0
  60. package/dist/opc/signature/digest.d.ts.map +1 -0
  61. package/dist/opc/signature/index.d.ts +8 -0
  62. package/dist/opc/signature/index.d.ts.map +1 -0
  63. package/dist/opc/signature/inspection-status.d.ts +24 -0
  64. package/dist/opc/signature/inspection-status.d.ts.map +1 -0
  65. package/dist/opc/signature/reference-utils.d.ts +12 -0
  66. package/dist/opc/signature/reference-utils.d.ts.map +1 -0
  67. package/dist/opc/signature/types.d.ts +90 -0
  68. package/dist/opc/signature/types.d.ts.map +1 -0
  69. package/dist/opc/signature/xml-utils.d.ts +35 -0
  70. package/dist/opc/signature/xml-utils.d.ts.map +1 -0
  71. package/dist/pptx/chunks/{index-CojJtI77.d.ts → index-BWUBPGgv.d.ts} +9 -11
  72. package/dist/pptx/chunks/index-BWUBPGgv.d.ts.map +1 -0
  73. package/dist/pptx/chunks/{signature-inspection-status-Bh2oap7B.d.ts → inspection-status-B2E-jSpG.d.ts} +8 -8
  74. package/dist/pptx/chunks/inspection-status-B2E-jSpG.d.ts.map +1 -0
  75. package/dist/pptx/cli/index.cjs +1409 -895
  76. package/dist/pptx/cli/index.mjs +1409 -895
  77. package/dist/pptx/converter/index.d.ts +1 -1
  78. package/dist/pptx/index.cjs +1933 -1391
  79. package/dist/pptx/index.d.ts +20 -67
  80. package/dist/pptx/index.d.ts.map +1 -1
  81. package/dist/pptx/index.mjs +1933 -1391
  82. package/dist/pptx/signature-node/index.cjs +5 -5
  83. package/dist/pptx/signature-node/index.d.ts +1 -1
  84. package/dist/pptx/signature-node/index.mjs +5 -5
  85. package/dist/visio/edit-master-index.d.ts +10 -0
  86. package/dist/visio/edit-master-index.d.ts.map +1 -0
  87. package/dist/visio/edit-master-scope.d.ts +7 -0
  88. package/dist/visio/edit-master-scope.d.ts.map +1 -0
  89. package/dist/visio/edit-scope.d.ts.map +1 -1
  90. package/dist/visio/formula-arithmetic.d.ts +8 -0
  91. package/dist/visio/formula-arithmetic.d.ts.map +1 -0
  92. package/dist/visio/formula-evaluate.d.ts.map +1 -1
  93. package/dist/visio/formula-master.d.ts +13 -0
  94. package/dist/visio/formula-master.d.ts.map +1 -0
  95. package/dist/visio/formula-numeric-functions.d.ts +8 -0
  96. package/dist/visio/formula-numeric-functions.d.ts.map +1 -0
  97. package/dist/visio/formula.d.ts +1 -1
  98. package/dist/visio/formula.d.ts.map +1 -1
  99. package/dist/visio/index.cjs +540 -61
  100. package/dist/visio/index.mjs +540 -61
  101. package/dist/xlsx/edit/annotations.d.ts +5 -1
  102. package/dist/xlsx/edit/annotations.d.ts.map +1 -1
  103. package/dist/xlsx/edit/cell-values.d.ts +7 -2
  104. package/dist/xlsx/edit/cell-values.d.ts.map +1 -1
  105. package/dist/xlsx/edit/clipboard.d.ts.map +1 -1
  106. package/dist/xlsx/edit/doc-properties.d.ts +14 -0
  107. package/dist/xlsx/edit/doc-properties.d.ts.map +1 -0
  108. package/dist/xlsx/edit/fill-series.d.ts.map +1 -1
  109. package/dist/xlsx/edit/find.d.ts +2 -1
  110. package/dist/xlsx/edit/find.d.ts.map +1 -1
  111. package/dist/xlsx/edit/format-lines.d.ts +22 -0
  112. package/dist/xlsx/edit/format-lines.d.ts.map +1 -0
  113. package/dist/xlsx/edit/format.d.ts +2 -1
  114. package/dist/xlsx/edit/format.d.ts.map +1 -1
  115. package/dist/xlsx/edit/history-refs.d.ts +51 -0
  116. package/dist/xlsx/edit/history-refs.d.ts.map +1 -0
  117. package/dist/xlsx/edit/history.d.ts +40 -5
  118. package/dist/xlsx/edit/history.d.ts.map +1 -1
  119. package/dist/xlsx/edit/index.d.ts +3 -0
  120. package/dist/xlsx/edit/index.d.ts.map +1 -1
  121. package/dist/xlsx/edit/input-text.d.ts +13 -0
  122. package/dist/xlsx/edit/input-text.d.ts.map +1 -0
  123. package/dist/xlsx/edit/merge.d.ts +10 -2
  124. package/dist/xlsx/edit/merge.d.ts.map +1 -1
  125. package/dist/xlsx/edit/session.d.ts.map +1 -1
  126. package/dist/xlsx/edit/sheets.d.ts.map +1 -1
  127. package/dist/xlsx/edit/shift-formulas.d.ts +2 -1
  128. package/dist/xlsx/edit/shift-formulas.d.ts.map +1 -1
  129. package/dist/xlsx/edit/shift-preserved.d.ts +17 -0
  130. package/dist/xlsx/edit/shift-preserved.d.ts.map +1 -0
  131. package/dist/xlsx/edit/shift-sheet.d.ts +2 -2
  132. package/dist/xlsx/edit/shift-sheet.d.ts.map +1 -1
  133. package/dist/xlsx/edit/structure.d.ts.map +1 -1
  134. package/dist/xlsx/edit/types.d.ts +7 -0
  135. package/dist/xlsx/edit/types.d.ts.map +1 -1
  136. package/dist/xlsx/edit/validation-list.d.ts +24 -0
  137. package/dist/xlsx/edit/validation-list.d.ts.map +1 -0
  138. package/dist/xlsx/edit/validation.d.ts +2 -1
  139. package/dist/xlsx/edit/validation.d.ts.map +1 -1
  140. package/dist/xlsx/formula/area-index.d.ts +18 -0
  141. package/dist/xlsx/formula/area-index.d.ts.map +1 -0
  142. package/dist/xlsx/formula/array-context.d.ts.map +1 -1
  143. package/dist/xlsx/formula/ast.d.ts +5 -1
  144. package/dist/xlsx/formula/ast.d.ts.map +1 -1
  145. package/dist/xlsx/formula/call.d.ts.map +1 -1
  146. package/dist/xlsx/formula/coerce.d.ts.map +1 -1
  147. package/dist/xlsx/formula/context.d.ts +5 -0
  148. package/dist/xlsx/formula/context.d.ts.map +1 -1
  149. package/dist/xlsx/formula/date-serial.d.ts +11 -4
  150. package/dist/xlsx/formula/date-serial.d.ts.map +1 -1
  151. package/dist/xlsx/formula/engine-core.d.ts +6 -0
  152. package/dist/xlsx/formula/engine-core.d.ts.map +1 -1
  153. package/dist/xlsx/formula/engine-host.d.ts +35 -3
  154. package/dist/xlsx/formula/engine-host.d.ts.map +1 -1
  155. package/dist/xlsx/formula/engine-util.d.ts.map +1 -1
  156. package/dist/xlsx/formula/engine.d.ts.map +1 -1
  157. package/dist/xlsx/formula/evaluator.d.ts.map +1 -1
  158. package/dist/xlsx/formula/functions/array-shape.d.ts.map +1 -1
  159. package/dist/xlsx/formula/functions/array.d.ts.map +1 -1
  160. package/dist/xlsx/formula/functions/criteria-index.d.ts +12 -0
  161. package/dist/xlsx/formula/functions/criteria-index.d.ts.map +1 -0
  162. package/dist/xlsx/formula/functions/criteria.d.ts +24 -16
  163. package/dist/xlsx/formula/functions/criteria.d.ts.map +1 -1
  164. package/dist/xlsx/formula/functions/date-calc.d.ts +4 -0
  165. package/dist/xlsx/formula/functions/date-calc.d.ts.map +1 -1
  166. package/dist/xlsx/formula/functions/depreciation.d.ts.map +1 -1
  167. package/dist/xlsx/formula/functions/financial.d.ts.map +1 -1
  168. package/dist/xlsx/formula/functions/helpers.d.ts.map +1 -1
  169. package/dist/xlsx/formula/functions/logical.d.ts.map +1 -1
  170. package/dist/xlsx/formula/functions/lookup-core.d.ts +14 -2
  171. package/dist/xlsx/formula/functions/lookup-core.d.ts.map +1 -1
  172. package/dist/xlsx/formula/functions/lookup.d.ts.map +1 -1
  173. package/dist/xlsx/formula/functions/math-mod.d.ts +8 -0
  174. package/dist/xlsx/formula/functions/math-mod.d.ts.map +1 -0
  175. package/dist/xlsx/formula/functions/math-sum.d.ts.map +1 -1
  176. package/dist/xlsx/formula/functions/math.d.ts.map +1 -1
  177. package/dist/xlsx/formula/functions/statistical-count.d.ts.map +1 -1
  178. package/dist/xlsx/formula/functions/statistical.d.ts.map +1 -1
  179. package/dist/xlsx/formula/functions/stats-core.d.ts +6 -0
  180. package/dist/xlsx/formula/functions/stats-core.d.ts.map +1 -1
  181. package/dist/xlsx/formula/functions/text-case.d.ts +14 -0
  182. package/dist/xlsx/formula/functions/text-case.d.ts.map +1 -0
  183. package/dist/xlsx/formula/functions/text.d.ts.map +1 -1
  184. package/dist/xlsx/formula/functions/workdays.d.ts.map +1 -1
  185. package/dist/xlsx/formula/graph-index.d.ts +15 -0
  186. package/dist/xlsx/formula/graph-index.d.ts.map +1 -0
  187. package/dist/xlsx/formula/graph.d.ts +13 -18
  188. package/dist/xlsx/formula/graph.d.ts.map +1 -1
  189. package/dist/xlsx/formula/operators.d.ts +9 -0
  190. package/dist/xlsx/formula/operators.d.ts.map +1 -1
  191. package/dist/xlsx/formula/parser.d.ts +2 -0
  192. package/dist/xlsx/formula/parser.d.ts.map +1 -1
  193. package/dist/xlsx/formula/references.d.ts +4 -1
  194. package/dist/xlsx/formula/references.d.ts.map +1 -1
  195. package/dist/xlsx/formula/text-number.d.ts.map +1 -1
  196. package/dist/xlsx/formula/transform.d.ts.map +1 -1
  197. package/dist/xlsx/formula/values.d.ts +44 -3
  198. package/dist/xlsx/formula/values.d.ts.map +1 -1
  199. package/dist/xlsx/index.cjs +4698 -1322
  200. package/dist/xlsx/index.mjs +4688 -1323
  201. package/dist/xlsx/layout/anchors.d.ts +47 -0
  202. package/dist/xlsx/layout/anchors.d.ts.map +1 -0
  203. package/dist/xlsx/layout/cf-evaluator.d.ts +1 -2
  204. package/dist/xlsx/layout/cf-evaluator.d.ts.map +1 -1
  205. package/dist/xlsx/layout/cf-helpers.d.ts +8 -1
  206. package/dist/xlsx/layout/cf-helpers.d.ts.map +1 -1
  207. package/dist/xlsx/layout/index.d.ts +1 -0
  208. package/dist/xlsx/layout/index.d.ts.map +1 -1
  209. package/dist/xlsx/load/csv.d.ts +24 -3
  210. package/dist/xlsx/load/csv.d.ts.map +1 -1
  211. package/dist/xlsx/load/detect.d.ts +39 -7
  212. package/dist/xlsx/load/detect.d.ts.map +1 -1
  213. package/dist/xlsx/load/errors.d.ts +10 -0
  214. package/dist/xlsx/load/errors.d.ts.map +1 -0
  215. package/dist/xlsx/load/index.cjs +16220 -12163
  216. package/dist/xlsx/load/index.d.ts +5 -2
  217. package/dist/xlsx/load/index.d.ts.map +1 -1
  218. package/dist/xlsx/load/index.mjs +16213 -12164
  219. package/dist/xlsx/load/text-decode.d.ts +7 -0
  220. package/dist/xlsx/load/text-decode.d.ts.map +1 -0
  221. package/dist/xlsx/model.d.ts +121 -17
  222. package/dist/xlsx/model.d.ts.map +1 -1
  223. package/dist/xlsx/numfmt/date.d.ts +7 -0
  224. package/dist/xlsx/numfmt/date.d.ts.map +1 -1
  225. package/dist/xlsx/numfmt/format.d.ts.map +1 -1
  226. package/dist/xlsx/numfmt/fraction.d.ts +5 -1
  227. package/dist/xlsx/numfmt/fraction.d.ts.map +1 -1
  228. package/dist/xlsx/numfmt/input-date.d.ts.map +1 -1
  229. package/dist/xlsx/numfmt/input.d.ts.map +1 -1
  230. package/dist/xlsx/numfmt/number.d.ts.map +1 -1
  231. package/dist/xlsx/read/conditional.d.ts.map +1 -1
  232. package/dist/xlsx/read/drawing.d.ts +2 -2
  233. package/dist/xlsx/read/drawing.d.ts.map +1 -1
  234. package/dist/xlsx/read/load.d.ts.map +1 -1
  235. package/dist/xlsx/read/package.d.ts +18 -2
  236. package/dist/xlsx/read/package.d.ts.map +1 -1
  237. package/dist/xlsx/read/sheet-data.d.ts.map +1 -1
  238. package/dist/xlsx/read/sheet-props.d.ts +15 -1
  239. package/dist/xlsx/read/sheet-props.d.ts.map +1 -1
  240. package/dist/xlsx/read/smart-art.d.ts +12 -0
  241. package/dist/xlsx/read/smart-art.d.ts.map +1 -0
  242. package/dist/xlsx/read/styles.d.ts.map +1 -1
  243. package/dist/xlsx/read/workbook-part.d.ts +5 -2
  244. package/dist/xlsx/read/workbook-part.d.ts.map +1 -1
  245. package/dist/xlsx/read/worksheet.d.ts.map +1 -1
  246. package/dist/xlsx/write/attr-merge.d.ts +10 -0
  247. package/dist/xlsx/write/attr-merge.d.ts.map +1 -0
  248. package/dist/xlsx/write/carried-refs.d.ts +61 -0
  249. package/dist/xlsx/write/carried-refs.d.ts.map +1 -0
  250. package/dist/xlsx/write/comments.d.ts +12 -2
  251. package/dist/xlsx/write/comments.d.ts.map +1 -1
  252. package/dist/xlsx/write/conditional.d.ts.map +1 -1
  253. package/dist/xlsx/write/doc-props.d.ts +30 -0
  254. package/dist/xlsx/write/doc-props.d.ts.map +1 -0
  255. package/dist/xlsx/write/drawing.d.ts +5 -0
  256. package/dist/xlsx/write/drawing.d.ts.map +1 -1
  257. package/dist/xlsx/write/metadata.d.ts +23 -0
  258. package/dist/xlsx/write/metadata.d.ts.map +1 -0
  259. package/dist/xlsx/write/package-writer.d.ts +6 -0
  260. package/dist/xlsx/write/package-writer.d.ts.map +1 -1
  261. package/dist/xlsx/write/page-setup.d.ts +8 -0
  262. package/dist/xlsx/write/page-setup.d.ts.map +1 -0
  263. package/dist/xlsx/write/save.d.ts.map +1 -1
  264. package/dist/xlsx/write/sheet-data.d.ts +8 -0
  265. package/dist/xlsx/write/sheet-data.d.ts.map +1 -1
  266. package/dist/xlsx/write/sheet-parts.d.ts +6 -0
  267. package/dist/xlsx/write/sheet-parts.d.ts.map +1 -1
  268. package/dist/xlsx/write/sheet-props.d.ts +0 -6
  269. package/dist/xlsx/write/sheet-props.d.ts.map +1 -1
  270. package/dist/xlsx/write/styles.d.ts.map +1 -1
  271. package/dist/xlsx/write/table-patch.d.ts +12 -0
  272. package/dist/xlsx/write/table-patch.d.ts.map +1 -0
  273. package/dist/xlsx/write/tables.d.ts +9 -0
  274. package/dist/xlsx/write/tables.d.ts.map +1 -1
  275. package/dist/xlsx/write/vml-ids.d.ts +29 -0
  276. package/dist/xlsx/write/vml-ids.d.ts.map +1 -0
  277. package/dist/xlsx/write/workbook-part.d.ts +1 -4
  278. package/dist/xlsx/write/workbook-part.d.ts.map +1 -1
  279. package/dist/xlsx/write/worksheet.d.ts.map +1 -1
  280. package/dist/xml/index.cjs +4 -0
  281. package/dist/xml/index.mjs +4 -0
  282. package/dist/xml/namespaces.d.ts +4 -0
  283. package/dist/xml/namespaces.d.ts.map +1 -1
  284. package/package.json +6 -1
  285. package/dist/pptx/chunks/index-CojJtI77.d.ts.map +0 -1
  286. package/dist/pptx/chunks/signature-inspection-status-Bh2oap7B.d.ts.map +0 -1
package/dist/index.cjs CHANGED
@@ -700,7 +700,12 @@ function resolveDiagramLayoutCategory(uniqueId, categories) {
700
700
  // src/opc/index.ts
701
701
  var opc_exports = {};
702
702
  __export(opc_exports, {
703
+ CORE_PROPERTY_FIELDS: () => CORE_PROPERTY_FIELDS,
704
+ CUSTOM_PROPERTIES_FMTID: () => CUSTOM_PROPERTIES_FMTID,
705
+ PROPERTY_CONTENT_TYPES: () => PROPERTY_CONTENT_TYPES,
706
+ PROPERTY_PART_NAMES: () => PROPERTY_PART_NAMES,
703
707
  RELATIONSHIP_TYPES: () => RELATIONSHIP_TYPES,
708
+ allocateCustomPropertyIds: () => allocateCustomPropertyIds,
704
709
  buildContentTypesXml: () => buildContentTypesXml,
705
710
  buildRelationshipsXml: () => buildRelationshipsXml,
706
711
  contentTypeForPart: () => contentTypeForPart,
@@ -709,12 +714,22 @@ __export(opc_exports, {
709
714
  ensureRelationship: () => ensureRelationship,
710
715
  findOfficeDocumentPart: () => findOfficeDocumentPart,
711
716
  getRelationshipId: () => getRelationshipId,
717
+ hyperlinkPolicy: () => hyperlinkPolicy,
718
+ isOpenableHyperlinkHref: () => isOpenableHyperlinkHref,
712
719
  isSafeHyperlinkHref: () => isSafeHyperlinkHref,
720
+ isStorableHyperlinkHref: () => isStorableHyperlinkHref,
713
721
  nextRelationshipId: () => nextRelationshipId,
722
+ parseAppProperties: () => parseAppProperties,
714
723
  parseContentTypes: () => parseContentTypes,
724
+ parseCoreProperties: () => parseCoreProperties,
725
+ parseCustomProperties: () => parseCustomProperties,
715
726
  parseRelationships: () => parseRelationships,
716
727
  relationshipsPartFor: () => relationshipsPartFor,
717
- resolvePartPath: () => resolvePartPath
728
+ resolvePartPath: () => resolvePartPath,
729
+ signature: () => signature_exports,
730
+ writeAppProperties: () => writeAppProperties,
731
+ writeCoreProperties: () => writeCoreProperties,
732
+ writeCustomProperties: () => writeCustomProperties
718
733
  });
719
734
 
720
735
  // src/opc/relationship-types.ts
@@ -748,6 +763,7 @@ var RELATIONSHIP_TYPES = {
748
763
  diagramDrawing: "http://schemas.microsoft.com/office/2007/relationships/diagramDrawing",
749
764
  coreProperties: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",
750
765
  extendedProperties: `${BASE}/extended-properties`,
766
+ customProperties: `${BASE}/custom-properties`,
751
767
  customXml: `${BASE}/customXml`,
752
768
  worksheet: `${BASE}/worksheet`,
753
769
  chartsheet: `${BASE}/chartsheet`,
@@ -843,6 +859,10 @@ var NS = {
843
859
  extendedProperties: "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",
844
860
  /** Dublin Core terms (`dcterms:created`). */
845
861
  dcterms: "http://purl.org/dc/terms/",
862
+ /** Custom document properties (`docProps/custom.xml`). */
863
+ customProperties: "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",
864
+ /** Document property variant types (`vt:lpwstr`, `vt:vector`). */
865
+ vt: "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",
846
866
  /** XML itself (`xml:space`). */
847
867
  xml: "http://www.w3.org/XML/1998/namespace"
848
868
  };
@@ -1021,6 +1041,716 @@ function isSafeHyperlinkHref(href) {
1021
1041
  const scheme = /^([a-z][a-z0-9+.-]*:)/i.exec(href.trim())?.[1];
1022
1042
  return scheme !== void 0 && SAFE_SCHEMES.has(scheme.toLowerCase());
1023
1043
  }
1044
+ var OPEN_SCHEMES = /* @__PURE__ */ new Set(["http", "https", "mailto"]);
1045
+ var STORE_SCHEMES = /* @__PURE__ */ new Set([...OPEN_SCHEMES, "ftp", "file"]);
1046
+ var SCRIPT_SCHEMES = /* @__PURE__ */ new Set([
1047
+ "javascript",
1048
+ "vbscript",
1049
+ "livescript",
1050
+ "jscript",
1051
+ "mocha",
1052
+ "data",
1053
+ "mhtml",
1054
+ "ms-its",
1055
+ "mk",
1056
+ "x-javascript",
1057
+ "blob"
1058
+ ]);
1059
+ var IGNORABLE = new RegExp(
1060
+ "[\\u0000-\\u0020\\u007f\\u00ad\\u200b-\\u200f\\u202a-\\u202e\\u2060-\\u2064\\ufeff]",
1061
+ "gu"
1062
+ );
1063
+ var CONTROL = new RegExp("[\\u0000-\\u001f\\u007f]", "u");
1064
+ var SCHEME = /^([a-z][a-z0-9+.-]*):/;
1065
+ var STORE_ONLY = { store: true, open: false, reason: "not-openable" };
1066
+ var reject = (reason) => ({
1067
+ store: false,
1068
+ open: false,
1069
+ reason
1070
+ });
1071
+ function hyperlinkPolicy(href) {
1072
+ if (typeof href !== "string") return reject("empty");
1073
+ const trimmed = href.trim();
1074
+ const normalized = trimmed.replace(IGNORABLE, "").toLowerCase();
1075
+ if (normalized.length === 0) return reject("empty");
1076
+ const scheme = SCHEME.exec(normalized)?.[1];
1077
+ if (scheme !== void 0 && SCRIPT_SCHEMES.has(scheme)) return reject("script-scheme");
1078
+ if (scheme !== void 0 && !trimmed.toLowerCase().startsWith(`${scheme}:`))
1079
+ return reject("obfuscated-scheme");
1080
+ if (CONTROL.test(trimmed)) return reject("control-characters");
1081
+ if (scheme === void 0 || scheme.length === 1) return STORE_ONLY;
1082
+ if (OPEN_SCHEMES.has(scheme)) return { store: true, open: true };
1083
+ if (STORE_SCHEMES.has(scheme)) return STORE_ONLY;
1084
+ return reject("unsupported-scheme");
1085
+ }
1086
+ function isStorableHyperlinkHref(href) {
1087
+ return hyperlinkPolicy(href).store;
1088
+ }
1089
+ function isOpenableHyperlinkHref(href) {
1090
+ return hyperlinkPolicy(href).open;
1091
+ }
1092
+
1093
+ // src/opc/properties/types.ts
1094
+ var CUSTOM_PROPERTIES_FMTID = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}";
1095
+ var PROPERTY_PART_NAMES = {
1096
+ core: "docProps/core.xml",
1097
+ app: "docProps/app.xml",
1098
+ custom: "docProps/custom.xml"
1099
+ };
1100
+ var PROPERTY_CONTENT_TYPES = {
1101
+ core: "application/vnd.openxmlformats-package.core-properties+xml",
1102
+ app: "application/vnd.openxmlformats-officedocument.extended-properties+xml",
1103
+ custom: "application/vnd.openxmlformats-officedocument.custom-properties+xml"
1104
+ };
1105
+
1106
+ // src/opc/properties/core.ts
1107
+ var XSI = "http://www.w3.org/2001/XMLSchema-instance";
1108
+ var FIELDS = [
1109
+ ["title", "dc", false],
1110
+ ["subject", "dc", false],
1111
+ ["creator", "dc", false],
1112
+ ["keywords", "cp", false],
1113
+ ["description", "dc", false],
1114
+ ["lastModifiedBy", "cp", false],
1115
+ ["created", "dcterms", true],
1116
+ ["modified", "dcterms", true],
1117
+ ["category", "cp", false],
1118
+ ["contentStatus", "cp", false],
1119
+ ["revision", "cp", false],
1120
+ ["language", "dc", false],
1121
+ ["identifier", "dc", false],
1122
+ ["lastPrinted", "cp", false],
1123
+ ["version", "cp", false]
1124
+ ];
1125
+ var CORE_PROPERTY_FIELDS = FIELDS.map(([field]) => field);
1126
+ var EMPTY_CORE = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1127
+ <cp:coreProperties xmlns:cp="${NS.cp}" xmlns:dc="${NS.dc}" xmlns:dcterms="${NS.dcterms}" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="${XSI}"/>`;
1128
+ function parseCoreProperties(xml) {
1129
+ const out = {};
1130
+ if (!xml) return out;
1131
+ const root = parseXml(xml, { label: "core properties" }).documentElement;
1132
+ for (const [field, prefix] of FIELDS) {
1133
+ const text = first(root, field, NS[prefix])?.textContent ?? "";
1134
+ if (text !== "") out[field] = text;
1135
+ }
1136
+ return out;
1137
+ }
1138
+ function writeCoreProperties(props, sourceXml) {
1139
+ const doc = parseXml(sourceXml ?? EMPTY_CORE, { label: "core properties" });
1140
+ const root = doc.documentElement;
1141
+ for (const [field, prefix, isDate] of FIELDS) {
1142
+ const ns = NS[prefix];
1143
+ const value = props[field];
1144
+ let element = first(root, field, ns);
1145
+ if (value === void 0 || value === "") {
1146
+ if (element && (element.textContent ?? "") !== "") root.removeChild(element);
1147
+ continue;
1148
+ }
1149
+ if (!element) {
1150
+ element = doc.createElementNS(ns, `${prefix}:${field}`);
1151
+ if (isDate) element.setAttributeNS(XSI, "xsi:type", "dcterms:W3CDTF");
1152
+ root.appendChild(element);
1153
+ }
1154
+ if (element.textContent !== value) element.textContent = value;
1155
+ }
1156
+ const out = buildXml(doc);
1157
+ return out.startsWith("<?xml") ? out : `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1158
+ ${out}`;
1159
+ }
1160
+
1161
+ // src/opc/properties/app.ts
1162
+ var FIELDS2 = [
1163
+ ["template", "Template", "text"],
1164
+ ["totalTime", "TotalTime", "int"],
1165
+ ["application", "Application", "text"],
1166
+ ["docSecurity", "DocSecurity", "int"],
1167
+ ["scaleCrop", "ScaleCrop", "bool"],
1168
+ ["headingPairs", "HeadingPairs", "pairs"],
1169
+ ["titlesOfParts", "TitlesOfParts", "titles"],
1170
+ ["manager", "Manager", "text"],
1171
+ ["company", "Company", "text"],
1172
+ ["linksUpToDate", "LinksUpToDate", "bool"],
1173
+ ["sharedDoc", "SharedDoc", "bool"],
1174
+ ["hyperlinkBase", "HyperlinkBase", "text"],
1175
+ ["hyperlinksChanged", "HyperlinksChanged", "bool"],
1176
+ ["appVersion", "AppVersion", "text"]
1177
+ ];
1178
+ var EMPTY_APP = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1179
+ <Properties xmlns="${NS.extendedProperties}" xmlns:vt="${NS.vt}"/>`;
1180
+ function vectorItems(element) {
1181
+ const vector = first(element, "vector", NS.vt);
1182
+ return vector ? elements(vector) : [];
1183
+ }
1184
+ function readPairs(element) {
1185
+ const variants = vectorItems(element).map((variant) => elements(variant)[0]);
1186
+ const out = [];
1187
+ for (let i = 0; i + 1 < variants.length; i += 2) {
1188
+ const name = variants[i]?.textContent ?? "";
1189
+ const count = Number.parseInt(variants[i + 1]?.textContent ?? "", 10);
1190
+ out.push({ name, count: Number.isFinite(count) ? count : 0 });
1191
+ }
1192
+ return out;
1193
+ }
1194
+ function readField(element, kind) {
1195
+ const text = element.textContent ?? "";
1196
+ if (kind === "pairs") return readPairs(element);
1197
+ if (kind === "titles") return vectorItems(element).map((item) => item.textContent ?? "");
1198
+ if (kind === "bool") return text.trim() === "true" || text.trim() === "1";
1199
+ if (kind === "int") {
1200
+ const value = Number.parseInt(text, 10);
1201
+ return Number.isFinite(value) ? value : void 0;
1202
+ }
1203
+ return text === "" ? void 0 : text;
1204
+ }
1205
+ function parseAppProperties(xml) {
1206
+ const out = {};
1207
+ if (!xml) return out;
1208
+ const root = parseXml(xml, { label: "app properties" }).documentElement;
1209
+ for (const [field, local, kind] of FIELDS2) {
1210
+ const element = first(root, local, NS.extendedProperties);
1211
+ if (!element) continue;
1212
+ const value = readField(element, kind);
1213
+ if (value !== void 0) out[field] = value;
1214
+ }
1215
+ return out;
1216
+ }
1217
+ var same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
1218
+ function fill(doc, element, kind, value) {
1219
+ while (element.firstChild) element.removeChild(element.firstChild);
1220
+ const vt = (local, text) => {
1221
+ const node = doc.createElementNS(NS.vt, `vt:${local}`);
1222
+ if (text !== void 0) node.textContent = text;
1223
+ return node;
1224
+ };
1225
+ if (kind === "pairs" || kind === "titles") {
1226
+ const items = kind === "pairs" ? value.flatMap((pair) => [
1227
+ vt("lpstr", pair.name),
1228
+ vt("i4", String(Math.trunc(pair.count)))
1229
+ ]) : value.map((title) => vt("lpstr", title));
1230
+ const vector = vt("vector");
1231
+ vector.setAttribute("size", String(items.length));
1232
+ vector.setAttribute("baseType", kind === "pairs" ? "variant" : "lpstr");
1233
+ for (const item of items) {
1234
+ if (kind === "pairs") {
1235
+ const variant = vt("variant");
1236
+ variant.appendChild(item);
1237
+ vector.appendChild(variant);
1238
+ } else vector.appendChild(item);
1239
+ }
1240
+ element.appendChild(vector);
1241
+ return;
1242
+ }
1243
+ element.textContent = kind === "bool" ? value ? "true" : "false" : String(value);
1244
+ }
1245
+ function writeAppProperties(props, sourceXml) {
1246
+ const doc = parseXml(sourceXml ?? EMPTY_APP, { label: "app properties" });
1247
+ const root = doc.documentElement;
1248
+ const prior = parseAppProperties(sourceXml);
1249
+ FIELDS2.forEach(([field, local, kind], index) => {
1250
+ const value = props[field];
1251
+ const existing = first(root, local, NS.extendedProperties);
1252
+ if (value === void 0 || kind === "text" && value === "") {
1253
+ if (existing && (existing.textContent ?? "") !== "") root.removeChild(existing);
1254
+ return;
1255
+ }
1256
+ if (existing && same(prior[field], value)) return;
1257
+ let element = existing;
1258
+ if (!element) {
1259
+ element = doc.createElementNS(NS.extendedProperties, local);
1260
+ const next = FIELDS2.slice(index + 1).map(([, name]) => first(root, name, NS.extendedProperties)).find((node) => node !== void 0);
1261
+ root.insertBefore(element, next ?? null);
1262
+ }
1263
+ fill(doc, element, kind, value);
1264
+ });
1265
+ const out = buildXml(doc);
1266
+ return out.startsWith("<?xml") ? out : `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1267
+ ${out}`;
1268
+ }
1269
+
1270
+ // src/opc/properties/custom.ts
1271
+ var escape = (text, attribute = false) => {
1272
+ const out = text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
1273
+ return attribute ? out.replace(/"/g, "&quot;") : out;
1274
+ };
1275
+ var isVt = (element) => element.namespaceURI === NS.vt || element.prefix === "vt";
1276
+ function readValue(variant) {
1277
+ const text = variant.textContent ?? "";
1278
+ switch (isVt(variant) ? variant.localName : "") {
1279
+ case "lpwstr":
1280
+ return { name: "", type: "lpwstr", value: text };
1281
+ case "i4":
1282
+ case "int": {
1283
+ const value = Number.parseInt(text, 10);
1284
+ return Number.isFinite(value) ? { name: "", type: "i4", value } : void 0;
1285
+ }
1286
+ case "r8": {
1287
+ const value = Number(text);
1288
+ return text.trim() !== "" && Number.isFinite(value) ? { name: "", type: "r8", value } : void 0;
1289
+ }
1290
+ case "bool":
1291
+ return { name: "", type: "bool", value: text.trim() === "true" || text.trim() === "1" };
1292
+ case "filetime":
1293
+ return { name: "", type: "filetime", value: text };
1294
+ default:
1295
+ return void 0;
1296
+ }
1297
+ }
1298
+ function parseCustomProperties(xml) {
1299
+ if (!xml) return [];
1300
+ const root = parseXml(xml, { label: "custom properties" }).documentElement;
1301
+ const out = [];
1302
+ for (const property of children(root, "property", NS.customProperties)) {
1303
+ const name = property.getAttribute("name") ?? "";
1304
+ const variant = elements(property)[0];
1305
+ if (!name || !variant) continue;
1306
+ const value = readValue(variant) ?? {
1307
+ name,
1308
+ type: "raw",
1309
+ xml: buildXml(variant)
1310
+ };
1311
+ const pid = Number.parseInt(property.getAttribute("pid") ?? "", 10);
1312
+ const linkTarget = property.getAttribute("linkTarget");
1313
+ out.push({
1314
+ ...value,
1315
+ name,
1316
+ ...Number.isFinite(pid) ? { pid } : {},
1317
+ ...linkTarget ? { linkTarget } : {}
1318
+ });
1319
+ }
1320
+ return out;
1321
+ }
1322
+ function allocateCustomPropertyIds(properties) {
1323
+ const used = /* @__PURE__ */ new Set();
1324
+ const kept = properties.map((property) => {
1325
+ const pid = property.pid;
1326
+ if (pid === void 0 || !Number.isInteger(pid) || pid < 2 || used.has(pid)) return void 0;
1327
+ used.add(pid);
1328
+ return pid;
1329
+ });
1330
+ let next = Math.max(1, ...used) + 1;
1331
+ return kept.map((pid) => pid ?? next++);
1332
+ }
1333
+ function variantXml(property) {
1334
+ switch (property.type) {
1335
+ case "raw":
1336
+ return property.xml;
1337
+ case "lpwstr":
1338
+ return `<vt:lpwstr>${escape(property.value)}</vt:lpwstr>`;
1339
+ case "i4":
1340
+ return `<vt:i4>${Math.trunc(property.value)}</vt:i4>`;
1341
+ case "r8":
1342
+ return `<vt:r8>${String(property.value)}</vt:r8>`;
1343
+ case "bool":
1344
+ return `<vt:bool>${property.value ? "true" : "false"}</vt:bool>`;
1345
+ case "filetime":
1346
+ return `<vt:filetime>${escape(property.value)}</vt:filetime>`;
1347
+ }
1348
+ }
1349
+ function writeCustomProperties(properties) {
1350
+ const seen = /* @__PURE__ */ new Set();
1351
+ const unique = properties.filter((property) => {
1352
+ const key = property.name.toLowerCase();
1353
+ if (!property.name || seen.has(key)) return false;
1354
+ seen.add(key);
1355
+ return true;
1356
+ });
1357
+ if (!unique.length) return void 0;
1358
+ const pids = allocateCustomPropertyIds(unique);
1359
+ const body = unique.map((property, index) => {
1360
+ const link = property.linkTarget ? ` linkTarget="${escape(property.linkTarget, true)}"` : "";
1361
+ return `<property fmtid="${CUSTOM_PROPERTIES_FMTID}" pid="${pids[index] ?? index + 2}" name="${escape(property.name, true)}"${link}>${variantXml(property)}</property>`;
1362
+ }).join("");
1363
+ return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1364
+ <Properties xmlns="${NS.customProperties}" xmlns:vt="${NS.vt}">${body}</Properties>`;
1365
+ }
1366
+
1367
+ // src/opc/signature/index.ts
1368
+ var signature_exports = {};
1369
+ __export(signature_exports, {
1370
+ DIGEST_ALGORITHM_TO_HASH: () => DIGEST_ALGORITHM_TO_HASH,
1371
+ DIGEST_ALGORITHM_TO_WEB_CRYPTO: () => DIGEST_ALGORITHM_TO_WEB_CRYPTO,
1372
+ DIGITAL_SIGNATURE_ORIGIN_REL_TYPE: () => DIGITAL_SIGNATURE_ORIGIN_REL_TYPE,
1373
+ DIGITAL_SIGNATURE_REL_TYPE: () => DIGITAL_SIGNATURE_REL_TYPE,
1374
+ ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV: () => ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV,
1375
+ ENTERPRISE_REQUIRE_REVOCATION_ENV: () => ENTERPRISE_REQUIRE_REVOCATION_ENV,
1376
+ ENTERPRISE_REQUIRE_TIMESTAMP_ENV: () => ENTERPRISE_REQUIRE_TIMESTAMP_ENV,
1377
+ ENTERPRISE_TRUST_ROOTS_FILE_ENV: () => ENTERPRISE_TRUST_ROOTS_FILE_ENV,
1378
+ ENTERPRISE_TRUST_ROOTS_PEM_ENV: () => ENTERPRISE_TRUST_ROOTS_PEM_ENV,
1379
+ OPC_RELATIONSHIP_TRANSFORM: () => OPC_RELATIONSHIP_TRANSFORM,
1380
+ PPTX_VIEWER_MANIFEST_NS: () => PPTX_VIEWER_MANIFEST_NS,
1381
+ SIGNATURE_PART_PREFIX: () => SIGNATURE_PART_PREFIX,
1382
+ SUPPORTED_XML_CANON_TRANSFORMS: () => SUPPORTED_XML_CANON_TRANSFORMS,
1383
+ XMLDSIG_NS: () => XMLDSIG_NS,
1384
+ XML_TRANSFORM_ENVELOPED_SIGNATURE: () => XML_TRANSFORM_ENVELOPED_SIGNATURE,
1385
+ computeDetailStatus: () => computeDetailStatus,
1386
+ computeDigestBase64: () => computeDigestBase64,
1387
+ computeVerificationStatus: () => computeVerificationStatus,
1388
+ detectDigitalSignatures: () => detectDigitalSignatures,
1389
+ escapeXmlAttr: () => escapeXmlAttr,
1390
+ escapeXmlText: () => escapeXmlText,
1391
+ extractAllTagText: () => extractAllTagText,
1392
+ extractFirstTagText: () => extractFirstTagText,
1393
+ extractTagAttribute: () => extractTagAttribute,
1394
+ getSignaturePathsToStrip: () => getSignaturePathsToStrip,
1395
+ isSignaturePart: () => isSignaturePart,
1396
+ isValidBase64: () => isValidBase64,
1397
+ normalizePartPath: () => normalizePartPath,
1398
+ parseSignatureXml: () => parseSignatureXml,
1399
+ resolveReferenceUriToPart: () => resolveReferenceUriToPart,
1400
+ verifySignatureDigests: () => verifySignatureDigests
1401
+ });
1402
+
1403
+ // src/opc/signature/detection.ts
1404
+ var SIGNATURE_PART_PREFIX = "_xmlsignatures/";
1405
+ var SIGNATURE_PREFIX = SIGNATURE_PART_PREFIX;
1406
+ function isSignaturePart(path) {
1407
+ return path.replace(/^\//, "").toLowerCase().startsWith(SIGNATURE_PART_PREFIX);
1408
+ }
1409
+ function detectDigitalSignatures(zipEntryPaths) {
1410
+ const sigPaths = zipEntryPaths.filter(
1411
+ (p) => p.startsWith(SIGNATURE_PREFIX) && p.endsWith(".xml")
1412
+ );
1413
+ return {
1414
+ hasSignatures: sigPaths.length > 0,
1415
+ signatureCount: sigPaths.length,
1416
+ signaturePaths: sigPaths
1417
+ };
1418
+ }
1419
+ function getSignaturePathsToStrip(zipEntryPaths) {
1420
+ return zipEntryPaths.filter((p) => p.startsWith(SIGNATURE_PREFIX));
1421
+ }
1422
+ function findByLocalName(parent, localName) {
1423
+ if (!parent) {
1424
+ return void 0;
1425
+ }
1426
+ if (parent[localName] !== void 0 && typeof parent[localName] === "object") {
1427
+ return parent[localName];
1428
+ }
1429
+ for (const key of Object.keys(parent)) {
1430
+ const parts = key.split(":");
1431
+ if (parts[parts.length - 1] === localName && typeof parent[key] === "object") {
1432
+ return parent[key];
1433
+ }
1434
+ }
1435
+ return void 0;
1436
+ }
1437
+ function findScalarByLocalName(parent, localName) {
1438
+ if (!parent) {
1439
+ return void 0;
1440
+ }
1441
+ if (parent[localName] !== void 0) {
1442
+ const v = parent[localName];
1443
+ if (typeof v === "string") {
1444
+ return v;
1445
+ }
1446
+ if (typeof v === "number" || typeof v === "boolean") {
1447
+ return String(v);
1448
+ }
1449
+ if (typeof v === "object" && v !== null && "#text" in v) {
1450
+ return String(v["#text"]);
1451
+ }
1452
+ }
1453
+ for (const key of Object.keys(parent)) {
1454
+ const parts = key.split(":");
1455
+ if (parts[parts.length - 1] === localName) {
1456
+ const v = parent[key];
1457
+ if (typeof v === "string") {
1458
+ return v;
1459
+ }
1460
+ if (typeof v === "number" || typeof v === "boolean") {
1461
+ return String(v);
1462
+ }
1463
+ if (typeof v === "object" && v !== null && "#text" in v) {
1464
+ return String(v["#text"]);
1465
+ }
1466
+ }
1467
+ }
1468
+ return void 0;
1469
+ }
1470
+ function findAllByLocalName(parent, localName) {
1471
+ if (!parent) {
1472
+ return [];
1473
+ }
1474
+ for (const key of Object.keys(parent)) {
1475
+ const parts = key.split(":");
1476
+ if (parts[parts.length - 1] === localName) {
1477
+ const v = parent[key];
1478
+ if (Array.isArray(v)) {
1479
+ return v;
1480
+ }
1481
+ if (typeof v === "object" && v !== null) {
1482
+ return [v];
1483
+ }
1484
+ }
1485
+ }
1486
+ return [];
1487
+ }
1488
+ function parseSignatureXml(signatureXml, signaturePath) {
1489
+ const signature = findByLocalName(signatureXml, "Signature");
1490
+ const signedInfo = findByLocalName(signature, "SignedInfo");
1491
+ const sigMethodNode = findByLocalName(signedInfo, "SignatureMethod");
1492
+ const signatureMethod = sigMethodNode?.["@_Algorithm"];
1493
+ const signatureValue = findScalarByLocalName(signature, "SignatureValue")?.replace(/\s+/g, "");
1494
+ const references = [];
1495
+ const refNodes = findAllByLocalName(signedInfo, "Reference");
1496
+ for (const ref of refNodes) {
1497
+ const uri = String(ref["@_URI"] || "");
1498
+ const dmNode = findByLocalName(ref, "DigestMethod");
1499
+ const digestMethod2 = dmNode?.["@_Algorithm"];
1500
+ const digestValue = findScalarByLocalName(ref, "DigestValue")?.replace(/\s+/g, "");
1501
+ references.push({
1502
+ uri,
1503
+ ...digestMethod2 === void 0 ? {} : { digestMethod: digestMethod2 },
1504
+ ...digestValue === void 0 ? {} : { digestValue }
1505
+ });
1506
+ }
1507
+ const digestMethod = references[0]?.digestMethod;
1508
+ const keyInfo = findByLocalName(signature, "KeyInfo");
1509
+ const x509Data = findByLocalName(keyInfo, "X509Data");
1510
+ let certificate;
1511
+ if (x509Data) {
1512
+ const certBase64 = findScalarByLocalName(x509Data, "X509Certificate")?.replace(/\s+/g, "");
1513
+ if (certBase64) {
1514
+ const issuerSerial = findByLocalName(x509Data, "X509IssuerSerial");
1515
+ const issuer = findScalarByLocalName(issuerSerial, "X509IssuerName");
1516
+ const serialNumber = findScalarByLocalName(issuerSerial, "X509SerialNumber");
1517
+ const subject = findScalarByLocalName(x509Data, "X509SubjectName");
1518
+ certificate = {
1519
+ certificateBase64: certBase64,
1520
+ ...issuer ? { issuer } : {},
1521
+ ...subject ? { subject } : {},
1522
+ ...serialNumber ? { serialNumber } : {}
1523
+ };
1524
+ }
1525
+ }
1526
+ let status = "unverified";
1527
+ if (certificate?.validTo) {
1528
+ const expiry = new Date(certificate.validTo);
1529
+ if (expiry < /* @__PURE__ */ new Date()) {
1530
+ status = "expired";
1531
+ }
1532
+ }
1533
+ return {
1534
+ signaturePath,
1535
+ ...signatureMethod === void 0 ? {} : { signatureMethod },
1536
+ ...digestMethod === void 0 ? {} : { digestMethod },
1537
+ ...signatureValue === void 0 ? {} : { signatureValue },
1538
+ ...certificate === void 0 ? {} : { certificate },
1539
+ status,
1540
+ references
1541
+ };
1542
+ }
1543
+ async function verifySignatureDigests(signature, getPartContent) {
1544
+ if (!signature.references.length) {
1545
+ return "unverified";
1546
+ }
1547
+ if (typeof globalThis.crypto?.subtle === "undefined") {
1548
+ return "unverified";
1549
+ }
1550
+ for (const ref of signature.references) {
1551
+ if (!ref.digestValue || !ref.uri) {
1552
+ continue;
1553
+ }
1554
+ const algo = ref.digestMethod?.toLowerCase() || "";
1555
+ let hashAlgo;
1556
+ if (algo.includes("sha256") || algo.includes("sha-256")) {
1557
+ hashAlgo = "SHA-256";
1558
+ } else if (algo.includes("sha512") || algo.includes("sha-512")) {
1559
+ hashAlgo = "SHA-512";
1560
+ } else if (algo.includes("sha1") || algo.includes("sha-1")) {
1561
+ hashAlgo = "SHA-1";
1562
+ } else {
1563
+ continue;
1564
+ }
1565
+ const content = await getPartContent(ref.uri);
1566
+ if (!content) {
1567
+ continue;
1568
+ }
1569
+ try {
1570
+ const digest = await crypto.subtle.digest(hashAlgo, content);
1571
+ const digestBase64 = arrayBufferToBase64(digest);
1572
+ if (digestBase64 !== ref.digestValue) {
1573
+ return "invalid";
1574
+ }
1575
+ } catch {
1576
+ return "unverified";
1577
+ }
1578
+ }
1579
+ return signature.certificate ? "valid" : "unknownCA";
1580
+ }
1581
+ function arrayBufferToBase64(buffer) {
1582
+ const bytes = new Uint8Array(buffer);
1583
+ let binary = "";
1584
+ for (let i = 0; i < bytes.byteLength; i++) {
1585
+ binary += String.fromCharCode(bytes[i]);
1586
+ }
1587
+ return btoa(binary);
1588
+ }
1589
+
1590
+ // src/opc/signature/constants.ts
1591
+ var DIGITAL_SIGNATURE_ORIGIN_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin";
1592
+ var DIGITAL_SIGNATURE_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/signature";
1593
+ var PPTX_VIEWER_MANIFEST_NS = "urn:pptx-viewer:ooxml-signature:v1";
1594
+ var XMLDSIG_NS = "http://www.w3.org/2000/09/xmldsig#";
1595
+ var OPC_RELATIONSHIP_TRANSFORM = "http://schemas.openxmlformats.org/package/2006/RelationshipTransform";
1596
+ var XML_TRANSFORM_ENVELOPED_SIGNATURE = "http://www.w3.org/2000/09/xmldsig#enveloped-signature";
1597
+ var SUPPORTED_XML_CANON_TRANSFORMS = /* @__PURE__ */ new Set([
1598
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
1599
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments",
1600
+ "http://www.w3.org/2001/10/xml-exc-c14n#",
1601
+ "http://www.w3.org/2001/10/xml-exc-c14n#WithComments",
1602
+ XML_TRANSFORM_ENVELOPED_SIGNATURE
1603
+ ]);
1604
+ var ENTERPRISE_TRUST_ROOTS_FILE_ENV = "PPTX_VIEWER_TRUST_ROOTS_FILE";
1605
+ var ENTERPRISE_TRUST_ROOTS_PEM_ENV = "PPTX_VIEWER_TRUST_ROOTS_PEM";
1606
+ var ENTERPRISE_REQUIRE_REVOCATION_ENV = "PPTX_VIEWER_REQUIRE_REVOCATION_CHECK";
1607
+ var ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV = "PPTX_VIEWER_FAIL_ON_REVOCATION_UNKNOWN";
1608
+ var ENTERPRISE_REQUIRE_TIMESTAMP_ENV = "PPTX_VIEWER_REQUIRE_TIMESTAMP";
1609
+ var DIGEST_ALGORITHM_TO_HASH = {
1610
+ "http://www.w3.org/2000/09/xmldsig#sha1": "sha1",
1611
+ "http://www.w3.org/2001/04/xmlenc#sha256": "sha256",
1612
+ "http://www.w3.org/2001/04/xmlenc#sha384": "sha384",
1613
+ "http://www.w3.org/2001/04/xmlenc#sha512": "sha512"
1614
+ };
1615
+ var DIGEST_ALGORITHM_TO_WEB_CRYPTO = {
1616
+ "http://www.w3.org/2000/09/xmldsig#sha1": "SHA-1",
1617
+ "http://www.w3.org/2001/04/xmlenc#sha256": "SHA-256",
1618
+ "http://www.w3.org/2001/04/xmlenc#sha384": "SHA-384",
1619
+ "http://www.w3.org/2001/04/xmlenc#sha512": "SHA-512"
1620
+ };
1621
+
1622
+ // src/opc/signature/xml-utils.ts
1623
+ function escapeXmlAttr(value) {
1624
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
1625
+ }
1626
+ function escapeXmlText(value) {
1627
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
1628
+ }
1629
+ function isValidBase64(value) {
1630
+ return typeof value === "string" && value.length > 0 && /^[A-Za-z0-9+/=\s]+$/.test(value);
1631
+ }
1632
+ function extractTagAttribute(xml, tagName, attributeName) {
1633
+ const pattern = new RegExp(
1634
+ `<${tagName}\\b[^>]*\\b${attributeName}="(?<attributeValue>[^"]+)"`,
1635
+ "i"
1636
+ );
1637
+ const match = xml.match(pattern);
1638
+ return match?.groups?.["attributeValue"]?.trim();
1639
+ }
1640
+ function extractFirstTagText(xml, localName) {
1641
+ const pattern = new RegExp(
1642
+ `<([\\w.-]+:)?${localName}\\b[^>]*>([\\s\\S]*?)<\\/([\\w.-]+:)?${localName}>`,
1643
+ "i"
1644
+ );
1645
+ const match = xml.match(pattern);
1646
+ return match?.[2]?.replace(/\s+/g, "").trim() || void 0;
1647
+ }
1648
+ function extractAllTagText(xml, localName) {
1649
+ const result = [];
1650
+ const regex = new RegExp(
1651
+ `<([\\w.-]+:)?${localName}\\b[^>]*>([\\s\\S]*?)<\\/([\\w.-]+:)?${localName}>`,
1652
+ "gi"
1653
+ );
1654
+ let match = regex.exec(xml);
1655
+ while (match) {
1656
+ const value = match[2]?.replace(/\s+/g, "").trim();
1657
+ if (value) {
1658
+ result.push(value);
1659
+ }
1660
+ match = regex.exec(xml);
1661
+ }
1662
+ return result;
1663
+ }
1664
+
1665
+ // src/opc/signature/reference-utils.ts
1666
+ function normalizePartPath(partPath) {
1667
+ return partPath.replace(/\\/g, "/").replace(/^\/+/, "");
1668
+ }
1669
+ function resolveReferenceUriToPart(uri) {
1670
+ const trimmed = uri.trim();
1671
+ if (trimmed.length === 0 || trimmed.startsWith("#")) {
1672
+ return void 0;
1673
+ }
1674
+ const decoded = decodeURIComponent(trimmed);
1675
+ return normalizePartPath(decoded.startsWith("/") ? decoded.slice(1) : decoded);
1676
+ }
1677
+
1678
+ // src/opc/signature/digest.ts
1679
+ async function computeDigestBase64(content, digestAlgorithmUri) {
1680
+ const webCryptoAlgo = DIGEST_ALGORITHM_TO_WEB_CRYPTO[digestAlgorithmUri];
1681
+ if (!webCryptoAlgo) {
1682
+ return void 0;
1683
+ }
1684
+ if (typeof globalThis.crypto?.subtle === "undefined") {
1685
+ return void 0;
1686
+ }
1687
+ const buf = new ArrayBuffer(content.byteLength);
1688
+ new Uint8Array(buf).set(content);
1689
+ const digest = await globalThis.crypto.subtle.digest(webCryptoAlgo, buf);
1690
+ return uint8ArrayToBase64(new Uint8Array(digest));
1691
+ }
1692
+ function uint8ArrayToBase64(bytes) {
1693
+ let binary = "";
1694
+ for (let i = 0; i < bytes.byteLength; i++) {
1695
+ binary += String.fromCharCode(bytes[i]);
1696
+ }
1697
+ return btoa(binary);
1698
+ }
1699
+
1700
+ // src/opc/signature/inspection-status.ts
1701
+ function computeDetailStatus(detail, policy) {
1702
+ const hasDigestMismatch = detail.referenceChecks.some(
1703
+ (check) => check.digestStatus === "mismatch"
1704
+ );
1705
+ const hasMissingPart = detail.missingPartReferences.length > 0;
1706
+ const hasVerifiedDigest = detail.referenceChecks.some(
1707
+ (check) => check.digestStatus === "verified"
1708
+ );
1709
+ const revocationUnknown = detail.certificateRevocationStatus === "unknown" || detail.certificateRevocationStatus === "not-checked" || detail.certificateRevocationStatus === "error";
1710
+ const timestampMissingOrUntrusted = detail.timestampAuthorityStatus === "not-present" || detail.timestampAuthorityStatus === "not-checked" || detail.timestampAuthorityStatus === "error" || detail.timestampAuthorityStatus === "untrusted";
1711
+ if (detail.signatureValueStatus === "invalid") {
1712
+ return "signature-invalid";
1713
+ }
1714
+ if (hasMissingPart) {
1715
+ return "reference-missing";
1716
+ }
1717
+ if (hasDigestMismatch) {
1718
+ return "digest-mismatch";
1719
+ }
1720
+ if (detail.certificateRevocationStatus === "revoked") {
1721
+ return "certificate-revoked";
1722
+ }
1723
+ if (policy.requireRevocationCheck && (policy.failOnRevocationUnknown ? revocationUnknown : detail.certificateRevocationStatus !== "good")) {
1724
+ return "certificate-untrusted";
1725
+ }
1726
+ if (detail.timestampAuthorityStatus === "invalid") {
1727
+ return "timestamp-invalid";
1728
+ }
1729
+ if (policy.requireTimestamp && timestampMissingOrUntrusted) {
1730
+ return "timestamp-untrusted";
1731
+ }
1732
+ if (detail.timestampAuthorityStatus === "untrusted") {
1733
+ return "timestamp-untrusted";
1734
+ }
1735
+ if (detail.certificateTrustStatus === "untrusted" && detail.signatureValueStatus === "verified") {
1736
+ return "certificate-untrusted";
1737
+ }
1738
+ if (hasVerifiedDigest && detail.signatureValueStatus === "verified") {
1739
+ return "verified";
1740
+ }
1741
+ return "structural-only";
1742
+ }
1743
+ function computeVerificationStatus(details) {
1744
+ const hasInvalidSignature = details.some((detail) => detail.status === "signature-invalid");
1745
+ const hasMissing = details.some((detail) => detail.status === "reference-missing");
1746
+ const hasMismatch = details.some((detail) => detail.status === "digest-mismatch");
1747
+ const hasUntrusted = details.some((detail) => detail.status === "certificate-untrusted");
1748
+ const hasRevoked = details.some((detail) => detail.status === "certificate-revoked");
1749
+ const hasTimestampInvalid = details.some((detail) => detail.status === "timestamp-invalid");
1750
+ const hasTimestampUntrusted = details.some((detail) => detail.status === "timestamp-untrusted");
1751
+ const allVerified = details.every((detail) => detail.status === "verified");
1752
+ return hasInvalidSignature ? "signature-invalid" : hasRevoked ? "certificate-revoked" : hasTimestampInvalid ? "timestamp-invalid" : hasTimestampUntrusted ? "timestamp-untrusted" : hasMissing ? "reference-missing" : hasMismatch ? "digest-mismatch" : allVerified ? "verified-trusted" : hasUntrusted ? "verified-untrusted" : "present-not-verified";
1753
+ }
1024
1754
 
1025
1755
  // src/diagram/relationships.ts
1026
1756
  function diagramRelationshipsPart(partPath) {
@@ -1428,11 +2158,11 @@ function styleRef(element) {
1428
2158
  function parseStyleReferences(style) {
1429
2159
  const refs = {};
1430
2160
  const line2 = styleRef(first(style, "lnRef", NS.a));
1431
- const fill = styleRef(first(style, "fillRef", NS.a));
2161
+ const fill2 = styleRef(first(style, "fillRef", NS.a));
1432
2162
  const effect = styleRef(first(style, "effectRef", NS.a));
1433
2163
  const font = styleRef(first(style, "fontRef", NS.a));
1434
2164
  if (line2) refs.line = line2;
1435
- if (fill) refs.fill = fill;
2165
+ if (fill2) refs.fill = fill2;
1436
2166
  if (effect) refs.effect = effect;
1437
2167
  if (font) refs.font = font;
1438
2168
  return refs;
@@ -1484,23 +2214,23 @@ function fillElementOf(properties) {
1484
2214
  ) : void 0;
1485
2215
  }
1486
2216
  function parseDrawingFill(properties) {
1487
- const fill = fillElementOf(properties);
1488
- if (!fill) return void 0;
1489
- switch (fill.localName) {
2217
+ const fill2 = fillElementOf(properties);
2218
+ if (!fill2) return void 0;
2219
+ switch (fill2.localName) {
1490
2220
  case "noFill":
1491
2221
  return { kind: "none" };
1492
2222
  case "solidFill": {
1493
- const color = parseDrawingColorIn(fill);
2223
+ const color = parseDrawingColorIn(fill2);
1494
2224
  return color ? { kind: "solid", color } : { kind: "unsupported", element: "solidFill" };
1495
2225
  }
1496
2226
  case "gradFill": {
1497
- const stops = children(first(fill, "gsLst", NS.a) ?? fill, "gs", NS.a).flatMap((stop) => {
2227
+ const stops = children(first(fill2, "gsLst", NS.a) ?? fill2, "gs", NS.a).flatMap((stop) => {
1498
2228
  const color = parseDrawingColorIn(stop);
1499
2229
  const position = Number.parseInt(stop.getAttribute("pos") ?? "", 10);
1500
2230
  return color && Number.isFinite(position) ? [{ position: position / 1e3, color }] : [];
1501
2231
  });
1502
- const angle = Number.parseInt(first(fill, "lin", NS.a)?.getAttribute("ang") ?? "", 10);
1503
- const path = first(fill, "path", NS.a)?.getAttribute("path");
2232
+ const angle = Number.parseInt(first(fill2, "lin", NS.a)?.getAttribute("ang") ?? "", 10);
2233
+ const path = first(fill2, "path", NS.a)?.getAttribute("path");
1504
2234
  return {
1505
2235
  kind: "gradient",
1506
2236
  stops,
@@ -1509,22 +2239,22 @@ function parseDrawingFill(properties) {
1509
2239
  };
1510
2240
  }
1511
2241
  case "pattFill": {
1512
- const foreground = parseDrawingColorIn(first(fill, "fgClr", NS.a));
1513
- const background = parseDrawingColorIn(first(fill, "bgClr", NS.a));
2242
+ const foreground = parseDrawingColorIn(first(fill2, "fgClr", NS.a));
2243
+ const background = parseDrawingColorIn(first(fill2, "bgClr", NS.a));
1514
2244
  return {
1515
2245
  kind: "pattern",
1516
- preset: fill.getAttribute("prst") ?? "",
2246
+ preset: fill2.getAttribute("prst") ?? "",
1517
2247
  ...foreground ? { foreground } : {},
1518
2248
  ...background ? { background } : {}
1519
2249
  };
1520
2250
  }
1521
2251
  case "blipFill": {
1522
- const blip = first(fill, "blip", NS.a);
2252
+ const blip = first(fill2, "blip", NS.a);
1523
2253
  const relId = blip?.getAttributeNS(NS.r, "embed") || blip?.getAttribute("r:embed") || void 0;
1524
2254
  return { kind: "picture", ...relId ? { relId } : {} };
1525
2255
  }
1526
2256
  default:
1527
- return { kind: "unsupported", element: fill.localName };
2257
+ return { kind: "unsupported", element: fill2.localName };
1528
2258
  }
1529
2259
  }
1530
2260
  function parseDrawingLine(ln) {
@@ -1532,8 +2262,8 @@ function parseDrawingLine(ln) {
1532
2262
  const line2 = {};
1533
2263
  const width = Number.parseInt(ln.getAttribute("w") ?? "", 10);
1534
2264
  if (Number.isFinite(width)) line2.widthEmu = width;
1535
- const fill = parseDrawingFill(ln);
1536
- if (fill) line2.fill = fill;
2265
+ const fill2 = parseDrawingFill(ln);
2266
+ if (fill2) line2.fill = fill2;
1537
2267
  const dash = first(ln, "prstDash", NS.a)?.getAttribute("val");
1538
2268
  if (dash) line2.dash = dash;
1539
2269
  const cap = ln.getAttribute("cap");
@@ -1753,8 +2483,8 @@ function parseShape(sp, index, group, issues) {
1753
2483
  if (transform.flipVertical) shape.flipVertical = true;
1754
2484
  if (adjustments) shape.adjustments = adjustments;
1755
2485
  if (paths) shape.paths = paths;
1756
- const fill = parseDrawingFill(spPr);
1757
- if (fill) shape.fill = fill;
2486
+ const fill2 = parseDrawingFill(spPr);
2487
+ if (fill2) shape.fill = fill2;
1758
2488
  const line2 = parseDrawingLine(first(spPr, "ln", NS.a));
1759
2489
  if (line2) shape.line = line2;
1760
2490
  const style = first(sp, "style", NS.dsp);