@ibyar/elements 3.1.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2020-2024 @ibyar/elements
3
+ Copyright (c) 2020-2025 @ibyar/elements
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -61,4 +61,24 @@ export declare function isAutocapitalizeInheritingElement(tagName: string): bool
61
61
  * @param tagName the tested tag name
62
62
  */
63
63
  export declare function isFormLabelableElement(tagName: string): boolean;
64
+ /**
65
+ * get the event name for html form elements by tag name
66
+ * @param tagName
67
+ * @returns
68
+ */
69
+ export declare function getChangeEventNameFoTag(tagName: string): 'input' | 'change' | undefined;
70
+ /**
71
+ * read value form html input element.
72
+ * {@link https://html.spec.whatwg.org/multipage/input.html#concept-input-apply}
73
+ * @param input
74
+ * @returns
75
+ */
76
+ export declare function readInputValue(input: HTMLInputElement, hint?: 'value'): string | number | boolean | FileList | Date | null;
77
+ /**
78
+ * get event name for html input element by type.
79
+ * {@link https://html.spec.whatwg.org/multipage/input.html#concept-input-apply}
80
+ * @param input
81
+ * @returns
82
+ */
83
+ export declare function getInputChangeEventName(type: string): "value" | "checked" | "files";
64
84
  //# sourceMappingURL=form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/elements/attributes/form.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,WAEjE;AAED;;;;GAIG;AACH,wBAAgB,0CAA0C,CAAC,WAAW,EAAE,wBAAwB,WAE/F;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,EAAE,EAAE,WAAW,WAErE;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,WAAW,WAMlG;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAuBtD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB5D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAe7D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAc5D;AAGD;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAW1E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB/D"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../src/elements/attributes/form.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,WAEjE;AAED;;;;GAIG;AACH,wBAAgB,0CAA0C,CAAC,WAAW,EAAE,wBAAwB,WAE/F;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,EAAE,EAAE,WAAW,WAErE;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,GAAG,WAAW,WAMlG;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAuBtD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB5D;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAe7D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAc5D;AAGD;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAW1E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAiB/D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAWvF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,OAAO,sDA8BrE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,iCAwBnD"}
@@ -171,4 +171,82 @@ export function isFormLabelableElement(tagName) {
171
171
  }
172
172
  return false;
173
173
  }
