docxmlater 0.4.0 → 0.6.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 (73) hide show
  1. package/README.md +484 -561
  2. package/dist/core/Document.d.ts +60 -0
  3. package/dist/core/Document.d.ts.map +1 -1
  4. package/dist/core/Document.js +526 -4
  5. package/dist/core/Document.js.map +1 -1
  6. package/dist/core/DocumentGenerator.d.ts.map +1 -1
  7. package/dist/core/DocumentGenerator.js +6 -3
  8. package/dist/core/DocumentGenerator.js.map +1 -1
  9. package/dist/core/Relationship.d.ts +5 -0
  10. package/dist/core/Relationship.d.ts.map +1 -1
  11. package/dist/core/Relationship.js +27 -1
  12. package/dist/core/Relationship.js.map +1 -1
  13. package/dist/core/RelationshipManager.d.ts +6 -0
  14. package/dist/core/RelationshipManager.d.ts.map +1 -1
  15. package/dist/core/RelationshipManager.js +45 -0
  16. package/dist/core/RelationshipManager.js.map +1 -1
  17. package/dist/elements/Endnote.d.ts +34 -0
  18. package/dist/elements/Endnote.d.ts.map +1 -0
  19. package/dist/elements/Endnote.js +96 -0
  20. package/dist/elements/Endnote.js.map +1 -0
  21. package/dist/elements/EndnoteManager.d.ts +26 -0
  22. package/dist/elements/EndnoteManager.d.ts.map +1 -0
  23. package/dist/elements/EndnoteManager.js +108 -0
  24. package/dist/elements/EndnoteManager.js.map +1 -0
  25. package/dist/elements/Footnote.d.ts +34 -0
  26. package/dist/elements/Footnote.d.ts.map +1 -0
  27. package/dist/elements/Footnote.js +96 -0
  28. package/dist/elements/Footnote.js.map +1 -0
  29. package/dist/elements/FootnoteManager.d.ts +26 -0
  30. package/dist/elements/FootnoteManager.d.ts.map +1 -0
  31. package/dist/elements/FootnoteManager.js +108 -0
  32. package/dist/elements/FootnoteManager.js.map +1 -0
  33. package/dist/elements/Hyperlink.d.ts +1 -0
  34. package/dist/elements/Hyperlink.d.ts.map +1 -1
  35. package/dist/elements/Hyperlink.js +53 -1
  36. package/dist/elements/Hyperlink.js.map +1 -1
  37. package/dist/elements/Image.d.ts +4 -0
  38. package/dist/elements/Image.d.ts.map +1 -1
  39. package/dist/elements/Image.js +21 -0
  40. package/dist/elements/Image.js.map +1 -1
  41. package/dist/elements/Paragraph.d.ts +39 -0
  42. package/dist/elements/Paragraph.d.ts.map +1 -1
  43. package/dist/elements/Paragraph.js +81 -25
  44. package/dist/elements/Paragraph.js.map +1 -1
  45. package/dist/elements/Run.d.ts +1 -0
  46. package/dist/elements/Run.d.ts.map +1 -1
  47. package/dist/elements/Run.js +36 -24
  48. package/dist/elements/Run.js.map +1 -1
  49. package/dist/elements/Table.d.ts +6 -0
  50. package/dist/elements/Table.d.ts.map +1 -1
  51. package/dist/elements/Table.js +67 -1
  52. package/dist/elements/Table.js.map +1 -1
  53. package/dist/formatting/Style.d.ts +1 -0
  54. package/dist/formatting/Style.d.ts.map +1 -1
  55. package/dist/formatting/Style.js +65 -0
  56. package/dist/formatting/Style.js.map +1 -1
  57. package/dist/formatting/StylesManager.d.ts +8 -0
  58. package/dist/formatting/StylesManager.d.ts.map +1 -1
  59. package/dist/formatting/StylesManager.js +89 -0
  60. package/dist/formatting/StylesManager.js.map +1 -1
  61. package/dist/index.d.ts +6 -2
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +11 -1
  64. package/dist/index.js.map +1 -1
  65. package/dist/types/formatting.d.ts +47 -0
  66. package/dist/types/formatting.d.ts.map +1 -0
  67. package/dist/types/formatting.js +3 -0
  68. package/dist/types/formatting.js.map +1 -0
  69. package/dist/utils/validation.d.ts +14 -0
  70. package/dist/utils/validation.d.ts.map +1 -1
  71. package/dist/utils/validation.js +88 -3
  72. package/dist/utils/validation.js.map +1 -1
  73. package/package.json +1 -1
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EndnoteManager = void 0;
4
+ const Endnote_1 = require("./Endnote");
5
+ const XMLBuilder_1 = require("../xml/XMLBuilder");
6
+ class EndnoteManager {
7
+ constructor() {
8
+ this.endnotes = new Map();
9
+ this.nextId = 1;
10
+ this.addSpecialEndnotes();
11
+ }
12
+ addSpecialEndnotes() {
13
+ const separator = Endnote_1.Endnote.createSeparator(-1);
14
+ this.endnotes.set(-1, separator);
15
+ const continuationSep = Endnote_1.Endnote.createContinuationSeparator(0);
16
+ this.endnotes.set(0, continuationSep);
17
+ }
18
+ static create() {
19
+ return new EndnoteManager();
20
+ }
21
+ register(endnote) {
22
+ const id = endnote.getId();
23
+ if (id > 0 && this.endnotes.has(id)) {
24
+ throw new Error(`Endnote with ID ${id} already exists`);
25
+ }
26
+ this.endnotes.set(id, endnote);
27
+ if (id >= this.nextId) {
28
+ this.nextId = id + 1;
29
+ }
30
+ return endnote;
31
+ }
32
+ createEndnote(text) {
33
+ const endnote = Endnote_1.Endnote.fromText(this.nextId++, text);
34
+ this.endnotes.set(endnote.getId(), endnote);
35
+ return endnote;
36
+ }
37
+ getEndnote(id) {
38
+ return this.endnotes.get(id);
39
+ }
40
+ getAllEndnotes() {
41
+ return Array.from(this.endnotes.values())
42
+ .filter(e => e.getId() > 0)
43
+ .sort((a, b) => a.getId() - b.getId());
44
+ }
45
+ getAllEndnotesWithSpecial() {
46
+ return Array.from(this.endnotes.values())
47
+ .sort((a, b) => a.getId() - b.getId());
48
+ }
49
+ hasEndnote(id) {
50
+ return this.endnotes.has(id);
51
+ }
52
+ removeEndnote(id) {
53
+ if (id <= 0) {
54
+ return false;
55
+ }
56
+ return this.endnotes.delete(id);
57
+ }
58
+ getNextId() {
59
+ return this.nextId;
60
+ }
61
+ getCount() {
62
+ return this.getAllEndnotes().length;
63
+ }
64
+ isEmpty() {
65
+ return this.getCount() === 0;
66
+ }
67
+ clear() {
68
+ const specialEndnotes = new Map();
69
+ for (const [id, endnote] of this.endnotes) {
70
+ if (id <= 0) {
71
+ specialEndnotes.set(id, endnote);
72
+ }
73
+ }
74
+ this.endnotes = specialEndnotes;
75
+ this.nextId = 1;
76
+ }
77
+ getStats() {
78
+ return {
79
+ total: this.getCount(),
80
+ nextId: this.nextId,
81
+ };
82
+ }
83
+ generateEndnotesXml() {
84
+ const endnotes = this.getAllEndnotesWithSpecial();
85
+ const endnotesElement = {
86
+ name: 'w:endnotes',
87
+ attributes: {
88
+ 'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
89
+ 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'
90
+ },
91
+ children: endnotes.map(e => e.toXML())
92
+ };
93
+ const builder = new XMLBuilder_1.XMLBuilder();
94
+ builder.element(endnotesElement.name, endnotesElement.attributes, endnotesElement.children);
95
+ return builder.build(true);
96
+ }
97
+ static validate(xml) {
98
+ if (!xml || !xml.includes('<w:endnotes')) {
99
+ return false;
100
+ }
101
+ if (!xml.includes('xmlns:w=')) {
102
+ return false;
103
+ }
104
+ return true;
105
+ }
106
+ }
107
+ exports.EndnoteManager = EndnoteManager;
108
+ //# sourceMappingURL=EndnoteManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EndnoteManager.js","sourceRoot":"","sources":["../../src/elements/EndnoteManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Paragraph } from './Paragraph';
2
+ import { XMLElement } from '../xml/XMLBuilder';
3
+ export declare enum FootnoteType {
4
+ Normal = "normal",
5
+ Separator = "separator",
6
+ ContinuationSeparator = "continuationSeparator",
7
+ ContinuationNotice = "continuationNotice"
8
+ }
9
+ export interface FootnoteProperties {
10
+ id: number;
11
+ type?: FootnoteType;
12
+ customMark?: string;
13
+ }
14
+ export declare class Footnote {
15
+ private id;
16
+ private type;
17
+ private customMark?;
18
+ private paragraphs;
19
+ constructor(properties: FootnoteProperties);
20
+ getId(): number;
21
+ getType(): FootnoteType;
22
+ getCustomMark(): string | undefined;
23
+ setCustomMark(mark: string): this;
24
+ addParagraph(paragraph: Paragraph): this;
25
+ createParagraph(text?: string): Paragraph;
26
+ getParagraphs(): Paragraph[];
27
+ getText(): string;
28
+ toXML(): XMLElement;
29
+ static fromText(id: number, text: string): Footnote;
30
+ static createSeparator(id: number): Footnote;
31
+ static createContinuationSeparator(id: number): Footnote;
32
+ static createContinuationNotice(id: number, text?: string): Footnote;
33
+ }
34
+ //# sourceMappingURL=Footnote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footnote.d.ts","sourceRoot":"","sources":["../../src/elements/Footnote.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAK3D,oBAAY,YAAY;IAEtB,MAAM,WAAW;IAEjB,SAAS,cAAc;IAEvB,qBAAqB,0BAA0B;IAE/C,kBAAkB,uBAAuB;CAC1C;AAKD,MAAM,WAAW,kBAAkB;IAEjC,EAAE,EAAE,MAAM,CAAC;IAEX,IAAI,CAAC,EAAE,YAAY,CAAC;IAEpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,qBAAa,QAAQ;IACnB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAmB;gBAMzB,UAAU,EAAE,kBAAkB;IAS1C,KAAK,IAAI,MAAM;IAOf,OAAO,IAAI,YAAY;IAOvB,aAAa,IAAI,MAAM,GAAG,SAAS;IAQnC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASjC,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAUxC,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS;IAYzC,aAAa,IAAI,SAAS,EAAE;IAO5B,OAAO,IAAI,MAAM;IAOjB,KAAK,IAAI,UAAU;IA8BnB,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAWnD,MAAM,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAgB5C,MAAM,CAAC,2BAA2B,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ;IAaxD,MAAM,CAAC,wBAAwB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,MAAuB,GAAG,QAAQ;CAQrF"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Footnote = exports.FootnoteType = void 0;
4
+ const Paragraph_1 = require("./Paragraph");
5
+ const XMLBuilder_1 = require("../xml/XMLBuilder");
6
+ var FootnoteType;
7
+ (function (FootnoteType) {
8
+ FootnoteType["Normal"] = "normal";
9
+ FootnoteType["Separator"] = "separator";
10
+ FootnoteType["ContinuationSeparator"] = "continuationSeparator";
11
+ FootnoteType["ContinuationNotice"] = "continuationNotice";
12
+ })(FootnoteType || (exports.FootnoteType = FootnoteType = {}));
13
+ class Footnote {
14
+ constructor(properties) {
15
+ this.paragraphs = [];
16
+ this.id = properties.id;
17
+ this.type = properties.type || FootnoteType.Normal;
18
+ this.customMark = properties.customMark;
19
+ }
20
+ getId() {
21
+ return this.id;
22
+ }
23
+ getType() {
24
+ return this.type;
25
+ }
26
+ getCustomMark() {
27
+ return this.customMark;
28
+ }
29
+ setCustomMark(mark) {
30
+ this.customMark = mark;
31
+ return this;
32
+ }
33
+ addParagraph(paragraph) {
34
+ this.paragraphs.push(paragraph);
35
+ return this;
36
+ }
37
+ createParagraph(text) {
38
+ const para = new Paragraph_1.Paragraph();
39
+ if (text) {
40
+ para.addText(text);
41
+ }
42
+ this.paragraphs.push(para);
43
+ return para;
44
+ }
45
+ getParagraphs() {
46
+ return [...this.paragraphs];
47
+ }
48
+ getText() {
49
+ return this.paragraphs.map(p => p.getText()).join('\n');
50
+ }
51
+ toXML() {
52
+ const attrs = {
53
+ 'w:id': this.id.toString(),
54
+ };
55
+ if (this.type !== FootnoteType.Normal) {
56
+ attrs['w:type'] = this.type;
57
+ }
58
+ const children = [];
59
+ for (const para of this.paragraphs) {
60
+ children.push(para.toXML());
61
+ }
62
+ if (children.length === 0) {
63
+ children.push(XMLBuilder_1.XMLBuilder.w('p'));
64
+ }
65
+ return XMLBuilder_1.XMLBuilder.w('footnote', attrs, children);
66
+ }
67
+ static fromText(id, text) {
68
+ const footnote = new Footnote({ id });
69
+ footnote.createParagraph(text);
70
+ return footnote;
71
+ }
72
+ static createSeparator(id) {
73
+ const footnote = new Footnote({
74
+ id,
75
+ type: FootnoteType.Separator
76
+ });
77
+ footnote.createParagraph();
78
+ return footnote;
79
+ }
80
+ static createContinuationSeparator(id) {
81
+ return new Footnote({
82
+ id,
83
+ type: FootnoteType.ContinuationSeparator
84
+ });
85
+ }
86
+ static createContinuationNotice(id, text = 'Continued...') {
87
+ const footnote = new Footnote({
88
+ id,
89
+ type: FootnoteType.ContinuationNotice
90
+ });
91
+ footnote.createParagraph(text);
92
+ return footnote;
93
+ }
94
+ }
95
+ exports.Footnote = Footnote;
96
+ //# sourceMappingURL=Footnote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Footnote.js","sourceRoot":"","sources":["../../src/elements/Footnote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Footnote } from './Footnote';
2
+ export declare class FootnoteManager {
3
+ private footnotes;
4
+ private nextId;
5
+ private constructor();
6
+ private addSpecialFootnotes;
7
+ static create(): FootnoteManager;
8
+ register(footnote: Footnote): Footnote;
9
+ createFootnote(text: string): Footnote;
10
+ getFootnote(id: number): Footnote | undefined;
11
+ getAllFootnotes(): Footnote[];
12
+ getAllFootnotesWithSpecial(): Footnote[];
13
+ hasFootnote(id: number): boolean;
14
+ removeFootnote(id: number): boolean;
15
+ getNextId(): number;
16
+ getCount(): number;
17
+ isEmpty(): boolean;
18
+ clear(): void;
19
+ getStats(): {
20
+ total: number;
21
+ nextId: number;
22
+ };
23
+ generateFootnotesXml(): string;
24
+ static validate(xml: string): boolean;
25
+ }
26
+ //# sourceMappingURL=FootnoteManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FootnoteManager.d.ts","sourceRoot":"","sources":["../../src/elements/FootnoteManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMtC,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,MAAM,CAAa;IAM3B,OAAO;IASP,OAAO,CAAC,mBAAmB;IAa3B,MAAM,CAAC,MAAM,IAAI,eAAe;IAShC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IAuBtC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAWtC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAO7C,eAAe,IAAI,QAAQ,EAAE;IAS7B,0BAA0B,IAAI,QAAQ,EAAE;IASxC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAShC,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAWnC,SAAS,IAAI,MAAM;IAOnB,QAAQ,IAAI,MAAM;IAOlB,OAAO,IAAI,OAAO;IAOlB,KAAK,IAAI,IAAI;IAiBb,QAAQ,IAAI;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB;IAUD,oBAAoB,IAAI,MAAM;IA4B9B,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAatC"}
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FootnoteManager = void 0;
4
+ const Footnote_1 = require("./Footnote");
5
+ const XMLBuilder_1 = require("../xml/XMLBuilder");
6
+ class FootnoteManager {
7
+ constructor() {
8
+ this.footnotes = new Map();
9
+ this.nextId = 1;
10
+ this.addSpecialFootnotes();
11
+ }
12
+ addSpecialFootnotes() {
13
+ const separator = Footnote_1.Footnote.createSeparator(-1);
14
+ this.footnotes.set(-1, separator);
15
+ const continuationSep = Footnote_1.Footnote.createContinuationSeparator(0);
16
+ this.footnotes.set(0, continuationSep);
17
+ }
18
+ static create() {
19
+ return new FootnoteManager();
20
+ }
21
+ register(footnote) {
22
+ const id = footnote.getId();
23
+ if (id > 0 && this.footnotes.has(id)) {
24
+ throw new Error(`Footnote with ID ${id} already exists`);
25
+ }
26
+ this.footnotes.set(id, footnote);
27
+ if (id >= this.nextId) {
28
+ this.nextId = id + 1;
29
+ }
30
+ return footnote;
31
+ }
32
+ createFootnote(text) {
33
+ const footnote = Footnote_1.Footnote.fromText(this.nextId++, text);
34
+ this.footnotes.set(footnote.getId(), footnote);
35
+ return footnote;
36
+ }
37
+ getFootnote(id) {
38
+ return this.footnotes.get(id);
39
+ }
40
+ getAllFootnotes() {
41
+ return Array.from(this.footnotes.values())
42
+ .filter(f => f.getId() > 0)
43
+ .sort((a, b) => a.getId() - b.getId());
44
+ }
45
+ getAllFootnotesWithSpecial() {
46
+ return Array.from(this.footnotes.values())
47
+ .sort((a, b) => a.getId() - b.getId());
48
+ }
49
+ hasFootnote(id) {
50
+ return this.footnotes.has(id);
51
+ }
52
+ removeFootnote(id) {
53
+ if (id <= 0) {
54
+ return false;
55
+ }
56
+ return this.footnotes.delete(id);
57
+ }
58
+ getNextId() {
59
+ return this.nextId;
60
+ }
61
+ getCount() {
62
+ return this.getAllFootnotes().length;
63
+ }
64
+ isEmpty() {
65
+ return this.getCount() === 0;
66
+ }
67
+ clear() {
68
+ const specialFootnotes = new Map();
69
+ for (const [id, footnote] of this.footnotes) {
70
+ if (id <= 0) {
71
+ specialFootnotes.set(id, footnote);
72
+ }
73
+ }
74
+ this.footnotes = specialFootnotes;
75
+ this.nextId = 1;
76
+ }
77
+ getStats() {
78
+ return {
79
+ total: this.getCount(),
80
+ nextId: this.nextId,
81
+ };
82
+ }
83
+ generateFootnotesXml() {
84
+ const footnotes = this.getAllFootnotesWithSpecial();
85
+ const footnotesElement = {
86
+ name: 'w:footnotes',
87
+ attributes: {
88
+ 'xmlns:w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main',
89
+ 'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'
90
+ },
91
+ children: footnotes.map(f => f.toXML())
92
+ };
93
+ const builder = new XMLBuilder_1.XMLBuilder();
94
+ builder.element(footnotesElement.name, footnotesElement.attributes, footnotesElement.children);
95
+ return builder.build(true);
96
+ }
97
+ static validate(xml) {
98
+ if (!xml || !xml.includes('<w:footnotes')) {
99
+ return false;
100
+ }
101
+ if (!xml.includes('xmlns:w=')) {
102
+ return false;
103
+ }
104
+ return true;
105
+ }
106
+ }
107
+ exports.FootnoteManager = FootnoteManager;
108
+ //# sourceMappingURL=FootnoteManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FootnoteManager.js","sourceRoot":"","sources":["../../src/elements/FootnoteManager.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ export declare class Hyperlink {
15
15
  private run;
