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
@@ -2,6 +2,12 @@
2
2
 
3
3
  var xmldom = require('@xmldom/xmldom');
4
4
 
5
+ var __defProp = Object.defineProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+
5
11
  // src/opc/relationship-types.ts
6
12
  var BASE = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
7
13
  var RELATIONSHIP_TYPES = {
@@ -33,6 +39,7 @@ var RELATIONSHIP_TYPES = {
33
39
  diagramDrawing: "http://schemas.microsoft.com/office/2007/relationships/diagramDrawing",
34
40
  coreProperties: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",
35
41
  extendedProperties: `${BASE}/extended-properties`,
42
+ customProperties: `${BASE}/custom-properties`,
36
43
  customXml: `${BASE}/customXml`,
37
44
  worksheet: `${BASE}/worksheet`,
38
45
  chartsheet: `${BASE}/chartsheet`,
@@ -55,12 +62,69 @@ var RELATIONSHIP_TYPES = {
55
62
 
56
63
  // src/xml/namespaces.ts
57
64
  var NS = {
65
+ /** WordprocessingML main. */
66
+ w: "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
67
+ /** PresentationML main. */
68
+ p: "http://schemas.openxmlformats.org/presentationml/2006/main",
69
+ /** SpreadsheetML main. */
70
+ x: "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
71
+ /** DrawingML main. */
72
+ a: "http://schemas.openxmlformats.org/drawingml/2006/main",
73
+ /** DrawingML chart. */
74
+ c: "http://schemas.openxmlformats.org/drawingml/2006/chart",
75
+ /** DrawingML diagram (SmartArt) main. */
76
+ dgm: "http://schemas.openxmlformats.org/drawingml/2006/diagram",
77
+ /** Office 2007+ diagram drawing (`dsp`). */
78
+ dsp: "http://schemas.microsoft.com/office/drawing/2008/diagram",
79
+ /** DrawingML Word drawing (`wp:inline`, `wp:anchor`). */
80
+ wp: "http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing",
81
+ /** DrawingML picture. */
82
+ pic: "http://schemas.openxmlformats.org/drawingml/2006/picture",
83
+ /** Word 2010 shapes (`wps`). */
84
+ wps: "http://schemas.microsoft.com/office/word/2010/wordprocessingShape",
58
85
  /** Relationships (`r:id`, `r:embed`). */
59
86
  r: "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
87
+ /** Markup compatibility (`mc:AlternateContent`). */
88
+ mc: "http://schemas.openxmlformats.org/markup-compatibility/2006",
60
89
  /** OPC relationships part. */
61
90
  rels: "http://schemas.openxmlformats.org/package/2006/relationships",
62
91
  /** OPC content types part. */
63
- contentTypes: "http://schemas.openxmlformats.org/package/2006/content-types"};
92
+ contentTypes: "http://schemas.openxmlformats.org/package/2006/content-types",
93
+ /** Office Math. */
94
+ m: "http://schemas.openxmlformats.org/officeDocument/2006/math",
95
+ /** Core properties. */
96
+ cp: "http://schemas.openxmlformats.org/package/2006/metadata/core-properties",
97
+ /** Dublin Core elements. */
98
+ dc: "http://purl.org/dc/elements/1.1/",
99
+ /** Legacy VML. */
100
+ v: "urn:schemas-microsoft-com:vml",
101
+ /** Office VML extensions. */
102
+ o: "urn:schemas-microsoft-com:office:office",
103
+ /** Word VML extensions. */
104
+ w10: "urn:schemas-microsoft-com:office:word",
105
+ /** SpreadsheetML drawing (`xdr:wsDr`, cell anchors). */
106
+ xdr: "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing",
107
+ /** SpreadsheetML 2009 extensions (`x14:conditionalFormatting`, `x14:dataBar`). */
108
+ x14: "http://schemas.microsoft.com/office/spreadsheetml/2009/9/main",
109
+ /** SpreadsheetML 2009 attribute extensions (`x14ac:dyDescent`). */
110
+ x14ac: "http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac",
111
+ /** SpreadsheetML revision ids (`xr:uid`). */
112
+ xr: "http://schemas.microsoft.com/office/spreadsheetml/2014/revision",
113
+ /** Excel threaded comments and persons. */
114
+ tc: "http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",
115
+ /** Legacy VML Excel client data (`x:ClientData`). */
116
+ xv: "urn:schemas-microsoft-com:office:excel",
117
+ /** Extended (app) properties. */
118
+ extendedProperties: "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",
119
+ /** Dublin Core terms (`dcterms:created`). */
120
+ dcterms: "http://purl.org/dc/terms/",
121
+ /** Custom document properties (`docProps/custom.xml`). */
122
+ customProperties: "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",
123
+ /** Document property variant types (`vt:lpwstr`, `vt:vector`). */
124
+ vt: "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",
125
+ /** XML itself (`xml:space`). */
126
+ xml: "http://www.w3.org/XML/1998/namespace"
127
+ };
64
128
  function parseXml(xml, options = {}) {
65
129
  const label = options.label ?? "OOXML";
66
130
  if (/<!DOCTYPE|<!ENTITY/i.test(xml))
@@ -82,8 +146,15 @@ function parseXml(xml, options = {}) {
82
146
  throw new Error(`Invalid ${label} XML: ${parseError || "missing root element"}`);
83
147
  return parsed;
84
148
  }
149
+ var buildXml = (document) => new xmldom.XMLSerializer().serializeToString(document);
85
150
  var isElement = (node) => node.nodeType === 1;
86
151
  var elements = (parent) => Array.from(parent.childNodes).filter(isElement);
152
+ function named(element, local, ns, lenient = true) {
153
+ if (!element || element.localName !== local) return false;
154
+ return element.namespaceURI === ns || lenient && !element.namespaceURI;
155
+ }
156
+ var children = (parent, local, ns, lenient = true) => elements(parent).filter((element) => named(element, local, ns, lenient));
157
+ var first = (parent, local, ns, lenient = true) => parent ? children(parent, local, ns, lenient)[0] : void 0;
87
158
  function attr(element, local, ns, prefix) {
88
159
  return element?.getAttributeNS(ns, local) ?? element?.getAttribute(`${prefix}:${local}`) ?? void 0;
89
160
  }
@@ -227,8 +298,723 @@ function isSafeHyperlinkHref(href) {
227
298
  const scheme = /^([a-z][a-z0-9+.-]*:)/i.exec(href.trim())?.[1];
228
299
  return scheme !== void 0 && SAFE_SCHEMES.has(scheme.toLowerCase());
229
300
  }
301
+ var OPEN_SCHEMES = /* @__PURE__ */ new Set(["http", "https", "mailto"]);
302
+ var STORE_SCHEMES = /* @__PURE__ */ new Set([...OPEN_SCHEMES, "ftp", "file"]);
303
+ var SCRIPT_SCHEMES = /* @__PURE__ */ new Set([
304
+ "javascript",
305
+ "vbscript",
306
+ "livescript",
307
+ "jscript",
308
+ "mocha",
309
+ "data",
310
+ "mhtml",
311
+ "ms-its",
312
+ "mk",
313
+ "x-javascript",
314
+ "blob"
315
+ ]);
316
+ var IGNORABLE = new RegExp(
317
+ "[\\u0000-\\u0020\\u007f\\u00ad\\u200b-\\u200f\\u202a-\\u202e\\u2060-\\u2064\\ufeff]",
318
+ "gu"
319
+ );
320
+ var CONTROL = new RegExp("[\\u0000-\\u001f\\u007f]", "u");
321
+ var SCHEME = /^([a-z][a-z0-9+.-]*):/;
322
+ var STORE_ONLY = { store: true, open: false, reason: "not-openable" };
323
+ var reject = (reason) => ({
324
+ store: false,
325
+ open: false,
326
+ reason
327
+ });
328
+ function hyperlinkPolicy(href) {
329
+ if (typeof href !== "string") return reject("empty");
330
+ const trimmed = href.trim();
331
+ const normalized = trimmed.replace(IGNORABLE, "").toLowerCase();
332
+ if (normalized.length === 0) return reject("empty");
333
+ const scheme = SCHEME.exec(normalized)?.[1];
334
+ if (scheme !== void 0 && SCRIPT_SCHEMES.has(scheme)) return reject("script-scheme");
335
+ if (scheme !== void 0 && !trimmed.toLowerCase().startsWith(`${scheme}:`))
336
+ return reject("obfuscated-scheme");
337
+ if (CONTROL.test(trimmed)) return reject("control-characters");
338
+ if (scheme === void 0 || scheme.length === 1) return STORE_ONLY;
339
+ if (OPEN_SCHEMES.has(scheme)) return { store: true, open: true };
340
+ if (STORE_SCHEMES.has(scheme)) return STORE_ONLY;
341
+ return reject("unsupported-scheme");
342
+ }
343
+ function isStorableHyperlinkHref(href) {
344
+ return hyperlinkPolicy(href).store;
345
+ }
346
+ function isOpenableHyperlinkHref(href) {
347
+ return hyperlinkPolicy(href).open;
348
+ }
349
+
350
+ // src/opc/properties/types.ts
351
+ var CUSTOM_PROPERTIES_FMTID = "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}";
352
+ var PROPERTY_PART_NAMES = {
353
+ core: "docProps/core.xml",
354
+ app: "docProps/app.xml",
355
+ custom: "docProps/custom.xml"
356
+ };
357
+ var PROPERTY_CONTENT_TYPES = {
358
+ core: "application/vnd.openxmlformats-package.core-properties+xml",
359
+ app: "application/vnd.openxmlformats-officedocument.extended-properties+xml",
360
+ custom: "application/vnd.openxmlformats-officedocument.custom-properties+xml"
361
+ };
362
+
363
+ // src/opc/properties/core.ts
364
+ var XSI = "http://www.w3.org/2001/XMLSchema-instance";
365
+ var FIELDS = [
366
+ ["title", "dc", false],
367
+ ["subject", "dc", false],
368
+ ["creator", "dc", false],
369
+ ["keywords", "cp", false],
370
+ ["description", "dc", false],
371
+ ["lastModifiedBy", "cp", false],
372
+ ["created", "dcterms", true],
373
+ ["modified", "dcterms", true],
374
+ ["category", "cp", false],
375
+ ["contentStatus", "cp", false],
376
+ ["revision", "cp", false],
377
+ ["language", "dc", false],
378
+ ["identifier", "dc", false],
379
+ ["lastPrinted", "cp", false],
380
+ ["version", "cp", false]
381
+ ];
382
+ var CORE_PROPERTY_FIELDS = FIELDS.map(([field]) => field);
383
+ var EMPTY_CORE = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
384
+ <cp:coreProperties xmlns:cp="${NS.cp}" xmlns:dc="${NS.dc}" xmlns:dcterms="${NS.dcterms}" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="${XSI}"/>`;
385
+ function parseCoreProperties(xml) {
386
+ const out = {};
387
+ if (!xml) return out;
388
+ const root = parseXml(xml, { label: "core properties" }).documentElement;
389
+ for (const [field, prefix] of FIELDS) {
390
+ const text = first(root, field, NS[prefix])?.textContent ?? "";
391
+ if (text !== "") out[field] = text;
392
+ }
393
+ return out;
394
+ }
395
+ function writeCoreProperties(props, sourceXml) {
396
+ const doc = parseXml(sourceXml ?? EMPTY_CORE, { label: "core properties" });
397
+ const root = doc.documentElement;
398
+ for (const [field, prefix, isDate] of FIELDS) {
399
+ const ns = NS[prefix];
400
+ const value = props[field];
401
+ let element = first(root, field, ns);
402
+ if (value === void 0 || value === "") {
403
+ if (element && (element.textContent ?? "") !== "") root.removeChild(element);
404
+ continue;
405
+ }
406
+ if (!element) {
407
+ element = doc.createElementNS(ns, `${prefix}:${field}`);
408
+ if (isDate) element.setAttributeNS(XSI, "xsi:type", "dcterms:W3CDTF");
409
+ root.appendChild(element);
410
+ }
411
+ if (element.textContent !== value) element.textContent = value;
412
+ }
413
+ const out = buildXml(doc);
414
+ return out.startsWith("<?xml") ? out : `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
415
+ ${out}`;
416
+ }
417
+
418
+ // src/opc/properties/app.ts
419
+ var FIELDS2 = [
420
+ ["template", "Template", "text"],
421
+ ["totalTime", "TotalTime", "int"],
422
+ ["application", "Application", "text"],
423
+ ["docSecurity", "DocSecurity", "int"],
424
+ ["scaleCrop", "ScaleCrop", "bool"],
425
+ ["headingPairs", "HeadingPairs", "pairs"],
426
+ ["titlesOfParts", "TitlesOfParts", "titles"],
427
+ ["manager", "Manager", "text"],
428
+ ["company", "Company", "text"],
429
+ ["linksUpToDate", "LinksUpToDate", "bool"],
430
+ ["sharedDoc", "SharedDoc", "bool"],
431
+ ["hyperlinkBase", "HyperlinkBase", "text"],
432
+ ["hyperlinksChanged", "HyperlinksChanged", "bool"],
433
+ ["appVersion", "AppVersion", "text"]
434
+ ];
435
+ var EMPTY_APP = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
436
+ <Properties xmlns="${NS.extendedProperties}" xmlns:vt="${NS.vt}"/>`;
437
+ function vectorItems(element) {
438
+ const vector = first(element, "vector", NS.vt);
439
+ return vector ? elements(vector) : [];
440
+ }
441
+ function readPairs(element) {
442
+ const variants = vectorItems(element).map((variant) => elements(variant)[0]);
443
+ const out = [];
444
+ for (let i = 0; i + 1 < variants.length; i += 2) {
445
+ const name = variants[i]?.textContent ?? "";
446
+ const count = Number.parseInt(variants[i + 1]?.textContent ?? "", 10);
447
+ out.push({ name, count: Number.isFinite(count) ? count : 0 });
448
+ }
449
+ return out;
450
+ }
451
+ function readField(element, kind) {
452
+ const text = element.textContent ?? "";
453
+ if (kind === "pairs") return readPairs(element);
454
+ if (kind === "titles") return vectorItems(element).map((item) => item.textContent ?? "");
455
+ if (kind === "bool") return text.trim() === "true" || text.trim() === "1";
456
+ if (kind === "int") {
457
+ const value = Number.parseInt(text, 10);
458
+ return Number.isFinite(value) ? value : void 0;
459
+ }
460
+ return text === "" ? void 0 : text;
461
+ }
462
+ function parseAppProperties(xml) {
463
+ const out = {};
464
+ if (!xml) return out;
465
+ const root = parseXml(xml, { label: "app properties" }).documentElement;
466
+ for (const [field, local, kind] of FIELDS2) {
467
+ const element = first(root, local, NS.extendedProperties);
468
+ if (!element) continue;
469
+ const value = readField(element, kind);
470
+ if (value !== void 0) out[field] = value;
471
+ }
472
+ return out;
473
+ }
474
+ var same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
475
+ function fill(doc, element, kind, value) {
476
+ while (element.firstChild) element.removeChild(element.firstChild);
477
+ const vt = (local, text) => {
478
+ const node = doc.createElementNS(NS.vt, `vt:${local}`);
479
+ if (text !== void 0) node.textContent = text;
480
+ return node;
481
+ };
482
+ if (kind === "pairs" || kind === "titles") {
483
+ const items = kind === "pairs" ? value.flatMap((pair) => [
484
+ vt("lpstr", pair.name),
485
+ vt("i4", String(Math.trunc(pair.count)))
486
+ ]) : value.map((title) => vt("lpstr", title));
487
+ const vector = vt("vector");
488
+ vector.setAttribute("size", String(items.length));
489
+ vector.setAttribute("baseType", kind === "pairs" ? "variant" : "lpstr");
490
+ for (const item of items) {
491
+ if (kind === "pairs") {
492
+ const variant = vt("variant");
493
+ variant.appendChild(item);
494
+ vector.appendChild(variant);
495
+ } else vector.appendChild(item);
496
+ }
497
+ element.appendChild(vector);
498
+ return;
499
+ }
500
+ element.textContent = kind === "bool" ? value ? "true" : "false" : String(value);
501
+ }
502
+ function writeAppProperties(props, sourceXml) {
503
+ const doc = parseXml(sourceXml ?? EMPTY_APP, { label: "app properties" });
504
+ const root = doc.documentElement;
505
+ const prior = parseAppProperties(sourceXml);
506
+ FIELDS2.forEach(([field, local, kind], index) => {
507
+ const value = props[field];
508
+ const existing = first(root, local, NS.extendedProperties);
509
+ if (value === void 0 || kind === "text" && value === "") {
510
+ if (existing && (existing.textContent ?? "") !== "") root.removeChild(existing);
511
+ return;
512
+ }
513
+ if (existing && same(prior[field], value)) return;
514
+ let element = existing;
515
+ if (!element) {
516
+ element = doc.createElementNS(NS.extendedProperties, local);
517
+ const next = FIELDS2.slice(index + 1).map(([, name]) => first(root, name, NS.extendedProperties)).find((node) => node !== void 0);
518
+ root.insertBefore(element, next ?? null);
519
+ }
520
+ fill(doc, element, kind, value);
521
+ });
522
+ const out = buildXml(doc);
523
+ return out.startsWith("<?xml") ? out : `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
524
+ ${out}`;
525
+ }
526
+
527
+ // src/opc/properties/custom.ts
528
+ var escape = (text, attribute = false) => {
529
+ const out = text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
530
+ return attribute ? out.replace(/"/g, "&quot;") : out;
531
+ };
532
+ var isVt = (element) => element.namespaceURI === NS.vt || element.prefix === "vt";
533
+ function readValue(variant) {
534
+ const text = variant.textContent ?? "";
535
+ switch (isVt(variant) ? variant.localName : "") {
536
+ case "lpwstr":
537
+ return { name: "", type: "lpwstr", value: text };
538
+ case "i4":
539
+ case "int": {
540
+ const value = Number.parseInt(text, 10);
541
+ return Number.isFinite(value) ? { name: "", type: "i4", value } : void 0;
542
+ }
543
+ case "r8": {
544
+ const value = Number(text);
545
+ return text.trim() !== "" && Number.isFinite(value) ? { name: "", type: "r8", value } : void 0;
546
+ }
547
+ case "bool":
548
+ return { name: "", type: "bool", value: text.trim() === "true" || text.trim() === "1" };
549
+ case "filetime":
550
+ return { name: "", type: "filetime", value: text };
551
+ default:
552
+ return void 0;
553
+ }
554
+ }
555
+ function parseCustomProperties(xml) {
556
+ if (!xml) return [];
557
+ const root = parseXml(xml, { label: "custom properties" }).documentElement;
558
+ const out = [];
559
+ for (const property of children(root, "property", NS.customProperties)) {
560
+ const name = property.getAttribute("name") ?? "";
561
+ const variant = elements(property)[0];
562
+ if (!name || !variant) continue;
563
+ const value = readValue(variant) ?? {
564
+ name,
565
+ type: "raw",
566
+ xml: buildXml(variant)
567
+ };
568
+ const pid = Number.parseInt(property.getAttribute("pid") ?? "", 10);
569
+ const linkTarget = property.getAttribute("linkTarget");
570
+ out.push({
571
+ ...value,
572
+ name,
573
+ ...Number.isFinite(pid) ? { pid } : {},
574
+ ...linkTarget ? { linkTarget } : {}
575
+ });
576
+ }
577
+ return out;
578
+ }
579
+ function allocateCustomPropertyIds(properties) {
580
+ const used = /* @__PURE__ */ new Set();
581
+ const kept = properties.map((property) => {
582
+ const pid = property.pid;
583
+ if (pid === void 0 || !Number.isInteger(pid) || pid < 2 || used.has(pid)) return void 0;
584
+ used.add(pid);
585
+ return pid;
586
+ });
587
+ let next = Math.max(1, ...used) + 1;
588
+ return kept.map((pid) => pid ?? next++);
589
+ }
590
+ function variantXml(property) {
591
+ switch (property.type) {
592
+ case "raw":
593
+ return property.xml;
594
+ case "lpwstr":
595
+ return `<vt:lpwstr>${escape(property.value)}</vt:lpwstr>`;
596
+ case "i4":
597
+ return `<vt:i4>${Math.trunc(property.value)}</vt:i4>`;
598
+ case "r8":
599
+ return `<vt:r8>${String(property.value)}</vt:r8>`;
600
+ case "bool":
601
+ return `<vt:bool>${property.value ? "true" : "false"}</vt:bool>`;
602
+ case "filetime":
603
+ return `<vt:filetime>${escape(property.value)}</vt:filetime>`;
604
+ }
605
+ }
606
+ function writeCustomProperties(properties) {
607
+ const seen = /* @__PURE__ */ new Set();
608
+ const unique = properties.filter((property) => {
609
+ const key = property.name.toLowerCase();
610
+ if (!property.name || seen.has(key)) return false;
611
+ seen.add(key);
612
+ return true;
613
+ });
614
+ if (!unique.length) return void 0;
615
+ const pids = allocateCustomPropertyIds(unique);
616
+ const body = unique.map((property, index) => {
617
+ const link = property.linkTarget ? ` linkTarget="${escape(property.linkTarget, true)}"` : "";
618
+ return `<property fmtid="${CUSTOM_PROPERTIES_FMTID}" pid="${pids[index] ?? index + 2}" name="${escape(property.name, true)}"${link}>${variantXml(property)}</property>`;
619
+ }).join("");
620
+ return `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
621
+ <Properties xmlns="${NS.customProperties}" xmlns:vt="${NS.vt}">${body}</Properties>`;
622
+ }
623
+
624
+ // src/opc/signature/index.ts
625
+ var signature_exports = {};
626
+ __export(signature_exports, {
627
+ DIGEST_ALGORITHM_TO_HASH: () => DIGEST_ALGORITHM_TO_HASH,
628
+ DIGEST_ALGORITHM_TO_WEB_CRYPTO: () => DIGEST_ALGORITHM_TO_WEB_CRYPTO,
629
+ DIGITAL_SIGNATURE_ORIGIN_REL_TYPE: () => DIGITAL_SIGNATURE_ORIGIN_REL_TYPE,
630
+ DIGITAL_SIGNATURE_REL_TYPE: () => DIGITAL_SIGNATURE_REL_TYPE,
631
+ ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV: () => ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV,
632
+ ENTERPRISE_REQUIRE_REVOCATION_ENV: () => ENTERPRISE_REQUIRE_REVOCATION_ENV,
633
+ ENTERPRISE_REQUIRE_TIMESTAMP_ENV: () => ENTERPRISE_REQUIRE_TIMESTAMP_ENV,
634
+ ENTERPRISE_TRUST_ROOTS_FILE_ENV: () => ENTERPRISE_TRUST_ROOTS_FILE_ENV,
635
+ ENTERPRISE_TRUST_ROOTS_PEM_ENV: () => ENTERPRISE_TRUST_ROOTS_PEM_ENV,
636
+ OPC_RELATIONSHIP_TRANSFORM: () => OPC_RELATIONSHIP_TRANSFORM,
637
+ PPTX_VIEWER_MANIFEST_NS: () => PPTX_VIEWER_MANIFEST_NS,
638
+ SIGNATURE_PART_PREFIX: () => SIGNATURE_PART_PREFIX,
639
+ SUPPORTED_XML_CANON_TRANSFORMS: () => SUPPORTED_XML_CANON_TRANSFORMS,
640
+ XMLDSIG_NS: () => XMLDSIG_NS,
641
+ XML_TRANSFORM_ENVELOPED_SIGNATURE: () => XML_TRANSFORM_ENVELOPED_SIGNATURE,
642
+ computeDetailStatus: () => computeDetailStatus,
643
+ computeDigestBase64: () => computeDigestBase64,
644
+ computeVerificationStatus: () => computeVerificationStatus,
645
+ detectDigitalSignatures: () => detectDigitalSignatures,
646
+ escapeXmlAttr: () => escapeXmlAttr,
647
+ escapeXmlText: () => escapeXmlText,
648
+ extractAllTagText: () => extractAllTagText,
649
+ extractFirstTagText: () => extractFirstTagText,
650
+ extractTagAttribute: () => extractTagAttribute,
651
+ getSignaturePathsToStrip: () => getSignaturePathsToStrip,
652
+ isSignaturePart: () => isSignaturePart,
653
+ isValidBase64: () => isValidBase64,
654
+ normalizePartPath: () => normalizePartPath,
655
+ parseSignatureXml: () => parseSignatureXml,
656
+ resolveReferenceUriToPart: () => resolveReferenceUriToPart,
657
+ verifySignatureDigests: () => verifySignatureDigests
658
+ });
659
+
660
+ // src/opc/signature/detection.ts
661
+ var SIGNATURE_PART_PREFIX = "_xmlsignatures/";
662
+ var SIGNATURE_PREFIX = SIGNATURE_PART_PREFIX;
663
+ function isSignaturePart(path) {
664
+ return path.replace(/^\//, "").toLowerCase().startsWith(SIGNATURE_PART_PREFIX);
665
+ }
666
+ function detectDigitalSignatures(zipEntryPaths) {
667
+ const sigPaths = zipEntryPaths.filter(
668
+ (p) => p.startsWith(SIGNATURE_PREFIX) && p.endsWith(".xml")
669
+ );
670
+ return {
671
+ hasSignatures: sigPaths.length > 0,
672
+ signatureCount: sigPaths.length,
673
+ signaturePaths: sigPaths
674
+ };
675
+ }
676
+ function getSignaturePathsToStrip(zipEntryPaths) {
677
+ return zipEntryPaths.filter((p) => p.startsWith(SIGNATURE_PREFIX));
678
+ }
679
+ function findByLocalName(parent, localName) {
680
+ if (!parent) {
681
+ return void 0;
682
+ }
683
+ if (parent[localName] !== void 0 && typeof parent[localName] === "object") {
684
+ return parent[localName];
685
+ }
686
+ for (const key of Object.keys(parent)) {
687
+ const parts = key.split(":");
688
+ if (parts[parts.length - 1] === localName && typeof parent[key] === "object") {
689
+ return parent[key];
690
+ }
691
+ }
692
+ return void 0;
693
+ }
694
+ function findScalarByLocalName(parent, localName) {
695
+ if (!parent) {
696
+ return void 0;
697
+ }
698
+ if (parent[localName] !== void 0) {
699
+ const v = parent[localName];
700
+ if (typeof v === "string") {
701
+ return v;
702
+ }
703
+ if (typeof v === "number" || typeof v === "boolean") {
704
+ return String(v);
705
+ }
706
+ if (typeof v === "object" && v !== null && "#text" in v) {
707
+ return String(v["#text"]);
708
+ }
709
+ }
710
+ for (const key of Object.keys(parent)) {
711
+ const parts = key.split(":");
712
+ if (parts[parts.length - 1] === localName) {
713
+ const v = parent[key];
714
+ if (typeof v === "string") {
715
+ return v;
716
+ }
717
+ if (typeof v === "number" || typeof v === "boolean") {
718
+ return String(v);
719
+ }
720
+ if (typeof v === "object" && v !== null && "#text" in v) {
721
+ return String(v["#text"]);
722
+ }
723
+ }
724
+ }
725
+ return void 0;
726
+ }
727
+ function findAllByLocalName(parent, localName) {
728
+ if (!parent) {
729
+ return [];
730
+ }
731
+ for (const key of Object.keys(parent)) {
732
+ const parts = key.split(":");
733
+ if (parts[parts.length - 1] === localName) {
734
+ const v = parent[key];
735
+ if (Array.isArray(v)) {
736
+ return v;
737
+ }
738
+ if (typeof v === "object" && v !== null) {
739
+ return [v];
740
+ }
741
+ }
742
+ }
743
+ return [];
744
+ }
745
+ function parseSignatureXml(signatureXml, signaturePath) {
746
+ const signature = findByLocalName(signatureXml, "Signature");
747
+ const signedInfo = findByLocalName(signature, "SignedInfo");
748
+ const sigMethodNode = findByLocalName(signedInfo, "SignatureMethod");
749
+ const signatureMethod = sigMethodNode?.["@_Algorithm"];
750
+ const signatureValue = findScalarByLocalName(signature, "SignatureValue")?.replace(/\s+/g, "");
751
+ const references = [];
752
+ const refNodes = findAllByLocalName(signedInfo, "Reference");
753
+ for (const ref of refNodes) {
754
+ const uri = String(ref["@_URI"] || "");
755
+ const dmNode = findByLocalName(ref, "DigestMethod");
756
+ const digestMethod2 = dmNode?.["@_Algorithm"];
757
+ const digestValue = findScalarByLocalName(ref, "DigestValue")?.replace(/\s+/g, "");
758
+ references.push({
759
+ uri,
760
+ ...digestMethod2 === void 0 ? {} : { digestMethod: digestMethod2 },
761
+ ...digestValue === void 0 ? {} : { digestValue }
762
+ });
763
+ }
764
+ const digestMethod = references[0]?.digestMethod;
765
+ const keyInfo = findByLocalName(signature, "KeyInfo");
766
+ const x509Data = findByLocalName(keyInfo, "X509Data");
767
+ let certificate;
768
+ if (x509Data) {
769
+ const certBase64 = findScalarByLocalName(x509Data, "X509Certificate")?.replace(/\s+/g, "");
770
+ if (certBase64) {
771
+ const issuerSerial = findByLocalName(x509Data, "X509IssuerSerial");
772
+ const issuer = findScalarByLocalName(issuerSerial, "X509IssuerName");
773
+ const serialNumber = findScalarByLocalName(issuerSerial, "X509SerialNumber");
774
+ const subject = findScalarByLocalName(x509Data, "X509SubjectName");
775
+ certificate = {
776
+ certificateBase64: certBase64,
777
+ ...issuer ? { issuer } : {},
778
+ ...subject ? { subject } : {},
779
+ ...serialNumber ? { serialNumber } : {}
780
+ };
781
+ }
782
+ }
783
+ let status = "unverified";
784
+ if (certificate?.validTo) {
785
+ const expiry = new Date(certificate.validTo);
786
+ if (expiry < /* @__PURE__ */ new Date()) {
787
+ status = "expired";
788
+ }
789
+ }
790
+ return {
791
+ signaturePath,
792
+ ...signatureMethod === void 0 ? {} : { signatureMethod },
793
+ ...digestMethod === void 0 ? {} : { digestMethod },
794
+ ...signatureValue === void 0 ? {} : { signatureValue },
795
+ ...certificate === void 0 ? {} : { certificate },
796
+ status,
797
+ references
798
+ };
799
+ }
800
+ async function verifySignatureDigests(signature, getPartContent) {
801
+ if (!signature.references.length) {
802
+ return "unverified";
803
+ }
804
+ if (typeof globalThis.crypto?.subtle === "undefined") {
805
+ return "unverified";
806
+ }
807
+ for (const ref of signature.references) {
808
+ if (!ref.digestValue || !ref.uri) {
809
+ continue;
810
+ }
811
+ const algo = ref.digestMethod?.toLowerCase() || "";
812
+ let hashAlgo;
813
+ if (algo.includes("sha256") || algo.includes("sha-256")) {
814
+ hashAlgo = "SHA-256";
815
+ } else if (algo.includes("sha512") || algo.includes("sha-512")) {
816
+ hashAlgo = "SHA-512";
817
+ } else if (algo.includes("sha1") || algo.includes("sha-1")) {
818
+ hashAlgo = "SHA-1";
819
+ } else {
820
+ continue;
821
+ }
822
+ const content = await getPartContent(ref.uri);
823
+ if (!content) {
824
+ continue;
825
+ }
826
+ try {
827
+ const digest = await crypto.subtle.digest(hashAlgo, content);
828
+ const digestBase64 = arrayBufferToBase64(digest);
829
+ if (digestBase64 !== ref.digestValue) {
830
+ return "invalid";
831
+ }
832
+ } catch {
833
+ return "unverified";
834
+ }
835
+ }
836
+ return signature.certificate ? "valid" : "unknownCA";
837
+ }
838
+ function arrayBufferToBase64(buffer) {
839
+ const bytes = new Uint8Array(buffer);
840
+ let binary = "";
841
+ for (let i = 0; i < bytes.byteLength; i++) {
842
+ binary += String.fromCharCode(bytes[i]);
843
+ }
844
+ return btoa(binary);
845
+ }
846
+
847
+ // src/opc/signature/constants.ts
848
+ var DIGITAL_SIGNATURE_ORIGIN_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/origin";
849
+ var DIGITAL_SIGNATURE_REL_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/digital-signature/signature";
850
+ var PPTX_VIEWER_MANIFEST_NS = "urn:pptx-viewer:ooxml-signature:v1";
851
+ var XMLDSIG_NS = "http://www.w3.org/2000/09/xmldsig#";
852
+ var OPC_RELATIONSHIP_TRANSFORM = "http://schemas.openxmlformats.org/package/2006/RelationshipTransform";
853
+ var XML_TRANSFORM_ENVELOPED_SIGNATURE = "http://www.w3.org/2000/09/xmldsig#enveloped-signature";
854
+ var SUPPORTED_XML_CANON_TRANSFORMS = /* @__PURE__ */ new Set([
855
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315",
856
+ "http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments",
857
+ "http://www.w3.org/2001/10/xml-exc-c14n#",
858
+ "http://www.w3.org/2001/10/xml-exc-c14n#WithComments",
859
+ XML_TRANSFORM_ENVELOPED_SIGNATURE
860
+ ]);
861
+ var ENTERPRISE_TRUST_ROOTS_FILE_ENV = "PPTX_VIEWER_TRUST_ROOTS_FILE";
862
+ var ENTERPRISE_TRUST_ROOTS_PEM_ENV = "PPTX_VIEWER_TRUST_ROOTS_PEM";
863
+ var ENTERPRISE_REQUIRE_REVOCATION_ENV = "PPTX_VIEWER_REQUIRE_REVOCATION_CHECK";
864
+ var ENTERPRISE_FAIL_ON_REVOCATION_UNKNOWN_ENV = "PPTX_VIEWER_FAIL_ON_REVOCATION_UNKNOWN";
865
+ var ENTERPRISE_REQUIRE_TIMESTAMP_ENV = "PPTX_VIEWER_REQUIRE_TIMESTAMP";
866
+ var DIGEST_ALGORITHM_TO_HASH = {
867
+ "http://www.w3.org/2000/09/xmldsig#sha1": "sha1",
868
+ "http://www.w3.org/2001/04/xmlenc#sha256": "sha256",
869
+ "http://www.w3.org/2001/04/xmlenc#sha384": "sha384",
870
+ "http://www.w3.org/2001/04/xmlenc#sha512": "sha512"
871
+ };
872
+ var DIGEST_ALGORITHM_TO_WEB_CRYPTO = {
873
+ "http://www.w3.org/2000/09/xmldsig#sha1": "SHA-1",
874
+ "http://www.w3.org/2001/04/xmlenc#sha256": "SHA-256",
875
+ "http://www.w3.org/2001/04/xmlenc#sha384": "SHA-384",
876
+ "http://www.w3.org/2001/04/xmlenc#sha512": "SHA-512"
877
+ };
878
+
879
+ // src/opc/signature/xml-utils.ts
880
+ function escapeXmlAttr(value) {
881
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
882
+ }
883
+ function escapeXmlText(value) {
884
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
885
+ }
886
+ function isValidBase64(value) {
887
+ return typeof value === "string" && value.length > 0 && /^[A-Za-z0-9+/=\s]+$/.test(value);
888
+ }
889
+ function extractTagAttribute(xml, tagName, attributeName) {
890
+ const pattern = new RegExp(
891
+ `<${tagName}\\b[^>]*\\b${attributeName}="(?<attributeValue>[^"]+)"`,
892
+ "i"
893
+ );
894
+ const match = xml.match(pattern);
895
+ return match?.groups?.["attributeValue"]?.trim();
896
+ }
897
+ function extractFirstTagText(xml, localName) {
898
+ const pattern = new RegExp(
899
+ `<([\\w.-]+:)?${localName}\\b[^>]*>([\\s\\S]*?)<\\/([\\w.-]+:)?${localName}>`,
900
+ "i"
901
+ );
902
+ const match = xml.match(pattern);
903
+ return match?.[2]?.replace(/\s+/g, "").trim() || void 0;
904
+ }
905
+ function extractAllTagText(xml, localName) {
906
+ const result = [];
907
+ const regex = new RegExp(
908
+ `<([\\w.-]+:)?${localName}\\b[^>]*>([\\s\\S]*?)<\\/([\\w.-]+:)?${localName}>`,
909
+ "gi"
910
+ );
911
+ let match = regex.exec(xml);
912
+ while (match) {
913
+ const value = match[2]?.replace(/\s+/g, "").trim();
914
+ if (value) {
915
+ result.push(value);
916
+ }
917
+ match = regex.exec(xml);
918
+ }
919
+ return result;
920
+ }
921
+
922
+ // src/opc/signature/reference-utils.ts
923
+ function normalizePartPath(partPath) {
924
+ return partPath.replace(/\\/g, "/").replace(/^\/+/, "");
925
+ }
926
+ function resolveReferenceUriToPart(uri) {
927
+ const trimmed = uri.trim();
928
+ if (trimmed.length === 0 || trimmed.startsWith("#")) {
929
+ return void 0;
930
+ }
931
+ const decoded = decodeURIComponent(trimmed);
932
+ return normalizePartPath(decoded.startsWith("/") ? decoded.slice(1) : decoded);
933
+ }
934
+
935
+ // src/opc/signature/digest.ts
936
+ async function computeDigestBase64(content, digestAlgorithmUri) {
937
+ const webCryptoAlgo = DIGEST_ALGORITHM_TO_WEB_CRYPTO[digestAlgorithmUri];
938
+ if (!webCryptoAlgo) {
939
+ return void 0;
940
+ }
941
+ if (typeof globalThis.crypto?.subtle === "undefined") {
942
+ return void 0;
943
+ }
944
+ const buf = new ArrayBuffer(content.byteLength);
945
+ new Uint8Array(buf).set(content);
946
+ const digest = await globalThis.crypto.subtle.digest(webCryptoAlgo, buf);
947
+ return uint8ArrayToBase64(new Uint8Array(digest));
948
+ }
949
+ function uint8ArrayToBase64(bytes) {
950
+ let binary = "";
951
+ for (let i = 0; i < bytes.byteLength; i++) {
952
+ binary += String.fromCharCode(bytes[i]);
953
+ }
954
+ return btoa(binary);
955
+ }
956
+
957
+ // src/opc/signature/inspection-status.ts
958
+ function computeDetailStatus(detail, policy) {
959
+ const hasDigestMismatch = detail.referenceChecks.some(
960
+ (check) => check.digestStatus === "mismatch"
961
+ );
962
+ const hasMissingPart = detail.missingPartReferences.length > 0;
963
+ const hasVerifiedDigest = detail.referenceChecks.some(
964
+ (check) => check.digestStatus === "verified"
965
+ );
966
+ const revocationUnknown = detail.certificateRevocationStatus === "unknown" || detail.certificateRevocationStatus === "not-checked" || detail.certificateRevocationStatus === "error";
967
+ const timestampMissingOrUntrusted = detail.timestampAuthorityStatus === "not-present" || detail.timestampAuthorityStatus === "not-checked" || detail.timestampAuthorityStatus === "error" || detail.timestampAuthorityStatus === "untrusted";
968
+ if (detail.signatureValueStatus === "invalid") {
969
+ return "signature-invalid";
970
+ }
971
+ if (hasMissingPart) {
972
+ return "reference-missing";
973
+ }
974
+ if (hasDigestMismatch) {
975
+ return "digest-mismatch";
976
+ }
977
+ if (detail.certificateRevocationStatus === "revoked") {
978
+ return "certificate-revoked";
979
+ }
980
+ if (policy.requireRevocationCheck && (policy.failOnRevocationUnknown ? revocationUnknown : detail.certificateRevocationStatus !== "good")) {
981
+ return "certificate-untrusted";
982
+ }
983
+ if (detail.timestampAuthorityStatus === "invalid") {
984
+ return "timestamp-invalid";
985
+ }
986
+ if (policy.requireTimestamp && timestampMissingOrUntrusted) {
987
+ return "timestamp-untrusted";
988
+ }
989
+ if (detail.timestampAuthorityStatus === "untrusted") {
990
+ return "timestamp-untrusted";
991
+ }
992
+ if (detail.certificateTrustStatus === "untrusted" && detail.signatureValueStatus === "verified") {
993
+ return "certificate-untrusted";
994
+ }
995
+ if (hasVerifiedDigest && detail.signatureValueStatus === "verified") {
996
+ return "verified";
997
+ }
998
+ return "structural-only";
999
+ }
1000
+ function computeVerificationStatus(details) {
1001
+ const hasInvalidSignature = details.some((detail) => detail.status === "signature-invalid");
1002
+ const hasMissing = details.some((detail) => detail.status === "reference-missing");
1003
+ const hasMismatch = details.some((detail) => detail.status === "digest-mismatch");
1004
+ const hasUntrusted = details.some((detail) => detail.status === "certificate-untrusted");
1005
+ const hasRevoked = details.some((detail) => detail.status === "certificate-revoked");
1006
+ const hasTimestampInvalid = details.some((detail) => detail.status === "timestamp-invalid");
1007
+ const hasTimestampUntrusted = details.some((detail) => detail.status === "timestamp-untrusted");
1008
+ const allVerified = details.every((detail) => detail.status === "verified");
1009
+ 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";
1010
+ }
230
1011
 
1012
+ exports.CORE_PROPERTY_FIELDS = CORE_PROPERTY_FIELDS;
1013
+ exports.CUSTOM_PROPERTIES_FMTID = CUSTOM_PROPERTIES_FMTID;
1014
+ exports.PROPERTY_CONTENT_TYPES = PROPERTY_CONTENT_TYPES;
1015
+ exports.PROPERTY_PART_NAMES = PROPERTY_PART_NAMES;
231
1016
  exports.RELATIONSHIP_TYPES = RELATIONSHIP_TYPES;
1017
+ exports.allocateCustomPropertyIds = allocateCustomPropertyIds;
232
1018
  exports.buildContentTypesXml = buildContentTypesXml;
233
1019
  exports.buildRelationshipsXml = buildRelationshipsXml;
234
1020
  exports.contentTypeForPart = contentTypeForPart;
@@ -237,9 +1023,19 @@ exports.ensureContentTypeOverride = ensureContentTypeOverride;
237
1023
  exports.ensureRelationship = ensureRelationship;
238
1024
  exports.findOfficeDocumentPart = findOfficeDocumentPart;
239
1025
  exports.getRelationshipId = getRelationshipId;
1026
+ exports.hyperlinkPolicy = hyperlinkPolicy;
1027
+ exports.isOpenableHyperlinkHref = isOpenableHyperlinkHref;
240
1028
  exports.isSafeHyperlinkHref = isSafeHyperlinkHref;
1029
+ exports.isStorableHyperlinkHref = isStorableHyperlinkHref;
241
1030
  exports.nextRelationshipId = nextRelationshipId;
1031
+ exports.parseAppProperties = parseAppProperties;
242
1032
  exports.parseContentTypes = parseContentTypes;
1033
+ exports.parseCoreProperties = parseCoreProperties;
1034
+ exports.parseCustomProperties = parseCustomProperties;
243
1035
  exports.parseRelationships = parseRelationships;
244
1036
  exports.relationshipsPartFor = relationshipsPartFor;
245
1037
  exports.resolvePartPath = resolvePartPath;
1038
+ exports.signature = signature_exports;
1039
+ exports.writeAppProperties = writeAppProperties;
1040
+ exports.writeCoreProperties = writeCoreProperties;
1041
+ exports.writeCustomProperties = writeCustomProperties;