@usejunior/docx-core 0.18.0 → 0.19.1

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 (51) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/generation/emit/borders.d.ts +14 -0
  3. package/dist/generation/emit/borders.d.ts.map +1 -0
  4. package/dist/generation/emit/borders.js +45 -0
  5. package/dist/generation/emit/borders.js.map +1 -0
  6. package/dist/generation/emit/properties.d.ts +1 -1
  7. package/dist/generation/emit/properties.d.ts.map +1 -1
  8. package/dist/generation/emit/properties.js +4 -0
  9. package/dist/generation/emit/properties.js.map +1 -1
  10. package/dist/generation/emit/table.d.ts.map +1 -1
  11. package/dist/generation/emit/table.js +3 -31
  12. package/dist/generation/emit/table.js.map +1 -1
  13. package/dist/generation/index.d.ts +1 -1
  14. package/dist/generation/index.d.ts.map +1 -1
  15. package/dist/generation/types.d.ts +9 -0
  16. package/dist/generation/types.d.ts.map +1 -1
  17. package/dist/generation/types.js.map +1 -1
  18. package/dist/generation/validate-spec.d.ts.map +1 -1
  19. package/dist/generation/validate-spec.js +2 -0
  20. package/dist/generation/validate-spec.js.map +1 -1
  21. package/dist/integration/synthetic-docx-fixture.d.ts.map +1 -1
  22. package/dist/integration/synthetic-docx-fixture.js +29 -20
  23. package/dist/integration/synthetic-docx-fixture.js.map +1 -1
  24. package/dist/primitives/formatting_tags.js +2 -2
  25. package/dist/primitives/formatting_tags.js.map +1 -1
  26. package/dist/primitives/index.d.ts +2 -0
  27. package/dist/primitives/index.d.ts.map +1 -1
  28. package/dist/primitives/index.js +2 -0
  29. package/dist/primitives/index.js.map +1 -1
  30. package/dist/primitives/namespaces.d.ts +2 -0
  31. package/dist/primitives/namespaces.d.ts.map +1 -1
  32. package/dist/primitives/namespaces.js +2 -0
  33. package/dist/primitives/namespaces.js.map +1 -1
  34. package/dist/primitives/opc-target.d.ts +24 -0
  35. package/dist/primitives/opc-target.d.ts.map +1 -0
  36. package/dist/primitives/opc-target.js +99 -0
  37. package/dist/primitives/opc-target.js.map +1 -0
  38. package/dist/primitives/sectPrAudit.d.ts +18 -1
  39. package/dist/primitives/sectPrAudit.d.ts.map +1 -1
  40. package/dist/primitives/sectPrAudit.js +110 -33
  41. package/dist/primitives/sectPrAudit.js.map +1 -1
  42. package/dist/primitives/serialize_html.d.ts.map +1 -1
  43. package/dist/primitives/serialize_html.js +18 -7
  44. package/dist/primitives/serialize_html.js.map +1 -1
  45. package/dist/primitives/track-changes-emitter.js +1 -1
  46. package/dist/primitives/track-changes-emitter.js.map +1 -1
  47. package/dist/shared/field-structure.d.ts +8 -0
  48. package/dist/shared/field-structure.d.ts.map +1 -1
  49. package/dist/shared/field-structure.js +74 -0
  50. package/dist/shared/field-structure.js.map +1 -1
  51. package/package.json +2 -4
