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.mjs CHANGED
@@ -698,7 +698,12 @@ function resolveDiagramLayoutCategory(uniqueId, categories) {
698
698
  // src/opc/index.ts
699
699
  var opc_exports = {};
700
700
  __export(opc_exports, {
701
+ CORE_PROPERTY_FIELDS: () => CORE_PROPERTY_FIELDS,
702
+ CUSTOM_PROPERTIES_FMTID: () => CUSTOM_PROPERTIES_FMTID,
703
+ PROPERTY_CONTENT_TYPES: () => PROPERTY_CONTENT_TYPES,
704
+ PROPERTY_PART_NAMES: () => PROPERTY_PART_NAMES,
701
705
  RELATIONSHIP_TYPES: () => RELATIONSHIP_TYPES,
706
+ allocateCustomPropertyIds: () => allocateCustomPropertyIds,
702
707
  buildContentTypesXml: () => buildContentTypesXml,
703
708
  buildRelationshipsXml: () => buildRelationshipsXml,
704
709
  contentTypeForPart: () => contentTypeForPart,
@@ -707,12 +712,22 @@ __export(opc_exports, {
707
712
  ensureRelationship: () => ensureRelationship,
708
713
  findOfficeDocumentPart: () => findOfficeDocumentPart,
709
714
  getRelationshipId: () => getRelationshipId,
715
+ hyperlinkPolicy: () => hyperlinkPolicy,
716
+ isOpenableHyperlinkHref: () => isOpenableHyperlinkHref,
710
717
  isSafeHyperlinkHref: () => isSafeHyperlinkHref,
718
+ isStorableHyperlinkHref: () => isStorableHyperlinkHref,
711
719
  nextRelationshipId: () => nextRelationshipId,
720
+ parseAppProperties: () => parseAppProperties,
712
721
  parseContentTypes: () => parseContentTypes,
722
+ parseCoreProperties: () => parseCoreProperties,
723
+ parseCustomProperties: () => parseCustomProperties,
713
724
  parseRelationships: () => parseRelationships,
714
725
  relationshipsPartFor: () => relationshipsPartFor,
715
- resolvePartPath: () => resolvePartPath
726
+ resolvePartPath: () => resolvePartPath,
727
+ signature: () => signature_exports,
728
+ writeAppProperties: () => writeAppProperties,
729
+ writeCoreProperties: () => writeCoreProperties,
730
+ writeCustomProperties: () => writeCustomProperties
716
731
  });
717
732
 
718
733
  // src/opc/relationship-types.ts
@@ -746,6 +761,7 @@ var RELATIONSHIP_TYPES = {
746
761
  diagramDrawing: "http://schemas.microsoft.com/office/2007/relationships/diagramDrawing",
747
762
  coreProperties: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",
748
763
  extendedProperties: `${BASE}/extended-properties`,
764
+ customProperties: `${BASE}/custom-properties`,
749
765
  customXml: `${BASE}/customXml`,
750
766
  worksheet: `${BASE}/worksheet`,
751
767
  chartsheet: `${BASE}/chartsheet`,
@@ -841,6 +857,10 @@ var NS = {
841
857
  extendedProperties: "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",
842
858
  /** Dublin Core terms (`dcterms:created`). */
843
859
  dcterms: "http://purl.org/dc/terms/",
860
+ /** Custom document properties (`docProps/custom.xml`). */
861
+ customProperties: "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",
862
+ /** Document property variant types (`vt:lpwstr`, `vt:vector`). */
863
+ vt: "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",
844
864
  /** XML itself (`xml:space`). */
845
865
  xml: "http://www.w3.org/XML/1998/namespace"
846
866
  };
@@ -1019,6 +1039,716 @@ function isSafeHyperlinkHref(href) {
1019
1039
  const scheme = /^([a-z][a-z0-9+.-]*:)/i.exec(href.trim())?.[1];
1020
1040
  return scheme !== void 0 && SAFE_SCHEMES.has(scheme.toLowerCase());
1021
1041
  }
1042
+ var OPEN_SCHEMES = /* @__PURE__ */ new Set(["http", "https", "mailto"]);
1043
+ var STORE_SCHEMES = /* @__PURE__ */ new Set([...OPEN_SCHEMES, "ftp", "file"]);
1044
+ var SCRIPT_SCHEMES = /* @__PURE__ */ new Set([
1045
+ "javascript",
1046
+ "vbscript",
1047
+ "livescript",
1048
+ "jscript",
1049
+ "mocha",
1050
+ "data",
1051
+ "mhtml",
1052
+ "ms-its",
1053
+ "mk",
1054
+ "x-javascript",
1055
+ "blob"
1056
+ ]);
1057
+ var IGNORABLE = new RegExp(
1058
+ "[\\u0000-\\u0020\\u007f\\u00ad\\u200b-\\u200f\\u202a-\\u202e\\u2060-\\u2064\\ufeff]",
1059
+ "gu"
1060
+ );
1061
+ var CONTROL = new RegExp("[\\u0000-\\u001f\\u007f]", "u");
1062
+ var SCHEME = /^([a-z][a-z0-9+.-]*):/;
1063
+ var STORE_ONLY = { store: true, open: false, reason: "not-openable" };
1064
+ var reject = (reason) => ({
1065
+ store: false,
1066
+ open: false,
1067
+ reason
1068
+ });
1069
+ function hyperlinkPolicy(href) {
1070
+ if (typeof href !== "string") return reject("empty");
1071
+ const trimmed = href.trim();
1072
+ const normalized = trimmed.replace(IGNORABLE, "").toLowerCase();
1073
+ if (normalized.length === 0) return reject("empty");
1074
+ const scheme = SCHEME.exec(normalized)?.[1];
1075
+ if (scheme !== void 0 && SCRIPT_SCHEMES.has(scheme)) return reject("script-scheme");
1076
+ if (scheme !== void 0 && !trimmed.toLowerCase().startsWith(`${scheme}:`))
1077
+ return reject("obfuscated-scheme");
1078
+ if (CONTROL.test(trimmed)) return reject("control-characters");
1079
+ if (scheme === void 0 || scheme.length === 1) return STORE_ONLY;
1080
+ if (OPEN_SCHEMES.has(scheme)) return { store: true, open: true };
1081
+ if (STORE_SCHEMES.has(scheme)) return STORE_ONLY;
1082
+ return reject("unsupported-scheme");
1083
+ }
1084
+ function isStorableHyperlinkHref(href) {
1085
+ return hyperlinkPolicy(href).store;
1086
+ }
1087
+ function isOpenableHyperlinkHref(href) {
1088
+ return hyperlinkPolicy(href).open;
1089
+ }
1090
+
1091
+ // src/opc/properties/types.ts
1092
+ var CUSTOM_PROPERTIES_FMTID = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}";
1093
+ var PROPERTY_PART_NAMES = {
1094
+ core: "docProps/core.xml",
1095
+ app: "docProps/app.xml",
1096
+ custom: "docProps/custom.xml"
1097
+ };
1098
+ var PROPERTY_CONTENT_TYPES = {
1099
+ core: "application/vnd.openxmlformats-package.core-properties+xml",
1100
+ app: "application/vnd.openxmlformats-officedocument.extended-properties+xml",
1101
+ custom: "application/vnd.openxmlformats-officedocument.custom-properties+xml"
1102
+ };
1103
+
1104
+ // src/opc/properties/core.ts
1105
+ var XSI = "http://www.w3.org/2001/XMLSchema-instance";
1106
+ var FIELDS = [
1107
+ ["title", "dc", false],
1108
+ ["subject", "dc", false],
1109
+ ["creator", "dc", false],
1110
+ ["keywords", "cp", false],
1111
+ ["description", "dc", false],
1112
+ ["lastModifiedBy", "cp", false],
1113
+ ["created", "dcterms", true],
1114
+ ["modified", "dcterms", true],
1115
+ ["category", "cp", false],
1116
+ ["contentStatus", "cp", false],
1117
+ ["revision", "cp", false],
1118
+ ["language", "dc", false],
1119
+ ["identifier", "dc", false],
1120
+ ["lastPrinted", "cp", false],
1121
+ ["version", "cp", false]
1122
+ ];
1123
+ var CORE_PROPERTY_FIELDS = FIELDS.map(([field]) => field);
1124
+ var EMPTY_CORE = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1125
+ <cp:coreProperties xmlns:cp="${NS.cp}" xmlns:dc="${NS.dc}" xmlns:dcterms="${NS.dcterms}" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="${XSI}"/>`;
1126
+ function parseCoreProperties(xml) {
1127
+ const out = {};
1128
+ if (!xml) return out;
1129
+ const root = parseXml(xml, { label: "core properties" }).documentElement;
1130
+ for (const [field, prefix] of FIELDS) {
1131
+ const text = first(root, field, NS[prefix])?.textContent ?? "";
1132
+ if (text !== "") out[field] = text;
1133
+ }
1134
+ return out;
1135
+ }
1136
+ function writeCoreProperties(props, sourceXml) {
1137
+ const doc = parseXml(sourceXml ?? EMPTY_CORE, { label: "core properties" });
1138
+ const root = doc.documentElement;
1139
+ for (const [field, prefix, isDate] of FIELDS) {
1140
+ const ns = NS[prefix];
1141
+ const value = props[field];
1142
+ let element = first(root, field, ns);
1143
+ if (value === void 0 || value === "") {
1144
+ if (element && (element.textContent ?? "") !== "") root.removeChild(element);
1145
+ continue;
1146
+ }
1147
+ if (!element) {
1148
+ element = doc.createElementNS(ns, `${prefix}:${field}`);
1149
+ if (isDate) element.setAttributeNS(XSI, "xsi:type", "dcterms:W3CDTF");
1150
+ root.appendChild(element);
1151
+ }
1152
+ if (element.textContent !== value) element.textContent = value;
1153
+ }
1154
+ const out = buildXml(doc);
1155
+ return out.startsWith("<?xml") ? out : `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1156
+ ${out}`;
1157
+ }
1158
+
1159
+ // src/opc/properties/app.ts
1160
+ var FIELDS2 = [
1161
+ ["template", "Template", "text"],
1162
+ ["totalTime", "TotalTime", "int"],
1163
+ ["application", "Application", "text"],
1164
+ ["docSecurity", "DocSecurity", "int"],
1165
+ ["scaleCrop", "ScaleCrop", "bool"],
1166
+ ["headingPairs", "HeadingPairs", "pairs"],
1167
+ ["titlesOfParts", "TitlesOfParts", "titles"],
1168
+ ["manager", "Manager", "text"],
1169
+ ["company", "Company", "text"],
1170
+ ["linksUpToDate", "LinksUpToDate", "bool"],
1171
+ ["sharedDoc", "SharedDoc", "bool"],
1172
+ ["hyperlinkBase", "HyperlinkBase", "text"],
1173
+ ["hyperlinksChanged", "HyperlinksChanged", "bool"],
1174
+ ["appVersion", "AppVersion", "text"]
1175
+ ];
1176
+ var EMPTY_APP = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1177
+ <Properties xmlns="${NS.extendedProperties}" xmlns:vt="${NS.vt}"/>`;
1178
+ function vectorItems(element) {
1179
+ const vector = first(element, "vector", NS.vt);
1180
+ return vector ? elements(vector) : [];
1181
+ }
1182
+ function readPairs(element) {
1183
+ const variants = vectorItems(element).map((variant) => elements(variant)[0]);
1184
+ const out = [];
1185
+ for (let i = 0; i + 1 < variants.length; i += 2) {
1186
+ const name = variants[i]?.textContent ?? "";
1187
+ const count = Number.parseInt(variants[i + 1]?.textContent ?? "", 10);
1188
+ out.push({ name, count: Number.isFinite(count) ? count : 0 });
1189
+ }
1190
+ return out;
1191
+ }
1192
+ function readField(element, kind) {
1193
+ const text = element.textContent ?? "";
1194
+ if (kind === "pairs") return readPairs(element);
1195
+ if (kind === "titles") return vectorItems(element).map((item) => item.textContent ?? "");
1196
+ if (kind === "bool") return text.trim() === "true" || text.trim() === "1";
1197
+ if (kind === "int") {
1198
+ const value = Number.parseInt(text, 10);
1199
+ return Number.isFinite(value) ? value : void 0;
1200
+ }
1201
+ return text === "" ? void 0 : text;
1202
+ }
1203
+ function parseAppProperties(xml) {
1204
+ const out = {};
1205
+ if (!xml) return out;
1206
+ const root = parseXml(xml, { label: "app properties" }).documentElement;
1207
+ for (const [field, local, kind] of FIELDS2) {
1208
+ const element = first(root, local, NS.extendedProperties);
1209
+ if (!element) continue;
1210
+ const value = readField(element, kind);
1211
+ if (value !== void 0) out[field] = value;
1212
+ }
1213
+ return out;
1214
+ }
1215
+ var same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
1216
+ function fill(doc, element, kind, value) {
1217
+ while (element.firstChild) element.removeChild(element.firstChild);
1218
+ const vt = (local, text) => {
1219
+ const node = doc.createElementNS(NS.vt, `vt:${local}`);
1220
+ if (text !== void 0) node.textContent = text;
1221
+ return node;
1222
+ };
1223
+ if (kind === "pairs" || kind === "titles") {
1224
+ const items = kind === "pairs" ? value.flatMap((pair) => [
1225
+ vt("lpstr", pair.name),
1226
+ vt("i4", String(Math.trunc(pair.count)))
1227
+ ]) : value.map((title) => vt("lpstr", title));
1228
+ const vector = vt("vector");
1229
+ vector.setAttribute("size", String(items.length));
1230
+ vector.setAttribute("baseType", kind === "pairs" ? "variant" : "lpstr");
1231
+ for (const item of items) {
1232
+ if (kind === "pairs") {
1233
+ const variant = vt("variant");
1234
+ variant.appendChild(item);
1235
+ vector.appendChild(variant);
1236
+ } else vector.appendChild(item);
1237
+ }
1238
+ element.appendChild(vector);
1239
+ return;
1240
+ }
1241
+ element.textContent = kind === "bool" ? value ? "true" : "false" : String(value);
1242
+ }
1243
+ function writeAppProperties(props, sourceXml) {
1244
+ const doc = parseXml(sourceXml ?? EMPTY_APP, { label: "app properties" });
1245
+ const root = doc.documentElement;
1246
+ const prior = parseAppProperties(sourceXml);
1247
+ FIELDS2.forEach(([field, local, kind], index) => {
1248
+ const value = props[field];
1249
+ const existing = first(root, local, NS.extendedProperties);
1250
+ if (value === void 0 || kind === "text" && value === "") {
1251
+ if (existing && (existing.textContent ?? "") !== "") root.removeChild(existing);
1252
+ return;
1253
+ }
1254
+ if (existing && same(prior[field], value)) return;
1255
+ let element = existing;
1256
+ if (!element) {
1257
+ element = doc.createElementNS(NS.extendedProperties, local);
1258
+ const next = FIELDS2.slice(index + 1).map(([, name]) => first(root, name, NS.extendedProperties)).find((node) => node !== void 0);
1259
+ root.insertBefore(element, next ?? null);
1260
+ }
1261
+ fill(doc, element, kind, value);
1262
+ });
1263
+ const out = buildXml(doc);
1264
+ return out.startsWith("<?xml") ? out : `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1265
+ ${out}`;
1266
+ }
1267
+
1268
+ // src/opc/properties/custom.ts
1269
+ var escape = (text, attribute = false) => {
1270
+ const out = text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
1271
+ return attribute ? out.replace(/"/g, "&quot;") : out;
1272
+ };
1273
+ var isVt = (element) => element.namespaceURI === NS.vt || element.prefix === "vt";
1274
+ function readValue(variant) {
1275
+ const text = variant.textContent ?? "";
1276
+ switch (isVt(variant) ? variant.localName : "") {
1277
+ case "lpwstr":
1278
+ return { name: "", type: "lpwstr", value: text };
1279
+ case "i4":
1280
+ case "int": {
1281
+ const value = Number.parseInt(text, 10);
1282
+ return Number.isFinite(value) ? { name: "", type: "i4", value } : void 0;
1283
+ }
1284
+ case "r8": {
1285
+ const value = Number(text);
1286
+ return text.trim() !== "" && Number.isFinite(value) ? { name: "", type: "r8", value } : void 0;
1287
+ }
1288
+ case "bool":
1289
+ return { name: "", type: "bool", value: text.trim() === "true" || text.trim() === "1" };
1290
+ case "filetime":
1291
+ return { name: "", type: "filetime", value: text };
1292
+ default:
1293
+ return void 0;
1294
+ }
1295
+ }
1296
+ function parseCustomProperties(xml) {
1297
+ if (!xml) return [];
1298
+ const root = parseXml(xml, { label: "custom properties" }).documentElement;
1299
+ const out = [];
1300
+ for (const property of children(root, "property", NS.customProperties)) {
1301
+ const name = property.getAttribute("name") ?? "";
1302
+ const variant = elements(property)[0];
1303
+ if (!name || !variant) continue;
1304
+ const value = readValue(variant) ?? {
1305
+ name,
1306
+ type: "raw",
1307
+ xml: buildXml(variant)
1308
+ };
1309
+ const pid = Number.parseInt(property.getAttribute("pid") ?? "", 10);
1310
+ const linkTarget = property.getAttribute("linkTarget");
1311
+ out.push({
1312
+ ...value,
1313
+ name,
1314
+ ...Number.isFinite(pid) ? { pid } : {},
1315
+ ...linkTarget ? { linkTarget } : {}
1316
+ });
1317
+ }
1318
+ return out;
1319
+ }
1320
+ function allocateCustomPropertyIds(properties) {
1321
+ const used = /* @__PURE__ */ new Set();
1322
+ const kept = properties.map((property) => {
1323
+ const pid = property.pid;
1324
+ if (pid === void 0 || !Number.isInteger(pid) || pid < 2 || used.has(pid)) return void 0;
1325
+ used.add(pid);
1326
+ return pid;
1327
+ });
1328
+ let next = Math.max(1, ...used) + 1;
1329
+ return kept.map((pid) => pid ?? next++);
1330
+ }
1331
+ function variantXml(property) {
1332
+ switch (property.type) {
1333
+ case "raw":
1334
+ return property.xml;
1335
+ case "lpwstr":
1336
+ return `<vt:lpwstr>${escape(property.value)}</vt:lpwstr>`;
1337
+ case "i4":
1338
+ return `<vt:i4>${Math.trunc(property.value)}</vt:i4>`;
1339
+ case "r8":
1340
+ return `<vt:r8>${String(property.value)}</vt:r8>`;
1341
+ case "bool":
1342
+ return `<vt:bool>${property.value ? "true" : "false"}</vt:bool>`;
1343
+ case "filetime":
1344
+ return `<vt:filetime>${escape(property.value)}</vt:filetime>`;
1345
+ }
1346
+ }
1347
+ function writeCustomProperties(properties) {
1348
+ const seen = /* @__PURE__ */ new Set();
1349
+ const unique = properties.filter((property) => {
1350
+ const key = property.name.toLowerCase();
1351
+ if (!property.name || seen.has(key)) return false;
1352
+ seen.add(key);
1353
+ return true;
1354
+ });
1355
+ if (!unique.length) return void 0;
1356
+ const pids = allocateCustomPropertyIds(unique);
1357
+ const body = unique.map((property, index) => {
1358
+ const link = property.linkTarget ? ` linkTarget="${escape(property.linkTarget, true)}"` : "";
1359
+ return `<property fmtid="${CUSTOM_PROPERTIES_FMTID}" pid="${pids[index] ?? index + 2}" name="${escape(property.name, true)}"${link}>${variantXml(property)}</property>`;
1360
+ }).join("");
1361
+ return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
1362
+ <Properties xmlns="${NS.customProperties}" xmlns:vt="${NS.vt}">${body}</Properties>`;
1363
+ }
1364
+
1365
+ // src/opc/signature/index.ts
1366
+ var signature_exports = {};
1367
+ __export(signature_exports, {
1368
+ DIGEST_ALGORITHM_TO_HASH: () => DIGEST_ALGORITHM_TO_HASH,
1369
+ DIGEST_ALGORITHM_TO_WEB_CRYPTO: () => DIGEST_ALGORITHM_TO_WEB_CRYPTO,
1370
+ DIGITAL_SIGNATURE_ORIGIN_REL_TYPE: () => DIGITAL_SIGNATURE_ORIGIN_REL_TYPE,
1371
+ DIGITAL_SIGNATURE_REL_TYPE: () => DIGITAL_SIGNATURE_REL_TYPE,
1372
+ ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV: () => ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV,
1373
+ ENTERPRISE_REQUIRE_REVOCATION_ENV: () => ENTERPRISE_REQUIRE_REVOCATION_ENV,
1374
+ ENTERPRISE_REQUIRE_TIMESTAMP_ENV: () => ENTERPRISE_REQUIRE_TIMESTAMP_ENV,
1375
+ ENTERPRISE_TRUST_ROOTS_FILE_ENV: () => ENTERPRISE_TRUST_ROOTS_FILE_ENV,
1376
+ ENTERPRISE_TRUST_ROOTS_PEM_ENV: () => ENTERPRISE_TRUST_ROOTS_PEM_ENV,
1377
+ OPC_RELATIONSHIP_TRANSFORM: () => OPC_RELATIONSHIP_TRANSFORM,
1378
+ PPTX_VIEWER_MANIFEST_NS: () => PPTX_VIEWER_MANIFEST_NS,
1379
+ SIGNATURE_PART_PREFIX: () => SIGNATURE_PART_PREFIX,
1380
+ SUPPORTED_XML_CANON_TRANSFORMS: () => SUPPORTED_XML_CANON_TRANSFORMS,
1381
+ XMLDSIG_NS: () => XMLDSIG_NS,
1382
+ XML_TRANSFORM_ENVELOPED_SIGNATURE: () => XML_TRANSFORM_ENVELOPED_SIGNATURE,
1383
+ computeDetailStatus: () => computeDetailStatus,
1384
+ computeDigestBase64: () => computeDigestBase64,
1385
+ computeVerificationStatus: () => computeVerificationStatus,
1386
+ detectDigitalSignatures: () => detectDigitalSignatures,
1387
+ escapeXmlAttr: () => escapeXmlAttr,
1388
+ escapeXmlText: () => escapeXmlText,
1389
+ extractAllTagText: () => extractAllTagText,
1390
+ extractFirstTagText: () => extractFirstTagText,
1391
+ extractTagAttribute: () => extractTagAttribute,
1392
+ getSignaturePathsToStrip: () => getSignaturePathsToStrip,
1393
+ isSignaturePart: () => isSignaturePart,
1394
+ isValidBase64: () => isValidBase64,
1395
+ normalizePartPath: () => normalizePartPath,
1396
+ parseSignatureXml: () => parseSignatureXml,
1397
+ resolveReferenceUriToPart: () => resolveReferenceUriToPart,
1398
+ verifySignatureDigests: () => verifySignatureDigests
1399
+ });
1400
+
1401
+ // src/opc/signature/detection.ts
1402
+ var SIGNATURE_PART_PREFIX = "_xmlsignatures/";
1403
+ var SIGNATURE_PREFIX = SIGNATURE_PART_PREFIX;
1404
+ function isSignaturePart(path) {
1405
+ return path.replace(/^\//, "").toLowerCase().startsWith(SIGNATURE_PART_PREFIX);
1406
+ }
1407
+ function detectDigitalSignatures(zipEntryPaths) {
1408
+ const sigPaths = zipEntryPaths.filter(
1409
+ (p) => p.startsWith(SIGNATURE_PREFIX) && p.endsWith(".xml")
1410
+ );
1411
+ return {
1412
+ hasSignatures: sigPaths.length > 0,
1413
+ signatureCount: sigPaths.length,
1414
+ signaturePaths: sigPaths
1415
+ };
1416
+ }
1417
+ function getSignaturePathsToStrip(zipEntryPaths) {
1418
+ return zipEntryPaths.filter((p) => p.startsWith(SIGNATURE_PREFIX));
1419
+ }
1420
+ function findByLocalName(parent, localName) {
1421
+ if (!parent) {
1422
+ return void 0;
1423
+ }
1424
+ if (parent[localName] !== void 0 && typeof parent[localName] === "object") {
1425
+ return parent[localName];
1426
+ }
1427
+ for (const key of Object.keys(parent)) {
1428
+ const parts = key.split(":");
1429
+ if (parts[parts.length - 1] === localName && typeof parent[key] === "object") {
1430
+ return parent[key];
1431
+ }
1432
+ }
1433
+ return void 0;
1434
+ }
1435
+ function findScalarByLocalName(parent, localName) {
1436
+ if (!parent) {
1437
+ return void 0;
1438
+ }
1439
+ if (parent[localName] !== void 0) {
1440
+ const v = parent[localName];
1441
+ if (typeof v === "string") {
1442
+ return v;
1443
+ }
1444
+ if (typeof v === "number" || typeof v === "boolean") {
1445
+ return String(v);
1446
+ }
1447
+ if (typeof v === "object" && v !== null && "#text" in v) {
1448
+ return String(v["#text"]);
1449
+ }
1450
+ }
1451
+ for (const key of Object.keys(parent)) {
1452
+ const parts = key.split(":");
1453
+ if (parts[parts.length - 1] === localName) {
1454
+ const v = parent[key];
1455
+ if (typeof v === "string") {
1456
+ return v;
1457
+ }
1458
+ if (typeof v === "number" || typeof v === "boolean") {
1459
+ return String(v);
1460
+ }
1461
+ if (typeof v === "object" && v !== null && "#text" in v) {
1462
+ return String(v["#text"]);
1463
+ }
1464
+ }
1465
+ }
1466
+ return void 0;
1467
+ }
1468
+ function findAllByLocalName(parent, localName) {
1469
+ if (!parent) {
1470
+ return [];
1471
+ }
1472
+ for (const key of Object.keys(parent)) {
1473
+ const parts = key.split(":");
1474
+ if (parts[parts.length - 1] === localName) {
1475
+ const v = parent[key];
1476
+ if (Array.isArray(v)) {
1477
+ return v;
1478
+ }
1479
+ if (typeof v === "object" && v !== null) {
1480
+ return [v];
1481
+ }
1482
+ }
1483
+ }
1484
+ return [];
1485
+ }
1486
+ function parseSignatureXml(signatureXml, signaturePath) {
1487
+ const signature = findByLocalName(signatureXml, "Signature");
1488
+ const signedInfo = findByLocalName(signature, "SignedInfo");
1489
+ const sigMethodNode = findByLocalName(signedInfo, "SignatureMethod");
1490
+ const signatureMethod = sigMethodNode?.["@_Algorithm"];
1491
+ const signatureValue = findScalarByLocalName(signature, "SignatureValue")?.replace(/\s+/g, "");
1492
+ const references = [];
1493
+ const refNodes = findAllByLocalName(signedInfo, "Reference");
1494
+ for (const ref of refNodes) {
1495
+ const uri = String(ref["@_URI"] || "");
1496
+ const dmNode = findByLocalName(ref, "DigestMethod");
1497
+ const digestMethod2 = dmNode?.["@_Algorithm"];
1498
+ const digestValue = findScalarByLocalName(ref, "DigestValue")?.replace(/\s+/g, "");
1499
+ references.push({
1500
+ uri,
1501
+ ...digestMethod2 === void 0 ? {} : { digestMethod: digestMethod2 },
1502
+ ...digestValue === void 0 ? {} : { digestValue }
1503
+ });
1504
+ }
1505
+ const digestMethod = references[0]?.digestMethod;
1506
+ const keyInfo = findByLocalName(signature, "KeyInfo");
1507
+ const x509Data = findByLocalName(keyInfo, "X509Data");
1508
+ let certificate;
1509
+ if (x509Data) {
1510
+ const certBase64 = findScalarByLocalName(x509Data, "X509Certificate")?.replace(/\s+/g, "");
1511
+ if (certBase64) {
1512
+ const issuerSerial = findByLocalName(x509Data, "X509IssuerSerial");
1513
+ const issuer = findScalarByLocalName(issuerSerial, "X509IssuerName");
1514
+ const serialNumber = findScalarByLocalName(issuerSerial, "X509SerialNumber");
1515
+ const subject = findScalarByLocalName(x509Data, "X509SubjectName");
1516
+ certificate = {
1517
+ certificateBase64: certBase64,
1518
+ ...issuer ? { issuer } : {},
1519
+ ...subject ? { subject } : {},
1520
+ ...serialNumber ? { serialNumber } : {}
1521
+ };
1522
+ }
1523
+ }
1524
+ let status = "unverified";
1525
+ if (certificate?.validTo) {
1526
+ const expiry = new Date(certificate.validTo);
1527
+ if (expiry < /* @__PURE__ */ new Date()) {
1528
+ status = "expired";
1529
+ }
1530
+ }
1531
+ return {
1532
+ signaturePath,
1533
+ ...signatureMethod === void 0 ? {} : { signatureMethod },
1534
+ ...digestMethod === void 0 ? {} : { digestMethod },
1535
+ ...signatureValue === void 0 ? {} : { signatureValue },
1536
+ ...certificate === void 0 ? {} : { certificate },
1537
+ status,
1538
+ references
1539
+ };
1540
+ }
1541
+ async function verifySignatureDigests(signature, getPartContent) {
1542
+ if (!signature.references.length) {
1543
+ return "unverified";
1544
+ }
1545
+ if (typeof globalThis.crypto?.subtle === "undefined") {
1546
+ return "unverified";
1547
+ }
1548
+ for (const ref of signature.references) {
1549
+ if (!ref.digestValue || !ref.uri) {
1550
+ continue;
1551
+ }
1552
+ const algo = ref.digestMethod?.toLowerCase() || "";
1553
+ let hashAlgo;
1554
+ if (algo.includes("sha256") || algo.includes("sha-256")) {
1555
+ hashAlgo = "SHA-256";
1556
+ } else if (algo.includes("sha512") || algo.includes("sha-512")) {
1557
+ hashAlgo = "SHA-512";
1558
+ } else if (algo.includes("sha1") || algo.includes("sha-1")) {
1559
+ hashAlgo = "SHA-1";
1560
+ } else {
1561
+ continue;
1562
+ }
1563
+ const content = await getPartContent(ref.uri);
1564
+ if (!content) {
1565
+ continue;
1566
+ }
1567
+ try {
1568
+ const digest = await crypto.subtle.digest(hashAlgo, content);
1569
+ const digestBase64 = arrayBufferToBase64(digest);
1570
+ if (digestBase64 !== ref.digestValue) {
1571
+ return "invalid";
1572
+ }
1573
+ } catch {
1574
+ return "unverified";
1575
+ }
1576
+ }
1577
+ return signature.certificate ? "valid" : "unknownCA";
1578
+ }
1579
+ function arrayBufferToBase64(buffer) {
1580
+ const bytes = new Uint8Array(buffer);
1581
+ let binary = "";
1582
+ for (let i = 0; i < bytes.byteLength; i++) {
1583
+ binary += String.fromCharCode(bytes[i]);
1584
+ }
1585
+ return btoa(binary);
1586
+ }
1587
+
1588
+ // src/opc/signature/constants.ts
1589
+ var DIGITAL_SIGNATURE_ORIGIN_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin";
1590
+ var DIGITAL_SIGNATURE_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/signature";
1591
+ var PPTX_VIEWER_MANIFEST_NS = "urn:pptx-viewer:ooxml-signature:v1";
1592
+ var XMLDSIG_NS = "http://www.w3.org/2000/09/xmldsig#";
1593
+ var OPC_RELATIONSHIP_TRANSFORM = "http://schemas.openxmlformats.org/package/2006/RelationshipTransform";
1594
+ var XML_TRANSFORM_ENVELOPED_SIGNATURE = "http://www.w3.org/2000/09/xmldsig#enveloped-signature";
1595
+ var SUPPORTED_XML_CANON_TRANSFORMS = /* @__PURE__ */ new Set([
1596
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
1597
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments",
1598
+ "http://www.w3.org/2001/10/xml-exc-c14n#",
1599
+ "http://www.w3.org/2001/10/xml-exc-c14n#WithComments",
1600
+ XML_TRANSFORM_ENVELOPED_SIGNATURE
1601
+ ]);
1602
+ var ENTERPRISE_TRUST_ROOTS_FILE_ENV = "PPTX_VIEWER_TRUST_ROOTS_FILE";
1603
+ var ENTERPRISE_TRUST_ROOTS_PEM_ENV = "PPTX_VIEWER_TRUST_ROOTS_PEM";
1604
+ var ENTERPRISE_REQUIRE_REVOCATION_ENV = "PPTX_VIEWER_REQUIRE_REVOCATION_CHECK";
1605
+ var ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV = "PPTX_VIEWER_FAIL_ON_REVOCATION_UNKNOWN";
1606
+ var ENTERPRISE_REQUIRE_TIMESTAMP_ENV = "PPTX_VIEWER_REQUIRE_TIMESTAMP";
1607
+ var DIGEST_ALGORITHM_TO_HASH = {
1608
+ "http://www.w3.org/2000/09/xmldsig#sha1": "sha1",
1609
+ "http://www.w3.org/2001/04/xmlenc#sha256": "sha256",
1610
+ "http://www.w3.org/2001/04/xmlenc#sha384": "sha384",
1611
+ "http://www.w3.org/2001/04/xmlenc#sha512": "sha512"
1612
+ };
1613
+ var DIGEST_ALGORITHM_TO_WEB_CRYPTO = {
1614
+ "http://www.w3.org/2000/09/xmldsig#sha1": "SHA-1",
1615
+ "http://www.w3.org/2001/04/xmlenc#sha256": "SHA-256",
1616
+ "http://www.w3.org/2001/04/xmlenc#sha384": "SHA-384",
1617
+ "http://www.w3.org/2001/04/xmlenc#sha512": "SHA-512"
1618
+ };
1619
+
1620
+ // src/opc/signature/xml-utils.ts
1621
+ function escapeXmlAttr(value) {
1622
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
1623
+ }
1624
+ function escapeXmlText(value) {
1625
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
1626
+ }
1627
+ function isValidBase64(value) {
1628
+ return typeof value === "string" && value.length > 0 && /^[A-Za-z0-9+/=\s]+$/.test(value);
1629
+ }
1630
+ function extractTagAttribute(xml, tagName, attributeName) {
1631
+ const pattern = new RegExp(
1632
+ `<${tagName}\\b[^>]*\\b${attributeName}="(?<attributeValue>[^"]+)"`,
1633
+ "i"
1634
+ );
1635
+ const match = xml.match(pattern);
1636
+ return match?.groups?.["attributeValue"]?.trim();
1637
+ }
1638
+ function extractFirstTagText(xml, localName) {
1639
+ const pattern = new RegExp(
1640
+ `<([\\w.-]+:)?${localName}\\b[^>]*>([\\s\\S]*?)<\\/([\\w.-]+:)?${localName}>`,
1641
+ "i"
1642
+ );
1643
+ const match = xml.match(pattern);
1644
+ return match?.[2]?.replace(/\s+/g, "").trim() || void 0;
1645
+ }
1646
+ function extractAllTagText(xml, localName) {
1647
+ const result = [];
1648
+ const regex = new RegExp(
1649
+ `<([\\w.-]+:)?${localName}\\b[^>]*>([\\s\\S]*?)<\\/([\\w.-]+:)?${localName}>`,
1650
+ "gi"
1651
+ );
1652
+ let match = regex.exec(xml);
1653
+ while (match) {
1654
+ const value = match[2]?.replace(/\s+/g, "").trim();
1655
+ if (value) {
1656
+ result.push(value);
1657
+ }
1658
+ match = regex.exec(xml);
1659
+ }
1660
+ return result;
1661
+ }
1662
+
1663
+ // src/opc/signature/reference-utils.ts
1664
+ function normalizePartPath(partPath) {
1665
+ return partPath.replace(/\\/g, "/").replace(/^\/+/, "");
1666
+ }
1667
+ function resolveReferenceUriToPart(uri) {
1668
+ const trimmed = uri.trim();
1669
+ if (trimmed.length === 0 || trimmed.startsWith("#")) {
1670
+ return void 0;
1671
+ }
1672
+ const decoded = decodeURIComponent(trimmed);
1673
+ return normalizePartPath(decoded.startsWith("/") ? decoded.slice(1) : decoded);
1674
+ }
1675
+
1676
+ // src/opc/signature/digest.ts
1677
+ async function computeDigestBase64(content, digestAlgorithmUri) {
1678
+ const webCryptoAlgo = DIGEST_ALGORITHM_TO_WEB_CRYPTO[digestAlgorithmUri];
1679
+ if (!webCryptoAlgo) {
1680
+ return void 0;
1681
+ }
1682
+ if (typeof globalThis.crypto?.subtle === "undefined") {
1683
+ return void 0;
1684
+ }
1685
+ const buf = new ArrayBuffer(content.byteLength);
1686
+ new Uint8Array(buf).set(content);
1687
+ const digest = await globalThis.crypto.subtle.digest(webCryptoAlgo, buf);
1688
+ return uint8ArrayToBase64(new Uint8Array(digest));
1689
+ }
1690
+ function uint8ArrayToBase64(bytes) {
1691
+ let binary = "";
1692
+ for (let i = 0; i < bytes.byteLength; i++) {
1693
+ binary += String.fromCharCode(bytes[i]);
1694
+ }
1695
+ return btoa(binary);
1696
+ }
1697
+
1698
+ // src/opc/signature/inspection-status.ts
1699
+ function computeDetailStatus(detail, policy) {
1700
+ const hasDigestMismatch = detail.referenceChecks.some(
1701
+ (check) => check.digestStatus === "mismatch"
1702
+ );
1703
+ const hasMissingPart = detail.missingPartReferences.length > 0;
1704
+ const hasVerifiedDigest = detail.referenceChecks.some(
1705
+ (check) => check.digestStatus === "verified"
1706
+ );
1707
+ const revocationUnknown = detail.certificateRevocationStatus === "unknown" || detail.certificateRevocationStatus === "not-checked" || detail.certificateRevocationStatus === "error";
1708
+ const timestampMissingOrUntrusted = detail.timestampAuthorityStatus === "not-present" || detail.timestampAuthorityStatus === "not-checked" || detail.timestampAuthorityStatus === "error" || detail.timestampAuthorityStatus === "untrusted";
1709
+ if (detail.signatureValueStatus === "invalid") {
1710
+ return "signature-invalid";
1711
+ }
1712
+ if (hasMissingPart) {
1713
+ return "reference-missing";
1714
+ }
1715
+ if (hasDigestMismatch) {
1716
+ return "digest-mismatch";
1717
+ }
1718
+ if (detail.certificateRevocationStatus === "revoked") {
1719
+ return "certificate-revoked";
1720
+ }
1721
+ if (policy.requireRevocationCheck && (policy.failOnRevocationUnknown ? revocationUnknown : detail.certificateRevocationStatus !== "good")) {
1722
+ return "certificate-untrusted";
1723
+ }
1724
+ if (detail.timestampAuthorityStatus === "invalid") {
1725
+ return "timestamp-invalid";
1726
+ }
1727
+ if (policy.requireTimestamp && timestampMissingOrUntrusted) {
1728
+ return "timestamp-untrusted";
1729
+ }
1730
+ if (detail.timestampAuthorityStatus === "untrusted") {
1731
+ return "timestamp-untrusted";
1732
+ }
1733
+ if (detail.certificateTrustStatus === "untrusted" && detail.signatureValueStatus === "verified") {
1734
+ return "certificate-untrusted";
1735
+ }
1736
+ if (hasVerifiedDigest && detail.signatureValueStatus === "verified") {
1737
+ return "verified";
1738
+ }
1739
+ return "structural-only";
1740
+ }
1741
+ function computeVerificationStatus(details) {
1742
+ const hasInvalidSignature = details.some((detail) => detail.status === "signature-invalid");
1743
+ const hasMissing = details.some((detail) => detail.status === "reference-missing");
1744
+ const hasMismatch = details.some((detail) => detail.status === "digest-mismatch");
1745
+ const hasUntrusted = details.some((detail) => detail.status === "certificate-untrusted");
1746
+ const hasRevoked = details.some((detail) => detail.status === "certificate-revoked");
1747
+ const hasTimestampInvalid = details.some((detail) => detail.status === "timestamp-invalid");
1748
+ const hasTimestampUntrusted = details.some((detail) => detail.status === "timestamp-untrusted");
1749
+ const allVerified = details.every((detail) => detail.status === "verified");
1750
+ 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";
1751
+ }
1022
1752
 
1023
1753
  // src/diagram/relationships.ts
1024
1754
  function diagramRelationshipsPart(partPath) {
@@ -1426,11 +2156,11 @@ function styleRef(element) {
1426
2156
  function parseStyleReferences(style) {
1427
2157
  const refs = {};
1428
2158
  const line2 = styleRef(first(style, "lnRef", NS.a));
1429
- const fill = styleRef(first(style, "fillRef", NS.a));
2159
+ const fill2 = styleRef(first(style, "fillRef", NS.a));
1430
2160
  const effect = styleRef(first(style, "effectRef", NS.a));
1431
2161
  const font = styleRef(first(style, "fontRef", NS.a));
1432
2162
  if (line2) refs.line = line2;
1433
- if (fill) refs.fill = fill;
2163
+ if (fill2) refs.fill = fill2;
1434
2164
  if (effect) refs.effect = effect;
1435
2165
  if (font) refs.font = font;
1436
2166
  return refs;
@@ -1482,23 +2212,23 @@ function fillElementOf(properties) {
1482
2212
  ) : void 0;
1483
2213
  }
1484
2214
  function parseDrawingFill(properties) {
1485
- const fill = fillElementOf(properties);
1486
- if (!fill) return void 0;
1487
- switch (fill.localName) {
2215
+ const fill2 = fillElementOf(properties);
2216
+ if (!fill2) return void 0;
2217
+ switch (fill2.localName) {
1488
2218
  case "noFill":
1489
2219
  return { kind: "none" };
1490
2220
  case "solidFill": {
1491
- const color = parseDrawingColorIn(fill);
2221
+ const color = parseDrawingColorIn(fill2);
1492
2222
  return color ? { kind: "solid", color } : { kind: "unsupported", element: "solidFill" };
1493
2223
  }
1494
2224
  case "gradFill": {
1495
- const stops = children(first(fill, "gsLst", NS.a) ?? fill, "gs", NS.a).flatMap((stop) => {
2225
+ const stops = children(first(fill2, "gsLst", NS.a) ?? fill2, "gs", NS.a).flatMap((stop) => {
1496
2226
  const color = parseDrawingColorIn(stop);
1497
2227
  const position = Number.parseInt(stop.getAttribute("pos") ?? "", 10);
1498
2228
  return color && Number.isFinite(position) ? [{ position: position / 1e3, color }] : [];
1499
2229
  });
1500
- const angle = Number.parseInt(first(fill, "lin", NS.a)?.getAttribute("ang") ?? "", 10);
1501
- const path = first(fill, "path", NS.a)?.getAttribute("path");
2230
+ const angle = Number.parseInt(first(fill2, "lin", NS.a)?.getAttribute("ang") ?? "", 10);
2231
+ const path = first(fill2, "path", NS.a)?.getAttribute("path");
1502
2232
  return {
1503
2233
  kind: "gradient",
1504
2234
  stops,
@@ -1507,22 +2237,22 @@ function parseDrawingFill(properties) {
1507
2237
  };
1508
2238
  }
1509
2239
  case "pattFill": {
1510
- const foreground = parseDrawingColorIn(first(fill, "fgClr", NS.a));
1511
- const background = parseDrawingColorIn(first(fill, "bgClr", NS.a));
2240
+ const foreground = parseDrawingColorIn(first(fill2, "fgClr", NS.a));
2241
+ const background = parseDrawingColorIn(first(fill2, "bgClr", NS.a));
1512
2242
  return {
1513
2243
  kind: "pattern",
1514
- preset: fill.getAttribute("prst") ?? "",
2244
+ preset: fill2.getAttribute("prst") ?? "",
1515
2245
  ...foreground ? { foreground } : {},
1516
2246
  ...background ? { background } : {}
1517
2247
  };
1518
2248
  }
1519
2249
  case "blipFill": {
1520
- const blip = first(fill, "blip", NS.a);
2250
+ const blip = first(fill2, "blip", NS.a);
1521
2251
  const relId = blip?.getAttributeNS(NS.r, "embed") || blip?.getAttribute("r:embed") || void 0;
1522
2252
  return { kind: "picture", ...relId ? { relId } : {} };
1523
2253
  }
1524
2254
  default:
1525
- return { kind: "unsupported", element: fill.localName };
2255
+ return { kind: "unsupported", element: fill2.localName };
1526
2256
  }
1527
2257
  }
1528
2258
  function parseDrawingLine(ln) {
@@ -1530,8 +2260,8 @@ function parseDrawingLine(ln) {
1530
2260
  const line2 = {};
1531
2261
  const width = Number.parseInt(ln.getAttribute("w") ?? "", 10);
1532
2262
  if (Number.isFinite(width)) line2.widthEmu = width;
1533
- const fill = parseDrawingFill(ln);
1534
- if (fill) line2.fill = fill;
2263
+ const fill2 = parseDrawingFill(ln);
2264
+ if (fill2) line2.fill = fill2;
1535
2265
  const dash = first(ln, "prstDash", NS.a)?.getAttribute("val");
1536
2266
  if (dash) line2.dash = dash;
1537
2267
  const cap = ln.getAttribute("cap");
@@ -1751,8 +2481,8 @@ function parseShape(sp, index, group, issues) {
1751
2481
  if (transform.flipVertical) shape.flipVertical = true;
1752
2482
  if (adjustments) shape.adjustments = adjustments;
1753
2483
  if (paths) shape.paths = paths;
1754
- const fill = parseDrawingFill(spPr);
1755
- if (fill) shape.fill = fill;
2484
+ const fill2 = parseDrawingFill(spPr);
2485
+ if (fill2) shape.fill = fill2;
1756
2486
  const line2 = parseDrawingLine(first(spPr, "ln", NS.a));
1757
2487
  if (line2) shape.line = line2;
1758
2488
  const style = first(sp, "style", NS.dsp);