abstract-document 17.0.9 → 17.0.10

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 (25) hide show
  1. package/lib/abstract-document-xml/mustache-xml/index.d.ts +3 -0
  2. package/lib/abstract-document-xml/mustache-xml/index.d.ts.map +1 -0
  3. package/lib/abstract-document-xml/mustache-xml/index.js +19 -0
  4. package/lib/abstract-document-xml/mustache-xml/index.js.map +1 -0
  5. package/lib/abstract-document-xml/mustache-xml/parse-mustache-xml.d.ts +16 -0
  6. package/lib/abstract-document-xml/mustache-xml/parse-mustache-xml.d.ts.map +1 -0
  7. package/lib/abstract-document-xml/mustache-xml/parse-mustache-xml.js +158 -0
  8. package/lib/abstract-document-xml/mustache-xml/parse-mustache-xml.js.map +1 -0
  9. package/lib/abstract-document-xml/mustache-xml/validate-mustache-xml.d.ts +21 -0
  10. package/lib/abstract-document-xml/mustache-xml/validate-mustache-xml.d.ts.map +1 -0
  11. package/lib/abstract-document-xml/mustache-xml/validate-mustache-xml.js +228 -0
  12. package/lib/abstract-document-xml/mustache-xml/validate-mustache-xml.js.map +1 -0
  13. package/lib/abstract-document-xml/parse-xml/index.d.ts +3 -0
  14. package/lib/abstract-document-xml/parse-xml/index.d.ts.map +1 -0
  15. package/lib/abstract-document-xml/parse-xml/index.js +15 -0
  16. package/lib/abstract-document-xml/parse-xml/index.js.map +1 -0
  17. package/lib/abstract-document-xml/parse-xml/parse-xml.d.ts +22 -0
  18. package/lib/abstract-document-xml/parse-xml/parse-xml.d.ts.map +1 -0
  19. package/lib/abstract-document-xml/parse-xml/parse-xml.js +128 -0
  20. package/lib/abstract-document-xml/parse-xml/parse-xml.js.map +1 -0
  21. package/lib/abstract-document-xml/parse-xml/validation.d.ts +21 -0
  22. package/lib/abstract-document-xml/parse-xml/validation.d.ts.map +1 -0
  23. package/lib/abstract-document-xml/parse-xml/validation.js +205 -0
  24. package/lib/abstract-document-xml/parse-xml/validation.js.map +1 -0
  25. package/package.json +4 -4
