@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 +1 -1
- package/attributes/form.d.ts +20 -0
- package/attributes/form.d.ts.map +1 -1
- package/attributes/form.js +78 -0
- package/attributes/form.js.map +1 -1
- package/node/html-parser.d.ts +2 -2
- package/node/html-parser.d.ts.map +1 -1
- package/node/html-parser.js +15 -15
- package/node/html-parser.js.map +1 -1
- package/package.json +5 -4
- package/template/template-parser.d.ts.map +1 -1
package/LICENSE
CHANGED
package/attributes/form.d.ts
CHANGED
|
@@ -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
|
package/attributes/form.d.ts.map
CHANGED
|
@@ -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"}
|
package/attributes/form.js
CHANGED
|
@@ -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
|
package/attributes/form.js.map
CHANGED
|
@@ -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"]}
|
package/node/html-parser.d.ts
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"html-parser.d.ts","sourceRoot":"","sources":["../../../src/elements/node/html-parser.ts"],"names":[],"mappings":"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"}
|
package/node/html-parser.js
CHANGED
|
@@ -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 (
|
|
805
|
-
this.deserializeAttributes(
|
|
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
|
|
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
|
package/node/html-parser.js.map
CHANGED
|
@@ -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'&': '&',\n\t\t'<': '<',\n\t\t'>': '>',\n\t\t'"': '\"',\n\t\t''': \"'\",\n\t\t'`': '`'\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'&': '&',\n\t\t'<': '<',\n\t\t'>': '>',\n\t\t'"': '\"',\n\t\t''': \"'\",\n\t\t'`': '`'\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
|
+
"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.
|
|
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": "
|
|
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,
|
|
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"}
|