16
16
  private tooltip?;
17
17
  private relationshipId?;
18
+ private static validateUrl;
18
19
  constructor(properties: HyperlinkProperties);
19
20
  getUrl(): string | undefined;
20
21
  getAnchor(): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Hyperlink.d.ts","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"AAkDA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAK3C,MAAM,WAAW,mBAAmB;IAElC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,cAAc,CAAC,CAAS;gBAUpB,UAAU,EAAE,mBAAmB;IAgC3C,MAAM,IAAI,MAAM,GAAG,SAAS;IAO5B,SAAS,IAAI,MAAM,GAAG,SAAS;IAO/B,OAAO,IAAI,MAAM;IAOjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS3B,UAAU,IAAI,MAAM,GAAG,SAAS;IAOhC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQjC,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAOvC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAyBnC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAyBrC,MAAM,IAAI,GAAG;IAOb,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IAS9C,aAAa,IAAI,aAAa;IAO9B,UAAU,IAAI,OAAO;IAOrB,UAAU,IAAI,OAAO;IAcrB,KAAK,IAAI,UAAU;IAwDnB,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAUvF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAU1F,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAcvF,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAYvF,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,mBAAmB,GAAG,SAAS;CAG1D"}
1
+ {"version":3,"file":"Hyperlink.d.ts","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"AAkDA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,MAAM,WAAW,mBAAmB;IAElC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,CAAC,EAAE,aAAa,CAAC;IAE3B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,cAAc,CAAC,CAAS;IAWhC,OAAO,CAAC,MAAM,CAAC,WAAW;gBAwDd,UAAU,EAAE,mBAAmB;IA+C3C,MAAM,IAAI,MAAM,GAAG,SAAS;IAO5B,SAAS,IAAI,MAAM,GAAG,SAAS;IAO/B,OAAO,IAAI,MAAM;IAOjB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAe3B,UAAU,IAAI,MAAM,GAAG,SAAS;IAOhC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQjC,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAOvC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IA8BnC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAwCrC,MAAM,IAAI,GAAG;IAOb,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI;IAS9C,aAAa,IAAI,aAAa;IAO9B,UAAU,IAAI,OAAO;IAOrB,UAAU,IAAI,OAAO;IAcrB,KAAK,IAAI,UAAU;IAwDnB,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAUvF,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAU1F,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAcvF,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,aAAa,GAAG,SAAS;IAYvF,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,mBAAmB,GAAG,SAAS;CAG1D"}
@@ -2,8 +2,40 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Hyperlink = void 0;
4
4
  const Run_1 = require("./Run");
5
+ const validation_1 = require("../utils/validation");
5
6
  class Hyperlink {
7
+ static validateUrl(url) {
8
+ if (!url)
9
+ return;
10
+ const DANGEROUS_PROTOCOLS = [
11
+ 'javascript:',
12
+ 'data:',
13
+ 'file:',
14
+ 'vbscript:',
15
+ 'about:',
16
+ ];
17
+ const lowerUrl = url.toLowerCase();
18
+ for (const protocol of DANGEROUS_PROTOCOLS) {
19
+ if (lowerUrl.startsWith(protocol)) {
20
+ throw new Error(`Security: Hyperlink URL "${url}" uses dangerous protocol "${protocol}". ` +
21
+ `Only HTTP(S), MAILTO, and FTP protocols are allowed per ECMA-376 §17.16.22 security guidelines. ` +
22
+ `This prevents XSS attacks and file disclosure vulnerabilities.`);
23
+ }
24
+ }
25
+ const ALLOWED_PROTOCOLS = /^(https?|mailto|ftp):\/?\/?/i;
26
+ if (!ALLOWED_PROTOCOLS.test(url)) {
27
+ throw new Error(`Invalid hyperlink URL: "${url}". ` +
28
+ `Must start with http://, https://, mailto:, or ftp:// per ECMA-376 §17.16.22. ` +
29
+ `Other protocols are not supported for document security.`);
30
+ }
31
+ if (url.includes('"') || url.includes('<') || url.includes('>')) {
32
+ throw new Error(`Invalid hyperlink URL: "${url}" contains XML special characters (", <, or >). ` +
33
+ `These characters could corrupt the document relationships file. ` +
34
+ `URLs must not contain these characters even if URL-encoded.`);
35
+ }
36
+ }
6
37
  constructor(properties) {
38
+ Hyperlink.validateUrl(properties.url);
7
39
  this.url = properties.url;
8
40
  this.anchor = properties.anchor;
9
41
  this.tooltip = properties.tooltip;
@@ -14,6 +46,14 @@ class Hyperlink {
14
46
  `Use Hyperlink.createExternal() or Hyperlink.createInternal() to avoid ambiguity.`);
15
47
  }
16
48
  this.text = properties.text || this.url || this.anchor || 'Link';
49
+ const validation = (0, validation_1.validateRunText)(this.text, {
50
+ context: 'Hyperlink text',
51
+ autoClean: properties.formatting?.cleanXmlFromText || false,
52
+ warnToConsole: true,
53
+ });
54
+ if (validation.cleanedText) {
55
+ this.text = validation.cleanedText;
56
+ }
17
57
  const formatting = {
18
58
  color: '0563C1',
19
59
  underline: 'single',
@@ -31,6 +71,10 @@ class Hyperlink {
31
71
  return this.text;
32
72
  }
33
73
  setText(text) {
74
+ (0, validation_1.validateRunText)(text, {
75
+ context: 'Hyperlink.setText',
76
+ warnToConsole: true,
77
+ });
34
78
  this.text = text;
35
79
  this.run.setText(text);
36
80
  return this;
@@ -50,9 +94,17 @@ class Hyperlink {
50
94
  return this;
51
95
  }
52
96
  setUrl(url) {
97
+ Hyperlink.validateUrl(url);
98
+ if (!url && !this.anchor) {
99
+ throw new Error(`Cannot set URL to undefined: Hyperlink "${this.text}" has no anchor. ` +
100
+ `Clearing the URL would create an invalid hyperlink per ECMA-376 §17.16.22. ` +
101
+ `Either provide a new URL or delete the hyperlink entirely.`);
102
+ }
53
103
  const oldUrl = this.url;
104
+ if (oldUrl === url) {
105
+ return this;
106
+ }
54
107
  this.url = url;
55
- this.relationshipId = undefined;
56
108
  if (this.text === oldUrl) {
57
109
  this.text = url || this.anchor || 'Link';
58
110
  this.run.setText(this.text);
@@ -1 +1 @@
1
- {"version":3,"file":"Hyperlink.js","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Hyperlink.js","sourceRoot":"","sources":["../../src/elements/Hyperlink.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,10 @@ export declare class Image {
41
41
  setRelationshipId(relationshipId: string): this;
42
42
  getRelationshipId(): string | undefined;
43
43
  setDocPrId(id: number): this;
44
+ setAltText(altText: string): this;
45
+ getAltText(): string;
46
+ rotate(degrees: number): this;
47
+ getRotation(): number;
44
48
  toXML(): XMLElement;
45
49
  private createInline;
46
50
  private createGraphic;
@@ -1 +1 @@
1
- {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/elements/Image.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM3D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAK1E,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAa;IAO5B,OAAO;YAuBO,0BAA0B;IAwClC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBvC,WAAW,IAAI,IAAI;IAUnB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,oBAAoB;IA8E5B,OAAO,CAAC,oBAAoB;IAmItB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkB1C,YAAY,IAAI,MAAM;IAatB,YAAY,IAAI,MAAM;IAOtB,QAAQ,IAAI,MAAM;IAOlB,SAAS,IAAI,MAAM;IASnB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,mBAAmB,GAAE,OAAc,GAAG,IAAI;IAclE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAE,OAAc,GAAG,IAAI;IAcpE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU5C,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQ/C,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAQvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAS5B,KAAK,IAAI,UAAU;IAgBnB,OAAO,CAAC,YAAY;IAqEpB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,aAAa;WAkGR,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;WA6B3E,UAAU,CACrB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;WAsBJ,MAAM,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;CAgBjE"}
1
+ {"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../src/elements/Image.ts"],"names":[],"mappings":"AAQA,OAAO,EAAc,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAM3D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAK1E,MAAM,WAAW,eAAe;IAE9B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,qBAAa,KAAK;IAChB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAa;IAO5B,OAAO;YAuBO,0BAA0B;IAwClC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBvC,WAAW,IAAI,IAAI;IAUnB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,gBAAgB;IAoDxB,OAAO,CAAC,mBAAmB;IAuB3B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,oBAAoB;IA8E5B,OAAO,CAAC,oBAAoB;IAmItB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkB1C,YAAY,IAAI,MAAM;IAatB,YAAY,IAAI,MAAM;IAOtB,QAAQ,IAAI,MAAM;IAOlB,SAAS,IAAI,MAAM;IASnB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,mBAAmB,GAAE,OAAc,GAAG,IAAI;IAclE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAE,OAAc,GAAG,IAAI;IAcpE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU5C,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQ/C,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAQvC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAW5B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASjC,UAAU,IAAI,MAAM;IAWpB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAqB7B,WAAW,IAAI,MAAM;IAQrB,KAAK,IAAI,UAAU;IAgBnB,OAAO,CAAC,YAAY;IAqEpB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,aAAa;WAmGR,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;WA6B3E,UAAU,CACrB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,KAAK,CAAC;WAsBJ,MAAM,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC;CAgBjE"}
@@ -322,6 +322,26 @@ class Image {
322
322
  this.docPrId = id;
323
323
  return this;
324
324
  }
325
+ setAltText(altText) {
326
+ this.description = altText;
327
+ return this;
328
+ }
329
+ getAltText() {
330
+ return this.description;
331
+ }
332
+ rotate(degrees) {
333
+ const normalizedDegrees = ((degrees % 360) + 360) % 360;
334
+ this.rotation = normalizedDegrees;
335
+ if (normalizedDegrees === 90 || normalizedDegrees === 270) {
336
+ const temp = this.width;
337
+ this.width = this.height;
338
+ this.height = temp;
339
+ }
340
+ return this;
341
+ }
342
+ getRotation() {
343
+ return this.rotation || 0;
344
+ }
325
345
  toXML() {
326
346
  if (!this.relationshipId) {
327
347
  throw new Error('Image must have a relationship ID before generating XML');
@@ -453,6 +473,7 @@ class Image {
453
473
  children: [
454
474
  {
455
475
  name: 'a:xfrm',
476
+ attributes: this.getRotation() > 0 ? { rot: (this.getRotation() * 60000).toString() } : undefined,
456
477
  children: [
457
478
  {
458
479
  name: 'a:off',