@@ -1 +1 @@
1
- {"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../../src/primitives/namespaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../../src/primitives/namespaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export type OpcRelationshipTargetMode = 'Internal' | 'External';
2
+ export type OpcRelationshipTargetIssue = 'empty_target' | 'invalid_target_mode' | 'external_target_not_allowed' | 'invalid_encoding' | 'unsafe_target' | 'package_escape' | 'empty_resolved_target' | 'invalid_external_target';
3
+ export declare class OpcRelationshipTargetError extends Error {
4
+ readonly issue: OpcRelationshipTargetIssue;
5
+ constructor(issue: OpcRelationshipTargetIssue, message: string);
6
+ }
7
+ export interface NormalizeOpcRelationshipTargetOptions {
8
+ ownerPart: string;
9
+ target: string;
10
+ targetMode?: string | null;
11
+ allowExternal?: boolean;
12
+ }
13
+ export interface NormalizedOpcRelationshipTarget {
14
+ mode: OpcRelationshipTargetMode;
15
+ target: string;
16
+ }
17
+ /**
18
+ * Normalize one OPC relationship target under SafeDocX package-containment
19
+ * policy. Internal targets are decoded once, checked for ambiguous or unsafe
20
+ * URI/path forms, and resolved relative to the owning part. External targets
21
+ * are accepted only when the caller opts in.
22
+ */
23
+ export declare function normalizeOpcRelationshipTarget(options: NormalizeOpcRelationshipTargetOptions): NormalizedOpcRelationshipTarget;
24
+ //# sourceMappingURL=opc-target.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opc-target.d.ts","sourceRoot":"","sources":["../../src/primitives/opc-target.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,yBAAyB,GAAG,UAAU,GAAG,UAAU,CAAC;AAEhE,MAAM,MAAM,0BAA0B,GAClC,cAAc,GACd,qBAAqB,GACrB,6BAA6B,GAC7B,kBAAkB,GAClB,eAAe,GACf,gBAAgB,GAChB,uBAAuB,GACvB,yBAAyB,CAAC;AAE9B,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,QAAQ,CAAC,KAAK,EAAE,0BAA0B;gBAAjC,KAAK,EAAE,0BAA0B,EAC1C,OAAO,EAAE,MAAM;CAKlB;AAED,MAAM,WAAW,qCAAqC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,yBAAyB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AA6FD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qCAAqC,GAC7C,+BAA+B,CAsBjC"}
@@ -0,0 +1,99 @@
1
+ import { posix } from 'node:path';
2
+ export class OpcRelationshipTargetError extends Error {
3
+ issue;
4
+ constructor(issue, message) {
5
+ super(message);
6
+ this.issue = issue;
7
+ this.name = 'OpcRelationshipTargetError';
8
+ }
9
+ }
10
+ function targetMode(value) {
11
+ if (value === null || value === undefined || value === 'Internal') {
12
+ return 'Internal';
13
+ }
14
+ if (value === 'External')
15
+ return 'External';
16
+ throw new OpcRelationshipTargetError('invalid_target_mode', `invalid relationship TargetMode '${value}'`);
17
+ }
18
+ function normalizeInternalTarget(ownerPart, target) {
19
+ if (!target) {
20
+ throw new OpcRelationshipTargetError('empty_target', 'empty internal relationship target');
21
+ }
22
+ if (target.includes('\\') || /[\u0000-\u001f\u007f?#]/u.test(target)) {
23
+ throw new OpcRelationshipTargetError('unsafe_target', `unsafe internal relationship target '${target}'`);
24
+ }
25
+ let decoded = target;
26
+ for (let pass = 0; pass <= target.length; pass++) {
27
+ if (/%(?:2f|5c)/iu.test(decoded)) {
28
+ throw new OpcRelationshipTargetError('unsafe_target', `encoded path separator in internal relationship target '${target}'`);
29
+ }
30
+ let next;
31
+ try {
32
+ next = decodeURIComponent(decoded);
33
+ }
34
+ catch {
35
+ throw new OpcRelationshipTargetError('invalid_encoding', `invalid encoded relationship target '${target}'`);
36
+ }
37
+ const rawSegments = decoded.split('/');
38
+ const nextSegments = next.split('/');
39
+ if (next.includes('\\') ||
40
+ /[\u0000-\u001f\u007f?#]/u.test(next) ||
41
+ next.startsWith('//') ||
42
+ next.includes(':') ||
43
+ nextSegments.some((segment, index) => (segment === '.' || segment === '..') && rawSegments[index] !== segment)) {
44
+ throw new OpcRelationshipTargetError('unsafe_target', `unsafe internal relationship target '${target}'`);
45
+ }
46
+ decoded = next;
47
+ if (!/%[0-9a-f]{2}/iu.test(decoded))
48
+ break;
49
+ if (pass === target.length) {
50
+ throw new OpcRelationshipTargetError('invalid_encoding', `excessively nested encoded relationship target '${target}'`);
51
+ }
52
+ }
53
+ const decodedSegments = decoded.split('/');
54
+ const segments = decoded.startsWith('/')
55
+ ? []
56
+ : posix.dirname(ownerPart).split('/').filter(Boolean);
57
+ for (const segment of decodedSegments) {
58
+ if (!segment || segment === '.')
59
+ continue;
60
+ if (segment === '..') {
61
+ if (segments.length === 0) {
62
+ throw new OpcRelationshipTargetError('package_escape', `relationship target escapes the package root: '${target}'`);
63
+ }
64
+ segments.pop();
65
+ }
66
+ else {
67
+ segments.push(segment);
68
+ }
69
+ }
70
+ if (segments.length === 0) {
71
+ throw new OpcRelationshipTargetError('empty_resolved_target', `empty resolved relationship target '${target}'`);
72
+ }
73
+ return segments.join('/');
74
+ }
75
+ /**
76
+ * Normalize one OPC relationship target under SafeDocX package-containment
77
+ * policy. Internal targets are decoded once, checked for ambiguous or unsafe
78
+ * URI/path forms, and resolved relative to the owning part. External targets
79
+ * are accepted only when the caller opts in.
80
+ */
81
+ export function normalizeOpcRelationshipTarget(options) {
82
+ const mode = targetMode(options.targetMode);
83
+ if (mode === 'External') {
84
+ if (!options.allowExternal) {
85
+ throw new OpcRelationshipTargetError('external_target_not_allowed', `external relationship target is not allowed: '${options.target}'`);
86
+ }
87
+ try {
88
+ return { mode, target: new URL(options.target).href };
89
+ }
90
+ catch {
91
+ throw new OpcRelationshipTargetError('invalid_external_target', `unsafe external relationship target '${options.target}'`);
92
+ }
93
+ }
94
+ return {
95
+ mode,
96
+ target: normalizeInternalTarget(options.ownerPart, options.target),
97
+ };
98
+ }
99
+ //# sourceMappingURL=opc-target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opc-target.js","sourceRoot":"","sources":["../../src/primitives/opc-target.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,28 @@
1
- export type SectPrIssueType = 'missing_body' | 'multiple_body_level_sectpr' | 'body_level_sectpr_not_last' | 'sectpr_invalid_parent' | 'sectpr_in_ppr_without_paragraph_parent' | 'sectpr_reference_missing_rid' | 'sectpr_reference_invalid_type' | 'sectpr_duplicate_reference_type' | 'sectpr_reference_dangling_rid' | 'sectpr_duplicate_relationship_id' | 'sectpr_reference_wrong_relationship_type' | 'sectpr_reference_invalid_target' | 'sectpr_reference_missing_target_part' | 'sectpr_reference_wrong_target_root';
1
+ export type SectPrIssueType = 'missing_body' | 'multiple_body_level_sectpr' | 'body_level_sectpr_not_last' | 'sectpr_invalid_parent' | 'sectpr_in_ppr_without_paragraph_parent' | 'sectpr_reference_missing_rid' | 'sectpr_reference_invalid_type' | 'sectpr_reference_invalid_placement' | 'sectpr_duplicate_reference_type' | 'sectpr_reference_dangling_rid' | 'sectpr_duplicate_relationship_id' | 'sectpr_reference_wrong_relationship_type' | 'sectpr_reference_invalid_target_mode' | 'sectpr_reference_external_target' | 'sectpr_reference_invalid_target' | 'sectpr_reference_missing_target_part' | 'sectpr_reference_wrong_target_root';
2
2
  export interface SectPrAuditIssue {
3
3
  type: SectPrIssueType;
4
4
  path: string;
5
5
  message: string;
6
6
  rid?: string;
7
+ sectionOrdinal?: number;
8
+ kind?: SectPrBindingKind;
9
+ role?: SectPrBindingRole;
10
+ targetPath?: string;
11
+ }
12
+ export type SectPrBindingKind = 'header' | 'footer';
13
+ export type SectPrBindingRole = 'default' | 'first' | 'even';
14
+ export interface SectPrBinding {
15
+ sectionOrdinal: number;
16
+ kind: SectPrBindingKind;
17
+ role: SectPrBindingRole;
18
+ rid: string;
19
+ targetPath: string;
20
+ path: string;
7
21
  }
8
22
  export interface SectPrAuditSummary {
9
23
  ok: boolean;
10
24
  issues: SectPrAuditIssue[];
25
+ bindings: SectPrBinding[];
11
26
  stats: {
12
27
  bodyLevelSectPrCount: number;
13
28
  paragraphLevelSectPrCount: number;
@@ -22,6 +37,8 @@ export interface SectPrAuditSummary {
22
37
  *
23
38
  * @conformance ECMA-376 edition 5, Part 1 § 17.10.5
24
39
  * @conformance ECMA-376 edition 5, Part 1 § 17.10.2
40
+ * @conformance ECMA-376 edition 5, Part 1 § 17.10.4
41
+ * @conformance ECMA-376 edition 5, Part 1 § 17.10.3
25
42
  * @see https://github.com/UseJunior/safe-docx/issues/560
26
43
  */
27
44
  export declare function auditSectPr(documentXml: string, documentRelsXml?: string | null, packageParts?: ReadonlyMap<string, string>): SectPrAuditSummary;
@@ -1 +1 @@
1
- {"version":3,"file":"sectPrAudit.d.ts","sourceRoot":"","sources":["../../src/primitives/sectPrAudit.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,4BAA4B,GAC5B,4BAA4B,GAC5B,uBAAuB,GACvB,wCAAwC,GACxC,8BAA8B,GAC9B,+BAA+B,GAC/B,iCAAiC,GACjC,+BAA+B,GAC/B,kCAAkC,GAClC,0CAA0C,GAC1C,iCAAiC,GACjC,sCAAsC,GACtC,oCAAoC,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,KAAK,EAAE;QACL,oBAAoB,EAAE,MAAM,CAAC;QAC7B,yBAAyB,EAAE,MAAM,CAAC;QAClC,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAmGD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,EAC/B,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,kBAAkB,CA2MpB"}
1
+ {"version":3,"file":"sectPrAudit.d.ts","sourceRoot":"","sources":["../../src/primitives/sectPrAudit.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,eAAe,GACvB,cAAc,GACd,4BAA4B,GAC5B,4BAA4B,GAC5B,uBAAuB,GACvB,wCAAwC,GACxC,8BAA8B,GAC9B,+BAA+B,GAC/B,oCAAoC,GACpC,iCAAiC,GACjC,+BAA+B,GAC/B,kCAAkC,GAClC,0CAA0C,GAC1C,sCAAsC,GACtC,kCAAkC,GAClC,iCAAiC,GACjC,sCAAsC,GACtC,oCAAoC,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,iBAAiB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,KAAK,EAAE;QACL,oBAAoB,EAAE,MAAM,CAAC;QAC7B,yBAAyB,EAAE,MAAM,CAAC;QAClC,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAsFD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,EAC/B,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,kBAAkB,CAsSpB"}
@@ -1,6 +1,7 @@
1
1
  import { parseXml } from './xml.js';
2
2
  import { childElements } from './dom-helpers.js';
3
3
  import { OOXML } from './namespaces.js';
4
+ import { OpcRelationshipTargetError, normalizeOpcRelationshipTarget, } from './opc-target.js';
4
5
  function elementSiblingIndex(node) {
5
6
  const parent = node.parentNode;
6
7
  if (!parent)
@@ -54,7 +55,9 @@ function collectRelationships(documentRelsXml) {
54
55
  relationshipsById.set(id, {
55
56
  type: rel?.getAttribute('Type') ?? '',
56
57
  target: rel?.getAttribute('Target') ?? '',
57
- external: rel?.getAttribute('TargetMode') === 'External',
58
+ targetMode: rel?.hasAttribute('TargetMode')
59
+ ? rel.getAttribute('TargetMode') ?? undefined
60
+ : undefined,
58
61
  });
59
62
  }
60
63
  }
@@ -64,24 +67,6 @@ function collectRelationships(documentRelsXml) {
64
67
  return { relationships: new Map(), duplicateIds: [] };
65
68
  }
66
69
  }
67
- function resolveDocumentTarget(target) {
68
- // Part-name fragments are outside this audit's explicit OPC target model.
69
- if (target.includes('#'))
70
- return undefined;
71
- const parts = target.startsWith('/') ? [] : ['word'];
72
- for (const segment of target.split('/')) {
73
- if (!segment || segment === '.')
74
- continue;
75
- if (segment === '..') {
76
- if (parts.length === 0)
77
- return undefined;
78
- parts.pop();
79
- }
80
- else
81
- parts.push(segment);
82
- }
83
- return parts.length > 0 ? parts.join('/') : undefined;
84
- }
85
70
  function getRid(ref) {
86
71
  return ref.getAttributeNS(OOXML.R_NS, 'id') || undefined;
87
72
  }
@@ -92,12 +77,16 @@ function getRid(ref) {
92
77
  *
93
78
  * @conformance ECMA-376 edition 5, Part 1 § 17.10.5
94
79
  * @conformance ECMA-376 edition 5, Part 1 § 17.10.2
80
+ * @conformance ECMA-376 edition 5, Part 1 § 17.10.4
81
+ * @conformance ECMA-376 edition 5, Part 1 § 17.10.3
95
82
  * @see https://github.com/UseJunior/safe-docx/issues/560
96
83
  */
97
84
  export function auditSectPr(documentXml, documentRelsXml, packageParts) {
98
85
  const issues = [];
86
+ const bindings = [];
99
87
  const relationshipCollection = collectRelationships(documentRelsXml);
100
88
  const relationships = relationshipCollection.relationships;
89
+ const ambiguousRelationshipIds = new Set(relationshipCollection.duplicateIds);
101
90
  for (const id of relationshipCollection.duplicateIds) {
102
91
  issues.push({
103
92
  type: 'sectpr_duplicate_relationship_id',
@@ -118,6 +107,7 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
118
107
  message: 'Missing w:body element',
119
108
  },
120
109
  ],
110
+ bindings,
121
111
  stats: {
122
112
  bodyLevelSectPrCount: 0,
123
113
  paragraphLevelSectPrCount: 0,
@@ -152,7 +142,7 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
152
142
  const sectPrNodes = Array.from(doc.getElementsByTagNameNS(OOXML.W_NS, 'sectPr'));
153
143
  let paragraphLevelSectPrCount = 0;
154
144
  let referenceCount = 0;
155
- for (const sectPr of sectPrNodes) {
145
+ for (const [sectionOrdinal, sectPr] of sectPrNodes.entries()) {
156
146
  const seenReferenceTypes = new Set();
157
147
  const parent = sectPr.parentNode;
158
148
  const parentTag = parent && parent.nodeType === 1 ? parent.tagName : '';
@@ -174,20 +164,54 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
174
164
  message: `w:sectPr has invalid parent '${parentTag || '(none)'}'`,
175
165
  });
176
166
  }
167
+ const descendantReferences = Array.from(sectPr.getElementsByTagNameNS(OOXML.W_NS, '*')).filter((element) => {
168
+ if (element.localName !== 'headerReference' && element.localName !== 'footerReference') {
169
+ return false;
170
+ }
171
+ let ancestor = element.parentNode;
172
+ while (ancestor && ancestor !== sectPr) {
173
+ if (ancestor.nodeType === 1 && isWmlElement(ancestor, 'sectPr'))
174
+ return false;
175
+ ancestor = ancestor.parentNode;
176
+ }
177
+ return ancestor === sectPr;
178
+ });
179
+ referenceCount += descendantReferences.length;
180
+ for (const reference of descendantReferences) {
181
+ if (reference.parentNode === sectPr)
182
+ continue;
183
+ const referenceType = reference.getAttributeNS(OOXML.W_NS, 'type') ?? '';
184
+ issues.push({
185
+ type: 'sectpr_reference_invalid_placement',
186
+ path: nodePath(reference),
187
+ message: `${reference.tagName} must be a direct child of w:sectPr`,
188
+ sectionOrdinal,
189
+ kind: reference.localName === 'headerReference' ? 'header' : 'footer',
190
+ role: REFERENCE_TYPES.has(referenceType)
191
+ ? referenceType
192
+ : undefined,
193
+ });
194
+ }
177
195
  for (const child of childElements(sectPr)) {
178
196
  const isHeaderReference = isWmlElement(child, 'headerReference');
179
197
  const isFooterReference = isWmlElement(child, 'footerReference');
180
198
  if (!isHeaderReference && !isFooterReference) {
181
199
  continue;
182
200
  }
183
- referenceCount++;
201
+ const kind = isHeaderReference ? 'header' : 'footer';
184
202
  const referenceType = child.getAttributeNS(OOXML.W_NS, 'type') ?? '';
203
+ const role = REFERENCE_TYPES.has(referenceType)
204
+ ? referenceType
205
+ : undefined;
185
206
  if (!REFERENCE_TYPES.has(referenceType)) {
186
207
  issues.push({
187
208
  type: 'sectpr_reference_invalid_type',
188
209
  path: nodePath(child),
189
210
  message: `${child.tagName} has missing or invalid w:type '${referenceType || '(missing)'}'; expected first, default, or even`,
211
+ sectionOrdinal,
212
+ kind,
190
213
  });
214
+ continue;
191
215
  }
192
216
  else {
193
217
  const referenceKey = `${isHeaderReference ? 'header' : 'footer'}:${referenceType}`;
@@ -196,7 +220,11 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
196
220
  type: 'sectpr_duplicate_reference_type',
197
221
  path: nodePath(child),
198
222
  message: `${child.tagName} duplicates the '${referenceType}' role within this w:sectPr`,
223
+ sectionOrdinal,
224
+ kind,
225
+ role,
199
226
  });
227
+ continue;
200
228
  }
201
229
  else {
202
230
  seenReferenceTypes.add(referenceKey);
@@ -208,9 +236,14 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
208
236
  type: 'sectpr_reference_missing_rid',
209
237
  path: nodePath(child),
210
238
  message: `${child.tagName} is missing r:id`,
239
+ sectionOrdinal,
240
+ kind,
241
+ role,
211
242
  });
212
243
  continue;
213
244
  }
245
+ if (ambiguousRelationshipIds.has(rid))
246
+ continue;
214
247
  const relationship = relationships.get(rid);
215
248
  if (!relationship) {
216
249
  issues.push({
@@ -218,31 +251,52 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
218
251
  path: nodePath(child),
219
252
  message: `${child.tagName} references missing relationship id '${rid}'`,
220
253
  rid,
254
+ sectionOrdinal,
255
+ kind,
256
+ role,
221
257
  });
222
258
  continue;
223
259
  }
224
- const kind = isHeaderReference ? 'header' : 'footer';
225
260
  const expectedType = `http://schemas.openxmlformats.org/officeDocument/2006/relationships/${kind}`;
226
- if (relationship.type !== expectedType || relationship.external) {
261
+ if (relationship.type !== expectedType) {
227
262
  issues.push({
228
263
  type: 'sectpr_reference_wrong_relationship_type',
229
264
  path: nodePath(child),
230
265
  message: `${child.tagName} relationship '${rid}' has type '${relationship.type || '(missing)'}'`,
231
266
  rid,
267
+ sectionOrdinal,
268
+ kind,
269
+ role,
270
+ });
271
+ continue;
272
+ }
273
+ let targetName;
274
+ try {
275
+ targetName = normalizeOpcRelationshipTarget({
276
+ ownerPart: 'word/document.xml',
277
+ target: relationship.target,
278
+ targetMode: relationship.targetMode,
279
+ }).target;
280
+ }
281
+ catch (error) {
282
+ const targetError = error instanceof OpcRelationshipTargetError ? error : undefined;
283
+ const type = targetError?.issue === 'invalid_target_mode'
284
+ ? 'sectpr_reference_invalid_target_mode'
285
+ : targetError?.issue === 'external_target_not_allowed'
286
+ ? 'sectpr_reference_external_target'
287
+ : 'sectpr_reference_invalid_target';
288
+ issues.push({
289
+ type,
290
+ path: nodePath(child),
291
+ message: `${child.tagName} relationship '${rid}' has unsupported or malformed target '${relationship.target}': ${error instanceof Error ? error.message : String(error)}`,
292
+ rid,
293
+ sectionOrdinal,
294
+ kind,
295
+ role,
232
296
  });
233
297
  continue;
234
298
  }
235
299
  if (packageParts) {
236
- const targetName = resolveDocumentTarget(relationship.target);
237
- if (!targetName) {
238
- issues.push({
239
- type: 'sectpr_reference_invalid_target',
240
- path: nodePath(child),
241
- message: `${child.tagName} relationship '${rid}' has unsupported or malformed target '${relationship.target}'`,
242
- rid,
243
- });
244
- continue;
245
- }
246
300
  const targetXml = packageParts.get(targetName);
247
301
  if (!targetXml) {
248
302
  issues.push({
@@ -250,6 +304,10 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
250
304
  path: nodePath(child),
251
305
  message: `${child.tagName} relationship '${rid}' resolves to missing part '${targetName}'`,
252
306
  rid,
307
+ sectionOrdinal,
308
+ kind,
309
+ role,
310
+ targetPath: targetName,
253
311
  });
254
312
  continue;
255
313
  }
@@ -262,7 +320,12 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
262
320
  path: nodePath(child),
263
321
  message: `${child.tagName} relationship '${rid}' targets <${actualRoot?.tagName ?? 'nothing'}>, expected WordprocessingML <${expectedRoot}>`,
264
322
  rid,
323
+ sectionOrdinal,
324
+ kind,
325
+ role,
326
+ targetPath: targetName,
265
327
  });
328
+ continue;
266
329
  }
267
330
  }
268
331
  catch {
@@ -271,14 +334,28 @@ export function auditSectPr(documentXml, documentRelsXml, packageParts) {
271
334
  path: nodePath(child),
272
335
  message: `${child.tagName} relationship '${rid}' targets malformed XML`,
273
336
  rid,
337
+ sectionOrdinal,
338
+ kind,
339
+ role,
340
+ targetPath: targetName,
274
341
  });
342
+ continue;
275
343
  }
276
344
  }
345
+ bindings.push({
346
+ sectionOrdinal,
347
+ kind,
348
+ role: referenceType,
349
+ rid,
350
+ targetPath: targetName,
351
+ path: nodePath(child),
352
+ });
277
353
  }
278
354
  }
279
355
  return {
280
356
  ok: issues.length === 0,
281
357
  issues,
358
+ bindings,
282
359
  stats: {
283
360
  bodyLevelSectPrCount: bodyLevelSectPrNodes.length,
284
361
  paragraphLevelSectPrCount,
@@ -1 +1 @@
1
- {"version":3,"file":"sectPrAudit.js","sourceRoot":"","sources":["../../src/primitives/sectPrAudit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sectPrAudit.js","sourceRoot":"","sources":["../../src/primitives/sectPrAudit.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"serialize_html.d.ts","sourceRoot":"","sources":["../../src/primitives/serialize_html.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C;;;;GAIG;AACH,KAAK,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA0CxC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhD;AAuCD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CAwB1E;AAiLD,MAAM,WAAW,oBAAoB;IACnC,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,gBAAgB,EAAE,EACzB,SAAS,GAAE,QAAQ,EAAO,EAC1B,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CA4ER"}
1
+ {"version":3,"file":"serialize_html.d.ts","sourceRoot":"","sources":["../../src/primitives/serialize_html.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C;;;;GAIG;AACH,KAAK,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AA0CxC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKhD;AAgDD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,MAAM,CA2B1E;AAiLD,MAAM,WAAW,oBAAoB;IACnC,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,8FAA8F;IAC9F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,gBAAgB,EAAE,EACzB,SAAS,GAAE,QAAQ,EAAO,EAC1B,IAAI,GAAE,oBAAyB,GAC9B,MAAM,CA4ER"}
@@ -84,10 +84,18 @@ function sanitizeFontFamily(raw) {
84
84
  const clean = raw.replace(/[<>"';{}()]/g, '').trim();
85
85
  return clean ? `'${clean}'` : null;
86
86
  }
87
+ /** Decode the named entities emitted by `escapeHtmlAttribute` before semantic validation. */
88
+ function decodeHtmlAttribute(raw) {
89
+ return raw
90
+ ?.replaceAll('&lt;', '<')
91
+ .replaceAll('&gt;', '>')
92
+ .replaceAll('&quot;', '"')
93
+ .replaceAll('&amp;', '&');
94
+ }
87
95
  function fontTagToSpan(tag) {
88
- const color = sanitizeColor(/color="([^"]*)"/.exec(tag)?.[1]);
89
- const size = sanitizeFontSize(/size="([^"]*)"/.exec(tag)?.[1]);
90
- const face = sanitizeFontFamily(/face="([^"]*)"/.exec(tag)?.[1]);
96
+ const color = sanitizeColor(decodeHtmlAttribute(/color="([^"]*)"/.exec(tag)?.[1]));
97
+ const size = sanitizeFontSize(decodeHtmlAttribute(/size="([^"]*)"/.exec(tag)?.[1]));
98
+ const face = sanitizeFontFamily(decodeHtmlAttribute(/face="([^"]*)"/.exec(tag)?.[1]));
91
99
  const decls = [];
92
100
  if (color)
93
101
  decls.push(`color:${color}`);
@@ -130,10 +138,13 @@ export function inlineTagsToHtml(text, refs) {
130
138
  else if (tag === '</font>')
131
139
  out += '</span>';
132
140
  else if (tag.startsWith('<a ')) {
133
- // Drop the href for unsafe schemes (e.g. `javascript:`); keep the anchor so `</a>` still
134
- // balances and the link text survives as plain text.
135
- const href = /href="([^"]*)"/.exec(tag)?.[1] ?? '';
136
- out += isSafeHref(href) ? tag : '<a>';
141
+ // Rebuild the tag from the sole supported attribute. Literal document text can look like
142
+ // a TOON tag, so passing the input tag through would retain injected event attributes.
143
+ const rawHref = /href="([^"]*)"/.exec(tag)?.[1];
144
+ const href = decodeHtmlAttribute(rawHref);
145
+ out += href !== undefined && isSafeHref(href)
146
+ ? `<a href="${escapeHtmlAttribute(href)}">`
147
+ : '<a>';
137
148
  }
138
149
  // <b>/<i>/<u> and `</a>` and the closers are already valid HTML — pass through.
139
150
  else