174
+ /**
175
+ * get the event name for html form elements by tag name
176
+ * @param tagName
177
+ * @returns
178
+ */
179
+ export function getChangeEventNameFoTag(tagName) {
180
+ switch (true) {
181
+ case tagName === 'input':
182
+ return 'input';
183
+ case tagName === 'textarea':
184
+ case tagName === 'select':
185
+ case isFormAssociatedCustomElementByTag(tagName):
186
+ return 'change';
187
+ default:
188
+ return undefined;
189
+ }
190
+ }
191
+ /**
192
+ * read value form html input element.
193
+ * {@link https://html.spec.whatwg.org/multipage/input.html#concept-input-apply}
194
+ * @param input
195
+ * @returns
196
+ */
197
+ export function readInputValue(input, hint) {
198
+ if (hint === 'value') {
199
+ return input.value;
200
+ }
201
+ switch (input.type) {
202
+ case 'text':
203
+ case 'email':
204
+ case 'password':
205
+ case 'search':
206
+ case 'color':
207
+ case 'tel':
208
+ case 'url':
209
+ case 'hidden': return input.value;
210
+ case 'radio':
211
+ case 'checkbox': return input.checked;
212
+ case 'file': return input.files;
213
+ case 'time':
214
+ case 'week':
215
+ case 'month':
216
+ case 'date': return input.valueAsDate;
217
+ case 'number':
218
+ case 'range':
219
+ case 'datetime-local': return input.valueAsNumber;
220
+ default: return input.value;
221
+ }
222
+ }
223
+ /**
224
+ * get event name for html input element by type.
225
+ * {@link https://html.spec.whatwg.org/multipage/input.html#concept-input-apply}
226
+ * @param input
227
+ * @returns
228
+ */
229
+ export function getInputChangeEventName(type) {
230
+ switch (type) {
231
+ case 'text':
232
+ case 'email':
233
+ case 'password':
234
+ case 'search':
235
+ case 'color':
236
+ case 'tel':
237
+ case 'url':
238
+ case 'hidden':
239
+ case 'time':
240
+ case 'week':
241
+ case 'month':
242
+ case 'date':
243
+ case 'number':
244
+ case 'range':
245
+ case 'datetime-local':
246
+ default: return 'value';
247
+ case 'file': return 'files';
248
+ case 'radio':
249
+ case 'checkbox': return 'checked';
250
+ }
251
+ }
174
252
  //# sourceMappingURL=form.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../src/elements/attributes/form.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * https://html.spec.whatwg.org/multipage/forms.html\n */\n\nimport { isValidCustomElementName } from './common.js';\n\n\n/**\n * check the formAssociated property on the associated constructor. \n * @param tagName tag name of the defined custom element\n * @returns boolean\n */\nexport function isFormAssociatedCustomElementByTag(tagName: string) {\n\treturn isValidCustomElementName(tagName) && !!(customElements.get(tagName) as (CustomElementConstructor & { formAssociated: boolean }) | undefined)?.formAssociated;\n}\n\n/**\n * check the formAssociated property on the associated constructor. \n * @param constructor the associated constructor\n * @returns boolean\n */\nexport function isFormAssociatedCustomElementByConstructor(constructor: CustomElementConstructor) {\n\treturn !!(constructor as (CustomElementConstructor & { formAssociated: boolean }) | undefined)?.formAssociated;\n}\n\n/**\n * check the formAssociated property on the associated constructor on already created element. \n * @param el the element\n * @returns boolean\n */\nexport function isFormAssociatedCustomElementByElement(el: HTMLElement) {\n\treturn el?.constructor && el instanceof HTMLElement && isFormAssociatedCustomElementByConstructor(el.constructor as CustomElementConstructor);\n}\n\nexport function isFormAssociatedCustomElement(item: string | CustomElementConstructor | HTMLElement) {\n\treturn typeof item === 'string'\n\t\t? isFormAssociatedCustomElementByTag(item)\n\t\t: typeof item === 'function'\n\t\t\t? isFormAssociatedCustomElementByConstructor(item)\n\t\t\t: isFormAssociatedCustomElementByElement(item);\n}\n\n/**\n * form-associated elements\n * A number of the elements are form-associated elements, which means they can have a form owner.\n * @param tagName \n */\nexport function isFormElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'datalist':\n\t\tcase 'fieldset':\n\t\tcase 'input':\n\t\tcase 'label':\n\t\tcase 'legend':\n\t\tcase 'meter':\n\t\tcase 'optgroup':\n\t\tcase 'option':\n\t\tcase 'output':\n\t\tcase 'progress':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n/**\n * Denotes elements that are listed in the form.elements and fieldset.elements APIs.\n * These elements also have a form content attribute, and a matching form IDL attribute,\n * that allow authors to specify an explicit form owner.\n * @param tagName \n */\nexport function isListedFormElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'fieldset':\n\t\tcase 'input':\n\t\tcase 'object':\n\t\tcase 'output':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n/**\n * submittable elements\n * Denotes elements that can be used for constructing the entry list when a form element is submitted.\n * @param tagName \n */\nexport function isSubmittableElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'input':\n\t\tcase 'object':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n/**\n * Resettable elements\n * Denotes elements that can be affected when a form element is reset.\n * @param tagName \n * @returns \n */\nexport function isResettableElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'input':\n\t\tcase 'output':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n\n/**\n * Autocapitalize-inheriting elements\n * Denotes elements that inherit the autocapitalize attribute from their form owner.\n * @param tagName \n */\nexport function isAutocapitalizeInheritingElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'fieldset':\n\t\tcase 'input':\n\t\tcase 'output':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault: return false;\n\t}\n}\n\n/**\n * Label-able Elements\n * Some elements, not all of them form-associated, are categorized as label-able elements.\n * These are elements that can be associated with a label element.\n * \n * this function ignore the 'type' attribute of 'input' tag as '<input type=\"hidden\" />' is considered as not labeled element \n * @param tagName the tested tag name\n */\nexport function isFormLabelableElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'input':\n\t\tcase 'meter':\n\t\tcase 'output':\n\t\tcase 'progress':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n"]}
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../src/elements/attributes/form.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * https://html.spec.whatwg.org/multipage/forms.html\n */\n\nimport { isValidCustomElementName } from './common.js';\n\n\n/**\n * check the formAssociated property on the associated constructor. \n * @param tagName tag name of the defined custom element\n * @returns boolean\n */\nexport function isFormAssociatedCustomElementByTag(tagName: string) {\n\treturn isValidCustomElementName(tagName) && !!(customElements.get(tagName) as (CustomElementConstructor & { formAssociated: boolean }) | undefined)?.formAssociated;\n}\n\n/**\n * check the formAssociated property on the associated constructor. \n * @param constructor the associated constructor\n * @returns boolean\n */\nexport function isFormAssociatedCustomElementByConstructor(constructor: CustomElementConstructor) {\n\treturn !!(constructor as (CustomElementConstructor & { formAssociated: boolean }) | undefined)?.formAssociated;\n}\n\n/**\n * check the formAssociated property on the associated constructor on already created element. \n * @param el the element\n * @returns boolean\n */\nexport function isFormAssociatedCustomElementByElement(el: HTMLElement) {\n\treturn el?.constructor && el instanceof HTMLElement && isFormAssociatedCustomElementByConstructor(el.constructor as CustomElementConstructor);\n}\n\nexport function isFormAssociatedCustomElement(item: string | CustomElementConstructor | HTMLElement) {\n\treturn typeof item === 'string'\n\t\t? isFormAssociatedCustomElementByTag(item)\n\t\t: typeof item === 'function'\n\t\t\t? isFormAssociatedCustomElementByConstructor(item)\n\t\t\t: isFormAssociatedCustomElementByElement(item);\n}\n\n/**\n * form-associated elements\n * A number of the elements are form-associated elements, which means they can have a form owner.\n * @param tagName \n */\nexport function isFormElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'datalist':\n\t\tcase 'fieldset':\n\t\tcase 'input':\n\t\tcase 'label':\n\t\tcase 'legend':\n\t\tcase 'meter':\n\t\tcase 'optgroup':\n\t\tcase 'option':\n\t\tcase 'output':\n\t\tcase 'progress':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n/**\n * Denotes elements that are listed in the form.elements and fieldset.elements APIs.\n * These elements also have a form content attribute, and a matching form IDL attribute,\n * that allow authors to specify an explicit form owner.\n * @param tagName \n */\nexport function isListedFormElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'fieldset':\n\t\tcase 'input':\n\t\tcase 'object':\n\t\tcase 'output':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n/**\n * submittable elements\n * Denotes elements that can be used for constructing the entry list when a form element is submitted.\n * @param tagName \n */\nexport function isSubmittableElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'input':\n\t\tcase 'object':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n/**\n * Resettable elements\n * Denotes elements that can be affected when a form element is reset.\n * @param tagName \n * @returns \n */\nexport function isResettableElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'input':\n\t\tcase 'output':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n\n/**\n * Autocapitalize-inheriting elements\n * Denotes elements that inherit the autocapitalize attribute from their form owner.\n * @param tagName \n */\nexport function isAutocapitalizeInheritingElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'fieldset':\n\t\tcase 'input':\n\t\tcase 'output':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault: return false;\n\t}\n}\n\n/**\n * Label-able Elements\n * Some elements, not all of them form-associated, are categorized as label-able elements.\n * These are elements that can be associated with a label element.\n * \n * this function ignore the 'type' attribute of 'input' tag as '<input type=\"hidden\" />' is considered as not labeled element \n * @param tagName the tested tag name\n */\nexport function isFormLabelableElement(tagName: string): boolean {\n\tswitch (tagName) {\n\t\tcase 'button':\n\t\tcase 'input':\n\t\tcase 'meter':\n\t\tcase 'output':\n\t\tcase 'progress':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\tif (isValidCustomElementName(tagName)) {\n\t\treturn isFormAssociatedCustomElementByTag(tagName);\n\t}\n\treturn false;\n}\n\n/**\n * get the event name for html form elements by tag name\n * @param tagName \n * @returns \n */\nexport function getChangeEventNameFoTag(tagName: string): 'input' | 'change' | undefined {\n\tswitch (true) {\n\t\tcase tagName === 'input':\n\t\t\treturn 'input';\n\t\tcase tagName === 'textarea':\n\t\tcase tagName === 'select':\n\t\tcase isFormAssociatedCustomElementByTag(tagName):\n\t\t\treturn 'change';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n}\n\n/**\n * read value form html input element.\n * {@link https://html.spec.whatwg.org/multipage/input.html#concept-input-apply}\n * @param input \n * @returns \n */\nexport function readInputValue(input: HTMLInputElement, hint?: 'value') {\n\tif (hint === 'value') {\n\t\treturn input.value;\n\t}\n\tswitch (input.type) {\n\t\tcase 'text':\n\t\tcase 'email':\n\t\tcase 'password':\n\t\tcase 'search':\n\t\tcase 'color':\n\t\tcase 'tel':\n\t\tcase 'url':\n\t\tcase 'hidden': return input.value;\n\n\t\tcase 'radio':\n\t\tcase 'checkbox': return input.checked;\n\n\t\tcase 'file': return input.files;\n\n\t\tcase 'time':\n\t\tcase 'week':\n\t\tcase 'month':\n\t\tcase 'date': return input.valueAsDate;\n\n\t\tcase 'number':\n\t\tcase 'range':\n\t\tcase 'datetime-local': return input.valueAsNumber;\n\n\t\tdefault: return input.value;\n\t}\n}\n\n/**\n * get event name for html input element by type.\n * {@link https://html.spec.whatwg.org/multipage/input.html#concept-input-apply}\n * @param input \n * @returns \n */\nexport function getInputChangeEventName(type: string) {\n\tswitch (type) {\n\t\tcase 'text':\n\t\tcase 'email':\n\t\tcase 'password':\n\t\tcase 'search':\n\t\tcase 'color':\n\t\tcase 'tel':\n\t\tcase 'url':\n\t\tcase 'hidden':\n\t\tcase 'time':\n\t\tcase 'week':\n\t\tcase 'month':\n\t\tcase 'date':\n\t\tcase 'number':\n\t\tcase 'range':\n\t\tcase 'datetime-local':\n\t\tdefault: return 'value';\n\n\t\tcase 'file': return 'files';\n\n\t\tcase 'radio':\n\t\tcase 'checkbox': return 'checked';\n\t}\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { DomElementNode, DomStructuralDirectiveNode, DomNode, DomChild, Attribute, BaseNode } from '../ast/dom.js';
1
+ import { DomElementNode, DomStructuralDirectiveNode, DomNode, DomChild, Attribute, BaseNode, DomAttributeDirectiveNode } from '../ast/dom.js';
2
2
  export declare class EscapeHTMLCharacter {
3
3
  static ESCAPE_MAP: {
4
4
  [key: string]: string;
@@ -63,7 +63,7 @@ export declare class HTMLParser {
63
63
  stringify(stack?: DomNode | DomNode[]): string;
64
64
  deserializeAttributes(attribute: Attribute<any, any>): void;
65
65
  deserializeBaseNode(node: BaseNode): void;
66
- deserializeNode(node: DomNode): DomNode;
66
+ deserializeNode(node: DomNode | DomAttributeDirectiveNode): DomAttributeDirectiveNode | DomNode;
67
67
  }
68
68
  export declare const htmlParser: HTMLParser;
69
69
  //# sourceMappingURL=html-parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"html-parser.d.ts","sourceRoot":"","sources":["../../../src/elements/node/html-parser.ts"],"names":[],"mappings":"AACA,OAAO,EACN,cAAc,EAEd,0BAA0B,EAAE,OAAO,EAAE,QAAQ,EAC3B,SAAS,EAAE,QAAQ,EAIrC,MAAM,eAAe,CAAC;AAOvB,qBAAa,mBAAmB;IAC/B,MAAM,CAAC,UAAU,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAO1C;IACF,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;;IAOhB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAM9B;AAED,qBAAa,gBAAgB;IAE5B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,GAAG,0BAA0B;IA0GtF,SAAS,CAAC,kCAAkC,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAmBpH,SAAS,CAAC,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE;IAoBzD,SAAS,CAAC,sBAAsB,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE;CAIhF;AAED,qBAAa,UAAW,SAAQ,gBAAgB;IAE/C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,aAAa,CAAyL;IAE9M,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,iBAAiB,CAAK;IAE9B,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAuD;IAEvE,OAAO,CAAC,OAAO,CAA6B;IAE5C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAmC;IAExD,KAAK,CAAC,IAAI,EAAE,MAAM;IAgBlB,OAAO,CAAC,KAAK;IAeb,OAAO,CAAC,SAAS;IAqCjB,OAAO,CAAC,QAAQ;IAahB,OAAO,CAAC,YAAY;IAmCpB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,YAAY;IAsBpB,OAAO,CAAC,iBAAiB;IAkDzB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,kCAAkC;IAiB1C,OAAO,CAAC,sCAAsC;IAwB9C,OAAO,CAAC,8BAA8B;IAStC,OAAO,CAAC,2BAA2B;IAenC,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,2BAA2B;IAMnC,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,8BAA8B;CAgBtC;AAsBD,qBAAa,UAAU;IAEtB,UAAU,aAAoB;IAE9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE;IAI/B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAWpC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,EAAE;IAmErC,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAuBpD,mBAAmB,CAAC,IAAI,EAAE,QAAQ;IAQlC,eAAe,CAAC,IAAI,EAAE,OAAO;CAkD7B;AAMD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
1
+ {"version":3,"file":"html-parser.d.ts","sourceRoot":"","sources":["../../../src/elements/node/html-parser.ts"],"names":[],"mappings":"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"}
@@ -463,7 +463,6 @@ export class NodeParser extends NodeParserHelper {
463
463
  this.tempText = '';
464
464
  return this.parseControlFlow;
465
465
  }
466
- throw new SyntaxError(`Control Flow Expression Syntax Error`);
467
466
  }
468
467
  else if (token === '(') {
469
468
  this.skipCount++;
@@ -784,44 +783,44 @@ export class HTMLParser {
784
783
  const type = node.type;
785
784
  switch (type) {
786
785
  case 'TextContent':
787
- inherit(node, TextContent);
786
+ node = inherit(node, TextContent);
788
787
  break;
789
788
  case 'LiveTextContent':
790
- inherit(node, LiveTextContent);
789
+ node = inherit(node, LiveTextContent);
791
790
  break;
792
791
  case 'CommentNode':
793
- inherit(node, CommentNode);
792
+ node = inherit(node, CommentNode);
794
793
  break;
795
794
  case 'LocalTemplateVariables':
796
- inherit(node, LocalTemplateVariables);
795
+ node = inherit(node, LocalTemplateVariables);
797
796
  break;
798
797
  case 'DomFragmentNode':
799
- inherit(node, DomFragmentNode);
798
+ node = inherit(node, DomFragmentNode);
800
799
  node.children?.forEach(child => this.deserializeNode(child));
801
800
  break;
802
801
  case 'DomElementNode':
803
- inherit(node, DomElementNode);
804
- if (node.templateRefName) {
805
- this.deserializeAttributes(node.templateRefName);
802
+ const dom = node = inherit(node, DomElementNode);
803
+ if (dom.templateRefName) {
804
+ this.deserializeAttributes(dom.templateRefName);
806
805
  }
807
806
  this.deserializeBaseNode(node);
808
807
  node.children?.forEach(child => this.deserializeNode(child));
809
808
  break;
810
809
  case 'DomStructuralDirectiveNode':
811
- inherit(node, DomStructuralDirectiveNode);
810
+ node = inherit(node, DomStructuralDirectiveNode);
812
811
  this.deserializeBaseNode(node);
813
- this.deserializeNode(node.node);
814
- const successors = node.successors;
812
+ this.deserializeNode((node).node);
813
+ const successors = (node).successors;
815
814
  if (successors) {
816
815
  successors.forEach(successor => this.deserializeNode(successor));
817
816
  }
818
817
  break;
819
818
  case 'StructuralDirectiveSuccessorNode':
820
- inherit(node, DomStructuralDirectiveSuccessorNode);
819
+ node = inherit(node, DomStructuralDirectiveSuccessorNode);
821
820
  node.children?.forEach(child => this.deserializeNode(child));
822
821
  break;
823
822
  case 'DomAttributeDirectiveNode':
824
- inherit(node, DomAttributeDirectiveNode);
823
+ node = inherit(node, DomAttributeDirectiveNode);
825
824
  this.deserializeBaseNode(node);
826
825
  break;
827
826
  default:
@@ -831,7 +830,8 @@ export class HTMLParser {
831
830
  }
832
831
  }
833
832
  function inherit(object, type) {
834
- object.__proto__ = type.prototype;
833
+ Object.setPrototypeOf(object, type.prototype);
834
+ return object;
835
835
  }
836
836
  export const htmlParser = new HTMLParser();
837
837
  //# sourceMappingURL=html-parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html-parser.js","sourceRoot":"","sources":["../../../src/elements/node/html-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { isEmptyElement } from '../attributes/common.js';\nimport {\n\tDomElementNode, CommentNode, parseTextChild,\n\tTextContent, LiveTextContent, DomFragmentNode,\n\tDomStructuralDirectiveNode, DomNode, DomChild,\n\tElementAttribute, Attribute, BaseNode, LiveAttribute,\n\tDomParentNode, DomAttributeDirectiveNode,\n\tDomStructuralDirectiveSuccessorNode,\n\tLocalTemplateVariables,\n} from '../ast/dom.js';\nimport { directiveRegistry } from '../directives/register-directive.js';\n\ntype Token = (token: string) => Token;\n\ntype ChildNode = DomElementNode | DomStructuralDirectiveNode | LocalTemplateVariables | CommentNode | string;\n\nexport class EscapeHTMLCharacter {\n\tstatic ESCAPE_MAP: { [key: string]: string } = {\n\t\t'&amp;': '&',\n\t\t'&lt;': '<',\n\t\t'&gt;': '>',\n\t\t'&quot;': '\"',\n\t\t'&#x27;': \"'\",\n\t\t'&#x60;': '`'\n\t};\n\ttest: RegExp;\n\treplace: RegExp;\n\tconstructor() {\n\t\tconst escapeRegexSource = '(?:' + Object.keys(EscapeHTMLCharacter.ESCAPE_MAP).join('|') + ')';\n\t\tthis.test = new RegExp(escapeRegexSource);\n\t\tthis.replace = new RegExp(escapeRegexSource, 'g');\n\t}\n\n\tescaper(match: string): string {\n\t\treturn EscapeHTMLCharacter.ESCAPE_MAP[match];\n\t}\n\n\tunescape(text: string): string {\n\t\tif (!text) {\n\t\t\treturn text;\n\t\t}\n\t\treturn this.test.test(text) ? text.replace(this.replace, this.escaper) : text;\n\t}\n}\n\nexport class NodeParserHelper {\n\n\tprotected checkNode(node: DomElementNode): DomElementNode | DomStructuralDirectiveNode {\n\t\tif (node instanceof DomStructuralDirectiveNode) {\n\t\t\treturn node;\n\t\t}\n\t\tconst attributes = node.attributes;\n\t\tif (attributes) {\n\t\t\tlet temp: ElementAttribute<string, any> | ElementAttribute<string, any>[] | undefined;\n\n\t\t\ttemp = attributes.find(attr => attr.name === 'is');\n\t\t\tif (temp) {\n\t\t\t\tattributes.splice(attributes.indexOf(temp), 1);\n\t\t\t\tnode.is = temp.value as string;\n\t\t\t}\n\t\t\ttemp = attributes.filter(attr => {\n\t\t\t\treturn typeof attr.value === 'string' && (/\\{\\{(.+)\\}\\}/g).test(attr.value);\n\t\t\t});\n\t\t\tif (temp?.length) {\n\t\t\t\ttemp.forEach(templateAttrs => {\n\t\t\t\t\tattributes.splice(attributes.indexOf(templateAttrs), 1);\n\t\t\t\t\tnode.addTemplateAttr(templateAttrs.name, templateAttrs.value as string);\n\t\t\t\t});\n\t\t\t}\n\t\t\ttemp = attributes.filter(attr => attr.name.startsWith('on'));\n\t\t\tif (temp?.length) {\n\t\t\t\ttemp.forEach(templateAttrs => {\n\t\t\t\t\tattributes.splice(attributes.indexOf(templateAttrs), 1);\n\t\t\t\t\tnode.addOutput(templateAttrs.name.substring(2), templateAttrs.value as string);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst directiveNames = this.extractDirectiveNames(node);\n\t\tlet sdName: string | undefined;\n\t\tif (directiveNames.length) {\n\t\t\tconst directives: DomAttributeDirectiveNode[] = [];\n\t\t\tdirectiveNames.forEach(attributeName => {\n\t\t\t\tif (attributeName.startsWith('*')) {\n\t\t\t\t\tif (sdName) {\n\t\t\t\t\t\tconsole.error(`Only one Structural Directive is allowed on an element [${sdName}, ${attributeName}]`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsdName = attributeName;\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst directive = new DomAttributeDirectiveNode(attributeName);\n\t\t\t\tif (directiveRegistry.get(attributeName)!.hasAttributes()) {\n\t\t\t\t\tthis.extractDirectiveAttributesFromNode(attributeName, directive, node);\n\t\t\t\t}\n\t\t\t\tdirectives.push(directive);\n\t\t\t});\n\t\t\tif (directives.length) {\n\t\t\t\tnode.attributeDirectives = directives;\n\t\t\t}\n\t\t}\n\t\tif (sdName) {\n\t\t\t// <div *for [forOf]=\"array\" let-item [trackBy]=\"method\" let-i=\"index\" > {{item}} </div>\n\t\t\t// <div *for=\"let item of array; let i = index; trackBy=method;\" > {{item}} </div>\n\t\t\t// <template #refName *if=\"isActive; else disabled\" > ... </template>\n\t\t\t// <template #disabled > ... </template>\n\n\t\t\tconst temp = node.attributes!.find(attr => attr.name == sdName)!;\n\t\t\tnode.attributes!.splice(node.attributes!.indexOf(temp), 1);\n\t\t\tconst isTemplate = node.tagName === 'template';\n\n\t\t\tconst directiveNode = isTemplate ? new DomFragmentNode(node.children) : node;\n\t\t\tconst directive = new DomStructuralDirectiveNode(\n\t\t\t\ttemp.name,\n\t\t\t\tdirectiveNode,\n\t\t\t\t(typeof temp?.value === 'boolean') ? undefined : String(temp.value)\n\t\t\t);\n\t\t\tconst directiveName = temp.name.substring(1);\n\t\t\tif (isTemplate) {\n\t\t\t\tdirective.inputs = node.inputs;\n\t\t\t\tdirective.outputs = node.outputs;\n\t\t\t\tdirective.attributes = node.attributes;\n\t\t\t\tdirective.templateAttrs = node.templateAttrs;\n\t\t\t\tdirective.attributeDirectives = node.attributeDirectives;\n\t\t\t} else if (directiveRegistry.hasAttributes(directiveName)) {\n\t\t\t\tthis.extractDirectiveAttributesFromNode(directiveName, directive, node);\n\t\t\t\tdirective.attributeDirectives = node.attributeDirectives;\n\t\t\t}\n\t\t\tif (isTemplate && node.templateRefName) {\n\t\t\t\tnode.children = [directive];\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\treturn directive;\n\t\t}\n\n\t\t// <for let-user [of]=\"users\"></for>\n\t\t// @for (item of items; track item.id) {\n\t\t// \t{ { item.name } }\n\t\t// }\n\t\tif (directiveRegistry.has('*' + node.tagName)) {\n\t\t\tconst children = new DomFragmentNode(node.children);\n\t\t\tconst directive = new DomStructuralDirectiveNode('*' + node.tagName, children);\n\t\t\tdirective.inputs = node.inputs;\n\t\t\tdirective.outputs = node.outputs;\n\t\t\tdirective.attributes = node.attributes;\n\t\t\tdirective.templateAttrs = node.templateAttrs;\n\t\t\tdirective.attributeDirectives = node.attributeDirectives;\n\t\t\treturn directive;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tprotected extractDirectiveAttributesFromNode(directiveName: string, directive: BaseNode, node: DomElementNode): void {\n\t\tconst attributes = directiveRegistry.getAttributes(directiveName);\n\t\tif (!attributes) {\n\t\t\treturn;\n\t\t}\n\t\tconst filterByAttrName = createFilterByAttrName(attributes);\n\t\tdirective.attributes = node.attributes?.filter(filterByAttrName);\n\t\tdirective.inputs = node.inputs?.filter(filterByAttrName);\n\t\tdirective.outputs = node.outputs?.filter(filterByAttrName);\n\t\tdirective.twoWayBinding = node.twoWayBinding?.filter(filterByAttrName);\n\t\tdirective.templateAttrs = node.templateAttrs?.filter(filterByAttrName);\n\n\t\tnode.inputs && directive.inputs?.forEach(createArrayCleaner(node.inputs));\n\t\tnode.outputs && directive.outputs?.forEach(createArrayCleaner(node.outputs));\n\t\tnode.twoWayBinding && directive.twoWayBinding?.forEach(createArrayCleaner(node.twoWayBinding));\n\t\tnode.attributes && directive.attributes?.forEach(createArrayCleaner(node.attributes));\n\t\tnode.templateAttrs && directive.templateAttrs?.forEach(createArrayCleaner(node.templateAttrs));\n\t}\n\n\tprotected extractDirectiveNames(node: BaseNode): string[] {\n\t\tconst names: string[] = [];\n\t\tif (node.attributes?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.attributes).filter(name => name.startsWith('*')));\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.inputs));\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.twoWayBinding));\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.templateAttrs));\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.outputs));\n\t\t}\n\t\treturn [...new Set(names)];\n\t}\n\n\tprotected getAttributeDirectives(attributes: Attribute<string, any>[]): string[] {\n\t\treturn directiveRegistry.filterDirectives(attributes.map(attr => attr.name.split('.')[0]));\n\t}\n\n}\n\nexport class NodeParser extends NodeParserHelper {\n\n\tprivate index: number;\n\tprivate stateFn: Token;\n\n\tprivate tagNameRegExp = /[\\-\\.0-9_a-z\\xB7\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF]/;\n\n\tprivate childStack: DomChild[];\n\tprivate stackTrace: ChildNode[];\n\n\tprivate get currentNode(): DomElementNode {\n\t\treturn this.stackTrace[this.stackTrace.length - 1] as DomElementNode;\n\t}\n\n\tprivate commentOpenCount = 0;\n\tprivate commentCloseCount = 0;\n\n\tprivate tempText: string;\n\n\tprivate propertyName: string;\n\tprivate propertyValue: string;\n\tprivate propType: 'attr' | 'ref-name' | 'input' | 'output' | 'two-way';\n\n\tprivate escaper = new EscapeHTMLCharacter();\n\n\tprivate skipCount = 0;\n\tprivate flowScopeCount = 0;\n\tprivate flowChainCount = 0;\n\tprivate interpolationCount = 0;\n\tprivate insideString?: Record<\"'\" | '\"' | '`', boolean>;\n\n\tparse(html: string)/*: DomNode*/ {\n\t\tthis.reset();\n\t\tfor (; this.index < html.length; this.index++) {\n\t\t\tthis.stateFn = this.stateFn(html[this.index]);\n\t\t}\n\t\tthis.checkTextChild();\n\t\tthis.popStructuralDirectiveNodes();\n\t\tif (this.stackTrace.length > 0) {\n\t\t\tconsole.error(this.stackTrace);\n\t\t\tthrow new Error(`error parsing html, had ${this.stackTrace.length} element, [${(this.stackTrace as DomElementNode[]).map(dom => dom.tagName).join(', ')}], with no closing tag`);\n\t\t}\n\t\tlet stack = this.childStack;\n\t\tthis.reset();\n\t\treturn stack;\n\t}\n\n\tprivate reset() {\n\t\tthis.index = 0;\n\t\tthis.childStack = [];\n\t\tthis.stackTrace = [];\n\t\tthis.propType = 'attr';\n\t\tthis.commentOpenCount = 0;\n\t\tthis.commentCloseCount = 0;\n\t\tthis.skipCount = 0;\n\t\tthis.flowScopeCount = 0;\n\t\tthis.flowChainCount = 0;\n\t\tthis.interpolationCount = 0;\n\t\tthis.stateFn = this.parseText;\n\t\tthis.propertyName = this.propertyValue = this.tempText = '';\n\t}\n\n\tprivate parseText(token: string) {\n\t\tif (token === '<' || token === '@') {\n\t\t\tif (token === '@' && this.tempText.at(-1) === '\\\\') {\n\t\t\t\tthis.tempText = this.tempText.substring(0, this.tempText.length - 2) + token;\n\t\t\t\treturn this.parseText;\n\t\t\t} else {\n\t\t\t\tthis.checkTextChild();\n\t\t\t\treturn token === '<' ? this.parseTag : this.parseControlFlow;\n\t\t\t}\n\t\t}\n\t\telse if (this.interpolationCount === 0 && this.flowScopeCount > 0 && token === '}') {\n\t\t\tthis.checkTextChild();\n\t\t\tthis.tempText = '';\n\t\t\tthis.flowScopeCount--;\n\t\t\tconst directive = this.getLastStructuralDirectiveNode();\n\t\t\tif (directive) {\n\t\t\t\tconst lastDirective = chainSuccessor(directive);\n\t\t\t\tconst names = lastDirective.successors?.map(successor => successor.name) ?? [];\n\t\t\t\tif (!directiveRegistry.hasAllSuccessors(lastDirective.name, names)) {\n\t\t\t\t\tthis.flowChainCount++;\n\t\t\t\t\treturn this.parsePossibleSuccessorsControlFlow;\n\t\t\t\t}\n\t\t\t\tdo {\n\t\t\t\t\tthis.flowChainCount--;\n\t\t\t\t\tthis.popElement();\n\t\t\t\t} while (this.flowChainCount > 0);\n\t\t\t}\n\t\t\treturn this.parseText;\n\t\t} else if (token === '{') {\n\t\t\tthis.interpolationCount++;\n\t\t} else if (token === '}') {\n\t\t\tthis.interpolationCount--;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseText;\n\t}\n\n\tprivate parseTag(token: string) {\n\t\tif (token === '/') {\n\t\t\treturn this.parseCloseTag;\n\t\t}\n\t\tif (token === '!') {\n\t\t\tthis.commentOpenCount = 0;\n\t\t\tthis.commentCloseCount = 0;\n\t\t\treturn this.parseComment;\n\t\t}\n\t\tthis.index--;\n\t\treturn this.parseOpenTag;\n\t}\n\n\tprivate parseComment(token: string) {\n\t\tif (token === '-') {\n\t\t\tif (this.commentOpenCount < 2) {\n\t\t\t\tthis.commentOpenCount++;\n\t\t\t} else {\n\t\t\t\tthis.commentCloseCount++;\n\t\t\t}\n\t\t\treturn this.parseComment;\n\t\t}\n\t\telse if (token === '>' && this.commentCloseCount === 2) {\n\t\t\tthis.tempText = this.escaper.unescape(this.tempText);\n\t\t\tthis.stackTrace.push(new CommentNode(this.tempText.trim()));\n\t\t\tthis.popElement();\n\t\t\tthis.tempText = '';\n\t\t\tthis.commentOpenCount = 0;\n\t\t\tthis.commentCloseCount = 0;\n\t\t\treturn this.parseText;\n\t\t}\n\t\telse if (token === '>' && this.commentCloseCount === 0) {\n\t\t\tconst temp = this.tempText.toLowerCase();\n\t\t\tif ('doctype html' === temp) {\n\t\t\t\tthis.tempText = '';\n\t\t\t\treturn this.parseText;\n\t\t\t}\n\t\t}\n\t\tif (this.commentCloseCount > 0) {\n\t\t\tfor (let i = 0; i < this.commentCloseCount; i++) {\n\t\t\t\tthis.tempText += '-';\n\t\t\t}\n\t\t\tthis.commentCloseCount = 0;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseComment;\n\t}\n\n\tprivate parseCloseTag(token: string) {\n\t\tif (token === '>') {\n\t\t\tif (!isEmptyElement(this.currentNode.tagName)\n\t\t\t\t&& this.currentNode.tagName.trim().toLowerCase() !== this.tempText.trim().toLowerCase()\n\t\t\t) {\n\t\t\t\tthrow new Error(`Wrong closed tag at char ${this.index}, tag name: ${this.currentNode.tagName}`);\n\t\t\t}\n\t\t\tthis.popElement();\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parseText;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseCloseTag;\n\t}\n\n\tprivate parseOpenTag(token: string) {\n\t\tif (token === '>') {\n\t\t\tthis.stackTrace.push(new DomElementNode(this.tempText));\n\t\t\tif (isEmptyElement(this.tempText)) {\n\t\t\t\tthis.popElement();\n\t\t\t}\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parseText;\n\t\t}\n\t\telse if (this.tagNameRegExp.test(token)) {\n\t\t\tthis.tempText += token;\n\t\t\treturn this.parseOpenTag;\n\t\t}\n\t\telse if (/\\s/.test(token)) {\n\t\t\tthis.stackTrace.push(new DomElementNode(this.tempText));\n\t\t\tthis.tempText = '';\n\t\t\tthis.propType = 'attr';\n\t\t\treturn this.parsePropertyName;\n\t\t}\n\t\tthrow new SyntaxError('Error while parsing open tag');\n\t}\n\n\tprivate parsePropertyName(token: string) {\n\t\tif (token === '>') {\n\t\t\tif (this.tempText.trim()) {\n\t\t\t\tthis.propertyName = this.tempText;\n\t\t\t\tthis.currentNode.addAttribute(this.propertyName, true);\n\t\t\t\tthis.propertyName = this.propertyValue = this.tempText = '';\n\t\t\t}\n\t\t\tif (isEmptyElement(this.currentNode.tagName)) {\n\t\t\t\tthis.popElement();\n\t\t\t}\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parseText;\n\t\t}\n\t\telse if (token === '/') {\n\t\t\treturn this.parsePropertyName;\n\t\t}\n\t\telse if (/\\[/.test(token)) {\n\t\t\tthis.propType = 'input';\n\t\t\treturn this.parseInputOutput;\n\t\t}\n\t\telse if (/\\(|@/.test(token)) {\n\t\t\tthis.propType = 'output';\n\t\t\treturn this.parseInputOutput;\n\t\t}\n\t\telse if (/#/.test(token)) {\n\t\t\tthis.propType = 'ref-name';\n\t\t\treturn this.parseRefName;\n\t\t}\n\t\telse if (/=/.test(token)) {\n\t\t\tthis.propertyName = this.tempText;\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parsePropertyName;\n\t\t} else if (/\"/.test(token)) {\n\t\t\treturn this.parsePropertyValue;\n\t\t} else if (/\\d/.test(token)) {\n\t\t\tthis.tempText += token;\n\t\t\treturn this.parsePropertyValue;\n\t\t}\n\t\telse if (/\\s/.test(token)) {\n\t\t\tif (this.tempText.trim()) {\n\t\t\t\tthis.propertyName = this.tempText;\n\t\t\t\tthis.currentNode.addAttribute(this.propertyName, true);\n\t\t\t\tthis.propertyName, this.propertyValue = this.tempText = '';\n\t\t\t}\n\t\t\treturn this.parsePropertyName;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parsePropertyName;\n\t}\n\n\tprivate parseRefName(token: string) {\n\t\tif (/=/.test(token)) {\n\t\t\treturn this.parseRefName;\n\t\t}\n\t\telse if (/\"/.test(token)) {\n\t\t\tthis.propertyName = this.tempText;\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parsePropertyValue;\n\t\t} else if (/\\s/.test(token)) {\n\t\t\tthis.currentNode.setTemplateRefName(this.tempText, '');\n\t\t\tthis.propertyName = this.tempText = '';\n\t\t\tthis.propType = 'attr';\n\t\t\treturn this.parsePropertyName;\n\t\t} else if (/>/.test(token)) {\n\t\t\tthis.currentNode.setTemplateRefName(this.tempText, '');\n\t\t\tthis.propertyName = this.tempText = '';\n\t\t\tthis.propType = 'attr';\n\t\t\treturn this.parseText;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseRefName;\n\t}\n\n\tprivate parseInputOutput(token: string) {\n\t\tif (/\\(/.test(token)) {\n\t\t\tthis.propType = 'two-way';\n\t\t\treturn this.parseInputOutput;\n\t\t}\n\t\telse if (/\\)|\\]|=/.test(token)) {\n\t\t\treturn this.parseInputOutput;\n\t\t}\n\t\telse if (/\"/.test(token)) {\n\t\t\tthis.propertyName = this.tempText;\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parsePropertyValue;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseInputOutput;\n\t}\n\n\tprivate parseControlFlow(token: string) {\n\t\tif (token === '(') {\n\t\t\tconst flowName = '*' + this.tempText.trim();\n\t\t\tthis.stackTrace.push(new DomStructuralDirectiveNode(flowName, new DomFragmentNode()));\n\t\t\tthis.tempText = '';\n\t\t\tthis.skipCount = 1;\n\t\t\treturn this.parseControlFlowExpression;\n\t\t} else if (token === '{') {\n\t\t\tif (this.tempText.trim()) {\n\t\t\t\tconst flowName = '*' + this.tempText.trim();\n\t\t\t\tthis.stackTrace.push(new DomStructuralDirectiveNode(flowName, new DomFragmentNode()));\n\t\t\t}\n\t\t\tthis.skipCount = 0;\n\t\t\tthis.tempText = '';\n\t\t\tthis.flowScopeCount++;\n\t\t\treturn this.parseText;\n\t\t}\n\t\tthis.tempText += token;\n\t\tif (this.tempText.trim() === 'let') {\n\t\t\tthis.tempText = '';\n\t\t\tthis.insideString = {\n\t\t\t\t\"'\": false,\n\t\t\t\t'\"': false,\n\t\t\t\t'`': false\n\t\t\t};\n\t\t\treturn this.parseLocalTemplateVariables;\n\t\t}\n\t\treturn this.parseControlFlow;\n\t}\n\n\tprivate parseControlFlowExpression(token: string) {\n\t\tif (token === ')') {\n\t\t\tthis.skipCount--;\n\t\t\tif (this.skipCount == 0 && this.currentNode instanceof DomStructuralDirectiveNode) {\n\t\t\t\tthis.currentNode.value = this.tempText;\n\t\t\t\tthis.tempText = '';\n\t\t\t\treturn this.parseControlFlow;\n\t\t\t}\n\t\t\tthrow new SyntaxError(`Control Flow Expression Syntax Error`);\n\t\t} else if (token === '(') {\n\t\t\tthis.skipCount++;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseControlFlowExpression;\n\t}\n\n\tprivate parsePossibleSuccessorsControlFlow(token: string) {\n\t\tif (/\\s/.test(token)) {\n\t\t\tthis.tempText += token;\n\t\t\treturn this.parsePossibleSuccessorsControlFlow;\n\t\t}\n\t\tif (token === '@') {\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parsePossibleSuccessorsControlFlowName;\n\t\t}\n\t\tdo {\n\t\t\tthis.flowChainCount--;\n\t\t\tthis.popElement();\n\t\t} while (this.flowChainCount > 0);\n\t\tthis.index--;\n\t\treturn this.parseText;\n\t}\n\n\tprivate parsePossibleSuccessorsControlFlowName(token: string) {\n\t\tif (/\\s/.test(token) || token === '{') {\n\t\t\tconst successorFlowName = '*' + this.tempText.trim();\n\t\t\tconst directive = this.getLastStructuralDirectiveNode();\n\t\t\tif (directive) {\n\t\t\t\tconst isSuccessor = directiveRegistry.hasSuccessor(directive.name, successorFlowName);\n\t\t\t\tif (isSuccessor) {\n\t\t\t\t\t(directive.successors ??= []).push(new DomStructuralDirectiveSuccessorNode(successorFlowName));\n\t\t\t\t\tthis.tempText = '';\n\t\t\t\t\tthis.index--;\n\t\t\t\t\treturn this.parseSuccessorsControlFlowName;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.tempText += token;\n\t\t\treturn this.parseText;\n\t\t} else if (token === '(') {\n\t\t\tthis.popStructuralDirectiveNodes();\n\t\t\tthis.index--;\n\t\t\treturn this.parseControlFlow;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parsePossibleSuccessorsControlFlowName;\n\t}\n\n\tprivate parseSuccessorsControlFlowName(token: string) {\n\t\tif (token === '(' || token === '{') {\n\t\t\tthis.index--;\n\t\t\treturn this.parseControlFlow;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseSuccessorsControlFlowName;\n\t}\n\n\tprivate parseLocalTemplateVariables(token: string) {\n\t\tif ((token == '\"' || token === \"'\" || token === '`') && this.tempText.at(-1) !== '\\\\') {\n\t\t\tthis.insideString![token] = !this.insideString![token];\n\t\t} else if (token === ';' && !this.insideString?.['\"'] && !this.insideString?.['`'] && !this.insideString?.[\"'\"]) {\n\t\t\tconst expression = this.tempText.trim();\n\t\t\tthis.stackTrace.push(new LocalTemplateVariables(expression));\n\t\t\tthis.popElement();\n\t\t\tthis.tempText = '';\n\t\t\tthis.insideString = undefined;\n\t\t\treturn this.parseText;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseLocalTemplateVariables;\n\t}\n\n\tprivate parsePropertyValue(token: string) {\n\t\tif (/\"/.test(token)) {\n\t\t\tthis.propertyValue = this.tempText;\n\t\t\tswitch (this.propType) {\n\t\t\t\tcase 'input':\n\t\t\t\t\tthis.currentNode.addInput(this.propertyName, this.propertyValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'output':\n\t\t\t\t\tthis.currentNode.addOutput(this.propertyName, this.propertyValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'two-way':\n\t\t\t\t\tthis.currentNode.addTwoWayBinding(this.propertyName, this.propertyValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ref-name':\n\t\t\t\t\tthis.currentNode.setTemplateRefName(this.propertyName, this.propertyValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'attr':\n\t\t\t\tdefault:\n\t\t\t\t\tif (/^([-+]?\\d*\\.?\\d+)(?:[eE]([-+]?\\d+))?$/.test(this.propertyValue.trim())) {\n\t\t\t\t\t\tthis.currentNode.addAttribute(this.propertyName, +this.propertyValue.trim());\n\t\t\t\t\t} else if (/^(true|false)$/.test(this.propertyValue.trim().toLowerCase())) {\n\t\t\t\t\t\tif (this.propertyValue.trim().toLowerCase() === 'true') {\n\t\t\t\t\t\t\tthis.currentNode.addAttribute(this.propertyName, true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.currentNode.addAttribute(this.propertyName, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.currentNode.addAttribute(this.propertyName, this.propertyValue);\n\t\t\t\t\t}\n\t\t\t}\n\t\t\tthis.propertyName, this.propertyValue = this.tempText = '';\n\t\t\tthis.propType = 'attr';\n\t\t\treturn this.parsePropertyName;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parsePropertyValue;\n\t}\n\n\tprivate checkTextChild() {\n\t\tif (this.tempText) {\n\t\t\tthis.tempText = this.escaper.unescape(this.tempText);\n\t\t\tthis.stackTrace.push(this.tempText);\n\t\t\tthis.popElement();\n\t\t\tthis.tempText = '';\n\t\t}\n\t}\n\n\tprivate popStructuralDirectiveNodes() {\n\t\twhile (this.currentNode instanceof DomStructuralDirectiveNode) {\n\t\t\tthis.popElement();\n\t\t}\n\t}\n\n\tprivate popElement() {\n\t\tconst element = this.stackTrace.pop();\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\t\tlet parent: ChildNode | DomFragmentNode | undefined = this.stackTrace.pop();\n\t\tlet directive: DomStructuralDirectiveNode | undefined;\n\t\tif (parent instanceof DomStructuralDirectiveNode && parent.node instanceof DomFragmentNode) {\n\t\t\tdirective = parent;\n\t\t\tparent = parent.successors?.at(-1) ?? parent.node ?? parent;\n\t\t}\n\t\tif (parent instanceof DomParentNode) {\n\t\t\tif (typeof element === 'string') {\n\t\t\t\tparent.addTextChild(element);\n\t\t\t} else if (element instanceof DomElementNode) {\n\t\t\t\tparent.addChild(this.checkNode(element));\n\t\t\t} else {\n\t\t\t\tparent.addChild(element)\n\t\t\t}\n\t\t\tthis.stackTrace.push(directive ?? parent as ChildNode);\n\t\t} else {\n\t\t\tif (typeof element === 'string') {\n\t\t\t\tparseTextChild(element).forEach(text => this.childStack.push(text));\n\t\t\t} else if (element instanceof DomElementNode) {\n\t\t\t\tconst child = this.checkNode(element);\n\t\t\t\tthis.childStack.push(child);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.childStack.push(element);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getLastStructuralDirectiveNode() {\n\t\tfor (let i = this.stackTrace.length - 1; i >= 0; i--) {\n\t\t\tconst el = this.stackTrace[i];\n\t\t\tif (el instanceof DomStructuralDirectiveNode) {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t}\n\t\tfor (let i = this.childStack.length - 1; i >= 0; i--) {\n\t\t\tconst el = this.childStack[i];\n\t\t\tif (el instanceof DomStructuralDirectiveNode) {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n}\n\nfunction chainSuccessor(directive: DomStructuralDirectiveNode): DomStructuralDirectiveNode {\n\tif (!directive.successors?.length) {\n\t\treturn directive;\n\t}\n\tconst successor = directive.successors.at(-1);\n\tif (successor instanceof DomStructuralDirectiveSuccessorNode\n\t\t&& successor.children[0] instanceof DomStructuralDirectiveNode) {\n\t\treturn chainSuccessor(successor.children[0]);\n\t}\n\treturn directive;\n}\n\nfunction createFilterByAttrName(attributes: string[]) {\n\treturn (attr: Attribute<string, any>) => attributes.includes(attr.name.split('.')[0]);\n}\n\nfunction createArrayCleaner(attributes: Attribute<string, any>[]) {\n\treturn (attr: Attribute<string, any>) => attributes.splice(attributes.indexOf(attr), 1);\n}\n\nexport class HTMLParser {\n\n\tnodeParser = new NodeParser();\n\n\tparse(html: string): DomChild[] {\n\t\treturn this.nodeParser.parse(html);\n\t}\n\n\ttoDomRootNode(html: string): DomNode {\n\t\tlet stack = this.nodeParser.parse(html);\n\t\tif (!stack || stack.length === 0) {\n\t\t\treturn new DomFragmentNode([new TextContent('')]);\n\t\t} else if (stack?.length === 1) {\n\t\t\treturn stack[0];\n\t\t} else {\n\t\t\treturn new DomFragmentNode(stack);\n\t\t}\n\t}\n\n\tstringify(stack?: DomNode | DomNode[]) {\n\t\tif (!Array.isArray(stack)) {\n\t\t\tstack = stack ? [stack] : [];\n\t\t}\n\t\tlet html = '';\n\t\tstack.forEach(node => {\n\t\t\tif (node instanceof LiveTextContent) {\n\t\t\t\thtml += `{{${node.value}}}`;\n\t\t\t} else if (node instanceof TextContent) {\n\t\t\t\thtml += node.value;\n\t\t\t} else if (node instanceof CommentNode) {\n\t\t\t\thtml += `<!-- ${node.comment} -->`;\n\t\t\t} else if (node instanceof LocalTemplateVariables) {\n\t\t\t\thtml += `@let ${node.declarations};`;\n\t\t\t} else if (node instanceof DomFragmentNode) {\n\t\t\t\thtml += this.stringify(node.children);\n\t\t\t} else if (node instanceof DomStructuralDirectiveNode) {\n\t\t\t\thtml += `@${node.name.substring(1)}${node.value ? ` (${node.value})` : ''} {${this.stringify([node.node])}}${Array.isArray(node.successors) ? this.stringify(node.successors) : ''}`;\n\t\t\t\thtml += this.stringify([node.node]);\n\t\t\t} else if (node instanceof DomStructuralDirectiveSuccessorNode) {\n\t\t\t\thtml += `@${node.name}`;\n\t\t\t\tif (node.children.length === 1 && node.children[0] instanceof DomStructuralDirectiveNode) {\n\t\t\t\t\thtml += this.stringify(node.children).substring(1);\n\t\t\t\t} else {\n\t\t\t\t\thtml += this.stringify(node.children);\n\t\t\t\t}\n\t\t\t} else if (node instanceof DomElementNode) {\n\t\t\t\tlet attrs = '';\n\t\t\t\tif (node.attributes) {\n\t\t\t\t\tattrs += node.attributes.map(attr => `${attr.name}=\"${attr.value}\"`).join(' ') + ' ';\n\t\t\t\t}\n\t\t\t\tif (node.twoWayBinding) {\n\t\t\t\t\tattrs += node.twoWayBinding.map(attr => `[(${attr.name})]=\"${attr.value}\"`).join(' ').concat(' ');\n\t\t\t\t}\n\t\t\t\tif (node.inputs) {\n\t\t\t\t\tattrs += node.inputs.map(attr => `[${attr.name}]=\"${attr.value}\"`).join(' ').concat(' ');\n\t\t\t\t}\n\t\t\t\tif (node.outputs) {\n\t\t\t\t\tattrs += node.outputs.map(attr => `(${attr.name})=\"${attr.value}\"`).join(' ').concat(' ');\n\t\t\t\t}\n\t\t\t\tif (node.templateAttrs) {\n\t\t\t\t\tattrs += node.templateAttrs.map(attr => `${attr.name}=\"${attr.value}\"`).join(' ').concat(' ');\n\t\t\t\t}\n\t\t\t\tif (isEmptyElement(node.tagName)) {\n\t\t\t\t\tif (attrs) {\n\t\t\t\t\t\thtml += `<${node.tagName} ${attrs}/>`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml += `<${node.tagName} />`;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet children = this.stringify(node.children);\n\t\t\t\t\tif (attrs && children) {\n\t\t\t\t\t\thtml += `<${node.tagName} ${attrs}>${children}</${node.tagName}>`;\n\t\t\t\t\t}\n\t\t\t\t\telse if (attrs) {\n\t\t\t\t\t\thtml += `<${node.tagName} ${attrs}></${node.tagName}>`;\n\t\t\t\t\t} else if (children) {\n\t\t\t\t\t\thtml += `<${node.tagName}>${children}<</${node.tagName}>`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml += `<${node.tagName}></${node.tagName}>`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn html;\n\t}\n\n\tdeserializeAttributes(attribute: Attribute<any, any>) {\n\t\tconst type = (attribute as Attribute<any, any> & { type: string }).type;\n\t\tswitch (type) {\n\t\t\tcase 'Attribute':\n\t\t\t\tinherit(attribute, Attribute);\n\t\t\t\tbreak;\n\t\t\tcase 'ElementAttribute':\n\t\t\t\tinherit(attribute, ElementAttribute);\n\t\t\t\tbreak;\n\t\t\tcase 'LiveAttribute':\n\t\t\t\tinherit(attribute, LiveAttribute);\n\t\t\t\tbreak;\n\t\t\tcase 'TextContent':\n\t\t\t\tinherit(attribute, TextContent);\n\t\t\t\tbreak;\n\t\t\tcase 'LiveTextContent':\n\t\t\t\tinherit(attribute, LiveTextContent);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdeserializeBaseNode(node: BaseNode) {\n\t\tnode.attributes?.forEach(attr => this.deserializeAttributes(attr));\n\t\tnode.inputs?.forEach(attr => this.deserializeAttributes(attr));\n\t\tnode.outputs?.forEach(attr => this.deserializeAttributes(attr));\n\t\tnode.templateAttrs?.forEach(attr => this.deserializeAttributes(attr));\n\t\tnode.attributeDirectives?.forEach(attr => this.deserializeNode(attr as any));\n\t}\n\n\tdeserializeNode(node: DomNode) {\n\t\tconst type = (node as DomNode & { type: string }).type;\n\t\tswitch (type) {\n\t\t\tcase 'TextContent':\n\t\t\t\tinherit(node, TextContent);\n\t\t\t\tbreak;\n\t\t\tcase 'LiveTextContent':\n\t\t\t\tinherit(node, LiveTextContent);\n\t\t\t\tbreak;\n\t\t\tcase 'CommentNode':\n\t\t\t\tinherit(node, CommentNode);\n\t\t\t\tbreak;\n\t\t\tcase 'LocalTemplateVariables':\n\t\t\t\tinherit(node, LocalTemplateVariables);\n\t\t\t\tbreak;\n\t\t\tcase 'DomFragmentNode':\n\t\t\t\tinherit(node, DomFragmentNode);\n\t\t\t\t(node as DomFragmentNode).children?.forEach(child => this.deserializeNode(child));\n\t\t\t\tbreak;\n\t\t\tcase 'DomElementNode':\n\t\t\t\tinherit(node, DomElementNode);\n\t\t\t\tif ((node as DomElementNode).templateRefName) {\n\t\t\t\t\tthis.deserializeAttributes((node as DomElementNode).templateRefName!);\n\t\t\t\t}\n\t\t\t\tthis.deserializeBaseNode(node as DomElementNode);\n\t\t\t\t(node as DomElementNode).children?.forEach(child => this.deserializeNode(child));\n\t\t\t\tbreak;\n\t\t\tcase 'DomStructuralDirectiveNode':\n\t\t\t\tinherit(node, DomStructuralDirectiveNode);\n\t\t\t\tthis.deserializeBaseNode(node as DomStructuralDirectiveNode);\n\t\t\t\tthis.deserializeNode((node as DomStructuralDirectiveNode).node);\n\t\t\t\tconst successors = (node as DomStructuralDirectiveNode).successors;\n\t\t\t\tif (successors) {\n\t\t\t\t\tsuccessors.forEach(successor => this.deserializeNode(successor));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'StructuralDirectiveSuccessorNode':\n\t\t\t\tinherit(node, DomStructuralDirectiveSuccessorNode);\n\t\t\t\t(node as DomStructuralDirectiveSuccessorNode).children?.forEach(child => this.deserializeNode(child));\n\t\t\t\tbreak;\n\t\t\tcase 'DomAttributeDirectiveNode':\n\t\t\t\tinherit(node, DomAttributeDirectiveNode);\n\t\t\t\tthis.deserializeBaseNode(node as DomAttributeDirectiveNode);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn node;\n\t}\n\n}\n\nfunction inherit(object: any, type: { new(...args: any[]): {} }) {\n\tobject.__proto__ = type.prototype;\n}\n\nexport const htmlParser = new HTMLParser();\n\n"]}
1
+ {"version":3,"file":"html-parser.js","sourceRoot":"","sources":["../../../src/elements/node/html-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { isEmptyElement } from '../attributes/common.js';\nimport {\n\tDomElementNode, CommentNode, parseTextChild,\n\tTextContent, LiveTextContent, DomFragmentNode,\n\tDomStructuralDirectiveNode, DomNode, DomChild,\n\tElementAttribute, Attribute, BaseNode, LiveAttribute,\n\tDomParentNode, DomAttributeDirectiveNode,\n\tDomStructuralDirectiveSuccessorNode,\n\tLocalTemplateVariables,\n} from '../ast/dom.js';\nimport { directiveRegistry } from '../directives/register-directive.js';\n\ntype Token = (token: string) => Token;\n\ntype ChildNode = DomElementNode | DomStructuralDirectiveNode | LocalTemplateVariables | CommentNode | string;\n\nexport class EscapeHTMLCharacter {\n\tstatic ESCAPE_MAP: { [key: string]: string } = {\n\t\t'&amp;': '&',\n\t\t'&lt;': '<',\n\t\t'&gt;': '>',\n\t\t'&quot;': '\"',\n\t\t'&#x27;': \"'\",\n\t\t'&#x60;': '`'\n\t};\n\ttest: RegExp;\n\treplace: RegExp;\n\tconstructor() {\n\t\tconst escapeRegexSource = '(?:' + Object.keys(EscapeHTMLCharacter.ESCAPE_MAP).join('|') + ')';\n\t\tthis.test = new RegExp(escapeRegexSource);\n\t\tthis.replace = new RegExp(escapeRegexSource, 'g');\n\t}\n\n\tescaper(match: string): string {\n\t\treturn EscapeHTMLCharacter.ESCAPE_MAP[match];\n\t}\n\n\tunescape(text: string): string {\n\t\tif (!text) {\n\t\t\treturn text;\n\t\t}\n\t\treturn this.test.test(text) ? text.replace(this.replace, this.escaper) : text;\n\t}\n}\n\nexport class NodeParserHelper {\n\n\tprotected checkNode(node: DomElementNode): DomElementNode | DomStructuralDirectiveNode {\n\t\tif (node instanceof DomStructuralDirectiveNode) {\n\t\t\treturn node;\n\t\t}\n\t\tconst attributes = node.attributes;\n\t\tif (attributes) {\n\t\t\tlet temp: ElementAttribute<string, any> | ElementAttribute<string, any>[] | undefined;\n\n\t\t\ttemp = attributes.find(attr => attr.name === 'is');\n\t\t\tif (temp) {\n\t\t\t\tattributes.splice(attributes.indexOf(temp), 1);\n\t\t\t\tnode.is = temp.value as string;\n\t\t\t}\n\t\t\ttemp = attributes.filter(attr => {\n\t\t\t\treturn typeof attr.value === 'string' && (/\\{\\{(.+)\\}\\}/g).test(attr.value);\n\t\t\t});\n\t\t\tif (temp?.length) {\n\t\t\t\ttemp.forEach(templateAttrs => {\n\t\t\t\t\tattributes.splice(attributes.indexOf(templateAttrs), 1);\n\t\t\t\t\tnode.addTemplateAttr(templateAttrs.name, templateAttrs.value as string);\n\t\t\t\t});\n\t\t\t}\n\t\t\ttemp = attributes.filter(attr => attr.name.startsWith('on'));\n\t\t\tif (temp?.length) {\n\t\t\t\ttemp.forEach(templateAttrs => {\n\t\t\t\t\tattributes.splice(attributes.indexOf(templateAttrs), 1);\n\t\t\t\t\tnode.addOutput(templateAttrs.name.substring(2), templateAttrs.value as string);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst directiveNames = this.extractDirectiveNames(node);\n\t\tlet sdName: string | undefined;\n\t\tif (directiveNames.length) {\n\t\t\tconst directives: DomAttributeDirectiveNode[] = [];\n\t\t\tdirectiveNames.forEach(attributeName => {\n\t\t\t\tif (attributeName.startsWith('*')) {\n\t\t\t\t\tif (sdName) {\n\t\t\t\t\t\tconsole.error(`Only one Structural Directive is allowed on an element [${sdName}, ${attributeName}]`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsdName = attributeName;\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst directive = new DomAttributeDirectiveNode(attributeName);\n\t\t\t\tif (directiveRegistry.get(attributeName)!.hasAttributes()) {\n\t\t\t\t\tthis.extractDirectiveAttributesFromNode(attributeName, directive, node);\n\t\t\t\t}\n\t\t\t\tdirectives.push(directive);\n\t\t\t});\n\t\t\tif (directives.length) {\n\t\t\t\tnode.attributeDirectives = directives;\n\t\t\t}\n\t\t}\n\t\tif (sdName) {\n\t\t\t// <div *for [forOf]=\"array\" let-item [trackBy]=\"method\" let-i=\"index\" > {{item}} </div>\n\t\t\t// <div *for=\"let item of array; let i = index; trackBy=method;\" > {{item}} </div>\n\t\t\t// <template #refName *if=\"isActive; else disabled\" > ... </template>\n\t\t\t// <template #disabled > ... </template>\n\n\t\t\tconst temp = node.attributes!.find(attr => attr.name == sdName)!;\n\t\t\tnode.attributes!.splice(node.attributes!.indexOf(temp), 1);\n\t\t\tconst isTemplate = node.tagName === 'template';\n\n\t\t\tconst directiveNode = isTemplate ? new DomFragmentNode(node.children) : node;\n\t\t\tconst directive = new DomStructuralDirectiveNode(\n\t\t\t\ttemp.name,\n\t\t\t\tdirectiveNode,\n\t\t\t\t(typeof temp?.value === 'boolean') ? undefined : String(temp.value)\n\t\t\t);\n\t\t\tconst directiveName = temp.name.substring(1);\n\t\t\tif (isTemplate) {\n\t\t\t\tdirective.inputs = node.inputs;\n\t\t\t\tdirective.outputs = node.outputs;\n\t\t\t\tdirective.attributes = node.attributes;\n\t\t\t\tdirective.templateAttrs = node.templateAttrs;\n\t\t\t\tdirective.attributeDirectives = node.attributeDirectives;\n\t\t\t} else if (directiveRegistry.hasAttributes(directiveName)) {\n\t\t\t\tthis.extractDirectiveAttributesFromNode(directiveName, directive, node);\n\t\t\t\tdirective.attributeDirectives = node.attributeDirectives;\n\t\t\t}\n\t\t\tif (isTemplate && node.templateRefName) {\n\t\t\t\tnode.children = [directive];\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\treturn directive;\n\t\t}\n\n\t\t// <for let-user [of]=\"users\"></for>\n\t\t// @for (item of items; track item.id) {\n\t\t// \t{ { item.name } }\n\t\t// }\n\t\tif (directiveRegistry.has('*' + node.tagName)) {\n\t\t\tconst children = new DomFragmentNode(node.children);\n\t\t\tconst directive = new DomStructuralDirectiveNode('*' + node.tagName, children);\n\t\t\tdirective.inputs = node.inputs;\n\t\t\tdirective.outputs = node.outputs;\n\t\t\tdirective.attributes = node.attributes;\n\t\t\tdirective.templateAttrs = node.templateAttrs;\n\t\t\tdirective.attributeDirectives = node.attributeDirectives;\n\t\t\treturn directive;\n\t\t}\n\n\t\treturn node;\n\t}\n\n\tprotected extractDirectiveAttributesFromNode(directiveName: string, directive: BaseNode, node: DomElementNode): void {\n\t\tconst attributes = directiveRegistry.getAttributes(directiveName);\n\t\tif (!attributes) {\n\t\t\treturn;\n\t\t}\n\t\tconst filterByAttrName = createFilterByAttrName(attributes);\n\t\tdirective.attributes = node.attributes?.filter(filterByAttrName);\n\t\tdirective.inputs = node.inputs?.filter(filterByAttrName);\n\t\tdirective.outputs = node.outputs?.filter(filterByAttrName);\n\t\tdirective.twoWayBinding = node.twoWayBinding?.filter(filterByAttrName);\n\t\tdirective.templateAttrs = node.templateAttrs?.filter(filterByAttrName);\n\n\t\tnode.inputs && directive.inputs?.forEach(createArrayCleaner(node.inputs));\n\t\tnode.outputs && directive.outputs?.forEach(createArrayCleaner(node.outputs));\n\t\tnode.twoWayBinding && directive.twoWayBinding?.forEach(createArrayCleaner(node.twoWayBinding));\n\t\tnode.attributes && directive.attributes?.forEach(createArrayCleaner(node.attributes));\n\t\tnode.templateAttrs && directive.templateAttrs?.forEach(createArrayCleaner(node.templateAttrs));\n\t}\n\n\tprotected extractDirectiveNames(node: BaseNode): string[] {\n\t\tconst names: string[] = [];\n\t\tif (node.attributes?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.attributes).filter(name => name.startsWith('*')));\n\t\t}\n\t\tif (node.inputs?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.inputs));\n\t\t}\n\t\tif (node.twoWayBinding?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.twoWayBinding));\n\t\t}\n\t\tif (node.templateAttrs?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.templateAttrs));\n\t\t}\n\t\tif (node.outputs?.length) {\n\t\t\tnames.push(...this.getAttributeDirectives(node.outputs));\n\t\t}\n\t\treturn [...new Set(names)];\n\t}\n\n\tprotected getAttributeDirectives(attributes: Attribute<string, any>[]): string[] {\n\t\treturn directiveRegistry.filterDirectives(attributes.map(attr => attr.name.split('.')[0]));\n\t}\n\n}\n\nexport class NodeParser extends NodeParserHelper {\n\n\tprivate index: number;\n\tprivate stateFn: Token;\n\n\tprivate tagNameRegExp = /[\\-\\.0-9_a-z\\xB7\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203F\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]|[\\uD800-\\uDB7F][\\uDC00-\\uDFFF]/;\n\n\tprivate childStack: DomChild[];\n\tprivate stackTrace: ChildNode[];\n\n\tprivate get currentNode(): DomElementNode {\n\t\treturn this.stackTrace[this.stackTrace.length - 1] as DomElementNode;\n\t}\n\n\tprivate commentOpenCount = 0;\n\tprivate commentCloseCount = 0;\n\n\tprivate tempText: string;\n\n\tprivate propertyName: string;\n\tprivate propertyValue: string;\n\tprivate propType: 'attr' | 'ref-name' | 'input' | 'output' | 'two-way';\n\n\tprivate escaper = new EscapeHTMLCharacter();\n\n\tprivate skipCount = 0;\n\tprivate flowScopeCount = 0;\n\tprivate flowChainCount = 0;\n\tprivate interpolationCount = 0;\n\tprivate insideString?: Record<\"'\" | '\"' | '`', boolean>;\n\n\tparse(html: string)/*: DomNode*/ {\n\t\tthis.reset();\n\t\tfor (; this.index < html.length; this.index++) {\n\t\t\tthis.stateFn = this.stateFn(html[this.index]);\n\t\t}\n\t\tthis.checkTextChild();\n\t\tthis.popStructuralDirectiveNodes();\n\t\tif (this.stackTrace.length > 0) {\n\t\t\tconsole.error(this.stackTrace);\n\t\t\tthrow new Error(`error parsing html, had ${this.stackTrace.length} element, [${(this.stackTrace as DomElementNode[]).map(dom => dom.tagName).join(', ')}], with no closing tag`);\n\t\t}\n\t\tlet stack = this.childStack;\n\t\tthis.reset();\n\t\treturn stack;\n\t}\n\n\tprivate reset() {\n\t\tthis.index = 0;\n\t\tthis.childStack = [];\n\t\tthis.stackTrace = [];\n\t\tthis.propType = 'attr';\n\t\tthis.commentOpenCount = 0;\n\t\tthis.commentCloseCount = 0;\n\t\tthis.skipCount = 0;\n\t\tthis.flowScopeCount = 0;\n\t\tthis.flowChainCount = 0;\n\t\tthis.interpolationCount = 0;\n\t\tthis.stateFn = this.parseText;\n\t\tthis.propertyName = this.propertyValue = this.tempText = '';\n\t}\n\n\tprivate parseText(token: string) {\n\t\tif (token === '<' || token === '@') {\n\t\t\tif (token === '@' && this.tempText.at(-1) === '\\\\') {\n\t\t\t\tthis.tempText = this.tempText.substring(0, this.tempText.length - 2) + token;\n\t\t\t\treturn this.parseText;\n\t\t\t} else {\n\t\t\t\tthis.checkTextChild();\n\t\t\t\treturn token === '<' ? this.parseTag : this.parseControlFlow;\n\t\t\t}\n\t\t}\n\t\telse if (this.interpolationCount === 0 && this.flowScopeCount > 0 && token === '}') {\n\t\t\tthis.checkTextChild();\n\t\t\tthis.tempText = '';\n\t\t\tthis.flowScopeCount--;\n\t\t\tconst directive = this.getLastStructuralDirectiveNode();\n\t\t\tif (directive) {\n\t\t\t\tconst lastDirective = chainSuccessor(directive);\n\t\t\t\tconst names = lastDirective.successors?.map(successor => successor.name) ?? [];\n\t\t\t\tif (!directiveRegistry.hasAllSuccessors(lastDirective.name, names)) {\n\t\t\t\t\tthis.flowChainCount++;\n\t\t\t\t\treturn this.parsePossibleSuccessorsControlFlow;\n\t\t\t\t}\n\t\t\t\tdo {\n\t\t\t\t\tthis.flowChainCount--;\n\t\t\t\t\tthis.popElement();\n\t\t\t\t} while (this.flowChainCount > 0);\n\t\t\t}\n\t\t\treturn this.parseText;\n\t\t} else if (token === '{') {\n\t\t\tthis.interpolationCount++;\n\t\t} else if (token === '}') {\n\t\t\tthis.interpolationCount--;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseText;\n\t}\n\n\tprivate parseTag(token: string) {\n\t\tif (token === '/') {\n\t\t\treturn this.parseCloseTag;\n\t\t}\n\t\tif (token === '!') {\n\t\t\tthis.commentOpenCount = 0;\n\t\t\tthis.commentCloseCount = 0;\n\t\t\treturn this.parseComment;\n\t\t}\n\t\tthis.index--;\n\t\treturn this.parseOpenTag;\n\t}\n\n\tprivate parseComment(token: string) {\n\t\tif (token === '-') {\n\t\t\tif (this.commentOpenCount < 2) {\n\t\t\t\tthis.commentOpenCount++;\n\t\t\t} else {\n\t\t\t\tthis.commentCloseCount++;\n\t\t\t}\n\t\t\treturn this.parseComment;\n\t\t}\n\t\telse if (token === '>' && this.commentCloseCount === 2) {\n\t\t\tthis.tempText = this.escaper.unescape(this.tempText);\n\t\t\tthis.stackTrace.push(new CommentNode(this.tempText.trim()));\n\t\t\tthis.popElement();\n\t\t\tthis.tempText = '';\n\t\t\tthis.commentOpenCount = 0;\n\t\t\tthis.commentCloseCount = 0;\n\t\t\treturn this.parseText;\n\t\t}\n\t\telse if (token === '>' && this.commentCloseCount === 0) {\n\t\t\tconst temp = this.tempText.toLowerCase();\n\t\t\tif ('doctype html' === temp) {\n\t\t\t\tthis.tempText = '';\n\t\t\t\treturn this.parseText;\n\t\t\t}\n\t\t}\n\t\tif (this.commentCloseCount > 0) {\n\t\t\tfor (let i = 0; i < this.commentCloseCount; i++) {\n\t\t\t\tthis.tempText += '-';\n\t\t\t}\n\t\t\tthis.commentCloseCount = 0;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseComment;\n\t}\n\n\tprivate parseCloseTag(token: string) {\n\t\tif (token === '>') {\n\t\t\tif (!isEmptyElement(this.currentNode.tagName)\n\t\t\t\t&& this.currentNode.tagName.trim().toLowerCase() !== this.tempText.trim().toLowerCase()\n\t\t\t) {\n\t\t\t\tthrow new Error(`Wrong closed tag at char ${this.index}, tag name: ${this.currentNode.tagName}`);\n\t\t\t}\n\t\t\tthis.popElement();\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parseText;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseCloseTag;\n\t}\n\n\tprivate parseOpenTag(token: string) {\n\t\tif (token === '>') {\n\t\t\tthis.stackTrace.push(new DomElementNode(this.tempText));\n\t\t\tif (isEmptyElement(this.tempText)) {\n\t\t\t\tthis.popElement();\n\t\t\t}\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parseText;\n\t\t}\n\t\telse if (this.tagNameRegExp.test(token)) {\n\t\t\tthis.tempText += token;\n\t\t\treturn this.parseOpenTag;\n\t\t}\n\t\telse if (/\\s/.test(token)) {\n\t\t\tthis.stackTrace.push(new DomElementNode(this.tempText));\n\t\t\tthis.tempText = '';\n\t\t\tthis.propType = 'attr';\n\t\t\treturn this.parsePropertyName;\n\t\t}\n\t\tthrow new SyntaxError('Error while parsing open tag');\n\t}\n\n\tprivate parsePropertyName(token: string) {\n\t\tif (token === '>') {\n\t\t\tif (this.tempText.trim()) {\n\t\t\t\tthis.propertyName = this.tempText;\n\t\t\t\tthis.currentNode.addAttribute(this.propertyName, true);\n\t\t\t\tthis.propertyName = this.propertyValue = this.tempText = '';\n\t\t\t}\n\t\t\tif (isEmptyElement(this.currentNode.tagName)) {\n\t\t\t\tthis.popElement();\n\t\t\t}\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parseText;\n\t\t}\n\t\telse if (token === '/') {\n\t\t\treturn this.parsePropertyName;\n\t\t}\n\t\telse if (/\\[/.test(token)) {\n\t\t\tthis.propType = 'input';\n\t\t\treturn this.parseInputOutput;\n\t\t}\n\t\telse if (/\\(|@/.test(token)) {\n\t\t\tthis.propType = 'output';\n\t\t\treturn this.parseInputOutput;\n\t\t}\n\t\telse if (/#/.test(token)) {\n\t\t\tthis.propType = 'ref-name';\n\t\t\treturn this.parseRefName;\n\t\t}\n\t\telse if (/=/.test(token)) {\n\t\t\tthis.propertyName = this.tempText;\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parsePropertyName;\n\t\t} else if (/\"/.test(token)) {\n\t\t\treturn this.parsePropertyValue;\n\t\t} else if (/\\d/.test(token)) {\n\t\t\tthis.tempText += token;\n\t\t\treturn this.parsePropertyValue;\n\t\t}\n\t\telse if (/\\s/.test(token)) {\n\t\t\tif (this.tempText.trim()) {\n\t\t\t\tthis.propertyName = this.tempText;\n\t\t\t\tthis.currentNode.addAttribute(this.propertyName, true);\n\t\t\t\tthis.propertyName, this.propertyValue = this.tempText = '';\n\t\t\t}\n\t\t\treturn this.parsePropertyName;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parsePropertyName;\n\t}\n\n\tprivate parseRefName(token: string) {\n\t\tif (/=/.test(token)) {\n\t\t\treturn this.parseRefName;\n\t\t}\n\t\telse if (/\"/.test(token)) {\n\t\t\tthis.propertyName = this.tempText;\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parsePropertyValue;\n\t\t} else if (/\\s/.test(token)) {\n\t\t\tthis.currentNode.setTemplateRefName(this.tempText, '');\n\t\t\tthis.propertyName = this.tempText = '';\n\t\t\tthis.propType = 'attr';\n\t\t\treturn this.parsePropertyName;\n\t\t} else if (/>/.test(token)) {\n\t\t\tthis.currentNode.setTemplateRefName(this.tempText, '');\n\t\t\tthis.propertyName = this.tempText = '';\n\t\t\tthis.propType = 'attr';\n\t\t\treturn this.parseText;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseRefName;\n\t}\n\n\tprivate parseInputOutput(token: string) {\n\t\tif (/\\(/.test(token)) {\n\t\t\tthis.propType = 'two-way';\n\t\t\treturn this.parseInputOutput;\n\t\t}\n\t\telse if (/\\)|\\]|=/.test(token)) {\n\t\t\treturn this.parseInputOutput;\n\t\t}\n\t\telse if (/\"/.test(token)) {\n\t\t\tthis.propertyName = this.tempText;\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parsePropertyValue;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseInputOutput;\n\t}\n\n\tprivate parseControlFlow(token: string) {\n\t\tif (token === '(') {\n\t\t\tconst flowName = '*' + this.tempText.trim();\n\t\t\tthis.stackTrace.push(new DomStructuralDirectiveNode(flowName, new DomFragmentNode()));\n\t\t\tthis.tempText = '';\n\t\t\tthis.skipCount = 1;\n\t\t\treturn this.parseControlFlowExpression;\n\t\t} else if (token === '{') {\n\t\t\tif (this.tempText.trim()) {\n\t\t\t\tconst flowName = '*' + this.tempText.trim();\n\t\t\t\tthis.stackTrace.push(new DomStructuralDirectiveNode(flowName, new DomFragmentNode()));\n\t\t\t}\n\t\t\tthis.skipCount = 0;\n\t\t\tthis.tempText = '';\n\t\t\tthis.flowScopeCount++;\n\t\t\treturn this.parseText;\n\t\t}\n\t\tthis.tempText += token;\n\t\tif (this.tempText.trim() === 'let') {\n\t\t\tthis.tempText = '';\n\t\t\tthis.insideString = {\n\t\t\t\t\"'\": false,\n\t\t\t\t'\"': false,\n\t\t\t\t'`': false\n\t\t\t};\n\t\t\treturn this.parseLocalTemplateVariables;\n\t\t}\n\t\treturn this.parseControlFlow;\n\t}\n\n\tprivate parseControlFlowExpression(token: string) {\n\t\tif (token === ')') {\n\t\t\tthis.skipCount--;\n\t\t\tif (this.skipCount == 0 && this.currentNode instanceof DomStructuralDirectiveNode) {\n\t\t\t\tthis.currentNode.value = this.tempText;\n\t\t\t\tthis.tempText = '';\n\t\t\t\treturn this.parseControlFlow;\n\t\t\t}\n\t\t} else if (token === '(') {\n\t\t\tthis.skipCount++;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseControlFlowExpression;\n\t}\n\n\tprivate parsePossibleSuccessorsControlFlow(token: string) {\n\t\tif (/\\s/.test(token)) {\n\t\t\tthis.tempText += token;\n\t\t\treturn this.parsePossibleSuccessorsControlFlow;\n\t\t}\n\t\tif (token === '@') {\n\t\t\tthis.tempText = '';\n\t\t\treturn this.parsePossibleSuccessorsControlFlowName;\n\t\t}\n\t\tdo {\n\t\t\tthis.flowChainCount--;\n\t\t\tthis.popElement();\n\t\t} while (this.flowChainCount > 0);\n\t\tthis.index--;\n\t\treturn this.parseText;\n\t}\n\n\tprivate parsePossibleSuccessorsControlFlowName(token: string) {\n\t\tif (/\\s/.test(token) || token === '{') {\n\t\t\tconst successorFlowName = '*' + this.tempText.trim();\n\t\t\tconst directive = this.getLastStructuralDirectiveNode();\n\t\t\tif (directive) {\n\t\t\t\tconst isSuccessor = directiveRegistry.hasSuccessor(directive.name, successorFlowName);\n\t\t\t\tif (isSuccessor) {\n\t\t\t\t\t(directive.successors ??= []).push(new DomStructuralDirectiveSuccessorNode(successorFlowName));\n\t\t\t\t\tthis.tempText = '';\n\t\t\t\t\tthis.index--;\n\t\t\t\t\treturn this.parseSuccessorsControlFlowName;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.tempText += token;\n\t\t\treturn this.parseText;\n\t\t} else if (token === '(') {\n\t\t\tthis.popStructuralDirectiveNodes();\n\t\t\tthis.index--;\n\t\t\treturn this.parseControlFlow;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parsePossibleSuccessorsControlFlowName;\n\t}\n\n\tprivate parseSuccessorsControlFlowName(token: string) {\n\t\tif (token === '(' || token === '{') {\n\t\t\tthis.index--;\n\t\t\treturn this.parseControlFlow;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseSuccessorsControlFlowName;\n\t}\n\n\tprivate parseLocalTemplateVariables(token: string) {\n\t\tif ((token == '\"' || token === \"'\" || token === '`') && this.tempText.at(-1) !== '\\\\') {\n\t\t\tthis.insideString![token] = !this.insideString![token];\n\t\t} else if (token === ';' && !this.insideString?.['\"'] && !this.insideString?.['`'] && !this.insideString?.[\"'\"]) {\n\t\t\tconst expression = this.tempText.trim();\n\t\t\tthis.stackTrace.push(new LocalTemplateVariables(expression));\n\t\t\tthis.popElement();\n\t\t\tthis.tempText = '';\n\t\t\tthis.insideString = undefined;\n\t\t\treturn this.parseText;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parseLocalTemplateVariables;\n\t}\n\n\tprivate parsePropertyValue(token: string) {\n\t\tif (/\"/.test(token)) {\n\t\t\tthis.propertyValue = this.tempText;\n\t\t\tswitch (this.propType) {\n\t\t\t\tcase 'input':\n\t\t\t\t\tthis.currentNode.addInput(this.propertyName, this.propertyValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'output':\n\t\t\t\t\tthis.currentNode.addOutput(this.propertyName, this.propertyValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'two-way':\n\t\t\t\t\tthis.currentNode.addTwoWayBinding(this.propertyName, this.propertyValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ref-name':\n\t\t\t\t\tthis.currentNode.setTemplateRefName(this.propertyName, this.propertyValue);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'attr':\n\t\t\t\tdefault:\n\t\t\t\t\tif (/^([-+]?\\d*\\.?\\d+)(?:[eE]([-+]?\\d+))?$/.test(this.propertyValue.trim())) {\n\t\t\t\t\t\tthis.currentNode.addAttribute(this.propertyName, +this.propertyValue.trim());\n\t\t\t\t\t} else if (/^(true|false)$/.test(this.propertyValue.trim().toLowerCase())) {\n\t\t\t\t\t\tif (this.propertyValue.trim().toLowerCase() === 'true') {\n\t\t\t\t\t\t\tthis.currentNode.addAttribute(this.propertyName, true);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.currentNode.addAttribute(this.propertyName, false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.currentNode.addAttribute(this.propertyName, this.propertyValue);\n\t\t\t\t\t}\n\t\t\t}\n\t\t\tthis.propertyName, this.propertyValue = this.tempText = '';\n\t\t\tthis.propType = 'attr';\n\t\t\treturn this.parsePropertyName;\n\t\t}\n\t\tthis.tempText += token;\n\t\treturn this.parsePropertyValue;\n\t}\n\n\tprivate checkTextChild() {\n\t\tif (this.tempText) {\n\t\t\tthis.tempText = this.escaper.unescape(this.tempText);\n\t\t\tthis.stackTrace.push(this.tempText);\n\t\t\tthis.popElement();\n\t\t\tthis.tempText = '';\n\t\t}\n\t}\n\n\tprivate popStructuralDirectiveNodes() {\n\t\twhile (this.currentNode instanceof DomStructuralDirectiveNode) {\n\t\t\tthis.popElement();\n\t\t}\n\t}\n\n\tprivate popElement() {\n\t\tconst element = this.stackTrace.pop();\n\t\tif (!element) {\n\t\t\treturn;\n\t\t}\n\t\tlet parent: ChildNode | DomFragmentNode | undefined = this.stackTrace.pop();\n\t\tlet directive: DomStructuralDirectiveNode | undefined;\n\t\tif (parent instanceof DomStructuralDirectiveNode && parent.node instanceof DomFragmentNode) {\n\t\t\tdirective = parent;\n\t\t\tparent = parent.successors?.at(-1) ?? parent.node ?? parent;\n\t\t}\n\t\tif (parent instanceof DomParentNode) {\n\t\t\tif (typeof element === 'string') {\n\t\t\t\tparent.addTextChild(element);\n\t\t\t} else if (element instanceof DomElementNode) {\n\t\t\t\tparent.addChild(this.checkNode(element));\n\t\t\t} else {\n\t\t\t\tparent.addChild(element)\n\t\t\t}\n\t\t\tthis.stackTrace.push(directive ?? parent as ChildNode);\n\t\t} else {\n\t\t\tif (typeof element === 'string') {\n\t\t\t\tparseTextChild(element).forEach(text => this.childStack.push(text));\n\t\t\t} else if (element instanceof DomElementNode) {\n\t\t\t\tconst child = this.checkNode(element);\n\t\t\t\tthis.childStack.push(child);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.childStack.push(element);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate getLastStructuralDirectiveNode() {\n\t\tfor (let i = this.stackTrace.length - 1; i >= 0; i--) {\n\t\t\tconst el = this.stackTrace[i];\n\t\t\tif (el instanceof DomStructuralDirectiveNode) {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t}\n\t\tfor (let i = this.childStack.length - 1; i >= 0; i--) {\n\t\t\tconst el = this.childStack[i];\n\t\t\tif (el instanceof DomStructuralDirectiveNode) {\n\t\t\t\treturn el;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n}\n\nfunction chainSuccessor(directive: DomStructuralDirectiveNode): DomStructuralDirectiveNode {\n\tif (!directive.successors?.length) {\n\t\treturn directive;\n\t}\n\tconst successor = directive.successors.at(-1);\n\tif (successor instanceof DomStructuralDirectiveSuccessorNode\n\t\t&& successor.children[0] instanceof DomStructuralDirectiveNode) {\n\t\treturn chainSuccessor(successor.children[0]);\n\t}\n\treturn directive;\n}\n\nfunction createFilterByAttrName(attributes: string[]) {\n\treturn (attr: Attribute<string, any>) => attributes.includes(attr.name.split('.')[0]);\n}\n\nfunction createArrayCleaner(attributes: Attribute<string, any>[]) {\n\treturn (attr: Attribute<string, any>) => attributes.splice(attributes.indexOf(attr), 1);\n}\n\nexport class HTMLParser {\n\n\tnodeParser = new NodeParser();\n\n\tparse(html: string): DomChild[] {\n\t\treturn this.nodeParser.parse(html);\n\t}\n\n\ttoDomRootNode(html: string): DomNode {\n\t\tlet stack = this.nodeParser.parse(html);\n\t\tif (!stack || stack.length === 0) {\n\t\t\treturn new DomFragmentNode([new TextContent('')]);\n\t\t} else if (stack?.length === 1) {\n\t\t\treturn stack[0];\n\t\t} else {\n\t\t\treturn new DomFragmentNode(stack);\n\t\t}\n\t}\n\n\tstringify(stack?: DomNode | DomNode[]) {\n\t\tif (!Array.isArray(stack)) {\n\t\t\tstack = stack ? [stack] : [];\n\t\t}\n\t\tlet html = '';\n\t\tstack.forEach(node => {\n\t\t\tif (node instanceof LiveTextContent) {\n\t\t\t\thtml += `{{${node.value}}}`;\n\t\t\t} else if (node instanceof TextContent) {\n\t\t\t\thtml += node.value;\n\t\t\t} else if (node instanceof CommentNode) {\n\t\t\t\thtml += `<!-- ${node.comment} -->`;\n\t\t\t} else if (node instanceof LocalTemplateVariables) {\n\t\t\t\thtml += `@let ${node.declarations};`;\n\t\t\t} else if (node instanceof DomFragmentNode) {\n\t\t\t\thtml += this.stringify(node.children);\n\t\t\t} else if (node instanceof DomStructuralDirectiveNode) {\n\t\t\t\thtml += `@${node.name.substring(1)}${node.value ? ` (${node.value})` : ''} {${this.stringify([node.node])}}${Array.isArray(node.successors) ? this.stringify(node.successors) : ''}`;\n\t\t\t\thtml += this.stringify([node.node]);\n\t\t\t} else if (node instanceof DomStructuralDirectiveSuccessorNode) {\n\t\t\t\thtml += `@${node.name}`;\n\t\t\t\tif (node.children.length === 1 && node.children[0] instanceof DomStructuralDirectiveNode) {\n\t\t\t\t\thtml += this.stringify(node.children).substring(1);\n\t\t\t\t} else {\n\t\t\t\t\thtml += this.stringify(node.children);\n\t\t\t\t}\n\t\t\t} else if (node instanceof DomElementNode) {\n\t\t\t\tlet attrs = '';\n\t\t\t\tif (node.attributes) {\n\t\t\t\t\tattrs += node.attributes.map(attr => `${attr.name}=\"${attr.value}\"`).join(' ') + ' ';\n\t\t\t\t}\n\t\t\t\tif (node.twoWayBinding) {\n\t\t\t\t\tattrs += node.twoWayBinding.map(attr => `[(${attr.name})]=\"${attr.value}\"`).join(' ').concat(' ');\n\t\t\t\t}\n\t\t\t\tif (node.inputs) {\n\t\t\t\t\tattrs += node.inputs.map(attr => `[${attr.name}]=\"${attr.value}\"`).join(' ').concat(' ');\n\t\t\t\t}\n\t\t\t\tif (node.outputs) {\n\t\t\t\t\tattrs += node.outputs.map(attr => `(${attr.name})=\"${attr.value}\"`).join(' ').concat(' ');\n\t\t\t\t}\n\t\t\t\tif (node.templateAttrs) {\n\t\t\t\t\tattrs += node.templateAttrs.map(attr => `${attr.name}=\"${attr.value}\"`).join(' ').concat(' ');\n\t\t\t\t}\n\t\t\t\tif (isEmptyElement(node.tagName)) {\n\t\t\t\t\tif (attrs) {\n\t\t\t\t\t\thtml += `<${node.tagName} ${attrs}/>`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml += `<${node.tagName} />`;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet children = this.stringify(node.children);\n\t\t\t\t\tif (attrs && children) {\n\t\t\t\t\t\thtml += `<${node.tagName} ${attrs}>${children}</${node.tagName}>`;\n\t\t\t\t\t}\n\t\t\t\t\telse if (attrs) {\n\t\t\t\t\t\thtml += `<${node.tagName} ${attrs}></${node.tagName}>`;\n\t\t\t\t\t} else if (children) {\n\t\t\t\t\t\thtml += `<${node.tagName}>${children}<</${node.tagName}>`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\thtml += `<${node.tagName}></${node.tagName}>`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\treturn html;\n\t}\n\n\tdeserializeAttributes(attribute: Attribute<any, any>) {\n\t\tconst type = (attribute as Attribute<any, any> & { type: string }).type;\n\t\tswitch (type) {\n\t\t\tcase 'Attribute':\n\t\t\t\tinherit(attribute, Attribute);\n\t\t\t\tbreak;\n\t\t\tcase 'ElementAttribute':\n\t\t\t\tinherit(attribute, ElementAttribute);\n\t\t\t\tbreak;\n\t\t\tcase 'LiveAttribute':\n\t\t\t\tinherit(attribute, LiveAttribute);\n\t\t\t\tbreak;\n\t\t\tcase 'TextContent':\n\t\t\t\tinherit(attribute, TextContent);\n\t\t\t\tbreak;\n\t\t\tcase 'LiveTextContent':\n\t\t\t\tinherit(attribute, LiveTextContent);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdeserializeBaseNode(node: BaseNode) {\n\t\tnode.attributes?.forEach(attr => this.deserializeAttributes(attr));\n\t\tnode.inputs?.forEach(attr => this.deserializeAttributes(attr));\n\t\tnode.outputs?.forEach(attr => this.deserializeAttributes(attr));\n\t\tnode.templateAttrs?.forEach(attr => this.deserializeAttributes(attr));\n\t\tnode.attributeDirectives?.forEach(attr => this.deserializeNode(attr as any));\n\t}\n\n\tdeserializeNode(node: DomNode | DomAttributeDirectiveNode) {\n\t\tconst type = (node as DomNode & { type: string }).type;\n\t\tswitch (type) {\n\t\t\tcase 'TextContent':\n\t\t\t\tnode = inherit(node, TextContent);\n\t\t\t\tbreak;\n\t\t\tcase 'LiveTextContent':\n\t\t\t\tnode = inherit(node, LiveTextContent);\n\t\t\t\tbreak;\n\t\t\tcase 'CommentNode':\n\t\t\t\tnode = inherit(node, CommentNode);\n\t\t\t\tbreak;\n\t\t\tcase 'LocalTemplateVariables':\n\t\t\t\tnode = inherit(node, LocalTemplateVariables);\n\t\t\t\tbreak;\n\t\t\tcase 'DomFragmentNode':\n\t\t\t\tnode = inherit(node, DomFragmentNode);\n\t\t\t\tnode.children?.forEach(child => this.deserializeNode(child));\n\t\t\t\tbreak;\n\t\t\tcase 'DomElementNode':\n\t\t\t\tconst dom = node = inherit(node, DomElementNode);\n\t\t\t\tif (dom.templateRefName) {\n\t\t\t\t\tthis.deserializeAttributes(dom.templateRefName!);\n\t\t\t\t}\n\t\t\t\tthis.deserializeBaseNode(node);\n\t\t\t\tnode.children?.forEach(child => this.deserializeNode(child));\n\t\t\t\tbreak;\n\t\t\tcase 'DomStructuralDirectiveNode':\n\t\t\t\tnode = inherit(node, DomStructuralDirectiveNode);\n\t\t\t\tthis.deserializeBaseNode(node);\n\t\t\t\tthis.deserializeNode((node).node);\n\t\t\t\tconst successors = (node).successors;\n\t\t\t\tif (successors) {\n\t\t\t\t\tsuccessors.forEach(successor => this.deserializeNode(successor));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'StructuralDirectiveSuccessorNode':\n\t\t\t\tnode = inherit(node, DomStructuralDirectiveSuccessorNode);\n\t\t\t\tnode.children?.forEach(child => this.deserializeNode(child));\n\t\t\t\tbreak;\n\t\t\tcase 'DomAttributeDirectiveNode':\n\t\t\t\tnode = inherit(node, DomAttributeDirectiveNode);\n\t\t\t\tthis.deserializeBaseNode(node);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\treturn node;\n\t}\n\n}\n\nfunction inherit<T extends { new(...args: any[]): {} }>(object: any, type: T): InstanceType<T> {\n\tObject.setPrototypeOf(object, type.prototype);\n\treturn object;\n}\n\nexport const htmlParser = new HTMLParser();\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibyar/elements",
3
- "version": "3.1.1",
3
+ "version": "4.0.0",
4
4
  "description": "Ibyar elements, hold info about HTMLElements class, attributes and tag name",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/ibyar/aurora/tree/dev/packages/elements",
@@ -16,7 +16,8 @@
16
16
  "contributors": [
17
17
  {
18
18
  "name": "Muhammad Salem",
19
- "email": "salem.ebo@gmail.com"
19
+ "email": "salem.ebo@gmail.com",
20
+ "url": "https://github.com/muhammad-salem"
20
21
  }
21
22
  ],
22
23
  "main": "./index.js",
@@ -35,7 +36,7 @@
35
36
  "access": "public"
36
37
  },
37
38
  "devDependencies": {
38
- "typescript": "^5.7.3"
39
+ "typescript": "^5.8.3"
39
40
  },
40
41
  "scripts": {
41
42
  "build": "tsc --build --verbose",
@@ -51,5 +52,5 @@
51
52
  "a11y",
52
53
  "front-end"
53
54
  ],
54
- "gitHead": "9532d01b23f038ee839911245e7ccf1f24add1d6"
55
+ "gitHead": "6671356b7c827061a32d138db5cad660ad0053c5"
55
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../../src/elements/template/template-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EACI,OAAO,EAAE,WAAW,EAC9B,cAAc,EACE,WAAW,EAC3B,MAAM,eAAe,CAAC;AAKvB,qBAAa,cAAc;IAE1B,KAAK,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO;IAwB7C,eAAe,CAAC,KAAK,EAAE,SAAS;IA8BhC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,mBAAmB,GAAG,MAAM,WAQtD,CAAC;CAElB;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
1
+ {"version":3,"file":"template-parser.d.ts","sourceRoot":"","sources":["../../../src/elements/template/template-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EACI,OAAO,EAAE,WAAW,EAC9B,cAAc,EACE,WAAW,EAC3B,MAAM,eAAe,CAAC;AAKvB,qBAAa,cAAc;IAE1B,KAAK,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO;IAwB7C,eAAe,CAAC,KAAK,EAAE,SAAS;IA8BhC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,mBAAmB,GAAG,MAAM,IAQ7D,OAAO,CAAC;CAElB;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}