taggedjs 2.1.2 → 2.3.25
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/index.js +1 -1
- package/js/Clones.type.d.ts +1 -0
- package/js/Clones.type.js +2 -0
- package/js/Clones.type.js.map +1 -0
- package/js/Props.d.ts +1 -0
- package/js/Props.js +2 -0
- package/js/Props.js.map +1 -0
- package/js/Subject.d.ts +7 -2
- package/js/Subject.js +15 -10
- package/js/Subject.js.map +1 -1
- package/js/Tag.class.d.ts +37 -13
- package/js/Tag.class.js +133 -99
- package/js/Tag.class.js.map +1 -1
- package/js/Tag.utils.d.ts +8 -20
- package/js/Tag.utils.js +17 -88
- package/js/Tag.utils.js.map +1 -1
- package/js/ValueSubject.d.ts +1 -1
- package/js/ValueSubject.js.map +1 -1
- package/js/bindSubjectCallback.function.d.ts +5 -0
- package/js/bindSubjectCallback.function.js +19 -0
- package/js/bindSubjectCallback.function.js.map +1 -0
- package/js/elementDestroyCheck.function.d.ts +3 -0
- package/js/elementDestroyCheck.function.js +17 -0
- package/js/elementDestroyCheck.function.js.map +1 -0
- package/js/elementInitCheck.js.map +1 -1
- package/js/gateway/gateway.web.component.d.ts +11 -0
- package/js/gateway/gateway.web.component.js +20 -0
- package/js/gateway/gateway.web.component.js.map +1 -0
- package/js/gateway/index.d.ts +3 -0
- package/js/gateway/index.js +3 -0
- package/js/gateway/index.js.map +1 -0
- package/js/gateway/loadTagGateway.function.d.ts +2 -0
- package/js/gateway/loadTagGateway.function.js +18 -0
- package/js/gateway/loadTagGateway.function.js.map +1 -0
- package/js/gateway/tagGateway.function.d.ts +31 -0
- package/js/gateway/tagGateway.function.js +187 -0
- package/js/gateway/tagGateway.function.js.map +1 -0
- package/js/getCallback.js +39 -42
- package/js/getCallback.js.map +1 -1
- package/js/getTagSupport.d.ts +18 -17
- package/js/getTagSupport.js +104 -15
- package/js/getTagSupport.js.map +1 -1
- package/js/html.d.ts +1 -1
- package/js/html.js.map +1 -1
- package/js/index.d.ts +16 -7
- package/js/index.js +20 -8
- package/js/index.js.map +1 -1
- package/js/inputAttribute.js +3 -3
- package/js/inputAttribute.js.map +1 -1
- package/js/interpolateAttributes.d.ts +2 -1
- package/js/interpolateAttributes.js +126 -60
- package/js/interpolateAttributes.js.map +1 -1
- package/js/interpolateContentTemplates.d.ts +4 -1
- package/js/interpolateContentTemplates.js +32 -25
- package/js/interpolateContentTemplates.js.map +1 -1
- package/js/interpolateElement.d.ts +8 -13
- package/js/interpolateElement.js +26 -22
- package/js/interpolateElement.js.map +1 -1
- package/js/interpolateTemplate.d.ts +15 -19
- package/js/interpolateTemplate.js +33 -231
- package/js/interpolateTemplate.js.map +1 -1
- package/js/interpolations.d.ts +3 -2
- package/js/interpolations.js +2 -1
- package/js/interpolations.js.map +1 -1
- package/js/isInstance.d.ts +6 -0
- package/js/isInstance.js +10 -0
- package/js/isInstance.js.map +1 -0
- package/js/js/Clones.type.d.ts +1 -0
- package/js/js/Clones.type.js +2 -0
- package/js/js/Clones.type.js.map +1 -0
- package/js/js/Props.d.ts +1 -0
- package/js/js/Props.js +2 -0
- package/js/js/Props.js.map +1 -0
- package/js/js/Subject.d.ts +7 -2
- package/js/js/Subject.js +15 -10
- package/js/js/Subject.js.map +1 -1
- package/js/js/Tag.class.d.ts +27 -5
- package/js/js/Tag.class.js +109 -81
- package/js/js/Tag.class.js.map +1 -1
- package/js/js/Tag.utils.d.ts +8 -20
- package/js/js/Tag.utils.js +17 -88
- package/js/js/Tag.utils.js.map +1 -1
- package/js/js/ValueSubject.d.ts +1 -1
- package/js/js/ValueSubject.js.map +1 -1
- package/js/js/bindSubjectCallback.function.d.ts +5 -0
- package/js/js/bindSubjectCallback.function.js +19 -0
- package/js/js/bindSubjectCallback.function.js.map +1 -0
- package/js/js/elementDestroyCheck.function.d.ts +3 -0
- package/js/js/elementDestroyCheck.function.js +17 -0
- package/js/js/elementDestroyCheck.function.js.map +1 -0
- package/js/js/elementInitCheck.js.map +1 -1
- package/js/js/getCallback.js +39 -42
- package/js/js/getCallback.js.map +1 -1
- package/js/js/getTagSupport.d.ts +19 -17
- package/js/js/getTagSupport.js +111 -15
- package/js/js/getTagSupport.js.map +1 -1
- package/js/js/html.d.ts +1 -1
- package/js/js/html.js.map +1 -1
- package/js/js/index.d.ts +16 -7
- package/js/js/index.js +20 -8
- package/js/js/index.js.map +1 -1
- package/js/js/interpolateAttributes.d.ts +2 -1
- package/js/js/interpolateAttributes.js +118 -60
- package/js/js/interpolateAttributes.js.map +1 -1
- package/js/js/interpolateContentTemplates.d.ts +3 -1
- package/js/js/interpolateContentTemplates.js +32 -22
- package/js/js/interpolateContentTemplates.js.map +1 -1
- package/js/js/interpolateElement.d.ts +7 -12
- package/js/js/interpolateElement.js +18 -21
- package/js/js/interpolateElement.js.map +1 -1
- package/js/js/interpolateTemplate.d.ts +15 -19
- package/js/js/interpolateTemplate.js +33 -231
- package/js/js/interpolateTemplate.js.map +1 -1
- package/js/js/interpolations.d.ts +3 -1
- package/js/js/interpolations.js +3 -3
- package/js/js/interpolations.js.map +1 -1
- package/js/js/isInstance.d.ts +6 -0
- package/js/js/isInstance.js +10 -0
- package/js/js/isInstance.js.map +1 -0
- package/js/js/onDestroy.d.ts +2 -0
- package/js/js/onDestroy.js +20 -0
- package/js/js/onDestroy.js.map +1 -0
- package/js/js/onInit.d.ts +0 -4
- package/js/js/onInit.js +12 -10
- package/js/js/onInit.js.map +1 -1
- package/js/js/processSubjectComponent.function.d.ts +8 -0
- package/js/js/processSubjectComponent.function.js +53 -0
- package/js/js/processSubjectComponent.function.js.map +1 -0
- package/js/js/processSubjectValue.function.d.ts +16 -0
- package/js/js/processSubjectValue.function.js +122 -0
- package/js/js/processSubjectValue.function.js.map +1 -0
- package/js/js/processTagArray.d.ts +5 -1
- package/js/js/processTagArray.js +21 -10
- package/js/js/processTagArray.js.map +1 -1
- package/js/js/processTagResult.function.d.ts +10 -0
- package/js/js/processTagResult.function.js +42 -0
- package/js/js/processTagResult.function.js.map +1 -0
- package/js/js/providers.d.ts +4 -12
- package/js/js/providers.js +28 -20
- package/js/js/providers.js.map +1 -1
- package/js/js/redrawTag.function.d.ts +7 -0
- package/js/js/redrawTag.function.js +9 -0
- package/js/js/redrawTag.function.js.map +1 -0
- package/js/js/render.d.ts +1 -6
- package/js/js/render.js +8 -15
- package/js/js/render.js.map +1 -1
- package/js/js/renderAppToElement.d.ts +8 -2
- package/js/js/renderAppToElement.js +40 -21
- package/js/js/renderAppToElement.js.map +1 -1
- package/js/js/setUse.function.d.ts +23 -0
- package/js/js/setUse.function.js +14 -0
- package/js/js/setUse.function.js.map +1 -0
- package/js/js/state.d.ts +14 -11
- package/js/js/state.js +68 -33
- package/js/js/state.js.map +1 -1
- package/js/js/tag.d.ts +7 -16
- package/js/js/tag.js +33 -44
- package/js/js/tag.js.map +1 -1
- package/js/js/tagElement.d.ts +14 -0
- package/js/js/tagElement.js +57 -0
- package/js/js/tagElement.js.map +1 -0
- package/js/js/tagGateway.function.d.ts +5 -0
- package/js/js/tagGateway.function.js +119 -0
- package/js/js/tagGateway.function.js.map +1 -0
- package/js/js/tagRunner.d.ts +2 -13
- package/js/js/tagRunner.js +12 -12
- package/js/js/tagRunner.js.map +1 -1
- package/js/js/templater.utils.d.ts +28 -0
- package/js/js/templater.utils.js +99 -0
- package/js/js/templater.utils.js.map +1 -0
- package/js/js/updateTag.utils.d.ts +6 -0
- package/js/js/updateTag.utils.js +84 -0
- package/js/js/updateTag.utils.js.map +1 -0
- package/js/onDestroy.d.ts +2 -0
- package/js/onDestroy.js +20 -0
- package/js/onDestroy.js.map +1 -0
- package/js/onInit.d.ts +0 -4
- package/js/onInit.js +12 -10
- package/js/onInit.js.map +1 -1
- package/js/processSubjectComponent.function.d.ts +8 -0
- package/js/processSubjectComponent.function.js +53 -0
- package/js/processSubjectComponent.function.js.map +1 -0
- package/js/processSubjectValue.function.d.ts +16 -0
- package/js/processSubjectValue.function.js +122 -0
- package/js/processSubjectValue.function.js.map +1 -0
- package/js/processTagArray.d.ts +5 -1
- package/js/processTagArray.js +21 -10
- package/js/processTagArray.js.map +1 -1
- package/js/processTagResult.function.d.ts +10 -0
- package/js/processTagResult.function.js +39 -0
- package/js/processTagResult.function.js.map +1 -0
- package/js/providers.d.ts +4 -12
- package/js/providers.js +28 -20
- package/js/providers.js.map +1 -1
- package/js/redrawTag.function.d.ts +7 -0
- package/js/redrawTag.function.js +8 -0
- package/js/redrawTag.function.js.map +1 -0
- package/js/render.d.ts +1 -6
- package/js/render.js +5 -19
- package/js/render.js.map +1 -1
- package/js/renderAppToElement.d.ts +8 -2
- package/js/renderAppToElement.js +40 -21
- package/js/renderAppToElement.js.map +1 -1
- package/js/setUse.function.d.ts +23 -0
- package/js/setUse.function.js +14 -0
- package/js/setUse.function.js.map +1 -0
- package/js/state.d.ts +14 -11
- package/js/state.js +68 -33
- package/js/state.js.map +1 -1
- package/js/tag.d.ts +6 -16
- package/js/tag.js +32 -43
- package/js/tag.js.map +1 -1
- package/js/tagElement.d.ts +14 -0
- package/js/tagElement.js +57 -0
- package/js/tagElement.js.map +1 -0
- package/js/tagGateway.function.d.ts +14 -0
- package/js/tagGateway.function.js +138 -0
- package/js/tagGateway.function.js.map +1 -0
- package/js/tagRunner.d.ts +2 -13
- package/js/tagRunner.js +12 -12
- package/js/tagRunner.js.map +1 -1
- package/js/templater.utils.d.ts +27 -0
- package/js/templater.utils.js +98 -0
- package/js/templater.utils.js.map +1 -0
- package/js/updateTag.utils.d.ts +6 -0
- package/js/updateTag.utils.js +102 -0
- package/js/updateTag.utils.js.map +1 -0
- package/package.json +1 -1
package/js/js/Subject.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
export type Subscription = (() => void) & {
|
|
2
2
|
unsubscribe: () => any;
|
|
3
3
|
};
|
|
4
|
-
type Subscriber = () => any;
|
|
5
|
-
export
|
|
4
|
+
type Subscriber = (value?: any) => any;
|
|
5
|
+
export interface SubjectLike {
|
|
6
|
+
subscribe: (callback: (value?: any) => any) => any;
|
|
7
|
+
isSubject?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class Subject<T> implements SubjectLike {
|
|
10
|
+
isSubject: boolean;
|
|
6
11
|
subscribers: Subscriber[];
|
|
7
12
|
value?: any;
|
|
8
13
|
subscribe(callback: Subscriber): Subscription;
|
package/js/js/Subject.js
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
export class Subject {
|
|
2
|
+
isSubject = true;
|
|
2
3
|
subscribers = [];
|
|
3
4
|
value;
|
|
4
5
|
// unsubcount = 0 // 🔬 testing
|
|
5
6
|
subscribe(callback) {
|
|
6
7
|
this.subscribers.push(callback);
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
SubjectClass.globalSubs.push(callback); // 🔬 testing
|
|
9
|
+
SubjectClass.globalSubCount$.set(SubjectClass.globalSubCount$.value + 1);
|
|
9
10
|
const unsubscribe = () => {
|
|
10
|
-
|
|
11
|
-
removeSubFromArray(Subject.globalSubs, callback); // 🔬 testing
|
|
12
|
-
--Subject.globalSubCount;
|
|
11
|
+
unsubscribe.unsubscribe();
|
|
13
12
|
};
|
|
14
13
|
// Return a function to unsubscribe from the BehaviorSubject
|
|
15
|
-
unsubscribe.unsubscribe =
|
|
14
|
+
unsubscribe.unsubscribe = () => {
|
|
15
|
+
removeSubFromArray(this.subscribers, callback);
|
|
16
|
+
removeSubFromArray(SubjectClass.globalSubs, callback); // 🔬 testing
|
|
17
|
+
SubjectClass.globalSubCount$.set(SubjectClass.globalSubCount$.value - 1);
|
|
18
|
+
// any double unsubscribes will be ignored
|
|
19
|
+
unsubscribe.unsubscribe = () => undefined;
|
|
20
|
+
};
|
|
16
21
|
return unsubscribe;
|
|
17
22
|
}
|
|
18
23
|
set(value) {
|
|
@@ -31,8 +36,8 @@ function removeSubFromArray(subscribers, callback) {
|
|
|
31
36
|
subscribers.splice(index, 1);
|
|
32
37
|
}
|
|
33
38
|
}
|
|
34
|
-
;
|
|
35
|
-
|
|
36
|
-
;
|
|
37
|
-
|
|
39
|
+
const SubjectClass = Subject;
|
|
40
|
+
SubjectClass.globalSubs = []; // 🔬 for testing
|
|
41
|
+
SubjectClass.globalSubCount$ = new Subject(); // for ease of debugging
|
|
42
|
+
SubjectClass.globalSubCount$.set(0);
|
|
38
43
|
//# sourceMappingURL=Subject.js.map
|
package/js/js/Subject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Subject.js","sourceRoot":"","sources":["../ts/Subject.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Subject.js","sourceRoot":"","sources":["../ts/Subject.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,OAAO;IAClB,SAAS,GAAG,IAAI,CAAA;IAChB,WAAW,GAAiB,EAAE,CAAA;IAC9B,KAAK,CAAM;IACX,+BAA+B;IAE/B,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/B,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,aAAa;QACpD,YAAY,CAAC,eAAe,CAAC,GAAG,CAAE,YAAY,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;QAE1E,MAAM,WAAW,GAAiB,GAAG,EAAE;YACrC,WAAW,CAAC,WAAW,EAAE,CAAA;QAC3B,CAAC,CAAA;QAED,4DAA4D;QAC5D,WAAW,CAAC,WAAW,GAAG,GAAG,EAAE;YAC7B,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;YAC9C,kBAAkB,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA,CAAC,aAAa;YACnE,YAAY,CAAC,eAAe,CAAC,GAAG,CAAE,YAAY,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;YAE1E,0CAA0C;YAC1C,WAAW,CAAC,WAAW,GAAG,GAAG,EAAE,CAAC,SAAS,CAAA;QAC3C,CAAC,CAAA;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,GAAG,CAAC,KAAU;QACZ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAElB,4CAA4C;QAC5C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAa,EAAE,EAAE;YACzC,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAA;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAA;CAChB;AAED,SAAS,kBAAkB,CACzB,WAAyB,EACzB,QAAoB;IAEpB,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC3C,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,OAGpB,CAAA;AACD,YAAY,CAAC,UAAU,GAAG,EAAE,CAAA,CAAC,iBAAiB;AAC9C,YAAY,CAAC,eAAe,GAAG,IAAI,OAAO,EAAE,CAAA,CAAC,wBAAwB;AACrE,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA"}
|
package/js/js/Tag.class.d.ts
CHANGED
|
@@ -1,31 +1,39 @@
|
|
|
1
1
|
import { TagSupport } from "./getTagSupport.js";
|
|
2
2
|
import { Provider } from "./providers.js";
|
|
3
3
|
import { Subscription } from "./Subject.js";
|
|
4
|
-
|
|
4
|
+
import { Counts } from "./interpolateTemplate.js";
|
|
5
|
+
import { State } from "./state.js";
|
|
6
|
+
export declare const variablePrefix = "__tagvar";
|
|
5
7
|
export declare const escapeVariable: string;
|
|
6
8
|
export declare const escapeSearch: RegExp;
|
|
7
9
|
export type Context = {
|
|
8
10
|
[index: string]: any;
|
|
9
11
|
};
|
|
12
|
+
export type TagMemory = Record<string, any> & {
|
|
13
|
+
context: Context;
|
|
14
|
+
state: State;
|
|
15
|
+
providers: Provider[];
|
|
16
|
+
};
|
|
10
17
|
export declare class Tag {
|
|
11
18
|
strings: string[];
|
|
12
19
|
values: any[];
|
|
13
|
-
|
|
20
|
+
isTag: boolean;
|
|
14
21
|
clones: (Element | Text | ChildNode)[];
|
|
15
22
|
cloneSubs: Subscription[];
|
|
16
23
|
children: Tag[];
|
|
17
24
|
tagSupport: TagSupport;
|
|
18
25
|
ownerTag?: Tag;
|
|
26
|
+
insertBefore?: Element;
|
|
27
|
+
appElement?: Element;
|
|
19
28
|
arrayValue?: any[];
|
|
20
29
|
constructor(strings: string[], values: any[]);
|
|
21
|
-
providers: Provider[];
|
|
22
30
|
beforeRedraw(): void;
|
|
23
31
|
afterRender(): void;
|
|
24
32
|
/** Used for array, such as array.map(), calls aka array.map(x => html``.key(x)) */
|
|
25
33
|
key(arrayValue: any[]): this;
|
|
26
|
-
destroy(
|
|
34
|
+
destroy(options?: DestroyOptions): Promise<number>;
|
|
27
35
|
destroySubscriptions(): void;
|
|
28
|
-
destroyClones(stagger?:
|
|
36
|
+
destroyClones({ stagger }?: DestroyOptions): Promise<number>;
|
|
29
37
|
updateByTag(tag: Tag): void;
|
|
30
38
|
lastTemplateString: string | undefined;
|
|
31
39
|
/** A method of passing down the same render method */
|
|
@@ -42,4 +50,18 @@ export declare class Tag {
|
|
|
42
50
|
updateValues(values: any[]): Context;
|
|
43
51
|
updateContext(context: Context): Context;
|
|
44
52
|
getAppElement(): Tag;
|
|
53
|
+
/** Used during HMR only where static content itself could have been edited */
|
|
54
|
+
rebuild(): void;
|
|
55
|
+
buildBeforeElement(insertBefore: Element, options?: ElementBuildOptions): (ChildNode | Element)[];
|
|
45
56
|
}
|
|
57
|
+
type DestroyOptions = {
|
|
58
|
+
depth?: number;
|
|
59
|
+
stagger: number;
|
|
60
|
+
byParent?: boolean;
|
|
61
|
+
};
|
|
62
|
+
export type ElementBuildOptions = {
|
|
63
|
+
counts: Counts;
|
|
64
|
+
forceElement?: boolean;
|
|
65
|
+
depth: number;
|
|
66
|
+
};
|
|
67
|
+
export {};
|
package/js/js/Tag.class.js
CHANGED
|
@@ -1,30 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getTagSupport } from "./getTagSupport.js";
|
|
3
|
-
import { isTagComponent } from "./interpolateTemplate.js";
|
|
1
|
+
import { getSubjectFunction, setValueRedraw } from "./Tag.utils.js";
|
|
4
2
|
import { ValueSubject } from "./ValueSubject.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
3
|
+
import { runAfterRender, runBeforeDestroy, runBeforeRedraw } from "./tagRunner.js";
|
|
4
|
+
import { isSubjectInstance, isTagComponent, isTagInstance } from "./isInstance.js";
|
|
5
|
+
import { buildClones } from "./render.js";
|
|
6
|
+
import { interpolateElement } from "./interpolateElement.js";
|
|
7
|
+
import { afterElmBuild } from "./interpolateTemplate.js";
|
|
8
|
+
import { elementDestroyCheck } from "./elementDestroyCheck.function.js";
|
|
9
|
+
import { updateExistingValue } from "./updateTag.utils.js";
|
|
10
|
+
export const variablePrefix = '__tagvar';
|
|
8
11
|
export const escapeVariable = '--' + variablePrefix + '--';
|
|
9
12
|
const prefixSearch = new RegExp(variablePrefix, 'g');
|
|
10
13
|
export const escapeSearch = new RegExp(escapeVariable, 'g');
|
|
11
14
|
export class Tag {
|
|
12
15
|
strings;
|
|
13
16
|
values;
|
|
14
|
-
|
|
17
|
+
isTag = true;
|
|
15
18
|
clones = []; // elements on document
|
|
16
19
|
cloneSubs = []; // subscriptions created by clones
|
|
17
20
|
children = []; // tags on me
|
|
18
21
|
tagSupport;
|
|
19
22
|
// only present when a child of a tag
|
|
20
23
|
ownerTag;
|
|
24
|
+
insertBefore;
|
|
25
|
+
appElement; // only seen on this.getAppElement().appElement
|
|
21
26
|
// present only when an array. Populated by this.key()
|
|
22
27
|
arrayValue;
|
|
23
28
|
constructor(strings, values) {
|
|
24
29
|
this.strings = strings;
|
|
25
30
|
this.values = values;
|
|
26
31
|
}
|
|
27
|
-
providers = [];
|
|
28
32
|
beforeRedraw() {
|
|
29
33
|
runBeforeRedraw(this.tagSupport, this);
|
|
30
34
|
}
|
|
@@ -36,27 +40,48 @@ export class Tag {
|
|
|
36
40
|
this.arrayValue = arrayValue;
|
|
37
41
|
return this;
|
|
38
42
|
}
|
|
39
|
-
destroy(
|
|
40
|
-
|
|
43
|
+
async destroy(options = {
|
|
44
|
+
depth: 0,
|
|
45
|
+
stagger: 0,
|
|
46
|
+
byParent: false, // TODO: Replace with depth control. Only destroy clones of direct children
|
|
47
|
+
}) {
|
|
48
|
+
const depth = options.depth || 0;
|
|
49
|
+
runBeforeDestroy(this.tagSupport, this);
|
|
41
50
|
this.destroySubscriptions();
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
const promises = this.children.map((kid) => kid.destroy({ ...options, byParent: true, depth: depth + 1 }));
|
|
52
|
+
if (depth <= 0) {
|
|
53
|
+
options.stagger = await this.destroyClones(options);
|
|
44
54
|
}
|
|
45
|
-
|
|
55
|
+
if (this.ownerTag) {
|
|
56
|
+
this.ownerTag.children = this.ownerTag.children.filter(child => child !== this);
|
|
57
|
+
}
|
|
58
|
+
await Promise.all(promises);
|
|
59
|
+
return options.stagger;
|
|
46
60
|
}
|
|
47
61
|
destroySubscriptions() {
|
|
48
62
|
this.cloneSubs.forEach(cloneSub => cloneSub.unsubscribe());
|
|
49
63
|
this.cloneSubs.length = 0;
|
|
50
64
|
}
|
|
51
|
-
destroyClones(stagger =
|
|
52
|
-
|
|
65
|
+
async destroyClones({ stagger } = {
|
|
66
|
+
stagger: 0,
|
|
67
|
+
}) {
|
|
68
|
+
const promises = this.clones.reverse().map((clone, index) => {
|
|
53
69
|
let promise = Promise.resolve();
|
|
54
70
|
if (clone.ondestroy) {
|
|
55
71
|
promise = elementDestroyCheck(clone, stagger);
|
|
56
72
|
}
|
|
57
|
-
promise.then(() =>
|
|
73
|
+
promise.then(() => {
|
|
74
|
+
clone.parentNode?.removeChild(clone);
|
|
75
|
+
const ownerTag = this.ownerTag;
|
|
76
|
+
if (ownerTag) {
|
|
77
|
+
// Sometimes my clones were first registered to my owner, remove them
|
|
78
|
+
ownerTag.clones = ownerTag.clones.filter(compareClone => compareClone !== clone);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return promise;
|
|
58
82
|
});
|
|
59
|
-
|
|
83
|
+
await Promise.all(promises);
|
|
84
|
+
// this.clones.length = 0
|
|
60
85
|
return stagger;
|
|
61
86
|
}
|
|
62
87
|
updateByTag(tag) {
|
|
@@ -66,9 +91,8 @@ export class Tag {
|
|
|
66
91
|
lastTemplateString = undefined; // used to compare templates for updates
|
|
67
92
|
/** A method of passing down the same render method */
|
|
68
93
|
setSupport(tagSupport) {
|
|
69
|
-
this.tagSupport =
|
|
70
|
-
this.tagSupport.mutatingRender =
|
|
71
|
-
this.children.forEach(kid => kid.setSupport(tagSupport));
|
|
94
|
+
this.tagSupport = tagSupport;
|
|
95
|
+
this.tagSupport.mutatingRender = tagSupport.mutatingRender;
|
|
72
96
|
}
|
|
73
97
|
updateConfig(strings, values) {
|
|
74
98
|
this.strings = strings;
|
|
@@ -79,12 +103,20 @@ export class Tag {
|
|
|
79
103
|
const string = this.lastTemplateString = this.strings.map((string, index) => {
|
|
80
104
|
const safeString = string.replace(prefixSearch, escapeVariable);
|
|
81
105
|
const endString = safeString + (this.values.length > index ? `{${variablePrefix}${index}}` : '');
|
|
82
|
-
|
|
106
|
+
// const trimString = index === 0 || index === this.strings.length-1 ? endString.trim() : endString
|
|
107
|
+
const trimString = endString.replace(/>\s*/g, '>').replace(/\s*</g, '<');
|
|
108
|
+
return trimString;
|
|
83
109
|
}).join('');
|
|
84
|
-
return {
|
|
110
|
+
return {
|
|
111
|
+
string,
|
|
112
|
+
strings: this.strings,
|
|
113
|
+
values: this.values,
|
|
114
|
+
context: this.tagSupport?.memory.context || {},
|
|
115
|
+
};
|
|
85
116
|
}
|
|
86
117
|
isLikeTag(tag) {
|
|
87
|
-
|
|
118
|
+
const { string } = tag.getTemplate();
|
|
119
|
+
if (string !== this.lastTemplateString) {
|
|
88
120
|
return false;
|
|
89
121
|
}
|
|
90
122
|
if (tag.values.length !== this.values.length) {
|
|
@@ -100,11 +132,12 @@ export class Tag {
|
|
|
100
132
|
}
|
|
101
133
|
return false;
|
|
102
134
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
this
|
|
106
|
-
|
|
107
|
-
|
|
135
|
+
const tag = value;
|
|
136
|
+
if (isTagInstance(tag) && isTagInstance(compareTo)) {
|
|
137
|
+
tag.ownerTag = this; // let children know I own them
|
|
138
|
+
this.children.push(tag); // record children I created
|
|
139
|
+
tag.lastTemplateString || tag.getTemplate().string; // ensure last template string is generated
|
|
140
|
+
if (tag.isLikeTag(compareTo)) {
|
|
108
141
|
return true;
|
|
109
142
|
}
|
|
110
143
|
return false;
|
|
@@ -117,11 +150,11 @@ export class Tag {
|
|
|
117
150
|
return false;
|
|
118
151
|
}
|
|
119
152
|
update() {
|
|
120
|
-
return this.updateContext(this.context);
|
|
153
|
+
return this.updateContext(this.tagSupport.memory.context);
|
|
121
154
|
}
|
|
122
155
|
updateValues(values) {
|
|
123
156
|
this.values = values;
|
|
124
|
-
return this.updateContext(this.context);
|
|
157
|
+
return this.updateContext(this.tagSupport.memory.context);
|
|
125
158
|
}
|
|
126
159
|
updateContext(context) {
|
|
127
160
|
this.strings.map((_string, index) => {
|
|
@@ -131,57 +164,9 @@ export class Tag {
|
|
|
131
164
|
// is something already there?
|
|
132
165
|
const existing = context[variableName];
|
|
133
166
|
if (existing) {
|
|
134
|
-
|
|
135
|
-
const ogTag = existing.value?.tag;
|
|
136
|
-
// handle already seen tag components
|
|
137
|
-
if (isTagComponent(value)) {
|
|
138
|
-
const latestProps = value.cloneProps;
|
|
139
|
-
const existingTag = existing.tag;
|
|
140
|
-
// previously was something else, now a tag component
|
|
141
|
-
if (!existing.tag) {
|
|
142
|
-
setValueRedraw(value, existing, this);
|
|
143
|
-
value.redraw(latestProps);
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
const oldTagSetup = existingTag.tagSupport;
|
|
147
|
-
const tagSupport = value.tagSupport || oldTagSetup || getTagSupport(value);
|
|
148
|
-
const oldCloneProps = tagSupport.templater?.cloneProps;
|
|
149
|
-
const oldProps = tagSupport.templater?.props;
|
|
150
|
-
if (existingTag) {
|
|
151
|
-
const isCommonEqual = oldProps === undefined && oldProps === latestProps;
|
|
152
|
-
const equal = isCommonEqual || deepEqual(oldCloneProps, latestProps);
|
|
153
|
-
if (equal) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
setValueRedraw(value, existing, this);
|
|
158
|
-
oldTagSetup.templater = value;
|
|
159
|
-
existing.value.tag = oldTagSetup.newest = value.redraw(latestProps);
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
// handle already seen tags
|
|
163
|
-
if (ogTag) {
|
|
164
|
-
const tagSupport = ogTag.tagSupport;
|
|
165
|
-
const templater = value;
|
|
166
|
-
runBeforeRender(tagSupport, ogTag);
|
|
167
|
-
tagSupport.oldest.beforeRedraw();
|
|
168
|
-
const retag = templater.wrapper();
|
|
169
|
-
retag.tagSupport = tagSupport;
|
|
170
|
-
templater.newest = retag;
|
|
171
|
-
tagSupport.oldest.afterRender();
|
|
172
|
-
ogTag.updateByTag(retag);
|
|
173
|
-
existing.set(value);
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
// now its a function
|
|
177
|
-
if (value instanceof Function) {
|
|
178
|
-
existing.set(bindSubjectFunction(value, this));
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
existing.set(value); // let ValueSubject now of newest value
|
|
182
|
-
return;
|
|
167
|
+
return updateExistingValue(existing, value, this);
|
|
183
168
|
}
|
|
184
|
-
// First time values below
|
|
169
|
+
// 🆕 First time values below
|
|
185
170
|
if (isTagComponent(value)) {
|
|
186
171
|
const existing = context[variableName] = new ValueSubject(value);
|
|
187
172
|
setValueRedraw(value, existing, this);
|
|
@@ -194,10 +179,14 @@ export class Tag {
|
|
|
194
179
|
if (!hasValue) {
|
|
195
180
|
return; // more strings than values, stop here
|
|
196
181
|
}
|
|
197
|
-
if (value
|
|
182
|
+
if (isTagInstance(value)) {
|
|
198
183
|
value.ownerTag = this;
|
|
199
184
|
this.children.push(value);
|
|
200
185
|
}
|
|
186
|
+
if (isSubjectInstance(value)) {
|
|
187
|
+
context[variableName] = value;
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
201
190
|
context[variableName] = new ValueSubject(value);
|
|
202
191
|
});
|
|
203
192
|
return context;
|
|
@@ -209,5 +198,44 @@ export class Tag {
|
|
|
209
198
|
}
|
|
210
199
|
return tag;
|
|
211
200
|
}
|
|
201
|
+
/** Used during HMR only where static content itself could have been edited */
|
|
202
|
+
rebuild() {
|
|
203
|
+
const insertBefore = this.insertBefore;
|
|
204
|
+
if (!insertBefore) {
|
|
205
|
+
const err = new Error('Cannot rebuild. Previous insertBefore element is not defined on tag');
|
|
206
|
+
err.tag = this;
|
|
207
|
+
throw err;
|
|
208
|
+
}
|
|
209
|
+
this.buildBeforeElement(insertBefore, {
|
|
210
|
+
forceElement: true,
|
|
211
|
+
counts: { added: 0, removed: 0 },
|
|
212
|
+
depth: this.tagSupport.depth,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
buildBeforeElement(insertBefore, options = {
|
|
216
|
+
forceElement: false,
|
|
217
|
+
counts: { added: 0, removed: 0 },
|
|
218
|
+
depth: 0,
|
|
219
|
+
}) {
|
|
220
|
+
this.insertBefore = insertBefore;
|
|
221
|
+
const context = this.update();
|
|
222
|
+
const template = this.getTemplate();
|
|
223
|
+
// const ownerTag = this.ownerTag
|
|
224
|
+
const temporary = document.createElement('div');
|
|
225
|
+
temporary.id = 'tag-temp-holder';
|
|
226
|
+
// render content with a first child that we can know is our first element
|
|
227
|
+
temporary.innerHTML = '<div id="top-element-insert-after"></div>' + template.string;
|
|
228
|
+
// const clonesBefore = this.clones.map(clone => clone)
|
|
229
|
+
const intClones = interpolateElement(temporary, context, this, // this.ownerTag || this,
|
|
230
|
+
{ forceElement: options.forceElement, depth: options.depth });
|
|
231
|
+
this.clones.length = 0;
|
|
232
|
+
const clones = buildClones(temporary, insertBefore);
|
|
233
|
+
this.clones.push(...clones);
|
|
234
|
+
if (intClones.length) {
|
|
235
|
+
this.clones = this.clones.filter(cloneFilter => !intClones.find(clone => clone === cloneFilter));
|
|
236
|
+
}
|
|
237
|
+
this.clones.forEach(clone => afterElmBuild(clone, options));
|
|
238
|
+
return this.clones;
|
|
239
|
+
}
|
|
212
240
|
}
|
|
213
241
|
//# sourceMappingURL=Tag.class.js.map
|
package/js/js/Tag.class.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tag.class.js","sourceRoot":"","sources":["../ts/Tag.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Tag.class.js","sourceRoot":"","sources":["../ts/Tag.class.ts"],"names":[],"mappings":"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"}
|
package/js/js/Tag.utils.d.ts
CHANGED
|
@@ -1,24 +1,12 @@
|
|
|
1
|
+
import { TagSupport } from "./getTagSupport.js";
|
|
1
2
|
import { ValueSubject } from "./ValueSubject.js";
|
|
3
|
+
import { Subject } from "./Subject.js";
|
|
2
4
|
import { Tag } from "./Tag.class.js";
|
|
3
|
-
import { TemplaterResult } from "./
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* @param {Tag} tag
|
|
8
|
-
* @returns
|
|
9
|
-
*/
|
|
10
|
-
export declare function bindSubjectFunction(value: (...args: any[]) => any, tag: Tag): {
|
|
11
|
-
(element: Element, args: any[]): any;
|
|
12
|
-
tagFunction: (...args: any[]) => any;
|
|
5
|
+
import { TemplaterResult } from "./templater.utils.js";
|
|
6
|
+
export type TagSubject = Subject<TemplaterResult> & {
|
|
7
|
+
tagSupport: TagSupport;
|
|
8
|
+
tag: Tag;
|
|
13
9
|
};
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
* @param {*} templater
|
|
17
|
-
* @param {ExistingValue} existing
|
|
18
|
-
* @param {Tag} ownerTag
|
|
19
|
-
*/
|
|
10
|
+
export declare function getSubjectFunction(value: any, tag: Tag): ValueSubject<unknown>;
|
|
20
11
|
export declare function setValueRedraw(templater: TemplaterResult, // latest tag function to call for rendering
|
|
21
|
-
existing:
|
|
22
|
-
export declare function elementDestroyCheck(nextSibling: Element & {
|
|
23
|
-
ondestroy?: () => any;
|
|
24
|
-
}, stagger: number): any;
|
|
12
|
+
existing: TagSubject, ownerTag: Tag): void;
|
package/js/js/Tag.utils.js
CHANGED
|
@@ -1,102 +1,31 @@
|
|
|
1
|
-
import { getTagSupport } from "./getTagSupport.js";
|
|
2
|
-
import { config as providers } from "./providers.js";
|
|
3
1
|
import { ValueSubject } from "./ValueSubject.js";
|
|
4
|
-
import {
|
|
2
|
+
import { redrawTag } from "./redrawTag.function.js";
|
|
3
|
+
import { bindSubjectCallback } from "./bindSubjectCallback.function.js";
|
|
5
4
|
export function getSubjectFunction(value, tag) {
|
|
6
|
-
return new ValueSubject(
|
|
5
|
+
return new ValueSubject(bindSubjectCallback(value, tag));
|
|
7
6
|
}
|
|
8
|
-
/**
|
|
9
|
-
* @param {*} value
|
|
10
|
-
* @param {Tag} tag
|
|
11
|
-
* @returns
|
|
12
|
-
*/
|
|
13
|
-
export function bindSubjectFunction(value, tag) {
|
|
14
|
-
function subjectFunction(element, args) {
|
|
15
|
-
const renderCount = tag.tagSupport.renderCount;
|
|
16
|
-
const method = value.bind(element);
|
|
17
|
-
const callbackResult = method(...args);
|
|
18
|
-
if (renderCount !== tag.tagSupport.renderCount) {
|
|
19
|
-
return; // already rendered
|
|
20
|
-
}
|
|
21
|
-
tag.tagSupport.render();
|
|
22
|
-
if (callbackResult instanceof Promise) {
|
|
23
|
-
callbackResult.then(() => {
|
|
24
|
-
tag.tagSupport.render();
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
return callbackResult;
|
|
28
|
-
}
|
|
29
|
-
subjectFunction.tagFunction = value;
|
|
30
|
-
return subjectFunction;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
*
|
|
34
|
-
* @param {*} templater
|
|
35
|
-
* @param {ExistingValue} existing
|
|
36
|
-
* @param {Tag} ownerTag
|
|
37
|
-
*/
|
|
38
7
|
export function setValueRedraw(templater, // latest tag function to call for rendering
|
|
39
8
|
existing, ownerTag) {
|
|
40
9
|
// redraw does not communicate to parent
|
|
41
|
-
templater.redraw = (
|
|
42
|
-
|
|
10
|
+
templater.redraw = (force // forces redraw on children
|
|
11
|
+
) => {
|
|
43
12
|
const existingTag = existing.tag;
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
existing.tagSupport = tagSupport;
|
|
48
|
-
// const self = this as any
|
|
49
|
-
const self = templater;
|
|
50
|
-
tagSupport.mutatingRender = tagSupport.mutatingRender || existing.tagSupport?.mutatingRender || ( /* TODO: we might be able to remove this last OR */self.tagSupport.mutatingRender);
|
|
51
|
-
const runtimeOwnerTag = existingTag?.ownerTag || ownerTag;
|
|
52
|
-
runBeforeRender(tagSupport, tagSupport.oldest);
|
|
53
|
-
if (tagSupport.oldest) {
|
|
54
|
-
tagSupport.oldest.beforeRedraw();
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
providers.ownerTag = runtimeOwnerTag;
|
|
58
|
-
}
|
|
59
|
-
const retag = templater.wrapper();
|
|
60
|
-
retag.tagSupport = tagSupport;
|
|
61
|
-
if (tagSupport.oldest) {
|
|
62
|
-
tagSupport.oldest.afterRender();
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
retag.afterRender();
|
|
66
|
-
}
|
|
67
|
-
templater.newest = retag;
|
|
68
|
-
retag.ownerTag = runtimeOwnerTag;
|
|
69
|
-
const oldest = tagSupport.oldest = tagSupport.oldest || retag;
|
|
70
|
-
tagSupport.newest = retag;
|
|
71
|
-
const oldestTagSupport = oldest.tagSupport;
|
|
72
|
-
oldest.tagSupport = oldestTagSupport || tagSupport;
|
|
73
|
-
oldest.tagSupport.templater = templater;
|
|
74
|
-
// retag.getTemplate() // cause lastTemplateString to render
|
|
75
|
-
retag.setSupport(tagSupport);
|
|
76
|
-
const isSameTag = existingTag && existingTag.isLikeTag(retag);
|
|
77
|
-
// If previously was a tag and seems to be same tag, then just update current tag with new values
|
|
78
|
-
if (isSameTag) {
|
|
79
|
-
oldest.updateByTag(retag);
|
|
13
|
+
const { remit, retag } = redrawTag(existingTag, templater, ownerTag);
|
|
14
|
+
existing.tagSupport = retag.tagSupport;
|
|
15
|
+
if (!remit) {
|
|
80
16
|
return;
|
|
81
17
|
}
|
|
82
18
|
existing.set(templater);
|
|
19
|
+
if (force) {
|
|
20
|
+
const context = existingTag.tagSupport.memory.context;
|
|
21
|
+
Object.values(context).forEach((item) => {
|
|
22
|
+
if (!item.value?.isTemplater) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
item.value.redraw();
|
|
26
|
+
});
|
|
27
|
+
}
|
|
83
28
|
return retag;
|
|
84
29
|
};
|
|
85
30
|
}
|
|
86
|
-
export function elementDestroyCheck(nextSibling, stagger) {
|
|
87
|
-
const onDestroyDoubleWrap = nextSibling.ondestroy; // nextSibling.getAttribute('onDestroy')
|
|
88
|
-
if (!onDestroyDoubleWrap) {
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const onDestroyWrap = onDestroyDoubleWrap.tagFunction;
|
|
92
|
-
if (!onDestroyWrap) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
const onDestroy = onDestroyWrap.tagFunction;
|
|
96
|
-
if (!onDestroy) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
const event = { target: nextSibling, stagger };
|
|
100
|
-
return onDestroy(event);
|
|
101
|
-
}
|
|
102
31
|
//# sourceMappingURL=Tag.utils.js.map
|
package/js/js/Tag.utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tag.utils.js","sourceRoot":"","sources":["../ts/Tag.utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Tag.utils.js","sourceRoot":"","sources":["../ts/Tag.utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAIvE,MAAM,UAAU,kBAAkB,CAChC,KAAU,EACV,GAAQ;IAER,OAAO,IAAI,YAAY,CAAE,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAE,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,SAA0B,EAAE,4CAA4C;AACxE,QAAoB,EACpB,QAAa;IAEb,wCAAwC;IACxC,SAAS,CAAC,MAAM,GAAG,CACjB,KAAe,CAAC,4BAA4B;MAC5C,EAAE;QACF,MAAM,WAAW,GAAoB,QAAQ,CAAC,GAAG,CAAA;QACjD,MAAM,EAAC,KAAK,EAAE,KAAK,EAAC,GAAG,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;QAElE,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QAEtC,IAAG,CAAC,KAAK,EAAE,CAAC;YACV,OAAM;QACR,CAAC;QAED,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAEvB,IAAG,KAAK,EAAE,CAAC;YACT,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAA;YACrD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gBAC3C,IAAG,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;oBAC5B,OAAM;gBACR,CAAC;gBAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;YACrB,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC"}
|