@ibyar/core 0.8.3 → 0.8.4
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/annotation/decorators.d.ts +33 -9
- package/annotation/decorators.js +1 -0
- package/annotation/decorators.js.map +1 -1
- package/binding/binding.expressions.d.ts +3 -3
- package/binding/binding.expressions.js +9 -9
- package/binding/binding.expressions.js.map +1 -1
- package/component/component.d.ts +9 -4
- package/component/component.js +41 -12
- package/component/component.js.map +1 -1
- package/component/custom-element.d.ts +5 -5
- package/component/reflect.d.ts +2 -2
- package/component/reflect.js +9 -9
- package/component/reflect.js.map +1 -1
- package/directive/directive.d.ts +7 -3
- package/directive/directive.js +6 -3
- package/directive/directive.js.map +1 -1
- package/directive/parser.d.ts +1 -1
- package/directive/parser.js +12 -12
- package/directive/parser.js.map +1 -1
- package/directive/providers.d.ts +1 -1
- package/html/expression.js +29 -2
- package/html/expression.js.map +1 -1
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/index.js.map +1 -1
- package/package.json +17 -7
- package/pipe/pipe.js +3 -3
- package/pipe/pipe.js.map +1 -1
- package/providers/provider.d.ts +1 -1
- package/render/host-binding.handler.d.ts +46 -0
- package/render/host-binding.handler.js +60 -0
- package/render/host-binding.handler.js.map +1 -0
- package/render/host-listener.handler.d.ts +16 -9
- package/render/host-listener.handler.js +17 -15
- package/render/host-listener.handler.js.map +1 -1
- package/utils/elements-util.d.ts +1 -0
- package/utils/elements-util.js +7 -1
- package/utils/elements-util.js.map +1 -1
- package/utils/path.d.ts +1 -1
- package/view/base-view.js +8 -15
- package/view/base-view.js.map +1 -1
- package/view/form-view.js +69 -66
- package/view/form-view.js.map +1 -1
- package/view/render.d.ts +20 -3
- package/view/render.js +110 -87
- package/view/render.js.map +1 -1
- package/view/utils.js +12 -12
- package/view/utils.js.map +1 -1
- package/view/view.d.ts +3 -1
- package/view/view.js +9 -1
- package/view/view.js.map +1 -1
- package/zone/bootstrap.d.ts +3 -3
- package/zone/bootstrap.js +1 -11
- package/zone/bootstrap.js.map +1 -1
- package/zone/proxy.d.ts +3 -2
- package/zone/proxy.js +6 -3
- package/zone/proxy.js.map +1 -1
- package/zone/task.js +8 -8
- package/zone/task.js.map +1 -1
- package/zone/zone.d.ts +5 -4
- package/zone/zone.js +22 -3
- package/zone/zone.js.map +1 -1
package/component/reflect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../../src/core/component/reflect.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IACvB,YAAmB,aAAqB,EAAY,SAAkB;QAAnD,kBAAa,GAAb,aAAa,CAAQ;QAAY,cAAS,GAAT,SAAS,CAAS;IAAI,CAAC;IAC3E,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC;IAC7C,CAAC;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;CAEhD;AAED,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IACjD,YAAY,aAAqB,EAAE,QAAiB,EAAS,OAAyB;QACrF,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAD6B,YAAO,GAAP,OAAO,CAAkB;IAEtF,CAAC;CACD;AAED,MAAM,OAAO,QAAQ;IACpB,YACQ,SAAiB,EACjB,QAA4F,EAC5F,YAA2B;QAF3B,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAoF;QAC5F,iBAAY,GAAZ,YAAY,CAAe;IAC/B,CAAC;CACL;AAED,MAAM,OAAO,WAAW;IACvB,YAAmB,SAAiB,EAAS,IAAc,EAAS,iBAAyB;QAA1E,cAAS,GAAT,SAAS,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAU;QAAS,sBAAiB,GAAjB,iBAAiB,CAAQ;IAAI,CAAC;CAClG;AAED,MAAM,OAAO,cAAc;IAC1B,YAAmB,
|
|
1
|
+
{"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../../src/core/component/reflect.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IACvB,YAAmB,aAAqB,EAAY,SAAkB;QAAnD,kBAAa,GAAb,aAAa,CAAQ;QAAY,cAAS,GAAT,SAAS,CAAS;IAAI,CAAC;IAC3E,IAAI,aAAa;QAChB,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC;IAC7C,CAAC;CACD;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;CAEhD;AAED,MAAM,OAAO,iBAAkB,SAAQ,WAAW;IACjD,YAAY,aAAqB,EAAE,QAAiB,EAAS,OAAyB;QACrF,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAD6B,YAAO,GAAP,OAAO,CAAkB;IAEtF,CAAC;CACD;AAED,MAAM,OAAO,QAAQ;IACpB,YACQ,SAAiB,EACjB,QAA4F,EAC5F,YAA2B;QAF3B,cAAS,GAAT,SAAS,CAAQ;QACjB,aAAQ,GAAR,QAAQ,CAAoF;QAC5F,iBAAY,GAAZ,YAAY,CAAe;IAC/B,CAAC;CACL;AAED,MAAM,OAAO,WAAW;IACvB,YAAmB,SAAiB,EAAS,IAAc,EAAS,iBAAyB;QAA1E,cAAS,GAAT,SAAS,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAU;QAAS,sBAAiB,GAAjB,iBAAiB,CAAQ;IAAI,CAAC;CAClG;AAED,MAAM,OAAO,cAAc;IAC1B,YAAmB,iBAAyB,EAAS,gBAAwB;QAA1D,sBAAiB,GAAjB,iBAAiB,CAAQ;QAAS,qBAAgB,GAAhB,gBAAgB,CAAQ;IAAI,CAAC;CAClF;AAMD,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACvD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAGrD,MAAM,OAAO,iBAAiB;IAE7B,MAAM,CAAC,oBAAoB,CAAe,MAAc;QACvD,IAAI,SAAS,GAAM,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,EAAE;YACf,SAAS,GAAG,EAAO,CAAC;YACpB,OAAO,CAAC,cAAc,CAAC,eAAe,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;SAC3D;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,YAAY,CAAe,MAAc;QAC/C,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,CAAC,eAAe,CAAI,MAAc;QACvC,OAAO,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,CAAC,eAAe,CAAI,MAAc,EAAE,YAA6B;QACtE,OAAO,CAAC,cAAc,CAAC,cAAc,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,aAAqB;IACxC,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,aAAqB,EAAE,SAAiB,EAAE,QAAgB;QACzE,MAAM,SAAS,GAAsB,iBAAiB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC3F,SAAS,CAAC,MAAM,KAAhB,SAAS,CAAC,MAAM,GAAK,EAAE,EAAC;QACxB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,aAAqB,EAAE,SAAiB,EAAE,QAAgB,EAAE,OAAwB;QACpG,MAAM,SAAS,GAAsB,iBAAiB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC3F,SAAS,CAAC,OAAO,KAAjB,SAAS,CAAC,OAAO,GAAK,EAAE,EAAC;QACzB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,aAAqB,EAAE,SAAiB;QAC/D,MAAM,SAAS,GAAsB,iBAAiB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC3F,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,aAAqB,EAAE,SAAiB,EAAE,QAAgE,EAAE,YAA2B;QAC1J,MAAM,SAAS,GAAsB,iBAAiB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC3F,SAAS,CAAC,SAAS,KAAnB,SAAS,CAAC,SAAS,GAAK,EAAE,EAAC;QAC3B,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,aAAqB,EAAE,SAAiB,EAAE,QAAgE;QAChI,MAAM,SAAS,GAAsB,iBAAiB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC3F,SAAS,CAAC,YAAY,KAAtB,SAAS,CAAC,YAAY,GAAK,EAAE,EAAC;QAC9B,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,aAAqB,EAAE,WAAmB,EAAE,SAAiB,EAAE,IAAc;QACnG,MAAM,SAAS,GAAsB,iBAAiB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC3F,SAAS,CAAC,aAAa,KAAvB,SAAS,CAAC,aAAa,GAAK,EAAE,EAAC;QAC/B,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,aAAqB,EAAE,WAAmB,EAAE,gBAAwB;QACzF,MAAM,SAAS,GAAsB,iBAAiB,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC3F,SAAS,CAAC,YAAY,KAAtB,SAAS,CAAC,YAAY,GAAK,EAAE,EAAC;QAC9B,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAChF,CAAC;CACD","sourcesContent":["import type { ChildOptions, OutputEventInit } from '../annotation/decorators.js';\nimport type { ComponentRef } from './component.js';\n\nexport class PropertyRef {\n\tconstructor(public modelProperty: string, protected _viewName?: string) { }\n\tget viewAttribute(): string {\n\t\treturn this._viewName || this.modelProperty;\n\t}\n}\n\nexport class InputPropertyRef extends PropertyRef {\n\n}\n\nexport class OutputPropertyRef extends PropertyRef {\n\tconstructor(modelProperty: string, viewName?: string, public options?: OutputEventInit) {\n\t\tsuper(modelProperty, viewName);\n\t}\n}\n\nexport class ChildRef {\n\tconstructor(\n\t\tpublic modelName: string,\n\t\tpublic selector: string | { new(): HTMLElement; prototype: HTMLElement } | CustomElementConstructor,\n\t\tpublic childOptions?: ChildOptions\n\t) { }\n}\n\nexport class ListenerRef {\n\tconstructor(public eventName: string, public args: string[], public modelCallbackName: string) { }\n}\n\nexport class HostBindingRef {\n\tconstructor(public modelPropertyName: string, public hostPropertyName: string) { }\n}\n\nexport interface BootstrapMetadata {\n\t[key: string]: any;\n}\n\nconst AuroraBootstrap = Symbol.for('aurora:bootstrap');\nconst AuroraMetadata = Symbol.for('aurora:metadata');\n\n\nexport class ReflectComponents {\n\n\tstatic getOrCreateBootstrap<T extends {}>(target: Object): T {\n\t\tlet bootstrap: T = Reflect.getMetadata(AuroraBootstrap, target);\n\t\tif (!bootstrap) {\n\t\t\tbootstrap = {} as T;\n\t\t\tReflect.defineMetadata(AuroraBootstrap, bootstrap, target);\n\t\t}\n\t\treturn bootstrap;\n\t}\n\n\tstatic getBootstrap<T extends {}>(target: Object): T {\n\t\treturn Reflect.getMetadata(AuroraBootstrap, target);\n\t}\n\n\tstatic getComponentRef<T>(target: object): ComponentRef<T> {\n\t\treturn Reflect.getMetadata(AuroraMetadata, target);\n\t}\n\n\tstatic setComponentRef<T>(target: object, componentRef: ComponentRef<T>): void {\n\t\tReflect.defineMetadata(AuroraMetadata, componentRef, target);\n\t}\n\n\tstatic addOptional(modelProperty: Object) {\n\t}\n\n\tstatic addInput(modelProperty: Object, modelName: string, viewName: string) {\n\t\tconst bootstrap: BootstrapMetadata = ReflectComponents.getOrCreateBootstrap(modelProperty);\n\t\tbootstrap.inputs ??= [];\n\t\tbootstrap.inputs.push(new InputPropertyRef(modelName, viewName));\n\t}\n\n\tstatic addOutput(modelProperty: Object, modelName: string, viewName: string, options: OutputEventInit) {\n\t\tconst bootstrap: BootstrapMetadata = ReflectComponents.getOrCreateBootstrap(modelProperty);\n\t\tbootstrap.outputs ??= [];\n\t\tbootstrap.outputs.push(new OutputPropertyRef(modelName, viewName, options));\n\t}\n\n\tstatic setComponentView(modelProperty: Object, modelName: string) {\n\t\tconst bootstrap: BootstrapMetadata = ReflectComponents.getOrCreateBootstrap(modelProperty);\n\t\tbootstrap.view = modelName;\n\t}\n\n\tstatic addViewChild(modelProperty: Object, modelName: string, selector: string | typeof HTMLElement | CustomElementConstructor, childOptions?: ChildOptions) {\n\t\tconst bootstrap: BootstrapMetadata = ReflectComponents.getOrCreateBootstrap(modelProperty);\n\t\tbootstrap.viewChild ??= [];\n\t\tbootstrap.viewChild.push(new ChildRef(modelName, selector, childOptions));\n\t}\n\n\tstatic addViewChildren(modelProperty: Object, modelName: string, selector: string | typeof HTMLElement | CustomElementConstructor) {\n\t\tconst bootstrap: BootstrapMetadata = ReflectComponents.getOrCreateBootstrap(modelProperty);\n\t\tbootstrap.ViewChildren ??= [];\n\t\tbootstrap.ViewChildren.push(new ChildRef(modelName, selector));\n\t}\n\n\tstatic addHostListener(modelProperty: Object, propertyKey: string, eventName: string, args: string[]) {\n\t\tconst bootstrap: BootstrapMetadata = ReflectComponents.getOrCreateBootstrap(modelProperty);\n\t\tbootstrap.hostListeners ??= [];\n\t\tbootstrap.hostListeners.push(new ListenerRef(eventName, args, propertyKey));\n\t}\n\n\tstatic addHostBinding(modelProperty: Object, propertyKey: string, hostPropertyName: string) {\n\t\tconst bootstrap: BootstrapMetadata = ReflectComponents.getOrCreateBootstrap(modelProperty);\n\t\tbootstrap.hostBindings ??= [];\n\t\tbootstrap.hostBindings.push(new HostBindingRef(propertyKey, hostPropertyName));\n\t}\n}\n"]}
|
package/directive/directive.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HTMLComponent } from '../component/custom-element.js';
|
|
2
2
|
import { TemplateRef } from '../linker/template-ref.js';
|
|
3
3
|
import { ViewContainerRef } from '../linker/view-container-ref.js';
|
|
4
|
+
import { AuroraZone } from '../zone/zone.js';
|
|
4
5
|
/**
|
|
5
6
|
* A structural directive selector as '*if' '*for'
|
|
6
7
|
*/
|
|
@@ -8,19 +9,22 @@ export declare class StructuralDirective {
|
|
|
8
9
|
protected templateRef: TemplateRef;
|
|
9
10
|
protected viewContainerRef: ViewContainerRef;
|
|
10
11
|
protected host: HTMLComponent<any> | StructuralDirective;
|
|
11
|
-
|
|
12
|
+
protected _zone: AuroraZone;
|
|
13
|
+
constructor(templateRef: TemplateRef, viewContainerRef: ViewContainerRef, host: HTMLComponent<any> | StructuralDirective, _zone: AuroraZone);
|
|
12
14
|
}
|
|
13
15
|
/**
|
|
14
16
|
* An attributes directive selector as '[class] [style]'
|
|
15
17
|
*/
|
|
16
18
|
export declare class AttributeDirective {
|
|
17
19
|
protected el: HTMLElement;
|
|
18
|
-
|
|
20
|
+
protected _zone: AuroraZone;
|
|
21
|
+
constructor(el: HTMLElement, _zone: AuroraZone);
|
|
19
22
|
}
|
|
20
23
|
/**
|
|
21
24
|
* An attributes directive on structural directive
|
|
22
25
|
*/
|
|
23
26
|
export declare class AttributeOnStructuralDirective {
|
|
24
27
|
protected directive: StructuralDirective;
|
|
25
|
-
|
|
28
|
+
protected _zone: AuroraZone;
|
|
29
|
+
constructor(directive: StructuralDirective, _zone: AuroraZone);
|
|
26
30
|
}
|
package/directive/directive.js
CHANGED
|
@@ -2,26 +2,29 @@
|
|
|
2
2
|
* A structural directive selector as '*if' '*for'
|
|
3
3
|
*/
|
|
4
4
|
export class StructuralDirective {
|
|
5
|
-
constructor(templateRef, viewContainerRef, host) {
|
|
5
|
+
constructor(templateRef, viewContainerRef, host, _zone) {
|
|
6
6
|
this.templateRef = templateRef;
|
|
7
7
|
this.viewContainerRef = viewContainerRef;
|
|
8
8
|
this.host = host;
|
|
9
|
+
this._zone = _zone;
|
|
9
10
|
}
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
13
|
* An attributes directive selector as '[class] [style]'
|
|
13
14
|
*/
|
|
14
15
|
export class AttributeDirective {
|
|
15
|
-
constructor(el) {
|
|
16
|
+
constructor(el, _zone) {
|
|
16
17
|
this.el = el;
|
|
18
|
+
this._zone = _zone;
|
|
17
19
|
}
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
20
22
|
* An attributes directive on structural directive
|
|
21
23
|
*/
|
|
22
24
|
export class AttributeOnStructuralDirective {
|
|
23
|
-
constructor(directive) {
|
|
25
|
+
constructor(directive, _zone) {
|
|
24
26
|
this.directive = directive;
|
|
27
|
+
this._zone = _zone;
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
//# sourceMappingURL=directive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directive.js","sourceRoot":"","sources":["../../../src/core/directive/directive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"directive.js","sourceRoot":"","sources":["../../../src/core/directive/directive.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC/B,YACW,WAAwB,EACxB,gBAAkC,EAClC,IAA8C,EAC9C,KAAiB;QAHjB,gBAAW,GAAX,WAAW,CAAa;QACxB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,SAAI,GAAJ,IAAI,CAA0C;QAC9C,UAAK,GAAL,KAAK,CAAY;IACxB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC9B,YAAsB,EAAe,EAAY,KAAiB;QAA5C,OAAE,GAAF,EAAE,CAAa;QAAY,UAAK,GAAL,KAAK,CAAY;IAAI,CAAC;CACvE;AAED;;GAEG;AACH,MAAM,OAAO,8BAA8B;IAC1C,YAAsB,SAA8B,EAAY,KAAiB;QAA3D,cAAS,GAAT,SAAS,CAAqB;QAAY,UAAK,GAAL,KAAK,CAAY;IAAI,CAAC;CACtF","sourcesContent":["\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { TemplateRef } from '../linker/template-ref.js';\nimport { ViewContainerRef } from '../linker/view-container-ref.js';\nimport { AuroraZone } from '../zone/zone.js';\n\n/**\n * A structural directive selector as '*if' '*for'\n */\nexport class StructuralDirective {\n\tconstructor(\n\t\tprotected templateRef: TemplateRef,\n\t\tprotected viewContainerRef: ViewContainerRef,\n\t\tprotected host: HTMLComponent<any> | StructuralDirective,\n\t\tprotected _zone: AuroraZone,\n\t) { }\n}\n\n/**\n * An attributes directive selector as '[class] [style]'\n */\nexport class AttributeDirective {\n\tconstructor(protected el: HTMLElement, protected _zone: AuroraZone) { }\n}\n\n/**\n * An attributes directive on structural directive\n */\nexport class AttributeOnStructuralDirective {\n\tconstructor(protected directive: StructuralDirective, protected _zone: AuroraZone) { }\n}\n"]}
|
package/directive/parser.d.ts
CHANGED
package/directive/parser.js
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
1
|
import { Identifier, Token, TokenExpression, TokenStream } from '@ibyar/expressions';
|
|
2
2
|
class TokenConstant {
|
|
3
3
|
}
|
|
4
|
-
TokenConstant.LET = new TokenExpression(Token.LET);
|
|
5
|
-
TokenConstant.COMMA = new TokenExpression(Token.COMMA);
|
|
6
|
-
TokenConstant.ASSIGN = new TokenExpression(Token.ASSIGN);
|
|
7
|
-
TokenConstant.IMPLICIT = new TokenExpression(Token.IDENTIFIER, new Identifier('$implicit'));
|
|
8
|
-
TokenConstant.EOS = new TokenExpression(Token.EOS);
|
|
4
|
+
TokenConstant.LET = new TokenExpression(Token.LET, [-1, -1]);
|
|
5
|
+
TokenConstant.COMMA = new TokenExpression(Token.COMMA, [-1, -1]);
|
|
6
|
+
TokenConstant.ASSIGN = new TokenExpression(Token.ASSIGN, [-1, -1]);
|
|
7
|
+
TokenConstant.IMPLICIT = new TokenExpression(Token.IDENTIFIER, [-1, -1], new Identifier('$implicit'));
|
|
8
|
+
TokenConstant.EOS = new TokenExpression(Token.EOS, [-1, -1]);
|
|
9
9
|
export class DirectiveExpressionParser {
|
|
10
|
-
constructor(directiveName, stream) {
|
|
11
|
-
this.directiveName = directiveName;
|
|
12
|
-
this.stream = stream;
|
|
13
|
-
this.templateExpressions = new Array();
|
|
14
|
-
this.directiveInputs = new Map();
|
|
15
|
-
}
|
|
16
10
|
static parse(directiveName, expression) {
|
|
17
11
|
const stream = TokenStream.getTokenStream(expression);
|
|
18
12
|
const parser = new DirectiveExpressionParser(directiveName, stream);
|
|
@@ -24,6 +18,12 @@ export class DirectiveExpressionParser {
|
|
|
24
18
|
}
|
|
25
19
|
return parser.getDirectiveExpressionType();
|
|
26
20
|
}
|
|
21
|
+
constructor(directiveName, stream) {
|
|
22
|
+
this.directiveName = directiveName;
|
|
23
|
+
this.stream = stream;
|
|
24
|
+
this.templateExpressions = new Array();
|
|
25
|
+
this.directiveInputs = new Map();
|
|
26
|
+
}
|
|
27
27
|
getDirectiveExpressionType() {
|
|
28
28
|
return {
|
|
29
29
|
templateExpressions: this.templateExpressions,
|
|
@@ -153,7 +153,7 @@ export class DirectiveExpressionParser {
|
|
|
153
153
|
else {
|
|
154
154
|
inputToken = this.stream.next();
|
|
155
155
|
const identifierName = inputToken.token.getName();
|
|
156
|
-
inputToken = new TokenExpression(Token.IDENTIFIER, new Identifier(identifierName));
|
|
156
|
+
inputToken = new TokenExpression(Token.IDENTIFIER, [-1, -1], new Identifier(identifierName));
|
|
157
157
|
}
|
|
158
158
|
// only template input
|
|
159
159
|
// mapping from directive scope(context) to template scope
|
package/directive/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/core/directive/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { Identifier, Token, TokenExpression, TokenStream } from '@ibyar/expressions';\n\nexport type DirectiveExpressionType = {\n\ttemplateExpressions: Array<TokenExpression[]>;\n\tdirectiveInputs: Map<string, string>;\n};\n\nclass TokenConstant {\n\tstatic LET = new TokenExpression(Token.LET);\n\tstatic COMMA = new TokenExpression(Token.COMMA);\n\tstatic ASSIGN = new TokenExpression(Token.ASSIGN);\n\tstatic IMPLICIT = new TokenExpression(Token.IDENTIFIER, new Identifier('$implicit'));\n\tstatic EOS = new TokenExpression(Token.EOS);\n}\n\nexport class DirectiveExpressionParser {\n\n\n\tpublic static parse(directiveName: string, expression: string): DirectiveExpressionType {\n\t\tconst stream = TokenStream.getTokenStream(expression);\n\t\tconst parser = new DirectiveExpressionParser(directiveName, stream);\n\t\ttry {\n\t\t\tparser.scan();\n\t\t} catch (error) {\n\t\t\tconsole.error('error parsing template expression', expression, parser, error);\n\t\t}\n\t\treturn parser.getDirectiveExpressionType();\n\t}\n\n\tprotected templateExpressions = new Array<TokenExpression[]>();\n\tprotected directiveInputs = new Map<string, string>();\n\n\tconstructor(protected directiveName: string, protected stream: TokenStream) { }\n\n\tgetDirectiveExpressionType(): DirectiveExpressionType {\n\t\treturn {\n\t\t\ttemplateExpressions: this.templateExpressions,\n\t\t\tdirectiveInputs: this.directiveInputs\n\t\t};\n\t}\n\tscan(): void {\n\t\t// parse 'let/const/var' if found, or switch to expression mode.\n\t\tif (this.isDeclareKeyword()) {\n\t\t\tthis.parseTemplateInput();\n\t\t} else {\n\t\t\t// parse expression, possible ends is semicolon, comma, let and 'EOS'\n\t\t\tthis.parseExpression(this.directiveName);\n\t\t}\n\t\tif (this.stream.peek().isType(Token.EOS)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.consumeSemicolonOrComma();\n\n\t\t// parse let and parseDirectiveAndTemplateInputs\n\t\twhile (this.stream.peek().isNotType(Token.EOS)) {\n\t\t\tthis.parseTemplateInput() || this.parseDirectiveAndTemplateInputs();\n\t\t\tthis.consumeSemicolonOrComma();\n\t\t}\n\t}\n\tprotected consume(token: Token) {\n\t\tif (this.stream.next().isNotType(token)) {\n\t\t\tthrow new Error(this.stream.createError(`Parsing ${JSON.stringify(token)}`));\n\t\t}\n\t}\n\tprotected check(token: Token): boolean {\n\t\tconst peek = this.stream.peek();\n\t\tif (peek.isType(token)) {\n\t\t\tthis.stream.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected consumeToList(token: Token, list: TokenExpression[]) {\n\t\tconst next = this.stream.next();\n\t\tif (next.isNotType(token)) {\n\t\t\tthrow new Error(this.stream.createError(`Parsing ${JSON.stringify(token)}`));\n\t\t}\n\t\tlist.push(next);\n\t}\n\n\tprotected consumeIfToken(token: Token, list: TokenExpression[]): boolean {\n\t\tconst next = this.stream.peek();\n\t\tif (next.isNotType(token)) {\n\t\t\treturn false;\n\t\t}\n\t\tlist.push(next);\n\t\tthis.stream.next();\n\t\treturn true;\n\t}\n\n\tprotected isDeclareKeyword(): boolean {\n\t\tconst peek = this.stream.peek();\n\t\treturn peek.isType(Token.LET) || peek.isType(Token.CONST) || peek.isType(Token.VAR);\n\t}\n\n\tprotected isIdentifier(): boolean {\n\t\treturn this.stream.peek().isType(Token.IDENTIFIER);\n\t}\n\n\tprotected isAsKeyword(): boolean {\n\t\tconst peek = this.stream.peek();\n\t\treturn peek.isType(Token.IDENTIFIER) && (peek.getValue<Identifier>().getName() == 'as');\n\t}\n\n\tprotected consumeAsKeyword() {\n\t\tthis.consume(Token.IDENTIFIER);\n\t}\n\tprotected isSemicolon() {\n\t\treturn this.stream.peek().isType(Token.SEMICOLON);\n\t}\n\tprotected isComma() {\n\t\treturn this.stream.peek().isType(Token.COMMA);\n\t}\n\tprotected consumeSemicolonOrComma() {\n\t\tlet peek = this.stream.peek();\n\t\tif (peek.isType(Token.SEMICOLON) || peek.isType(Token.COMMA)) {\n\t\t\tthis.stream.next();\n\t\t\treturn;\n\t\t}\n\t}\n\tprotected parseTemplateInput() {\n\t\t// let = \"let\" :local \"=\" :export \";\"?\n\t\tif (this.isDeclareKeyword()) {\n\t\t\tlet peek = this.stream.peek();\n\t\t\tconst list: TokenExpression[] = [peek];\n\t\t\tthis.consume(peek.token);\n\t\t\tpeek = this.stream.peek();\n\t\t\tif (Token.isOpenPair(peek.token) && peek.isNotType(Token.LPAREN)) {\n\t\t\t\t// object and array pattern, destructing\n\t\t\t\tthis.stream.readTill(Token.closeOf(peek.token), list);\n\t\t\t} else if (peek.isType(Token.IDENTIFIER)) {\n\t\t\t\tthis.consumeToList(Token.IDENTIFIER, list);\n\t\t\t} else {\n\t\t\t\tthrow new Error(this.stream.createError(`Can't parse let/const/var {IDENTIFIER/ObjectPattern}`));\n\t\t\t}\n\t\t\tif (this.consumeIfToken(Token.ASSIGN, list)) {\n\t\t\t\tthis.stream.readTokensConsiderPair(list, Token.SEMICOLON, Token.COMMA, Token.LET, Token.CONST, Token.VAR, Token.EOS);\n\t\t\t} else {\n\t\t\t\tlist.push(TokenConstant.ASSIGN, TokenConstant.IMPLICIT);\n\t\t\t}\n\t\t\tthis.templateExpressions.push(list);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected parseExpression(inputName: string) {\n\t\tconst list: TokenExpression[] = [];\n\t\tthis.stream.readTokensConsiderPair(list, Token.SEMICOLON, Token.COMMA, Token.LET, Token.EOS);\n\t\tthis.directiveInputs.set(inputName, list.map(this.mapTokenToString).join(' '));\n\t}\n\n\t/**\n\t * check if the first is\n\t * @returns `boolean`\n\t */\n\tprotected parseDirectiveAndTemplateInputs() {\n\t\tif (this.stream.peek().isType(Token.EOS)) {\n\t\t\treturn;\n\t\t}\n\t\tlet inputToken: TokenExpression;\n\t\tif (this.isIdentifier()) {\n\t\t\tinputToken = this.stream.next();\n\t\t} else {\n\t\t\tinputToken = this.stream.next();\n\t\t\tconst identifierName = inputToken.token.getName();\n\t\t\tinputToken = new TokenExpression(Token.IDENTIFIER, new Identifier(identifierName));\n\t\t}\n\n\t\t// only template input\n\t\t// mapping from directive scope(context) to template scope\n\t\tif (this.isAsKeyword()) {\n\t\t\t// as = :export \"as\" :local \";\"?\n\t\t\tthis.consumeAsKeyword();\n\t\t\t// rewrite `input as alias`\n\t\t\t// ==> in template -> alias = input\n\n\t\t\tconst aliasToken = this.stream.next();\n\t\t\tconst aliasList: TokenExpression[] = [];\n\t\t\taliasList.push(aliasToken, TokenConstant.ASSIGN, inputToken, TokenConstant.EOS);\n\t\t\tthis.templateExpressions.push(aliasList);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.check(Token.ASSIGN) || this.check(Token.COLON);\n\n\t\tconst list: TokenExpression[] = [];\n\t\t// keyExp = :key \":\"? :expression (\"as\" :local)? \";\"?\n\t\tthis.stream.readTokensConsiderPair(list, Token.SEMICOLON, Token.COMMA, Token.LET, Token.CONST, Token.VAR, Token.EOS);\n\n\t\t// mix for directive input and template input\n\t\tif (this.isAsKeyword()) {\n\t\t\tthis.consumeAsKeyword();\n\t\t\t// rewrite `input {x: 7, y: 9} as alias` \n\t\t\t// ==> in directive ->`input = {x: 7, y: 9}`\n\t\t\t// ==> or in template -> let alias = input\n\t\t\tconst aliasToken = this.stream.next();\n\t\t\tconst aliasList: TokenExpression[] = [];\n\t\t\taliasList.push(TokenConstant.LET, aliasToken, TokenConstant.ASSIGN, inputToken, TokenConstant.EOS);\n\t\t\tthis.templateExpressions.push(aliasList);\n\t\t}\n\t\tconst inputName = inputToken.getValue<Identifier>().getName() as string;\n\t\tthis.directiveInputs.set(inputName, list.map(this.mapTokenToString).join(' '));\n\n\t}\n\n\tprivate mapTokenToString(token: TokenExpression): String {\n\t\tif (token.value) {\n\t\t\treturn token.value.toString();\n\t\t}\n\t\treturn token.token.getName();\n\t}\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/core/directive/parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { Identifier, Token, TokenExpression, TokenStream } from '@ibyar/expressions';\n\nexport type DirectiveExpressionType = {\n\ttemplateExpressions: Array<TokenExpression[]>;\n\tdirectiveInputs: Map<string, string>;\n};\n\nclass TokenConstant {\n\tstatic LET = new TokenExpression(Token.LET, [-1, -1]);\n\tstatic COMMA = new TokenExpression(Token.COMMA, [-1, -1]);\n\tstatic ASSIGN = new TokenExpression(Token.ASSIGN, [-1, -1]);\n\tstatic IMPLICIT = new TokenExpression(Token.IDENTIFIER, [-1, -1], new Identifier('$implicit'));\n\tstatic EOS = new TokenExpression(Token.EOS, [-1, -1]);\n}\n\nexport class DirectiveExpressionParser {\n\n\n\tpublic static parse(directiveName: string, expression: string): DirectiveExpressionType {\n\t\tconst stream = TokenStream.getTokenStream(expression);\n\t\tconst parser = new DirectiveExpressionParser(directiveName, stream);\n\t\ttry {\n\t\t\tparser.scan();\n\t\t} catch (error) {\n\t\t\tconsole.error('error parsing template expression', expression, parser, error);\n\t\t}\n\t\treturn parser.getDirectiveExpressionType();\n\t}\n\n\tprotected templateExpressions = new Array<TokenExpression[]>();\n\tprotected directiveInputs = new Map<string, string>();\n\n\tconstructor(protected directiveName: string, protected stream: TokenStream) { }\n\n\tgetDirectiveExpressionType(): DirectiveExpressionType {\n\t\treturn {\n\t\t\ttemplateExpressions: this.templateExpressions,\n\t\t\tdirectiveInputs: this.directiveInputs\n\t\t};\n\t}\n\tscan(): void {\n\t\t// parse 'let/const/var' if found, or switch to expression mode.\n\t\tif (this.isDeclareKeyword()) {\n\t\t\tthis.parseTemplateInput();\n\t\t} else {\n\t\t\t// parse expression, possible ends is semicolon, comma, let and 'EOS'\n\t\t\tthis.parseExpression(this.directiveName);\n\t\t}\n\t\tif (this.stream.peek().isType(Token.EOS)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.consumeSemicolonOrComma();\n\n\t\t// parse let and parseDirectiveAndTemplateInputs\n\t\twhile (this.stream.peek().isNotType(Token.EOS)) {\n\t\t\tthis.parseTemplateInput() || this.parseDirectiveAndTemplateInputs();\n\t\t\tthis.consumeSemicolonOrComma();\n\t\t}\n\t}\n\tprotected consume(token: Token) {\n\t\tif (this.stream.next().isNotType(token)) {\n\t\t\tthrow new Error(this.stream.createError(`Parsing ${JSON.stringify(token)}`));\n\t\t}\n\t}\n\tprotected check(token: Token): boolean {\n\t\tconst peek = this.stream.peek();\n\t\tif (peek.isType(token)) {\n\t\t\tthis.stream.next();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tprotected consumeToList(token: Token, list: TokenExpression[]) {\n\t\tconst next = this.stream.next();\n\t\tif (next.isNotType(token)) {\n\t\t\tthrow new Error(this.stream.createError(`Parsing ${JSON.stringify(token)}`));\n\t\t}\n\t\tlist.push(next);\n\t}\n\n\tprotected consumeIfToken(token: Token, list: TokenExpression[]): boolean {\n\t\tconst next = this.stream.peek();\n\t\tif (next.isNotType(token)) {\n\t\t\treturn false;\n\t\t}\n\t\tlist.push(next);\n\t\tthis.stream.next();\n\t\treturn true;\n\t}\n\n\tprotected isDeclareKeyword(): boolean {\n\t\tconst peek = this.stream.peek();\n\t\treturn peek.isType(Token.LET) || peek.isType(Token.CONST) || peek.isType(Token.VAR);\n\t}\n\n\tprotected isIdentifier(): boolean {\n\t\treturn this.stream.peek().isType(Token.IDENTIFIER);\n\t}\n\n\tprotected isAsKeyword(): boolean {\n\t\tconst peek = this.stream.peek();\n\t\treturn peek.isType(Token.IDENTIFIER) && (peek.getValue<Identifier>().getName() == 'as');\n\t}\n\n\tprotected consumeAsKeyword() {\n\t\tthis.consume(Token.IDENTIFIER);\n\t}\n\tprotected isSemicolon() {\n\t\treturn this.stream.peek().isType(Token.SEMICOLON);\n\t}\n\tprotected isComma() {\n\t\treturn this.stream.peek().isType(Token.COMMA);\n\t}\n\tprotected consumeSemicolonOrComma() {\n\t\tlet peek = this.stream.peek();\n\t\tif (peek.isType(Token.SEMICOLON) || peek.isType(Token.COMMA)) {\n\t\t\tthis.stream.next();\n\t\t\treturn;\n\t\t}\n\t}\n\tprotected parseTemplateInput() {\n\t\t// let = \"let\" :local \"=\" :export \";\"?\n\t\tif (this.isDeclareKeyword()) {\n\t\t\tlet peek = this.stream.peek();\n\t\t\tconst list: TokenExpression[] = [peek];\n\t\t\tthis.consume(peek.token);\n\t\t\tpeek = this.stream.peek();\n\t\t\tif (Token.isOpenPair(peek.token) && peek.isNotType(Token.LPAREN)) {\n\t\t\t\t// object and array pattern, destructing\n\t\t\t\tthis.stream.readTill(Token.closeOf(peek.token), list);\n\t\t\t} else if (peek.isType(Token.IDENTIFIER)) {\n\t\t\t\tthis.consumeToList(Token.IDENTIFIER, list);\n\t\t\t} else {\n\t\t\t\tthrow new Error(this.stream.createError(`Can't parse let/const/var {IDENTIFIER/ObjectPattern}`));\n\t\t\t}\n\t\t\tif (this.consumeIfToken(Token.ASSIGN, list)) {\n\t\t\t\tthis.stream.readTokensConsiderPair(list, Token.SEMICOLON, Token.COMMA, Token.LET, Token.CONST, Token.VAR, Token.EOS);\n\t\t\t} else {\n\t\t\t\tlist.push(TokenConstant.ASSIGN, TokenConstant.IMPLICIT);\n\t\t\t}\n\t\t\tthis.templateExpressions.push(list);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprotected parseExpression(inputName: string) {\n\t\tconst list: TokenExpression[] = [];\n\t\tthis.stream.readTokensConsiderPair(list, Token.SEMICOLON, Token.COMMA, Token.LET, Token.EOS);\n\t\tthis.directiveInputs.set(inputName, list.map(this.mapTokenToString).join(' '));\n\t}\n\n\t/**\n\t * check if the first is\n\t * @returns `boolean`\n\t */\n\tprotected parseDirectiveAndTemplateInputs() {\n\t\tif (this.stream.peek().isType(Token.EOS)) {\n\t\t\treturn;\n\t\t}\n\t\tlet inputToken: TokenExpression;\n\t\tif (this.isIdentifier()) {\n\t\t\tinputToken = this.stream.next();\n\t\t} else {\n\t\t\tinputToken = this.stream.next();\n\t\t\tconst identifierName = inputToken.token.getName();\n\t\t\tinputToken = new TokenExpression(Token.IDENTIFIER, [-1, -1], new Identifier(identifierName));\n\t\t}\n\n\t\t// only template input\n\t\t// mapping from directive scope(context) to template scope\n\t\tif (this.isAsKeyword()) {\n\t\t\t// as = :export \"as\" :local \";\"?\n\t\t\tthis.consumeAsKeyword();\n\t\t\t// rewrite `input as alias`\n\t\t\t// ==> in template -> alias = input\n\n\t\t\tconst aliasToken = this.stream.next();\n\t\t\tconst aliasList: TokenExpression[] = [];\n\t\t\taliasList.push(aliasToken, TokenConstant.ASSIGN, inputToken, TokenConstant.EOS);\n\t\t\tthis.templateExpressions.push(aliasList);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.check(Token.ASSIGN) || this.check(Token.COLON);\n\n\t\tconst list: TokenExpression[] = [];\n\t\t// keyExp = :key \":\"? :expression (\"as\" :local)? \";\"?\n\t\tthis.stream.readTokensConsiderPair(list, Token.SEMICOLON, Token.COMMA, Token.LET, Token.CONST, Token.VAR, Token.EOS);\n\n\t\t// mix for directive input and template input\n\t\tif (this.isAsKeyword()) {\n\t\t\tthis.consumeAsKeyword();\n\t\t\t// rewrite `input {x: 7, y: 9} as alias` \n\t\t\t// ==> in directive ->`input = {x: 7, y: 9}`\n\t\t\t// ==> or in template -> let alias = input\n\t\t\tconst aliasToken = this.stream.next();\n\t\t\tconst aliasList: TokenExpression[] = [];\n\t\t\taliasList.push(TokenConstant.LET, aliasToken, TokenConstant.ASSIGN, inputToken, TokenConstant.EOS);\n\t\t\tthis.templateExpressions.push(aliasList);\n\t\t}\n\t\tconst inputName = inputToken.getValue<Identifier>().getName() as string;\n\t\tthis.directiveInputs.set(inputName, list.map(this.mapTokenToString).join(' '));\n\n\t}\n\n\tprivate mapTokenToString(token: TokenExpression): String {\n\t\tif (token.value) {\n\t\t\treturn token.value.toString();\n\t\t}\n\t\treturn token.token.getName();\n\t}\n\n}\n\n"]}
|
package/directive/providers.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReactiveScope } from '@ibyar/expressions';
|
|
2
2
|
import { TypeOf } from '@ibyar/expressions/api/utils';
|
|
3
3
|
import { AttributeDirective } from './directive.js';
|
|
4
|
-
export
|
|
4
|
+
export type ElementContext = {
|
|
5
5
|
this: HTMLElement;
|
|
6
6
|
} & {
|
|
7
7
|
[key: string]: AttributeDirective | undefined;
|
package/html/expression.js
CHANGED
|
@@ -9,6 +9,12 @@ function parseLiveText(text) {
|
|
|
9
9
|
text.expression = new OneWayAssignmentExpression(ThisTextContent, textExpression);
|
|
10
10
|
text.pipelineNames = getPipelineNames(textExpression);
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* user-name ==> userName
|
|
14
|
+
*
|
|
15
|
+
* @param source
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
12
18
|
function convertToMemberAccessStyle(source) {
|
|
13
19
|
const dashSplits = Array.isArray(source) ? source : source.split('-');
|
|
14
20
|
if (dashSplits.length === 1) {
|
|
@@ -16,6 +22,25 @@ function convertToMemberAccessStyle(source) {
|
|
|
16
22
|
}
|
|
17
23
|
return dashSplits[0] + dashSplits.splice(1).map(s => (s[0].toUpperCase() + s.substring(1))).join('');
|
|
18
24
|
}
|
|
25
|
+
function getAccessNotation(property) {
|
|
26
|
+
if (property.includes('-')) {
|
|
27
|
+
return [`['`, property, `']`];
|
|
28
|
+
}
|
|
29
|
+
else if (Number.isInteger(property.at(0))) {
|
|
30
|
+
return ['[', property, ']'];
|
|
31
|
+
}
|
|
32
|
+
return ['.', property];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* user.tel-number ==> user['tel-number']
|
|
36
|
+
*
|
|
37
|
+
* @param source
|
|
38
|
+
* @returns
|
|
39
|
+
*/
|
|
40
|
+
function escapeMemberExpression(source) {
|
|
41
|
+
const dashSplits = Array.isArray(source) ? source : source.split('.');
|
|
42
|
+
return dashSplits.flatMap(property => getAccessNotation(property)).join('');
|
|
43
|
+
}
|
|
19
44
|
/**
|
|
20
45
|
* warp js code with `()` if necessary
|
|
21
46
|
*
|
|
@@ -30,7 +55,7 @@ function checkAndValidateObjectSyntax(source) {
|
|
|
30
55
|
return source;
|
|
31
56
|
}
|
|
32
57
|
function parseLiveAttribute(attr) {
|
|
33
|
-
const elementSource = `this
|
|
58
|
+
const elementSource = `this${escapeMemberExpression(attr.name)}`;
|
|
34
59
|
const elementExpression = JavaScriptParser.parseScript(elementSource);
|
|
35
60
|
const modelExpression = JavaScriptParser.parseScript(checkAndValidateObjectSyntax(attr.value));
|
|
36
61
|
if (elementExpression instanceof MemberExpression
|
|
@@ -54,7 +79,9 @@ export function getPipelineNames(modelExpression) {
|
|
|
54
79
|
return pipelineNames.length ? pipelineNames : undefined;
|
|
55
80
|
}
|
|
56
81
|
function parseLiveAttributeUpdateElement(attr) {
|
|
57
|
-
const elementSource =
|
|
82
|
+
const elementSource = attr.name.startsWith('data-')
|
|
83
|
+
? `this.dataset.${convertToMemberAccessStyle(attr.name.substring(5))}`
|
|
84
|
+
: `this${escapeMemberExpression(attr.name)}`;
|
|
58
85
|
const elementExpression = JavaScriptParser.parseScript(elementSource);
|
|
59
86
|
const modelExpression = JavaScriptParser.parseScript(checkAndValidateObjectSyntax(attr.value));
|
|
60
87
|
if (elementExpression instanceof MemberExpression) {
|
package/html/expression.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/core/html/expression.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBaseNode, createLiveAttribute,\n\tDomStructuralDirectiveNode, DomElementNode, DomNode,\n\tDomFragmentNode, DomParentNode, ElementAttribute,\n\tisLiveTextContent, LiveAttribute, LiveTextContent,\n\tDomStructuralDirectiveNodeUpgrade, DomAttributeDirectiveNode\n} from '@ibyar/elements/node.js';\nimport {\n\tExpressionNode, expressionVisitor, Identifier,\n\tJavaScriptParser, MemberExpression, PipelineExpression\n} from '@ibyar/expressions';\nimport {\n\tOneWayAssignmentExpression,\n\tTwoWayAssignmentExpression\n} from '../binding/binding.expressions.js';\nimport { DirectiveExpressionParser } from '../directive/parser.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\n\nconst ThisTextContent = JavaScriptParser.parseScript('this.textContent') as MemberExpression;\nfunction parseLiveText(text: LiveTextContent) {\n\tconst textExpression = JavaScriptParser.parseScript(text.value);\n\ttext.expression = new OneWayAssignmentExpression(ThisTextContent, textExpression);\n\ttext.pipelineNames = getPipelineNames(textExpression);\n}\n\nfunction convertToMemberAccessStyle(source: string | string[]): string {\n\tconst dashSplits = Array.isArray(source) ? source : source.split('-');\n\tif (dashSplits.length === 1) {\n\t\treturn source as string;\n\t}\n\treturn dashSplits[0] + dashSplits.splice(1).map(s => (s[0].toUpperCase() + s.substring(1))).join('');\n}\n\n/**\n * warp js code with `()` if necessary\n * \n * `{name: 'alex'}` will be `({name: 'alex'})`\n * \n * @param params \n */\nfunction checkAndValidateObjectSyntax(source: string) {\n\tif (source.startsWith('{')) {\n\t\treturn `(${source})`;\n\t}\n\treturn source;\n}\nfunction parseLiveAttribute(attr: LiveAttribute) {\n\tconst elementSource = `this.${convertToMemberAccessStyle(attr.name)}`;\n\tconst elementExpression = JavaScriptParser.parseScript(elementSource);\n\tconst modelExpression = JavaScriptParser.parseScript(checkAndValidateObjectSyntax(attr.value));\n\tif (elementExpression instanceof MemberExpression\n\t\t&& (modelExpression instanceof MemberExpression || modelExpression instanceof Identifier)) {\n\t\tattr.expression = new TwoWayAssignmentExpression(elementExpression, modelExpression);\n\t} else {\n\t\tconsole.error(`${attr.name}=\"${attr.value}\"\" is not a valid MemberExpression or Identifier 'x.y.z'`);\n\t}\n\n}\n\nexport function getPipelineNames(modelExpression: ExpressionNode): string[] | undefined {\n\tconst pipelineNames: string[] = [];\n\texpressionVisitor.visit(modelExpression, (expression, type, control) => {\n\t\tif (type === 'PipelineExpression') {\n\t\t\tconst pipelineName = (expression as PipelineExpression).getRight();\n\t\t\tif (pipelineName instanceof Identifier) {\n\t\t\t\tpipelineNames.push(pipelineName.getName() as string);\n\t\t\t}\n\t\t}\n\t});\n\treturn pipelineNames.length ? pipelineNames : undefined;\n}\n\nfunction parseLiveAttributeUpdateElement(attr: LiveAttribute) {\n\tconst elementSource = `this.${convertToMemberAccessStyle(attr.name)}`;\n\tconst elementExpression = JavaScriptParser.parseScript(elementSource);\n\tconst modelExpression = JavaScriptParser.parseScript(checkAndValidateObjectSyntax(attr.value));\n\tif (elementExpression instanceof MemberExpression) {\n\t\tattr.expression = new OneWayAssignmentExpression(elementExpression, modelExpression);\n\t} else {\n\t\tconsole.error(`${attr.name} is not a valid MemberExpression 'x.y.z'`);\n\t}\n\tattr.pipelineNames = getPipelineNames(modelExpression);\n}\n\nfunction parseOutputExpression(attr: ElementAttribute<string, string>) {\n\tattr.expression = JavaScriptParser.parseScript(attr.value);\n}\n\nfunction parseAttributeDirectives(directive: DomAttributeDirectiveNode) {\n\tdirective.inputs?.forEach(parseLiveAttributeUpdateElement);\n\tdirective.outputs?.forEach(parseOutputExpression);\n\tdirective.twoWayBinding?.forEach(parseLiveAttribute);\n\tdirective.templateAttrs?.forEach(parseLiveAttributeUpdateElement);\n}\n\nfunction parseBaseNode(base: BaseNode) {\n\tbase.inputs?.forEach(parseLiveAttributeUpdateElement);\n\tbase.outputs?.forEach(parseOutputExpression);\n\tbase.twoWayBinding?.forEach(parseLiveAttribute);\n\tbase.templateAttrs?.forEach(parseLiveAttributeUpdateElement);\n\tbase.attributeDirectives?.forEach(parseAttributeDirectives);\n}\n\nfunction parseChild(child: DomNode) {\n\tif (child instanceof DomElementNode) {\n\t\t// DomElementNode\n\t\tparseBaseNode(child);\n\t\tparseDomParentNode(child);\n\t} else if (child instanceof DomStructuralDirectiveNode) {\n\t\tlet expressions: ExpressionNode[] = [];\n\t\t(child as DomStructuralDirectiveNodeUpgrade).templateExpressions = expressions;\n\t\tif (child.value) {\n\t\t\t// use shorthand syntax, possible mixed with input and outputs\n\t\t\tconst info = DirectiveExpressionParser.parse(child.name.substring(1), child.value);\n\t\t\texpressions.push(...info.templateExpressions.map(template => JavaScriptParser.parseScript(template)));\n\t\t\t// <div let-i=\"index\">{{item}}</div>\n\n\t\t\tsearchForLetAttributes(child, expressions);\n\n\t\t\tif (info.directiveInputs.size > 0) {\n\t\t\t\tconst ref = ClassRegistryProvider.getDirectiveRef(child.name);\n\t\t\t\tif (!ref?.inputs?.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchild.inputs ??= [];\n\t\t\t\tinfo.directiveInputs.forEach((expression, input) => {\n\t\t\t\t\tconst modelName = ref?.inputs.find(i => i.viewAttribute === input)?.modelProperty ?? input;\n\t\t\t\t\tconst attr: LiveAttribute = createLiveAttribute(modelName, expression);\n\t\t\t\t\t(child.inputs ??= []).push(attr);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tsearchForLetAttributes(child, expressions);\n\t\t}\n\t\t// DomDirectiveNode\n\t\t// in case if add input/output support need to handle that here.\n\t\tparseChild(child.node);\n\t\tparseBaseNode(child);\n\t} else if (isLiveTextContent(child)) {\n\t\tparseLiveText(child);\n\t} else if (child instanceof DomFragmentNode) {\n\t\tparseDomParentNode(child);\n\t}\n}\n\nfunction searchForLetAttributes(child: DomStructuralDirectiveNode, expressions: ExpressionNode[]) {\n\tconst templateExpressionsFromInput = child.attributes?.filter(attr => attr.name.startsWith('let-'));\n\ttemplateExpressionsFromInput?.forEach(attr => {\n\t\tchild.attributes!.splice(child.attributes!.indexOf(attr), 1);\n\t\tconst attrName = convertToMemberAccessStyle(attr.name.split('-').slice(1));\n\t\tconst expression = `let ${attrName} = ${(typeof attr.value == 'string') ? attr.value : '$implicit'}`;\n\t\texpressions.push(JavaScriptParser.parseScript(expression));\n\t});\n}\n\nfunction parseDomParentNode(parent: DomParentNode) {\n\tparent.children?.forEach(parseChild);\n}\n\nexport function buildExpressionNodes(node: DomNode) {\n\tif (node instanceof DomFragmentNode) {\n\t\tparseDomParentNode(node);\n\t} else {\n\t\tparseChild(node);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../src/core/html/expression.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tBaseNode, createLiveAttribute,\n\tDomStructuralDirectiveNode, DomElementNode, DomNode,\n\tDomFragmentNode, DomParentNode, ElementAttribute,\n\tisLiveTextContent, LiveAttribute, LiveTextContent,\n\tDomStructuralDirectiveNodeUpgrade, DomAttributeDirectiveNode\n} from '@ibyar/elements/node.js';\nimport {\n\tExpressionNode, expressionVisitor, Identifier,\n\tJavaScriptParser, MemberExpression, PipelineExpression\n} from '@ibyar/expressions';\nimport {\n\tOneWayAssignmentExpression,\n\tTwoWayAssignmentExpression\n} from '../binding/binding.expressions.js';\nimport { DirectiveExpressionParser } from '../directive/parser.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\n\nconst ThisTextContent = JavaScriptParser.parseScript('this.textContent') as MemberExpression;\nfunction parseLiveText(text: LiveTextContent) {\n\tconst textExpression = JavaScriptParser.parseScript(text.value);\n\ttext.expression = new OneWayAssignmentExpression(ThisTextContent, textExpression);\n\ttext.pipelineNames = getPipelineNames(textExpression);\n}\n\n/**\n * user-name ==> userName\n * \n * @param source \n * @returns \n */\nfunction convertToMemberAccessStyle(source: string | string[]): string {\n\tconst dashSplits = Array.isArray(source) ? source : source.split('-');\n\tif (dashSplits.length === 1) {\n\t\treturn source as string;\n\t}\n\treturn dashSplits[0] + dashSplits.splice(1).map(s => (s[0].toUpperCase() + s.substring(1))).join('');\n}\n\nfunction getAccessNotation(property: string) {\n\tif (property.includes('-')) {\n\t\treturn [`['`, property, `']`];\n\t} else if (Number.isInteger(property.at(0))) {\n\t\treturn ['[', property, ']'];\n\t}\n\treturn ['.', property];\n}\n\n/**\n * user.tel-number ==> user['tel-number']\n * \n * @param source \n * @returns \n */\nfunction escapeMemberExpression(source: string | string[]): string {\n\tconst dashSplits = Array.isArray(source) ? source : source.split('.');\n\treturn dashSplits.flatMap(property => getAccessNotation(property)).join('');\n}\n\n/**\n * warp js code with `()` if necessary\n * \n * `{name: 'alex'}` will be `({name: 'alex'})`\n * \n * @param params \n */\nfunction checkAndValidateObjectSyntax(source: string) {\n\tif (source.startsWith('{')) {\n\t\treturn `(${source})`;\n\t}\n\treturn source;\n}\nfunction parseLiveAttribute(attr: LiveAttribute) {\n\tconst elementSource = `this${escapeMemberExpression(attr.name)}`;\n\tconst elementExpression = JavaScriptParser.parseScript(elementSource);\n\tconst modelExpression = JavaScriptParser.parseScript(checkAndValidateObjectSyntax(attr.value));\n\tif (elementExpression instanceof MemberExpression\n\t\t&& (modelExpression instanceof MemberExpression || modelExpression instanceof Identifier)) {\n\t\tattr.expression = new TwoWayAssignmentExpression(elementExpression, modelExpression);\n\t} else {\n\t\tconsole.error(`${attr.name}=\"${attr.value}\"\" is not a valid MemberExpression or Identifier 'x.y.z'`);\n\t}\n\n}\n\nexport function getPipelineNames(modelExpression: ExpressionNode): string[] | undefined {\n\tconst pipelineNames: string[] = [];\n\texpressionVisitor.visit(modelExpression, (expression, type, control) => {\n\t\tif (type === 'PipelineExpression') {\n\t\t\tconst pipelineName = (expression as PipelineExpression).getRight();\n\t\t\tif (pipelineName instanceof Identifier) {\n\t\t\t\tpipelineNames.push(pipelineName.getName() as string);\n\t\t\t}\n\t\t}\n\t});\n\treturn pipelineNames.length ? pipelineNames : undefined;\n}\n\nfunction parseLiveAttributeUpdateElement(attr: LiveAttribute) {\n\tconst elementSource = attr.name.startsWith('data-')\n\t\t? `this.dataset.${convertToMemberAccessStyle(attr.name.substring(5))}`\n\t\t: `this${escapeMemberExpression(attr.name)}`;\n\tconst elementExpression = JavaScriptParser.parseScript(elementSource);\n\tconst modelExpression = JavaScriptParser.parseScript(checkAndValidateObjectSyntax(attr.value));\n\tif (elementExpression instanceof MemberExpression) {\n\t\tattr.expression = new OneWayAssignmentExpression(elementExpression, modelExpression);\n\t} else {\n\t\tconsole.error(`${attr.name} is not a valid MemberExpression 'x.y.z'`);\n\t}\n\tattr.pipelineNames = getPipelineNames(modelExpression);\n}\n\nfunction parseOutputExpression(attr: ElementAttribute<string, string>) {\n\tattr.expression = JavaScriptParser.parseScript(attr.value);\n}\n\nfunction parseAttributeDirectives(directive: DomAttributeDirectiveNode) {\n\tdirective.inputs?.forEach(parseLiveAttributeUpdateElement);\n\tdirective.outputs?.forEach(parseOutputExpression);\n\tdirective.twoWayBinding?.forEach(parseLiveAttribute);\n\tdirective.templateAttrs?.forEach(parseLiveAttributeUpdateElement);\n}\n\nfunction parseBaseNode(base: BaseNode) {\n\tbase.inputs?.forEach(parseLiveAttributeUpdateElement);\n\tbase.outputs?.forEach(parseOutputExpression);\n\tbase.twoWayBinding?.forEach(parseLiveAttribute);\n\tbase.templateAttrs?.forEach(parseLiveAttributeUpdateElement);\n\tbase.attributeDirectives?.forEach(parseAttributeDirectives);\n}\n\nfunction parseChild(child: DomNode) {\n\tif (child instanceof DomElementNode) {\n\t\t// DomElementNode\n\t\tparseBaseNode(child);\n\t\tparseDomParentNode(child);\n\t} else if (child instanceof DomStructuralDirectiveNode) {\n\t\tlet expressions: ExpressionNode[] = [];\n\t\t(child as DomStructuralDirectiveNodeUpgrade).templateExpressions = expressions;\n\t\tif (child.value) {\n\t\t\t// use shorthand syntax, possible mixed with input and outputs\n\t\t\tconst info = DirectiveExpressionParser.parse(child.name.substring(1), child.value);\n\t\t\texpressions.push(...info.templateExpressions.map(template => JavaScriptParser.parseScript(template)));\n\t\t\t// <div let-i=\"index\">{{item}}</div>\n\n\t\t\tsearchForLetAttributes(child, expressions);\n\n\t\t\tif (info.directiveInputs.size > 0) {\n\t\t\t\tconst ref = ClassRegistryProvider.getDirectiveRef(child.name);\n\t\t\t\tif (!ref?.inputs?.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tchild.inputs ??= [];\n\t\t\t\tinfo.directiveInputs.forEach((expression, input) => {\n\t\t\t\t\tconst modelName = ref?.inputs.find(i => i.viewAttribute === input)?.modelProperty ?? input;\n\t\t\t\t\tconst attr: LiveAttribute = createLiveAttribute(modelName, expression);\n\t\t\t\t\t(child.inputs ??= []).push(attr);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tsearchForLetAttributes(child, expressions);\n\t\t}\n\t\t// DomDirectiveNode\n\t\t// in case if add input/output support need to handle that here.\n\t\tparseChild(child.node);\n\t\tparseBaseNode(child);\n\t} else if (isLiveTextContent(child)) {\n\t\tparseLiveText(child);\n\t} else if (child instanceof DomFragmentNode) {\n\t\tparseDomParentNode(child);\n\t}\n}\n\nfunction searchForLetAttributes(child: DomStructuralDirectiveNode, expressions: ExpressionNode[]) {\n\tconst templateExpressionsFromInput = child.attributes?.filter(attr => attr.name.startsWith('let-'));\n\ttemplateExpressionsFromInput?.forEach(attr => {\n\t\tchild.attributes!.splice(child.attributes!.indexOf(attr), 1);\n\t\tconst attrName = convertToMemberAccessStyle(attr.name.split('-').slice(1));\n\t\tconst expression = `let ${attrName} = ${(typeof attr.value == 'string') ? attr.value : '$implicit'}`;\n\t\texpressions.push(JavaScriptParser.parseScript(expression));\n\t});\n}\n\nfunction parseDomParentNode(parent: DomParentNode) {\n\tparent.children?.forEach(parseChild);\n}\n\nexport function buildExpressionNodes(node: DomNode) {\n\tif (node instanceof DomFragmentNode) {\n\t\tparseDomParentNode(node);\n\t} else {\n\t\tparseChild(node);\n\t}\n}\n"]}
|
package/index.d.ts
CHANGED
|
@@ -5,7 +5,6 @@ export * from './component/reflect.js';
|
|
|
5
5
|
export * from './component/custom-element.js';
|
|
6
6
|
export * from './component/events.js';
|
|
7
7
|
export * from './component/lifecycle.js';
|
|
8
|
-
export * from './context/stack.js';
|
|
9
8
|
export * from './linker/view-ref.js';
|
|
10
9
|
export * from './linker/template-ref.js';
|
|
11
10
|
export * from './linker/view-container-ref.js';
|
package/index.js
CHANGED
|
@@ -5,7 +5,6 @@ export * from './component/reflect.js';
|
|
|
5
5
|
export * from './component/custom-element.js';
|
|
6
6
|
export * from './component/events.js';
|
|
7
7
|
export * from './component/lifecycle.js';
|
|
8
|
-
export * from './context/stack.js';
|
|
9
8
|
export * from './linker/view-ref.js';
|
|
10
9
|
export * from './linker/template-ref.js';
|
|
11
10
|
export * from './linker/view-container-ref.js';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,cAAc,4BAA4B,CAAC;AAE3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,cAAc,4BAA4B,CAAC;AAE3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAEhD,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAE/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AAExC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AAEjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC","sourcesContent":["import 'reflect-metadata';\n\nexport * from './annotation/decorators.js';\n\nexport * from './component/component.js';\nexport * from './component/reflect.js';\nexport * from './component/custom-element.js';\nexport * from './component/events.js';\nexport * from './component/lifecycle.js';\n\nexport * from './linker/view-ref.js';\nexport * from './linker/template-ref.js';\nexport * from './linker/view-container-ref.js';\nexport * from './linker/change-detector-ref.js';\n\nexport * from './directive/directive.js';\nexport * from './html/expression.js';\n\nexport * from './pipe/pipe.js';\n\nexport * from './providers/injector.js';\nexport * from './providers/provider.js';\n\nexport * from './utils/elements-util.js';\nexport * from './utils/path.js';\nexport * from './utils/typeof.js';\nexport * from './utils/utils.js';\n\nexport * from './view/mutation.js';\nexport * from './view/render.js';\nexport * from './view/utils.js';\nexport * from './view/view.js';\n\n\nexport * from './zone/bootstrap.js';\nexport * from './zone/task.js';\nexport * from './zone/zone.js';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibyar/core",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"description": "Ibyar core, Implements Aurora's core functionality, low-level services, and utilities",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ibyar/aurora/tree/dev/packages/core",
|
|
@@ -9,6 +9,16 @@
|
|
|
9
9
|
"url": "https://github.com/ibyar/aurora.git",
|
|
10
10
|
"directory": "packages/core"
|
|
11
11
|
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/ibyar/aurora/issues"
|
|
14
|
+
},
|
|
15
|
+
"author": "The Ibyar Authors (https://github.com/ibyar/aurora/graphs/contributors)",
|
|
16
|
+
"contributors": [
|
|
17
|
+
{
|
|
18
|
+
"name": "Muhammad Salem",
|
|
19
|
+
"email": "salem.ebo@gmail.com"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
12
22
|
"main": "./index.js",
|
|
13
23
|
"module": "./index.js",
|
|
14
24
|
"types": "./index.d.ts",
|
|
@@ -25,16 +35,16 @@
|
|
|
25
35
|
"access": "public"
|
|
26
36
|
},
|
|
27
37
|
"dependencies": {
|
|
28
|
-
"@ibyar/elements": "^0.8.
|
|
29
|
-
"@ibyar/expressions": "^0.8.
|
|
38
|
+
"@ibyar/elements": "^0.8.4",
|
|
39
|
+
"@ibyar/expressions": "^0.8.4",
|
|
30
40
|
"reflect-metadata": "^0.1.13",
|
|
31
|
-
"tslib": "^2.4.
|
|
41
|
+
"tslib": "^2.4.1"
|
|
32
42
|
},
|
|
33
43
|
"peerDependencies": {
|
|
34
|
-
"zone.js": "^0.
|
|
44
|
+
"zone.js": "^0.12.0"
|
|
35
45
|
},
|
|
36
46
|
"devDependencies": {
|
|
37
|
-
"typescript": "^4.
|
|
47
|
+
"typescript": "^4.9.4"
|
|
38
48
|
},
|
|
39
49
|
"scripts": {
|
|
40
50
|
"build": "tsc --build --verbose"
|
|
@@ -68,5 +78,5 @@
|
|
|
68
78
|
"typescript",
|
|
69
79
|
"front-end"
|
|
70
80
|
],
|
|
71
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "bb412fef645853fc2af3d86e14b633813a988a2b"
|
|
72
82
|
}
|
package/pipe/pipe.js
CHANGED
|
@@ -58,13 +58,13 @@ export class AsyncPipeProvider extends ReadOnlyScope {
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
export class AsyncPipeScope extends ReactiveScopeControl {
|
|
61
|
+
static blockScope() {
|
|
62
|
+
return new AsyncPipeScope();
|
|
63
|
+
}
|
|
61
64
|
constructor() {
|
|
62
65
|
super({});
|
|
63
66
|
this.wrapper = {};
|
|
64
67
|
}
|
|
65
|
-
static blockScope() {
|
|
66
|
-
return new AsyncPipeScope();
|
|
67
|
-
}
|
|
68
68
|
set(propertyKey, pipeClass, receiver) {
|
|
69
69
|
const detector = createChangeDetectorRef(this, propertyKey);
|
|
70
70
|
const pipe = new pipeClass(detector);
|
package/pipe/pipe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../../src/core/pipe/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAqB,MAAM,oBAAoB,CAAC;AAE5F,OAAO,EAAqB,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAcjE,MAAM,OAAgB,kBAAkB;IACvC,YAAsB,iBAAoC;QAApC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAAI,CAAC;CAG/D;AAED,MAAM,UAAU,eAAe,CAA+B,IAAS;IACtE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,aAA+C;IAChF;QACC,KAAK,CAAC,EAAE,CAAC,CAAC;IACX,CAAC;IACD,GAAG,CAAC,QAAgB;QACnB,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;YAC1B,OAAO,IAAI,CAAC;SACZ;QACD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAA0B,QAAQ,CAAC,CAAC;QACjF,OAAO,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IACvD,CAAC;IACD,GAAG,CAAC,QAAgB;QACnB,IAAI,aAAmC,CAAC;QACxC,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACxC,OAAO,aAAa,CAAC;SACrB;QACD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAA0B,QAAQ,CAAC,CAAC;QACjF,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YACnD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACtC,aAAa,GAAG,CAAC,KAAU,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;YAC/E,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;YACxC,OAAO,aAAa,CAAC;SACrB;QACD,OAAO,KAAK,CAAC,CAAC;IACf,CAAC;IACD,QAAQ;QACP,OAAO,YAAY,CAAC;IACrB,CAAC;CACD;AAED,MAAM,OAAO,iBAAkB,SAAQ,aAAqB;IAC3D;QACC,KAAK,CAAC,EAAE,CAAC,CAAC;IACX,CAAC;IACD,GAAG,CAAC,QAAgB;QACnB,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAA+B,QAAQ,CAAC,CAAC;QACtF,OAAO,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC;IACD,GAAG,CAAC,QAAgB;QACnB,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAA+B,QAAQ,CAAC,CAAC;QACtF,IAAI,OAAO,EAAE,YAAY,EAAE;YAC1B,OAAO,OAAO,CAAC,UAAU,CAAC;SAC1B;QACD,OAAO;IACR,CAAC;IACD,QAAQ;QACP,OAAO,iBAAiB,CAAC;IAC1B,CAAC;CACD;AAED,MAAM,OAAO,cAA0E,SAAQ,oBAAuB;
|
|
1
|
+
{"version":3,"file":"pipe.js","sourceRoot":"","sources":["../../../src/core/pipe/pipe.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactiveScopeControl, ReadOnlyScope, ScopeSubscription } from '@ibyar/expressions';\nimport { OnDestroy } from '../component/lifecycle.js';\nimport { ChangeDetectorRef, createChangeDetectorRef } from '../linker/change-detector-ref.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { TypeOf } from '../utils/typeof.js';\n\n/**\n * Pipes are used as singleton\n * it will be created if it needed, had no life cycle\n * \n * * no dependency injection applied on filters for now,\n * TODO: add support of dependency injection\n */\nexport interface PipeTransform<T, U> {\n\ttransform(value: T, ...args: any[]): U;\n}\n\nexport abstract class AsyncPipeTransform<T, U> implements PipeTransform<T, U>, OnDestroy {\n\tconstructor(protected changeDetectorRef: ChangeDetectorRef) { }\n\tabstract transform(value: T, ...args: any[]): U;\n\tabstract onDestroy(): void;\n}\n\nexport function isPipeTransform<T extends any, U extends any>(pipe: any): pipe is PipeTransform<T, U> {\n\treturn Reflect.has(Object.getPrototypeOf(pipe), 'transform');\n}\n\nexport class PipeProvider extends ReadOnlyScope<{ [pipeName: string]: Function }> {\n\tconstructor() {\n\t\tsuper({});\n\t}\n\thas(pipeName: string): boolean {\n\t\tif (pipeName in this._ctx) {\n\t\t\treturn true;\n\t\t}\n\t\tconst pipeRef = ClassRegistryProvider.getPipe<PipeTransform<any, any>>(pipeName);\n\t\treturn pipeRef !== undefined && !pipeRef.asynchronous;\n\t}\n\tget(pipeName: string): any {\n\t\tlet transformFunc: Function | undefined;\n\t\tif (transformFunc = this._ctx[pipeName]) {\n\t\t\treturn transformFunc;\n\t\t}\n\t\tconst pipeRef = ClassRegistryProvider.getPipe<PipeTransform<any, any>>(pipeName);\n\t\tif (pipeRef !== undefined && !pipeRef.asynchronous) {\n\t\t\tconst pipe = new pipeRef.modelClass();\n\t\t\ttransformFunc = (value: any, ...args: any[]) => pipe.transform(value, ...args);\n\t\t\tthis._ctx[pipeRef.name] = transformFunc;\n\t\t\treturn transformFunc;\n\t\t}\n\t\treturn void 0;\n\t}\n\tgetClass(): TypeOf<PipeProvider> {\n\t\treturn PipeProvider;\n\t}\n}\n\nexport class AsyncPipeProvider extends ReadOnlyScope<object> {\n\tconstructor() {\n\t\tsuper({});\n\t}\n\thas(pipeName: string): boolean {\n\t\tconst pipeRef = ClassRegistryProvider.getPipe<AsyncPipeTransform<any, any>>(pipeName);\n\t\treturn pipeRef?.asynchronous ? true : false;\n\t}\n\tget(pipeName: string): TypeOf<AsyncPipeTransform<any, any>> | undefined {\n\t\tconst pipeRef = ClassRegistryProvider.getPipe<AsyncPipeTransform<any, any>>(pipeName);\n\t\tif (pipeRef?.asynchronous) {\n\t\t\treturn pipeRef.modelClass;\n\t\t}\n\t\treturn;\n\t}\n\tgetClass(): TypeOf<AsyncPipeProvider> {\n\t\treturn AsyncPipeProvider;\n\t}\n}\n\nexport class AsyncPipeScope<T extends { [key: string]: AsyncPipeTransform<any, any> }> extends ReactiveScopeControl<T> {\n\tstatic blockScope<P extends { [key: string]: AsyncPipeTransform<any, any> }>(): AsyncPipeScope<P> {\n\t\treturn new AsyncPipeScope();\n\t}\n\tprivate wrapper: { [key: string]: Function } = {};\n\tconstructor() {\n\t\tsuper({} as T);\n\t}\n\toverride set(propertyKey: keyof T, pipeClass: TypeOf<AsyncPipeTransform<any, any>>, receiver?: any): boolean {\n\t\tconst detector = createChangeDetectorRef(this, propertyKey);\n\t\tconst pipe = new pipeClass(detector);\n\t\tconst result = super.set(propertyKey, pipe, receiver);\n\t\tif (result) {\n\t\t\tthis.wrapper[propertyKey as string] = (value: any, ...args: any[]) => {\n\t\t\t\treturn pipe.transform(value, ...args)\n\t\t\t};\n\t\t}\n\t\treturn result;\n\t}\n\toverride get(propertyKey: keyof T): any {\n\t\treturn Reflect.get(this.wrapper, propertyKey);\n\t}\n\toverride unsubscribe(propertyKey: keyof T, subscription?: ScopeSubscription<T>) {\n\t\tsuper.unsubscribe(propertyKey, subscription);\n\t\tconst pipe = this._ctx[propertyKey];\n\t\tpipe.onDestroy();\n\t}\n\tgetClass(): TypeOf<AsyncPipeScope<T>> {\n\t\treturn AsyncPipeScope;\n\t}\n}\n"]}
|
package/providers/provider.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ComponentRef, DirectiveRef, PipeRef, ServiceRef } from '../component/component.js';
|
|
2
2
|
import { PropertyRef } from '../component/reflect.js';
|
|
3
|
-
export
|
|
3
|
+
export type ProviderType = 'component' | 'service' | 'directive' | 'pipe' | 'self';
|
|
4
4
|
export declare class ClassRegistry {
|
|
5
5
|
viewSet: Set<Function>;
|
|
6
6
|
componentSet: Set<Function>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Stack } from '@ibyar/expressions';
|
|
2
|
+
import type { HostBindingRef } from '../component/reflect.js';
|
|
3
|
+
import type { RenderHandler } from './render-handler.js';
|
|
4
|
+
import type { AuroraZone } from '../zone/zone.js';
|
|
5
|
+
/**
|
|
6
|
+
* ```ts
|
|
7
|
+
* @Component({selector: 'tag-name'})
|
|
8
|
+
* class ComponentModelOrAttributeDirectiveModel {
|
|
9
|
+
*
|
|
10
|
+
* name = 'abcd';
|
|
11
|
+
*
|
|
12
|
+
* @HostBinding(‘class.span’)
|
|
13
|
+
* span: boolean = true;
|
|
14
|
+
*
|
|
15
|
+
* @HostListener('click')
|
|
16
|
+
* onClick() {
|
|
17
|
+
* this.span = !this.span;
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* @HostBinding('class.valid')
|
|
21
|
+
* get valid(){
|
|
22
|
+
* return this.name?.startsWith('abc');
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* // js: one way binding
|
|
28
|
+
* this.class.span =: span;
|
|
29
|
+
* this.class.valid =: valid;
|
|
30
|
+
*
|
|
31
|
+
*
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
35
|
+
export declare class HostBindingHandler implements RenderHandler {
|
|
36
|
+
private hostBindingRef;
|
|
37
|
+
private contextStack;
|
|
38
|
+
private zone;
|
|
39
|
+
private assignment;
|
|
40
|
+
private subscription?;
|
|
41
|
+
constructor(hostBindingRef: HostBindingRef, contextStack: Stack, zone: AuroraZone);
|
|
42
|
+
onInit(): void;
|
|
43
|
+
onConnect(): void;
|
|
44
|
+
onDisconnect(): void;
|
|
45
|
+
onDestroy(): void;
|
|
46
|
+
}
|