@@ -0,0 +1,3 @@
1
+ export * from "./validate-mustache-xml.js";
2
+ export * from "./parse-mustache-xml.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/abstract-document-xml/mustache-xml/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./validate-mustache-xml.js"), exports);
18
+ __exportStar(require("./parse-mustache-xml.js"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/abstract-document-xml/mustache-xml/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,0DAAwC"}
@@ -0,0 +1,16 @@
1
+ import * as FXmlP from "fast-xml-parser";
2
+ import Mustache from "mustache";
3
+ export type XmlElement = {
4
+ readonly tagName: string;
5
+ readonly attributes: Record<string, string>;
6
+ readonly children: ReadonlyArray<XmlElement>;
7
+ readonly textContent?: string;
8
+ };
9
+ export declare const parseMustacheXml: (template: string, data: any, partials: Record<string, string>) => ReadonlyArray<XmlElement>;
10
+ export declare const render: typeof Mustache.render;
11
+ export declare function parseXmlCustom(text: string, options: Partial<FXmlP.X2jOptions>): ReadonlyArray<XmlElement>;
12
+ export declare const parseXml: (text: string) => ReadonlyArray<XmlElement>;
13
+ export declare const parseXsd: (text: string) => ReadonlyArray<XmlElement>;
14
+ export declare function findElement(elements: ReadonlyArray<XmlElement>, elementName: string | undefined): XmlElement | undefined;
15
+ export declare function getChildren(elements: ReadonlyArray<XmlElement>): ReadonlyArray<XmlElement>;
16
+ //# sourceMappingURL=parse-mustache-xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-mustache-xml.d.ts","sourceRoot":"","sources":["../../../src/abstract-document-xml/mustache-xml/parse-mustache-xml.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AACzC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,gBAAgB,aACjB,MAAM,QACV,GAAG,YACC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC/B,aAAa,CAAC,UAAU,CAAwD,CAAC;AAEpF,eAAO,MAAM,MAAM,wBAAkB,CAAC;AAEtC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAK1G;AACD,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,aAAa,CAAC,UAAU,CAAwC,CAAC;AACzG,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,aAAa,CAAC,UAAU,CACP,CAAC;AAgC1D,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EACnC,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,UAAU,GAAG,SAAS,CAqBxB;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAc1F"}
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.parseXsd = exports.parseXml = exports.render = exports.parseMustacheXml = void 0;
40
+ exports.parseXmlCustom = parseXmlCustom;
41
+ exports.findElement = findElement;
42
+ exports.getChildren = getChildren;
43
+ const FXmlP = __importStar(require("fast-xml-parser"));
44
+ const mustache_1 = __importDefault(require("mustache"));
45
+ const parseMustacheXml = (template, data, partials) => (0, exports.parseXml)(mustache_1.default.render(template, data, partials));
46
+ exports.parseMustacheXml = parseMustacheXml;
47
+ exports.render = mustache_1.default.render;
48
+ function parseXmlCustom(text, options) {
49
+ const parser = new FXmlP.XMLParser(options);
50
+ parser.addEntity("#x2F", "/");
51
+ parser.addEntity("#x3D", "=");
52
+ return transformFXP(parser.parse(text));
53
+ }
54
+ const parseXml = (text) => transformFXP(xmlParser.parse(text));
55
+ exports.parseXml = parseXml;
56
+ const parseXsd = (text) => transformFXP(xsdParser.parse(text.replace(/xs:/g, "")));
57
+ exports.parseXsd = parseXsd;
58
+ // Transforms fast-xml-parser format to a format that is much easier to work with
59
+ function transformFXP(parsedXml) {
60
+ return parsedXml.flatMap((element) => {
61
+ const key = Object.keys(element).find((k) => k !== ":@" && k !== "#text");
62
+ if (key === "?xml") {
63
+ return [];
64
+ }
65
+ const children = (element[key] || []).filter((c) => {
66
+ const key = Object.keys(c)[0];
67
+ return key !== "#text" && key !== ":@";
68
+ });
69
+ const attributes = element[":@"] || {};
70
+ const textChilds = (element[key] || [])
71
+ .filter((c) => {
72
+ const key = Object.keys(c)[0];
73
+ return key === "#text";
74
+ })
75
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
+ .flatMap((t) => t["#text"]);
77
+ const textContents = textChilds.flatMap((text) => {
78
+ const cleaned = text.replace(/\n/g, "").replace(/\t/g, "").trim();
79
+ return cleaned ? [text] : [];
80
+ });
81
+ const textContent = textContents.join("\n");
82
+ return { tagName: key, attributes: attributes, children: transformFXP(children), textContent: textContent };
83
+ });
84
+ }
85
+ function findElement(elements, elementName) {
86
+ if (!elementName) {
87
+ return undefined;
88
+ }
89
+ for (const elem of elements) {
90
+ if (elem.tagName === "annotation" || elem.tagName === "attribute") {
91
+ continue;
92
+ }
93
+ if (shouldSkipLevel(elem)) {
94
+ const childElement = findElement(Array.from(elem.children), elementName);
95
+ if (childElement) {
96
+ return shouldSkipLevel(childElement)
97
+ ? findElement(Array.from(childElement.children), elementName)
98
+ : childElement;
99
+ }
100
+ }
101
+ if (elem.attributes.name === elementName) {
102
+ return elem;
103
+ }
104
+ }
105
+ return undefined;
106
+ }
107
+ function getChildren(elements) {
108
+ for (const elem of elements) {
109
+ if (elem.tagName === "annotation" || elem.tagName === "attribute") {
110
+ continue;
111
+ }
112
+ if (shouldSkipLevel(elem)) {
113
+ const child = getChildren(Array.from(elem.children));
114
+ if (child.length > 0) {
115
+ return child.flatMap((c) => (shouldSkipLevel(c) ? getChildren(Array.from(c.children)) : c));
116
+ }
117
+ }
118
+ return elements;
119
+ }
120
+ return [];
121
+ }
122
+ function shouldSkipLevel(tag) {
123
+ return (tag.tagName === "all" || tag.tagName === "sequence" || tag.tagName === "choice" || tag.attributes.name === undefined);
124
+ }
125
+ const xmlParser = new FXmlP.XMLParser({
126
+ preserveOrder: true,
127
+ ignoreAttributes: false,
128
+ attributeNamePrefix: "",
129
+ allowBooleanAttributes: true,
130
+ trimValues: false,
131
+ ignoreDeclaration: true,
132
+ processEntities: true,
133
+ htmlEntities: true,
134
+ attributeValueProcessor: (_name, value) => {
135
+ if (!value?.trim()) {
136
+ return value;
137
+ }
138
+ const nValue = Number(value);
139
+ if (!Number.isNaN(nValue)) {
140
+ return nValue;
141
+ }
142
+ return value;
143
+ },
144
+ });
145
+ xmlParser.addEntity("#x2F", "/");
146
+ xmlParser.addEntity("#x3D", "=");
147
+ const xsdParser = new FXmlP.XMLParser({
148
+ preserveOrder: true,
149
+ ignoreAttributes: false,
150
+ attributeNamePrefix: "",
151
+ allowBooleanAttributes: true,
152
+ trimValues: false,
153
+ ignoreDeclaration: true,
154
+ stopNodes: ["*.documentation"],
155
+ });
156
+ xsdParser.addEntity("#x2F", "/");
157
+ xsdParser.addEntity("#x3D", "=");
158
+ //# sourceMappingURL=parse-mustache-xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-mustache-xml.js","sourceRoot":"","sources":["../../../src/abstract-document-xml/mustache-xml/parse-mustache-xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { XmlElement } from "./parse-mustache-xml.js";
2
+ type Range = {
3
+ readonly startLineNumber: number;
4
+ readonly startColumn: number;
5
+ readonly endLineNumber: number;
6
+ readonly endColumn: number;
7
+ };
8
+ type ErrorObject = {
9
+ readonly range: Range;
10
+ readonly options: ErrorOptions;
11
+ };
12
+ type ErrorOptions = {
13
+ readonly className: string;
14
+ readonly hoverMessage: Array<{
15
+ readonly value: string;
16
+ }>;
17
+ };
18
+ export declare function validateXml(fullXml: string, xsdSchema: ReadonlyArray<XmlElement>): Array<ErrorObject>;
19
+ export declare function errorToReadableText(errors: ReadonlyArray<ErrorObject>, templateName?: string): string;
20
+ export {};
21
+ //# sourceMappingURL=validate-mustache-xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-mustache-xml.d.ts","sourceRoot":"","sources":["../../../src/abstract-document-xml/mustache-xml/validate-mustache-xml.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAyB,MAAM,yBAAyB,CAAC;AAO5E,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAMF,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ,CAAC;AASF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAgErG;AAoJD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,YAAY,GAAE,MAAW,GAAG,MAAM,CAYzG"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.validateXml = validateXml;
37
+ exports.errorToReadableText = errorToReadableText;
38
+ const FXmlP = __importStar(require("fast-xml-parser"));
39
+ const parse_mustache_xml_js_1 = require("./parse-mustache-xml.js");
40
+ var ErrorType;
41
+ (function (ErrorType) {
42
+ ErrorType[ErrorType["warning"] = 0] = "warning";
43
+ ErrorType[ErrorType["error"] = 1] = "error";
44
+ })(ErrorType || (ErrorType = {}));
45
+ // eslint-disable-next-line functional/prefer-readonly-type
46
+ function validateXml(fullXml, xsdSchema) {
47
+ const errors = [];
48
+ // ignore all mustache brackets
49
+ const matchMustacheBrackets = /{{.*}}(?!([\S]))/g;
50
+ // Ignore xml comments
51
+ const xmlComments = /<!--[^>]*-->/g;
52
+ // Replace matches with spaces of same length
53
+ let cleanedXml = fullXml.replace(matchMustacheBrackets, (m) => " ".repeat(m.length));
54
+ cleanedXml = cleanedXml.replace(xmlComments, (m) => {
55
+ const x = (m.match(/^.*$/gm) || []).map((m2) => " ".repeat(m2.length));
56
+ return x.join("\n");
57
+ });
58
+ const xml = `<xml>\n${cleanedXml}\n</xml>`;
59
+ if (xml) {
60
+ try {
61
+ const result = FXmlP.XMLValidator.validate(xml, {
62
+ allowBooleanAttributes: true,
63
+ });
64
+ if (result !== true) {
65
+ errors.push(getErrorFromException(result, xml));
66
+ }
67
+ const entryPointXml = (0, parse_mustache_xml_js_1.parseXml)(xml)[0];
68
+ const entryPointSchema = xsdSchema[0];
69
+ let pos = 0;
70
+ const lines = cleanedXml.split("\n");
71
+ const getRangeOfElement = (text, incrementPosition = true) => {
72
+ if (text === undefined) {
73
+ const monacoPosition = getPositionFromIndex(lines, pos);
74
+ return toRange(monacoPosition.lineNumber, monacoPosition.column, monacoPosition.lineNumber, monacoPosition.column + 5);
75
+ }
76
+ const position = cleanedXml.indexOf(text, pos);
77
+ if (incrementPosition) {
78
+ pos = position >= pos ? position + text.length : pos;
79
+ }
80
+ const monacoPosition = getPositionFromIndex(lines, position);
81
+ return toRange(monacoPosition.lineNumber, monacoPosition.column, monacoPosition.lineNumber, monacoPosition.column + text.length);
82
+ };
83
+ const validationErrors = entryPointXml.children.flatMap((child) => validateElements(child, undefined, entryPointSchema, getRangeOfElement));
84
+ errors.push(...validationErrors);
85
+ }
86
+ catch (e) {
87
+ errors.push(createError(e.message, ErrorType.error, toRange(1, 1, 1, 100)));
88
+ }
89
+ }
90
+ return errors.map((e) => getDecorationsFromError(e));
91
+ }
92
+ function validateElements(element, schemaElement, completeSchema, getRangeOfElement) {
93
+ const errors = [];
94
+ // Validate element name
95
+ const tagName = element.tagName;
96
+ const range = getRangeOfElement(tagName);
97
+ const slashPosition = getRangeOfElement("/", false);
98
+ const closingTagPosition = getRangeOfElement(">", false);
99
+ const isClosed = rangeLessThan(slashPosition, closingTagPosition);
100
+ const validElements = Object.values(completeSchema.children);
101
+ const schemaName = schemaElement?.attributes.type || tagName;
102
+ const foundSchemaElement = (0, parse_mustache_xml_js_1.findElement)(validElements, schemaName);
103
+ if (!foundSchemaElement) {
104
+ return [createError(`"${tagName}" is not a valid element`, ErrorType.error, range)];
105
+ }
106
+ const possibleAttributes = Array.from(foundSchemaElement.children).flatMap((c) => c.tagName === "attribute" ? c : []);
107
+ // Validate required attributes
108
+ for (const possibleAttribute of possibleAttributes) {
109
+ const attributeName = possibleAttribute.attributes.name;
110
+ const isRequired = possibleAttribute.attributes.use;
111
+ if (attributeName && isRequired && isRequired === "required") {
112
+ if (element.attributes[attributeName] === undefined) {
113
+ errors.push(createError(`"${attributeName}" is a required attribute on "${tagName}"`, ErrorType.error, range));
114
+ }
115
+ }
116
+ }
117
+ // Validate existing attributes
118
+ for (const [attrKey, attrVal] of Object.entries(element.attributes)) {
119
+ const possibleAttrNames = possibleAttributes.flatMap((p) => p.attributes.name || []);
120
+ const attrText = typeof attrVal === "string" ? `${attrKey}="${attrVal}"` : attrKey;
121
+ const attrRange = getRangeOfElement(attrText, false);
122
+ if (!possibleAttrNames.includes(attrKey)) {
123
+ errors.push(createError(`"${attrKey}" is a not a valid attribute on "${tagName}"`, ErrorType.error, attrRange));
124
+ }
125
+ }
126
+ // Validate that the children are allowed as a child of current element
127
+ // and then validate the children themselves
128
+ const schemaChildren = Object.values(foundSchemaElement.children);
129
+ for (const child of element.children) {
130
+ const childName = child.tagName;
131
+ if (!childName) {
132
+ continue;
133
+ }
134
+ const foundChild = (0, parse_mustache_xml_js_1.findElement)(schemaChildren, childName);
135
+ if (!foundChild) {
136
+ const childRange = getRangeOfElement(childName, false);
137
+ if (childRange) {
138
+ errors.push(createError(`"${childName}" is not a valid child of "${tagName}"`, ErrorType.error, childRange));
139
+ }
140
+ }
141
+ const elementErrors = validateElements(child, foundChild, completeSchema, getRangeOfElement);
142
+ errors.push(...elementErrors);
143
+ }
144
+ if (!isClosed) {
145
+ // Increment position to after closing tag
146
+ getRangeOfElement(`</${tagName}`, true);
147
+ }
148
+ return errors;
149
+ }
150
+ function getDecorationsFromError(error) {
151
+ return {
152
+ range: error.range,
153
+ options: {
154
+ className: getErrorClassNames(error),
155
+ hoverMessage: [{ value: getErrorType(error) }, { value: getErrorMessage(error) }],
156
+ },
157
+ };
158
+ }
159
+ function getErrorFromException(result, xml) {
160
+ const { col, line, msg } = result.err;
161
+ const startLine = line - 1;
162
+ const lines = xml.split("\n");
163
+ const rowText = lines[startLine] || "";
164
+ const length = rowText.indexOf(">") - rowText.indexOf("<") || 4;
165
+ const range = toRange(startLine, col, startLine, col + length);
166
+ return createError(msg, ErrorType.error, range);
167
+ }
168
+ function getErrorClassNames(error) {
169
+ switch (error.type) {
170
+ case ErrorType.warning:
171
+ return "xml-lint xml-lint--warning";
172
+ case ErrorType.error:
173
+ return "xml-lint xml-lint--error";
174
+ default:
175
+ return "";
176
+ }
177
+ }
178
+ function getErrorType(error) {
179
+ switch (error.type) {
180
+ case ErrorType.warning:
181
+ return "**Warning**";
182
+ case ErrorType.error:
183
+ return "**Error**";
184
+ default:
185
+ return "";
186
+ }
187
+ }
188
+ const getErrorMessage = (error) => error.message.split(/[\t\n]/g)[1] ?? error.message;
189
+ const createError = (message, type, range) => ({ message, type, range });
190
+ function getPositionFromIndex(lines, index) {
191
+ let totalLength = 0;
192
+ for (const [lineNumber, line] of lines.entries()) {
193
+ totalLength += line.length;
194
+ if (totalLength >= index - lineNumber) {
195
+ return {
196
+ lineNumber: lineNumber + 1,
197
+ column: 1 + index - (totalLength - line.length) - lineNumber || 1, // "- lineNumber" because of \n characters
198
+ };
199
+ }
200
+ }
201
+ return { lineNumber: lines.length, column: 1 };
202
+ }
203
+ const toRange = (startLineNumber, startColumn, endLineNumber, endColumn) => ({
204
+ startLineNumber,
205
+ startColumn,
206
+ endLineNumber,
207
+ endColumn,
208
+ });
209
+ function errorToReadableText(errors, templateName = "") {
210
+ const errorLines = [];
211
+ if (templateName) {
212
+ errorLines.push(`Error in template ${templateName} \n`);
213
+ }
214
+ for (const error of errors) {
215
+ const hoverErrors = error.options.hoverMessage.map((e) => e.value.replace(/\*/g, ""));
216
+ errorLines.push(`${hoverErrors.join("\n")}`);
217
+ errorLines.push(`On line ${error.range.startLineNumber}, column ${error.range.startColumn}\n`);
218
+ }
219
+ return errorLines.join("\n");
220
+ }
221
+ function rangeLessThan(range1, range2) {
222
+ return range1.startLineNumber < range2.startLineNumber
223
+ ? true
224
+ : range1.startLineNumber > range2.startLineNumber
225
+ ? false
226
+ : range1.startColumn < range2.startColumn;
227
+ }
228
+ //# sourceMappingURL=validate-mustache-xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-mustache-xml.js","sourceRoot":"","sources":["../../../src/abstract-document-xml/mustache-xml/validate-mustache-xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./validation";
2
+ export * from "./parse-xml";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/abstract-document-xml/parse-xml/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./validation"), exports);
14
+ __exportStar(require("./parse-xml"), exports);
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/abstract-document-xml/parse-xml/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+CAA6B;AAC7B,8CAA4B"}
@@ -0,0 +1,22 @@
1
+ import { X2jOptionsOptional } from "fast-xml-parser";
2
+ export declare type XmlElement = {
3
+ readonly tagName: string;
4
+ readonly attributes: Record<string, string>;
5
+ readonly children: ReadonlyArray<XmlElement>;
6
+ readonly textContent?: string;
7
+ };
8
+ export declare type FastXmlElement = Record<string, ReadonlyArray<FastXmlElement> | Record<string, string>>;
9
+ export declare function parseMustacheXml(template: {
10
+ readonly name: string;
11
+ readonly template: string;
12
+ }, data: any, partials: Record<string, string>): {
13
+ readonly type: "Ok";
14
+ readonly xml: ReadonlyArray<XmlElement>;
15
+ } | {
16
+ readonly type: "Err";
17
+ readonly error: string;
18
+ };
19
+ export declare function parseXml(text: string, options?: X2jOptionsOptional): ReadonlyArray<XmlElement>;
20
+ export declare function findElement(elements: ReadonlyArray<XmlElement>, elementName: string | undefined): XmlElement | undefined;
21
+ export declare function getChildren(elements: ReadonlyArray<XmlElement>): ReadonlyArray<XmlElement>;
22
+ //# sourceMappingURL=parse-xml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-xml.d.ts","sourceRoot":"","sources":["../../../src/abstract-document-xml/parse-xml/parse-xml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAa,MAAM,iBAAiB,CAAC;AAKhE,oBAAY,UAAU,GAAG;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAIF,oBAAY,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEpG,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE;IACR,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,EACD,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAsCrH;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAAC,UAAU,CAAC,CAO9F;AA8BD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EACnC,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,UAAU,GAAG,SAAS,CAqBxB;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAc1F"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getChildren = exports.findElement = exports.parseXml = exports.parseMustacheXml = void 0;
7
+ const fast_xml_parser_1 = require("fast-xml-parser");
8
+ const mustache_1 = __importDefault(require("mustache"));
9
+ const xsd_template_1 = require("../xsd-template");
10
+ const validation_1 = require("./validation");
11
+ function parseMustacheXml(template, data, partials) {
12
+ const mustacheResolvedXml = mustache_1.default.render(template.template, data, partials);
13
+ const xsdTemplate = parseXml(xsd_template_1.xsd.replace(/xs:/g, ""), {
14
+ preserveOrder: true,
15
+ ignoreAttributes: false,
16
+ attributeNamePrefix: "",
17
+ allowBooleanAttributes: true,
18
+ trimValues: false,
19
+ ignoreDeclaration: true,
20
+ });
21
+ const validationErrors = (0, validation_1.validateXml)(mustacheResolvedXml, xsdTemplate);
22
+ if (validationErrors.length > 0) {
23
+ return { type: "Err", error: (0, validation_1.errorToReadableText)(validationErrors, template.name) };
24
+ }
25
+ return {
26
+ type: "Ok",
27
+ xml: parseXml(mustacheResolvedXml, {
28
+ preserveOrder: true,
29
+ ignoreAttributes: false,
30
+ attributeNamePrefix: "",
31
+ allowBooleanAttributes: true,
32
+ trimValues: false,
33
+ ignoreDeclaration: true,
34
+ processEntities: true,
35
+ htmlEntities: true,
36
+ attributeValueProcessor: (_name, value) => {
37
+ if (!(value === null || value === void 0 ? void 0 : value.trim())) {
38
+ return value;
39
+ }
40
+ const nValue = Number(value);
41
+ if (!Number.isNaN(nValue)) {
42
+ return nValue;
43
+ }
44
+ return value;
45
+ },
46
+ }),
47
+ };
48
+ }
49
+ exports.parseMustacheXml = parseMustacheXml;
50
+ function parseXml(text, options) {
51
+ const parser = new fast_xml_parser_1.XMLParser(options);
52
+ // Unescape HTML entity
53
+ parser.addEntity("#x2F", "/");
54
+ parser.addEntity("#x3D", "=");
55
+ const parsedXml = parser.parse(text);
56
+ return transformFXP(parsedXml);
57
+ }
58
+ exports.parseXml = parseXml;
59
+ // Transforms fast-xml-parser format to a format that is much easier to work with
60
+ function transformFXP(parsedXml) {
61
+ return parsedXml.flatMap((element) => {
62
+ const key = Object.keys(element).find((k) => k !== ":@" && k !== "#text");
63
+ if (key === "?xml") {
64
+ return [];
65
+ }
66
+ const children = (element[key] || []).filter((c) => {
67
+ const key = Object.keys(c)[0];
68
+ return key !== "#text" && key !== ":@";
69
+ });
70
+ const attributes = element[":@"] || {};
71
+ const textChilds = (element[key] || [])
72
+ .filter((c) => {
73
+ const key = Object.keys(c)[0];
74
+ return key === "#text";
75
+ })
76
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
+ .flatMap((t) => t["#text"]);
78
+ const textContents = textChilds.flatMap((text) => {
79
+ const cleaned = text.replace(/\n/g, "").replace(/\t/g, "").trim();
80
+ return cleaned ? [text] : [];
81
+ });
82
+ const textContent = textContents.join("\n");
83
+ return { tagName: key, attributes: attributes, children: transformFXP(children), textContent: textContent };
84
+ });
85
+ }
86
+ function findElement(elements, elementName) {
87
+ if (!elementName) {
88
+ return undefined;
89
+ }
90
+ for (const elem of elements) {
91
+ if (elem.tagName === "annotation" || elem.tagName === "attribute") {
92
+ continue;
93
+ }
94
+ if (shouldSkipLevel(elem)) {
95
+ const childElement = findElement(Array.from(elem.children), elementName);
96
+ if (childElement) {
97
+ return shouldSkipLevel(childElement)
98
+ ? findElement(Array.from(childElement.children), elementName)
99
+ : childElement;
100
+ }
101
+ }
102
+ if (elem.attributes.name === elementName) {
103
+ return elem;
104
+ }
105
+ }
106
+ return undefined;
107
+ }
108
+ exports.findElement = findElement;
109
+ function getChildren(elements) {
110
+ for (const elem of elements) {
111
+ if (elem.tagName === "annotation" || elem.tagName === "attribute") {
112
+ continue;
113
+ }
114
+ if (shouldSkipLevel(elem)) {
115
+ const child = getChildren(Array.from(elem.children));
116
+ if (child.length > 0) {
117
+ return child.flatMap((c) => (shouldSkipLevel(c) ? getChildren(Array.from(c.children)) : c));
118
+ }
119
+ }
120
+ return elements;
121
+ }
122
+ return [];
123
+ }
124
+ exports.getChildren = getChildren;
125
+ function shouldSkipLevel(tag) {
126
+ return (tag.tagName === "all" || tag.tagName === "sequence" || tag.tagName === "choice" || tag.attributes.name === undefined);
127
+ }
128
+ //# sourceMappingURL=parse-xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-xml.js","sourceRoot":"","sources":["../../../src/abstract-document-xml/parse-xml/parse-xml.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { XmlElement } from "./parse-xml";
2
+ declare type Range = {
3
+ readonly startLineNumber: number;
4
+ readonly startColumn: number;
5
+ readonly endLineNumber: number;
6
+ readonly endColumn: number;
7
+ };
8
+ declare type ErrorObject = {
9
+ readonly range: Range;
10
+ readonly options: ErrorOptions;
11
+ };
12
+ declare type ErrorOptions = {
13
+ readonly className: string;
14
+ readonly hoverMessage: Array<{
15
+ readonly value: string;
16
+ }>;
17
+ };
18
+ export declare function validateXml(fullXml: string, xsdSchema: ReadonlyArray<XmlElement>): Array<ErrorObject>;
19
+ export declare function errorToReadableText(errors: ReadonlyArray<ErrorObject>, templateName?: string): string;
20
+ export {};
21
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/abstract-document-xml/parse-xml/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAyB,MAAM,aAAa,CAAC;AAOhE,aAAK,KAAK,GAAG;IACX,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAMF,aAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC,CAAC;AAEF,aAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;CACJ,CAAC;AASF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAuErG;AAqJD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,YAAY,GAAE,MAAW,GAAG,MAAM,CAYzG"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.errorToReadableText = exports.validateXml = void 0;
4
+ const fast_xml_parser_1 = require("fast-xml-parser");
5
+ const parse_xml_1 = require("./parse-xml");
6
+ var ErrorType;
7
+ (function (ErrorType) {
8
+ ErrorType[ErrorType["warning"] = 0] = "warning";
9
+ ErrorType[ErrorType["error"] = 1] = "error";
10
+ })(ErrorType || (ErrorType = {}));
11
+ // eslint-disable-next-line functional/prefer-readonly-type
12
+ function validateXml(fullXml, xsdSchema) {
13
+ const errors = [];
14
+ // ignore all mustache brackets
15
+ const matchMustacheBrackets = /{{.*}}(?!([\S]))/g;
16
+ // Ignore xml comments
17
+ const xmlComments = /<!--[^>]*-->/g;
18
+ // Replace matches with spaces of same length
19
+ let cleanedXml = fullXml.replace(matchMustacheBrackets, (m) => " ".repeat(m.length));
20
+ cleanedXml = cleanedXml.replace(xmlComments, (m) => {
21
+ const x = (m.match(/^.*$/gm) || []).map((m2) => " ".repeat(m2.length));
22
+ return x.join("\n");
23
+ });
24
+ const xml = `<xml>\n${cleanedXml}\n</xml>`;
25
+ if (xml) {
26
+ try {
27
+ const result = fast_xml_parser_1.XMLValidator.validate(xml, {
28
+ allowBooleanAttributes: true,
29
+ });
30
+ if (result !== true) {
31
+ errors.push(getErrorFromException(result, xml));
32
+ }
33
+ const entryPointXml = (0, parse_xml_1.parseXml)(xml, {
34
+ preserveOrder: true,
35
+ ignoreAttributes: false,
36
+ attributeNamePrefix: "",
37
+ allowBooleanAttributes: true,
38
+ trimValues: false,
39
+ ignoreDeclaration: true,
40
+ })[0];
41
+ const entryPointSchema = xsdSchema[0];
42
+ let pos = 0;
43
+ const lines = cleanedXml.split("\n");
44
+ const getRangeOfElement = (text, incrementPosition = true) => {
45
+ if (text === undefined) {
46
+ const monacoPosition = getPositionFromIndex(lines, pos);
47
+ return toRange(monacoPosition.lineNumber, monacoPosition.column, monacoPosition.lineNumber, monacoPosition.column + 5);
48
+ }
49
+ const position = cleanedXml.indexOf(text, pos);
50
+ if (incrementPosition) {
51
+ pos = position >= pos ? position + text.length : pos;
52
+ }
53
+ const monacoPosition = getPositionFromIndex(lines, position);
54
+ return toRange(monacoPosition.lineNumber, monacoPosition.column, monacoPosition.lineNumber, monacoPosition.column + text.length);
55
+ };
56
+ const validationErrors = entryPointXml.children.flatMap((child) => validateElements(child, undefined, entryPointSchema, getRangeOfElement));
57
+ errors.push(...validationErrors);
58
+ }
59
+ catch (e) {
60
+ errors.push(createError(e.message, ErrorType.error, toRange(1, 1, 1, 100)));
61
+ }
62
+ }
63
+ return errors.map((e) => getDecorationsFromError(e));
64
+ }
65
+ exports.validateXml = validateXml;
66
+ function validateElements(element, schemaElement, completeSchema, getRangeOfElement) {
67
+ const errors = [];
68
+ // Validate element name
69
+ const tagName = element.tagName;
70
+ const range = getRangeOfElement(tagName);
71
+ const slashPosition = getRangeOfElement("/", false);
72
+ const closingTagPosition = getRangeOfElement(">", false);
73
+ const isClosed = rangeLessThan(slashPosition, closingTagPosition);
74
+ const validElements = Object.values(completeSchema.children);
75
+ const schemaName = (schemaElement === null || schemaElement === void 0 ? void 0 : schemaElement.attributes.type) || tagName;
76
+ const foundSchemaElement = (0, parse_xml_1.findElement)(validElements, schemaName);
77
+ if (!foundSchemaElement) {
78
+ return [createError(`"${tagName}" is not a valid element`, ErrorType.error, range)];
79
+ }
80
+ const possibleAttributes = Array.from(foundSchemaElement.children).flatMap((c) => c.tagName === "attribute" ? c : []);
81
+ // Validate required attributes
82
+ for (const possibleAttribute of possibleAttributes) {
83
+ const attributeName = possibleAttribute.attributes.name;
84
+ const isRequired = possibleAttribute.attributes.use;
85
+ if (attributeName && isRequired && isRequired === "required") {
86
+ if (element.attributes[attributeName] === undefined) {
87
+ errors.push(createError(`"${attributeName}" is a required attribute on "${tagName}"`, ErrorType.error, range));
88
+ }
89
+ }
90
+ }
91
+ // Validate existing attributes
92
+ for (const [attrKey, attrVal] of Object.entries(element.attributes)) {
93
+ const possibleAttrNames = possibleAttributes.flatMap((p) => p.attributes.name || []);
94
+ const attrText = typeof attrVal === "string" ? `${attrKey}="${attrVal}"` : attrKey;
95
+ const attrRange = getRangeOfElement(attrText, false);
96
+ if (!possibleAttrNames.includes(attrKey)) {
97
+ errors.push(createError(`"${attrKey}" is a not a valid attribute on "${tagName}"`, ErrorType.error, attrRange));
98
+ }
99
+ }
100
+ // Validate that the children are allowed as a child of current element
101
+ // and then validate the children themselves
102
+ const schemaChildren = Object.values(foundSchemaElement.children);
103
+ for (const child of element.children) {
104
+ const childName = child.tagName;
105
+ if (!childName) {
106
+ continue;
107
+ }
108
+ const foundChild = (0, parse_xml_1.findElement)(schemaChildren, childName);
109
+ if (!foundChild) {
110
+ const childRange = getRangeOfElement(childName, false);
111
+ if (childRange) {
112
+ errors.push(createError(`"${childName}" is not a valid child of "${tagName}"`, ErrorType.error, childRange));
113
+ }
114
+ }
115
+ const elementErrors = validateElements(child, foundChild, completeSchema, getRangeOfElement);
116
+ errors.push(...elementErrors);
117
+ }
118
+ if (!isClosed) {
119
+ // Increment position to after closing tag
120
+ getRangeOfElement(`</${tagName}`, true);
121
+ }
122
+ return errors;
123
+ }
124
+ function getDecorationsFromError(error) {
125
+ return {
126
+ range: error.range,
127
+ options: {
128
+ className: getErrorClassNames(error),
129
+ hoverMessage: [{ value: getErrorType(error) }, { value: getErrorMessage(error) }],
130
+ },
131
+ };
132
+ }
133
+ function getErrorFromException(result, xml) {
134
+ const { col, line, msg } = result.err;
135
+ const startLine = line - 1;
136
+ const lines = xml.split("\n");
137
+ const rowText = lines[startLine] || "";
138
+ const length = rowText.indexOf(">") - rowText.indexOf("<") || 4;
139
+ const range = toRange(startLine, col, startLine, col + length);
140
+ return createError(msg, ErrorType.error, range);
141
+ }
142
+ function getErrorClassNames(error) {
143
+ switch (error.type) {
144
+ case ErrorType.warning:
145
+ return "xml-lint xml-lint--warning";
146
+ case ErrorType.error:
147
+ return "xml-lint xml-lint--error";
148
+ default:
149
+ return "";
150
+ }
151
+ }
152
+ function getErrorType(error) {
153
+ switch (error.type) {
154
+ case ErrorType.warning:
155
+ return "**Warning**";
156
+ case ErrorType.error:
157
+ return "**Error**";
158
+ default:
159
+ return "";
160
+ }
161
+ }
162
+ function getErrorMessage(error) {
163
+ var _a;
164
+ return (_a = error.message.split(/[\t\n]/g)[1]) !== null && _a !== void 0 ? _a : error.message;
165
+ }
166
+ function createError(message, type, range) {
167
+ return { message, type, range };
168
+ }
169
+ function getPositionFromIndex(lines, index) {
170
+ let totalLength = 0;
171
+ for (const [lineNumber, line] of lines.entries()) {
172
+ totalLength += line.length;
173
+ if (totalLength >= index - lineNumber) {
174
+ return {
175
+ lineNumber: lineNumber + 1,
176
+ column: 1 + index - (totalLength - line.length) - lineNumber || 1, // "- lineNumber" because of \n characters
177
+ };
178
+ }
179
+ }
180
+ return { lineNumber: lines.length, column: 1 };
181
+ }
182
+ function toRange(startLineNumber, startColumn, endLineNumber, endColumn) {
183
+ return { startLineNumber, startColumn, endLineNumber, endColumn };
184
+ }
185
+ function errorToReadableText(errors, templateName = "") {
186
+ const errorLines = [];
187
+ if (templateName) {
188
+ errorLines.push(`Error in template ${templateName} \n`);
189
+ }
190
+ for (const error of errors) {
191
+ const hoverErrors = error.options.hoverMessage.map((e) => e.value.replace(/\*/g, ""));
192
+ errorLines.push(`${hoverErrors.join("\n")}`);
193
+ errorLines.push(`On line ${error.range.startLineNumber}, column ${error.range.startColumn}\n`);
194
+ }
195
+ return errorLines.join("\n");
196
+ }
197
+ exports.errorToReadableText = errorToReadableText;
198
+ function rangeLessThan(range1, range2) {
199
+ return range1.startLineNumber < range2.startLineNumber
200
+ ? true
201
+ : range1.startLineNumber > range2.startLineNumber
202
+ ? false
203
+ : range1.startColumn < range2.startColumn;
204
+ }
205
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/abstract-document-xml/parse-xml/validation.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abstract-document",
3
- "version": "17.0.9",
3
+ "version": "17.0.10",
4
4
  "description": "Dynamically create documents using code or JSX and render to any format",
5
5
  "repository": "https://github.com/dividab/abstract-visuals/tree/master/packages/abstract-document",
6
6
  "main": "lib/index.js",
@@ -21,11 +21,11 @@
21
21
  "!/**/__tests__"
22
22
  ],
23
23
  "dependencies": {
24
- "abstract-image": "^12.0.2",
24
+ "abstract-image": "^12.0.3",
25
25
  "docx": "^6.0.3",
26
26
  "fast-xml-parser": "^4.5.0",
27
27
  "handlebars": "4.7.8",
28
- "handlebars-xml": "^0.1.7",
28
+ "handlebars-xml": "^0.2.0",
29
29
  "moment": "^2.30.1",
30
30
  "mustache": "^4.2.0",
31
31
  "pdfkit": "^0.17.2",
@@ -50,5 +50,5 @@
50
50
  "vite": "^6.0.1",
51
51
  "vitest": "^2.1.6"
52
52
  },
53
- "gitHead": "d7d447f52b19c33cb3aa12b2fefc3de2fb20ef9c"
53
+ "gitHead": "910452719abd13d213bb986906790f8dd7d0df72"
54
54
  }