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