@ibyar/core 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/annotation/decorators.js +23 -23
- package/annotation/decorators.js.map +1 -1
- package/annotation/options.d.ts +2 -1
- package/annotation/options.d.ts.map +1 -1
- package/annotation/options.js.map +1 -1
- package/binding/binding.expressions.d.ts +1 -1
- package/binding/binding.expressions.d.ts.map +1 -1
- package/binding/binding.expressions.js +29 -17
- package/binding/binding.expressions.js.map +1 -1
- package/component/component.d.ts +1 -0
- package/component/component.d.ts.map +1 -1
- package/component/component.js +5 -4
- package/component/component.js.map +1 -1
- package/component/custom-element.d.ts +0 -3
- package/component/custom-element.d.ts.map +1 -1
- package/component/custom-element.js.map +1 -1
- package/component/reflect.d.ts +2 -2
- package/component/reflect.d.ts.map +1 -1
- package/component/reflect.js +2 -1
- package/component/reflect.js.map +1 -1
- package/linker/view-container-ref.d.ts.map +1 -1
- package/linker/view-container-ref.js +2 -1
- package/linker/view-container-ref.js.map +1 -1
- package/package.json +8 -8
- package/providers/provider.d.ts +1 -1
- package/providers/provider.d.ts.map +1 -1
- package/providers/provider.js +9 -8
- package/providers/provider.js.map +1 -1
- package/scope/variables.d.ts +19 -0
- package/scope/variables.d.ts.map +1 -0
- package/scope/variables.js +38 -0
- package/scope/variables.js.map +1 -0
- package/view/base-view.d.ts.map +1 -1
- package/view/base-view.js +4 -14
- package/view/base-view.js.map +1 -1
- package/view/mutation.js +1 -2
- package/view/mutation.js.map +1 -1
- package/view/render.d.ts +1 -0
- package/view/render.d.ts.map +1 -1
- package/view/render.js +16 -5
- package/view/render.js.map +1 -1
- package/view/view.d.ts.map +1 -1
- package/view/view.js +19 -8
- package/view/view.js.map +1 -1
- package/annotation/context.d.ts +0 -41
- package/annotation/context.d.ts.map +0 -1
- package/annotation/context.js +0 -79
- package/annotation/context.js.map +0 -1
- package/render/host-binding.handler.d.ts +0 -46
- package/render/host-binding.handler.js +0 -60
- package/render/host-binding.handler.js.map +0 -1
- package/render/host-listener.handler.d.ts +0 -50
- package/render/host-listener.handler.js +0 -88
- package/render/host-listener.handler.js.map +0 -1
- package/render/render-handler.d.ts +0 -11
- package/render/render-handler.js +0 -2
- package/render/render-handler.js.map +0 -1
package/view/view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { MetadataClass, Metadata } from '@ibyar/decorators';\nimport { getAllAttributes } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter, Subscription } from '../component/events.js';\nimport { ToCamelCase } from '../utils/utils.js';\nimport { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\nimport { isComponentModelClass } from './utils.js';\n\nconst FACTORY_CACHE = new WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>>();\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: MetadataClass<T>, componentRef: ComponentRef<T>): MetadataClass<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as TypeOf<HTMLElement>;\n\tlet viewClass: TypeOf<HTMLComponent<T>>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\n\tlet parentClass: TypeOf<HTMLComponent<T>>;\n\tif (FACTORY_CACHE.has(htmlParent)) {\n\t\tparentClass = FACTORY_CACHE.get(htmlParent) as TypeOf<HTMLComponent<T>>;\n\t} else {\n\t\tparentClass = componentRef.formAssociated ? baseFormFactoryView<T>(htmlParent) : baseFactoryView<T>(htmlParent);\n\t\tFACTORY_CACHE.set(htmlParent, parentClass);\n\t}\n\tviewClass = ({\n\t\t[htmlViewClassName]: @Metadata() class extends parentClass { constructor() { super(componentRef, modelClass); } }\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\treturn this._modelScope.get(input.modelProperty);\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\tthis._modelScope.set(input.modelProperty, value);\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t});\n\t});\n\n\tcomponentRef.outputs.forEach(output => {\n\t\tObject.defineProperty(viewClass.prototype, output.viewAttribute, {\n\t\t\tget(): EventEmitter<any> {\n\t\t\t\treturn this._model[output.modelProperty];\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t\tlet eventListener: Function | undefined;\n\t\tlet subscription: Subscription<any>;\n\t\tObject.defineProperty(viewClass.prototype, 'on' + ToCamelCase(output.viewAttribute), {\n\t\t\tget(): Function | undefined {\n\t\t\t\treturn eventListener;\n\t\t\t},\n\t\t\tset(this: HTMLComponent<T>, event: string | Function): void {\n\t\t\t\tif (!event) {\n\t\t\t\t\tif (subscription) {\n\t\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\t\teventListener = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof event === 'string') {\n\t\t\t\t\tif (event.endsWith('()')) {\n\t\t\t\t\t\tevent = event.substring(0, event.length - 2);\n\t\t\t\t\t}\n\t\t\t\t\tevent = Reflect.get(window, event);\n\t\t\t\t}\n\t\t\t\teventListener = event as Function;\n\t\t\t\tsubscription = (this._model[output.modelProperty] as EventEmitter<any>).subscribe(event);\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t});\n\n\tcomponentRef.inputs.map(input => input.modelProperty)\n\t\t.concat(componentRef.outputs.map(output => output.modelProperty))\n\t\t.concat(componentRef.hostBindings.map(host => host.hostPropertyName))\n\t\t.concat(componentRef.viewChild.map(child => child.modelName))\n\t\t.filter(modelName => !(modelName in modelClass.prototype))\n\t\t.forEach(modelName => modelClass.prototype[modelName] = undefined);\n\n\tconst defaultAttributes = getAllAttributes(componentRef.extend.name);\n\tconst observedAttributes = componentRef.inputs.map(input => input.viewAttribute)\n\t\t.concat(componentRef.outputs.map(output => 'on' + ToCamelCase(output.viewAttribute)));\n\tif (componentRef.formAssociated && !observedAttributes.includes('value')) {\n\t\tobservedAttributes.push('value');\n\t}\n\tReflect.set(viewClass, 'observedAttributes', observedAttributes);\n\tReflect.set(viewClass, 'allAttributes', defaultAttributes.concat(observedAttributes));\n\taddViewToModelClass<T>(modelClass, componentRef.selector, viewClass, htmlViewClassName);\n\tif (!Reflect.has(window, htmlViewClassName)) {\n\t\tReflect.set(window, htmlViewClassName, viewClass);\n\t}\n\treturn viewClass as MetadataClass;\n}\n\nexport type ComponentModelClass =\n\tMetadataClass\n\t& { [key: string]: string }\n\t& { component: { [key: string]: string } }\n\t& { [key: string]: TypeOf<HTMLComponent<any>> };\n\nexport function addViewToModelClass<T extends object>(modelClass: MetadataClass<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string) {\n\tObject.defineProperty(modelClass, htmlViewClassName, { value: viewClass });\n\n\tif (!isComponentModelClass(modelClass)) {\n\t\tReflect.set(modelClass, 'component', {});\n\t}\n\n\tif (isComponentModelClass(modelClass)) {\n\t\tmodelClass.component[selector] = htmlViewClassName;\n\t}\n}\n\nexport function buildViewClassNameFromSelector(selector: string) {\n\treturn selector\n\t\t.split('-')\n\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t.join('');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { MetadataClass, Metadata } from '@ibyar/decorators';\nimport { getAllAttributes } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter, Subscription } from '../component/events.js';\nimport { ToCamelCase } from '../utils/utils.js';\nimport { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\nimport { isComponentModelClass } from './utils.js';\n\nconst FACTORY_CACHE = new WeakMap<TypeOf<HTMLElement>, TypeOf<HTMLComponent<any>>>();\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: MetadataClass<T>, componentRef: ComponentRef<T>): MetadataClass<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as TypeOf<HTMLElement>;\n\tlet viewClass: TypeOf<HTMLComponent<T>>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\n\tlet parentClass: TypeOf<HTMLComponent<T>>;\n\tif (componentRef.extendCustomElement) {\n\t\tparentClass = componentRef.extend.classRef as TypeOf<HTMLComponent<T>>;\n\t} else {\n\t\tif (FACTORY_CACHE.has(htmlParent)) {\n\t\t\tparentClass = FACTORY_CACHE.get(htmlParent) as TypeOf<HTMLComponent<T>>;\n\t\t} else {\n\t\t\tparentClass = componentRef.formAssociated ? baseFormFactoryView<T>(htmlParent) : baseFactoryView<T>(htmlParent);\n\t\t\tFACTORY_CACHE.set(htmlParent, parentClass);\n\t\t}\n\t}\n\n\tviewClass = ({\n\t\t[htmlViewClassName]: @Metadata() class extends parentClass {\n\t\t\tconstructor(optionalComponentRef?: ComponentRef<T>, modelConstructor?: TypeOf<T>) {\n\t\t\t\tsuper(optionalComponentRef ?? componentRef, modelConstructor ?? modelClass);\n\t\t\t}\n\t\t}\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\treturn this._modelScope.get(input.modelProperty);\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\tthis._modelScope.set(input.modelProperty, value);\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t});\n\t});\n\n\tcomponentRef.outputs.forEach(output => {\n\t\tObject.defineProperty(viewClass.prototype, output.viewAttribute, {\n\t\t\tget(): EventEmitter<any> {\n\t\t\t\treturn this._model[output.modelProperty];\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t\tlet eventListener: Function | undefined;\n\t\tlet subscription: Subscription<any>;\n\t\tObject.defineProperty(viewClass.prototype, 'on' + ToCamelCase(output.viewAttribute), {\n\t\t\tget(): Function | undefined {\n\t\t\t\treturn eventListener;\n\t\t\t},\n\t\t\tset(this: HTMLComponent<T>, event: string | Function): void {\n\t\t\t\tif (!event) {\n\t\t\t\t\tif (subscription) {\n\t\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\t\teventListener = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof event === 'string') {\n\t\t\t\t\tif (event.endsWith('()')) {\n\t\t\t\t\t\tevent = event.substring(0, event.length - 2);\n\t\t\t\t\t}\n\t\t\t\t\tevent = Reflect.get(window, event);\n\t\t\t\t}\n\t\t\t\teventListener = event as Function;\n\t\t\t\tsubscription = (this._model[output.modelProperty] as EventEmitter<any>).subscribe(event);\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t});\n\n\tcomponentRef.inputs.map(input => input.modelProperty)\n\t\t.concat(componentRef.outputs.map(output => output.modelProperty))\n\t\t.concat(componentRef.hostBindings.map(host => host.hostPropertyName))\n\t\t.concat(componentRef.viewChild.map(child => child.modelName))\n\t\t.filter(modelName => !(modelName in modelClass.prototype))\n\t\t.forEach(modelName => modelClass.prototype[modelName] = undefined);\n\n\tconst defaultAttributes = getAllAttributes(componentRef.extend.name);\n\tconst observedAttributes = componentRef.inputs.map(input => input.viewAttribute)\n\t\t.concat(componentRef.outputs.map(output => 'on' + ToCamelCase(output.viewAttribute)));\n\tif (componentRef.formAssociated && !observedAttributes.includes('value')) {\n\t\tobservedAttributes.push('value');\n\t}\n\tReflect.set(viewClass, 'observedAttributes', observedAttributes);\n\tReflect.set(viewClass, 'allAttributes', defaultAttributes.concat(observedAttributes));\n\taddViewToModelClass<T>(modelClass, componentRef.selector, viewClass, htmlViewClassName);\n\tif (!Reflect.has(window, htmlViewClassName)) {\n\t\tReflect.set(window, htmlViewClassName, viewClass);\n\t}\n\treturn viewClass as MetadataClass;\n}\n\nexport type ComponentModelClass =\n\tMetadataClass\n\t& { [key: string]: string }\n\t& { component: { [key: string]: string } }\n\t& { [key: string]: TypeOf<HTMLComponent<any>> };\n\nexport function addViewToModelClass<T extends object>(modelClass: MetadataClass<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string) {\n\tObject.defineProperty(modelClass, htmlViewClassName, { value: viewClass });\n\n\tif (!isComponentModelClass(modelClass)) {\n\t\tReflect.set(modelClass, 'component', {});\n\t}\n\n\tif (isComponentModelClass(modelClass)) {\n\t\tmodelClass.component[selector] = htmlViewClassName;\n\t}\n}\n\nexport function buildViewClassNameFromSelector(selector: string) {\n\treturn selector\n\t\t.split('-')\n\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t.join('');\n}\n"]}
|
package/annotation/context.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { Class } from '../utils/typeof.js';
|
|
2
|
-
export interface MetadataContext extends Record<PropertyKey, any> {
|
|
3
|
-
}
|
|
4
|
-
declare global {
|
|
5
|
-
interface SymbolConstructor {
|
|
6
|
-
/**
|
|
7
|
-
* metadata symbol
|
|
8
|
-
*/
|
|
9
|
-
readonly metadata: unique symbol;
|
|
10
|
-
}
|
|
11
|
-
interface ClassDecoratorContext<Class extends abstract new (...args: any) => any = abstract new (...args: any) => any> {
|
|
12
|
-
metadata: MetadataContext;
|
|
13
|
-
}
|
|
14
|
-
interface ClassMethodDecoratorContext {
|
|
15
|
-
metadata: MetadataContext;
|
|
16
|
-
}
|
|
17
|
-
interface ClassGetterDecoratorContext {
|
|
18
|
-
metadata: MetadataContext;
|
|
19
|
-
}
|
|
20
|
-
interface ClassFieldDecoratorContext {
|
|
21
|
-
metadata: MetadataContext;
|
|
22
|
-
}
|
|
23
|
-
interface ClassSetterDecoratorContext {
|
|
24
|
-
metadata: MetadataContext;
|
|
25
|
-
}
|
|
26
|
-
interface ClassAccessorDecoratorContext {
|
|
27
|
-
metadata: MetadataContext;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
export declare class MetadataContext {
|
|
31
|
-
static create(): MetadataContext;
|
|
32
|
-
static inherits(context: MetadataContext): MetadataContext;
|
|
33
|
-
static assign(previous: MetadataContext, next: MetadataContext): MetadataContext;
|
|
34
|
-
static merge(previous: MetadataContext, next: MetadataContext): MetadataContext;
|
|
35
|
-
}
|
|
36
|
-
export declare function getCurrentMetadata(): MetadataContext;
|
|
37
|
-
export declare function updateCurrentMetadata(context?: MetadataContext): void;
|
|
38
|
-
export declare function makeClassDecoratorContext<V, T extends Class = Class>(decorator?: (opt: V, constructor: T, context: ClassDecoratorContext<T>) => (T | void)): (props: V) => (constructor: T, context: ClassDecoratorContext<T>) => T;
|
|
39
|
-
export declare const Metadata: (props: void) => (constructor: Class, context: ClassDecoratorContext<Class>) => Class;
|
|
40
|
-
export declare function makeClassMemberDecoratorContext<This, Value, Context extends ClassMemberDecoratorContext = ClassMemberDecoratorContext>(decorator?: (value: Value | undefined, context: Context) => void): (value: Value, context: Context) => void;
|
|
41
|
-
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/core/annotation/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,oBAAoB,CAAC;AAE/D,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC;CAEhE;AAED,OAAO,CAAC,MAAM,CAAC;IAEd,UAAU,iBAAiB;QAC1B;;WAEG;QACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,MAAM,CAAC;KACjC;IAED,UAAU,qBAAqB,CAAC,KAAK,SAAS,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG;QACpH,QAAQ,EAAE,eAAe,CAAC;KAC1B;IAED,UAAU,2BAA2B;QACpC,QAAQ,EAAE,eAAe,CAAC;KAC1B;IAED,UAAU,2BAA2B;QACpC,QAAQ,EAAE,eAAe,CAAC;KAC1B;IAED,UAAU,0BAA0B;QACnC,QAAQ,EAAE,eAAe,CAAC;KAC1B;IAED,UAAU,2BAA2B;QACpC,QAAQ,EAAE,eAAe,CAAC;KAC1B;IAED,UAAU,6BAA6B;QACtC,QAAQ,EAAE,eAAe,CAAC;KAC1B;CACD;AAMD,qBAAa,eAAe;IAE3B,MAAM,CAAC,MAAM,IAAI,eAAe;IAIhC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe;IAI1D,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,GAAG,eAAe;IAIhF,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,GAAG,eAAe;CAkB/E;AAID,wBAAgB,kBAAkB,IAAI,eAAe,CAEpD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAErE;AAmBD,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,EACnE,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,WACtE,CAAC,mBAEM,CAAC,WAAW,sBAAsB,CAAC,CAAC,OAS1D;AAED,eAAO,MAAM,QAAQ,uFAAoC,CAAC;AAE1D,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,SAAS,2BAA2B,GAAG,2BAA2B,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,WACxL,KAAK,WAAW,OAAO,UAItC"}
|
package/annotation/context.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
if (!Symbol.metadata) {
|
|
2
|
-
Reflect.set(Symbol, 'metadata', Symbol('metadata'));
|
|
3
|
-
}
|
|
4
|
-
export class MetadataContext {
|
|
5
|
-
static create() {
|
|
6
|
-
return new MetadataContext();
|
|
7
|
-
}
|
|
8
|
-
static inherits(context) {
|
|
9
|
-
return Object.assign(MetadataContext.create(), context);
|
|
10
|
-
}
|
|
11
|
-
static assign(previous, next) {
|
|
12
|
-
return Object.assign(previous, next);
|
|
13
|
-
}
|
|
14
|
-
static merge(previous, next) {
|
|
15
|
-
for (const key in next) {
|
|
16
|
-
const previousValue = previous[key];
|
|
17
|
-
const nextValue = next[key];
|
|
18
|
-
if (typeof previousValue === 'object' && typeof nextValue === 'object') {
|
|
19
|
-
if (Array.isArray(previousValue) && Array.isArray(nextValue)) {
|
|
20
|
-
previous[key] = previousValue.concat(nextValue)
|
|
21
|
-
.filter((value, index, array) => index === array.indexOf(value));
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
previous[key] = Object.assign(previousValue, nextValue);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
previous[key] = nextValue;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return previous;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
let currentContext = MetadataContext.create();
|
|
35
|
-
export function getCurrentMetadata() {
|
|
36
|
-
return currentContext;
|
|
37
|
-
}
|
|
38
|
-
export function updateCurrentMetadata(context) {
|
|
39
|
-
currentContext = context ?? MetadataContext.create();
|
|
40
|
-
}
|
|
41
|
-
function updateConstructorMetadata(constructor) {
|
|
42
|
-
const pConstr = constructor.prototype?.constructor?.[Symbol.metadata];
|
|
43
|
-
if (pConstr) {
|
|
44
|
-
if (!constructor.hasOwnProperty(Symbol.metadata)) {
|
|
45
|
-
constructor[Symbol.metadata] = MetadataContext.inherits(pConstr);
|
|
46
|
-
}
|
|
47
|
-
MetadataContext.merge(constructor[Symbol.metadata], getCurrentMetadata());
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
if (constructor[Symbol.metadata]) {
|
|
51
|
-
MetadataContext.merge(constructor[Symbol.metadata], getCurrentMetadata());
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
constructor[Symbol.metadata] = getCurrentMetadata();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return constructor[Symbol.metadata];
|
|
58
|
-
}
|
|
59
|
-
export function makeClassDecoratorContext(decorator) {
|
|
60
|
-
return (props) => {
|
|
61
|
-
updateCurrentMetadata();
|
|
62
|
-
return (constructor, context) => {
|
|
63
|
-
context.metadata = updateConstructorMetadata(constructor);
|
|
64
|
-
context.addInitializer(() => {
|
|
65
|
-
updateCurrentMetadata();
|
|
66
|
-
console.log(context.metadata, props);
|
|
67
|
-
});
|
|
68
|
-
return decorator?.(props, constructor, context) ?? constructor;
|
|
69
|
-
};
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
export const Metadata = makeClassDecoratorContext();
|
|
73
|
-
export function makeClassMemberDecoratorContext(decorator) {
|
|
74
|
-
return (value, context) => {
|
|
75
|
-
context.metadata = getCurrentMetadata();
|
|
76
|
-
decorator?.(value, context);
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/core/annotation/context.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Class, MetadataClass } from '../utils/typeof.js';\n\nexport interface MetadataContext extends Record<PropertyKey, any> {\n\n}\n\ndeclare global {\n\n\tinterface SymbolConstructor {\n\t\t/**\n\t\t * metadata symbol\n\t\t */\n\t\treadonly metadata: unique symbol;\n\t}\n\n\tinterface ClassDecoratorContext<Class extends abstract new (...args: any) => any = abstract new (...args: any) => any,> {\n\t\tmetadata: MetadataContext;\n\t}\n\n\tinterface ClassMethodDecoratorContext {\n\t\tmetadata: MetadataContext;\n\t}\n\n\tinterface ClassGetterDecoratorContext {\n\t\tmetadata: MetadataContext;\n\t}\n\n\tinterface ClassFieldDecoratorContext {\n\t\tmetadata: MetadataContext;\n\t}\n\n\tinterface ClassSetterDecoratorContext {\n\t\tmetadata: MetadataContext;\n\t}\n\n\tinterface ClassAccessorDecoratorContext {\n\t\tmetadata: MetadataContext;\n\t}\n}\n\nif (!Symbol.metadata) {\n\tReflect.set(Symbol, 'metadata', Symbol('metadata'));\n}\n\nexport class MetadataContext {\n\n\tstatic create(): MetadataContext {\n\t\treturn new MetadataContext();\n\t}\n\n\tstatic inherits(context: MetadataContext): MetadataContext {\n\t\treturn Object.assign(MetadataContext.create(), context);\n\t}\n\n\tstatic assign(previous: MetadataContext, next: MetadataContext): MetadataContext {\n\t\treturn Object.assign(previous, next);\n\t}\n\n\tstatic merge(previous: MetadataContext, next: MetadataContext): MetadataContext {\n\t\tfor (const key in next) {\n\t\t\tconst previousValue = previous[key];\n\t\t\tconst nextValue = next[key];\n\t\t\tif (typeof previousValue === 'object' && typeof nextValue === 'object') {\n\t\t\t\tif (Array.isArray(previousValue) && Array.isArray(nextValue)) {\n\t\t\t\t\tprevious[key] = previousValue.concat(nextValue)\n\t\t\t\t\t\t.filter((value, index, array) => index === array.indexOf(value));\n\t\t\t\t} else {\n\t\t\t\t\tprevious[key] = Object.assign(previousValue, nextValue);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tprevious[key] = nextValue;\n\t\t\t}\n\t\t}\n\t\treturn previous;\n\t}\n\n}\n\nlet currentContext: MetadataContext = MetadataContext.create();\n\nexport function getCurrentMetadata(): MetadataContext {\n\treturn currentContext;\n}\n\nexport function updateCurrentMetadata(context?: MetadataContext): void {\n\tcurrentContext = context ?? MetadataContext.create();\n}\n\nfunction updateConstructorMetadata(constructor: MetadataClass): MetadataContext {\n\tconst pConstr = constructor.prototype?.constructor?.[Symbol.metadata];\n\tif (pConstr) {\n\t\tif (!constructor.hasOwnProperty(Symbol.metadata)) {\n\t\t\tconstructor[Symbol.metadata] = MetadataContext.inherits(pConstr);\n\t\t}\n\t\tMetadataContext.merge(constructor[Symbol.metadata], getCurrentMetadata());\n\t} else {\n\t\tif (constructor[Symbol.metadata]) {\n\t\t\tMetadataContext.merge(constructor[Symbol.metadata], getCurrentMetadata());\n\t\t} else {\n\t\t\tconstructor[Symbol.metadata] = getCurrentMetadata();\n\t\t}\n\t}\n\treturn constructor[Symbol.metadata];\n}\n\nexport function makeClassDecoratorContext<V, T extends Class = Class>(\n\tdecorator?: (opt: V, constructor: T, context: ClassDecoratorContext<T>) => (T | void)) {\n\treturn (props: V) => {\n\t\tupdateCurrentMetadata();\n\t\treturn (constructor: T, context: ClassDecoratorContext<T>) => {\n\t\t\tcontext.metadata = updateConstructorMetadata(constructor as any as MetadataClass);\n\t\t\tcontext.addInitializer(() => {\n\t\t\t\tupdateCurrentMetadata();\n\t\t\t\tconsole.log(context.metadata, props);\n\t\t\t});\n\t\t\treturn decorator?.(props, constructor, context) ?? constructor;\n\t\t};\n\t};\n}\n\nexport const Metadata = makeClassDecoratorContext<void>();\n\nexport function makeClassMemberDecoratorContext<This, Value, Context extends ClassMemberDecoratorContext = ClassMemberDecoratorContext>(decorator?: (value: Value | undefined, context: Context) => void) {\n\treturn (value: Value, context: Context) => {\n\t\tcontext.metadata = getCurrentMetadata();\n\t\tdecorator?.(value, context);\n\t};\n}\n"]}
|
|
@@ -1,46 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { JavaScriptParser } from '@ibyar/expressions';
|
|
2
|
-
/**
|
|
3
|
-
* ```ts
|
|
4
|
-
* @Component({selector: 'tag-name'})
|
|
5
|
-
* class ComponentModelOrAttributeDirectiveModel {
|
|
6
|
-
*
|
|
7
|
-
* name = 'abcd';
|
|
8
|
-
*
|
|
9
|
-
* @HostBinding(‘class.span’)
|
|
10
|
-
* span: boolean = true;
|
|
11
|
-
*
|
|
12
|
-
* @HostListener('click')
|
|
13
|
-
* onClick() {
|
|
14
|
-
* this.span = !this.span;
|
|
15
|
-
* }
|
|
16
|
-
*
|
|
17
|
-
* @HostBinding('class.valid')
|
|
18
|
-
* get valid(){
|
|
19
|
-
* return this.name?.startsWith('abc');
|
|
20
|
-
* }
|
|
21
|
-
*
|
|
22
|
-
* }
|
|
23
|
-
*
|
|
24
|
-
* // js: one way binding
|
|
25
|
-
* this.class.span =: span;
|
|
26
|
-
* this.class.valid =: valid;
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* ```
|
|
30
|
-
*
|
|
31
|
-
*/
|
|
32
|
-
export class HostBindingHandler {
|
|
33
|
-
constructor(hostBindingRef, contextStack, zone) {
|
|
34
|
-
this.hostBindingRef = hostBindingRef;
|
|
35
|
-
this.contextStack = contextStack;
|
|
36
|
-
this.zone = zone;
|
|
37
|
-
}
|
|
38
|
-
onInit() {
|
|
39
|
-
const binding = `this.${this.hostBindingRef.hostPropertyName} = ${this.hostBindingRef.modelPropertyName}`;
|
|
40
|
-
this.assignment = JavaScriptParser.parseScript(binding);
|
|
41
|
-
this.subscription = this.zone.onFinal.subscribe(() => this.assignment.get(this.contextStack), console.error);
|
|
42
|
-
}
|
|
43
|
-
onConnect() {
|
|
44
|
-
if (this.subscription) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
this.onInit();
|
|
48
|
-
}
|
|
49
|
-
onDisconnect() {
|
|
50
|
-
if (!this.subscription) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
this.onDestroy();
|
|
54
|
-
}
|
|
55
|
-
onDestroy() {
|
|
56
|
-
this.subscription?.unsubscribe();
|
|
57
|
-
delete this.subscription;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=host-binding.handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-binding.handler.js","sourceRoot":"","sources":["../../../src/core/render/host-binding.handler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,OAAO,kBAAkB;IAK9B,YAAoB,cAA8B,EAAU,YAAmB,EAAU,IAAgB;QAArF,mBAAc,GAAd,cAAc,CAAgB;QAAU,iBAAY,GAAZ,YAAY,CAAO;QAAU,SAAI,GAAJ,IAAI,CAAY;IAAI,CAAC;IAE9G,MAAM;QACL,MAAM,OAAO,GAAG,QAAQ,IAAI,CAAC,cAAc,CAAC,gBAAgB,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC;QAC1G,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAuB,OAAO,CAAC,CAAC;QAC9E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9G,CAAC;IAED,SAAS;QACR,IAAI,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACP;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,YAAY;QACX,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACvB,OAAO;SACP;QACD,IAAI,CAAC,SAAS,EAAE,CAAC;IAClB,CAAC;IAED,SAAS;QACR,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC;IAC1B,CAAC;CAED","sourcesContent":["import type { AssignmentExpression, Stack } from '@ibyar/expressions';\nimport type { HostBindingRef } from '../component/reflect.js';\nimport type { RenderHandler } from './render-handler.js';\nimport type { AuroraZone } from '../zone/zone.js';\nimport type { Subscription } from '../component/events.js';\nimport { JavaScriptParser } from '@ibyar/expressions';\n\n/**\n * ```ts\n * @Component({selector: 'tag-name'})\n * class ComponentModelOrAttributeDirectiveModel {\n * \n * name = 'abcd';\n * \n * @HostBinding(‘class.span’)\n * span: boolean = true;\n * \n * @HostListener('click')\n * onClick() {\n * this.span = !this.span;\n * }\n * \n * @HostBinding('class.valid')\n * get valid(){\n * return this.name?.startsWith('abc');\n * }\n * \n * }\n * \n * // js: one way binding\n * this.class.span =: span;\n * this.class.valid =: valid;\n * \n * \n * ```\n * \n */\nexport class HostBindingHandler implements RenderHandler {\n\tprivate assignment: AssignmentExpression;\n\tprivate subscription?: Subscription<any>;\n\n\n\tconstructor(private hostBindingRef: HostBindingRef, private contextStack: Stack, private zone: AuroraZone) { }\n\n\tonInit(): void {\n\t\tconst binding = `this.${this.hostBindingRef.hostPropertyName} = ${this.hostBindingRef.modelPropertyName}`;\n\t\tthis.assignment = JavaScriptParser.parseScript<AssignmentExpression>(binding);\n\t\tthis.subscription = this.zone.onFinal.subscribe(() => this.assignment.get(this.contextStack), console.error);\n\t}\n\n\tonConnect() {\n\t\tif (this.subscription) {\n\t\t\treturn;\n\t\t}\n\t\tthis.onInit();\n\t}\n\n\tonDisconnect() {\n\t\tif (!this.subscription) {\n\t\t\treturn;\n\t\t}\n\t\tthis.onDestroy();\n\t}\n\n\tonDestroy(): void {\n\t\tthis.subscription?.unsubscribe();\n\t\tdelete this.subscription;\n\t}\n\n}\n"]}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ReactiveScope } from '@ibyar/expressions';
|
|
2
|
-
import type { ListenerRef } from '../component/reflect.js';
|
|
3
|
-
import type { RenderHandler } from './render-handler.js';
|
|
4
|
-
import type { AuroraZone } from '../zone/zone.js';
|
|
5
|
-
type ElementScope = {
|
|
6
|
-
[templateName: string]: HTMLElement;
|
|
7
|
-
};
|
|
8
|
-
export type HostListenerOptions<T = any> = {
|
|
9
|
-
host: HTMLElement;
|
|
10
|
-
model: T;
|
|
11
|
-
zone: AuroraZone;
|
|
12
|
-
templateScope: ReactiveScope<ElementScope>;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* ```ts
|
|
16
|
-
* @Component({selector: 'tag-name'})
|
|
17
|
-
* class ComponentModelOrAttributeDirectiveModel {
|
|
18
|
-
*
|
|
19
|
-
* @HostListener('window:load', ['$event.target', '"load"'])
|
|
20
|
-
* @HostListener('click', ['$event.target', '"click"'])
|
|
21
|
-
* public onClick(target: any, type: string){
|
|
22
|
-
* console.log(target, type);
|
|
23
|
-
* }
|
|
24
|
-
*
|
|
25
|
-
* }
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* window.addEventListener('load', $event => listener($event.target, 'load'));
|
|
29
|
-
*
|
|
30
|
-
* view.addEventListener('click', $event => listener($event.target, 'click'));
|
|
31
|
-
*
|
|
32
|
-
*/
|
|
33
|
-
export declare class HostListenerHandler implements RenderHandler {
|
|
34
|
-
private listenerRef;
|
|
35
|
-
private options;
|
|
36
|
-
private source;
|
|
37
|
-
private eventName;
|
|
38
|
-
private argumentsExpression;
|
|
39
|
-
private stack;
|
|
40
|
-
private scopeSubscription?;
|
|
41
|
-
private listener;
|
|
42
|
-
constructor(listenerRef: ListenerRef, options: HostListenerOptions);
|
|
43
|
-
onInit(): void;
|
|
44
|
-
private addEventListener;
|
|
45
|
-
private removeEventListener;
|
|
46
|
-
onConnect(): void;
|
|
47
|
-
onDisconnect(): void;
|
|
48
|
-
onDestroy(): void;
|
|
49
|
-
}
|
|
50
|
-
export {};
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { JavaScriptParser, Stack } from '@ibyar/expressions';
|
|
2
|
-
/**
|
|
3
|
-
* ```ts
|
|
4
|
-
* @Component({selector: 'tag-name'})
|
|
5
|
-
* class ComponentModelOrAttributeDirectiveModel {
|
|
6
|
-
*
|
|
7
|
-
* @HostListener('window:load', ['$event.target', '"load"'])
|
|
8
|
-
* @HostListener('click', ['$event.target', '"click"'])
|
|
9
|
-
* public onClick(target: any, type: string){
|
|
10
|
-
* console.log(target, type);
|
|
11
|
-
* }
|
|
12
|
-
*
|
|
13
|
-
* }
|
|
14
|
-
* ```
|
|
15
|
-
*
|
|
16
|
-
* window.addEventListener('load', $event => listener($event.target, 'load'));
|
|
17
|
-
*
|
|
18
|
-
* view.addEventListener('click', $event => listener($event.target, 'click'));
|
|
19
|
-
*
|
|
20
|
-
*/
|
|
21
|
-
export class HostListenerHandler {
|
|
22
|
-
constructor(listenerRef, options) {
|
|
23
|
-
this.listenerRef = listenerRef;
|
|
24
|
-
this.options = options;
|
|
25
|
-
this.listener = (event) => {
|
|
26
|
-
const callback = this.options.model[this.listenerRef.modelCallbackName];
|
|
27
|
-
if (typeof callback !== 'function') {
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const eventScope = this.stack.pushBlockScopeFor({ $event: event });
|
|
31
|
-
const params = this.argumentsExpression.get(this.stack);
|
|
32
|
-
this.stack.clearTo(eventScope);
|
|
33
|
-
this.options.zone.run(callback, this.options.model, params);
|
|
34
|
-
typeof event.preventDefault === 'function' && event.preventDefault();
|
|
35
|
-
};
|
|
36
|
-
this.stack = new Stack(this.options.templateScope);
|
|
37
|
-
}
|
|
38
|
-
onInit() {
|
|
39
|
-
const args = this.listenerRef.args ?? [];
|
|
40
|
-
const array = `[${args.join(', ')}]`;
|
|
41
|
-
this.argumentsExpression = JavaScriptParser.parseScript(array);
|
|
42
|
-
if (this.listenerRef.eventName.includes(':')) {
|
|
43
|
-
const [eventSource, eventName] = this.listenerRef.eventName.split(':', 2);
|
|
44
|
-
this.eventName = eventName;
|
|
45
|
-
if ('window' === eventSource.toLowerCase()) {
|
|
46
|
-
this.source = window;
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
let source = this.options.templateScope.get(eventSource);
|
|
50
|
-
this.scopeSubscription = this.options.templateScope.subscribe(eventSource, (newValue) => {
|
|
51
|
-
if (source !== newValue) {
|
|
52
|
-
if (source) {
|
|
53
|
-
this.removeEventListener();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
else if (!newValue) {
|
|
57
|
-
this.removeEventListener();
|
|
58
|
-
}
|
|
59
|
-
source = newValue;
|
|
60
|
-
this.addEventListener();
|
|
61
|
-
});
|
|
62
|
-
this.source = source;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
this.eventName = this.listenerRef.eventName;
|
|
67
|
-
this.source = this.options.host;
|
|
68
|
-
}
|
|
69
|
-
this.addEventListener();
|
|
70
|
-
}
|
|
71
|
-
addEventListener() {
|
|
72
|
-
this.source?.addEventListener(this.eventName, this.listener);
|
|
73
|
-
}
|
|
74
|
-
removeEventListener() {
|
|
75
|
-
this.source?.removeEventListener(this.eventName, this.listener);
|
|
76
|
-
}
|
|
77
|
-
onConnect() {
|
|
78
|
-
this.scopeSubscription?.resume();
|
|
79
|
-
}
|
|
80
|
-
onDisconnect() {
|
|
81
|
-
this.scopeSubscription?.pause();
|
|
82
|
-
}
|
|
83
|
-
onDestroy() {
|
|
84
|
-
this.scopeSubscription?.unsubscribe();
|
|
85
|
-
this.removeEventListener();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=host-listener.handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-listener.handler.js","sourceRoot":"","sources":["../../../src/core/render/host-listener.handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArrayExpression, JavaScriptParser, ReactiveScope, ScopeSubscription, Stack } from '@ibyar/expressions';\nimport type { ListenerRef } from '../component/reflect.js';\nimport type { RenderHandler } from './render-handler.js';\nimport type { AuroraZone } from '../zone/zone.js';\n\ntype ElementScope = { [templateName: string]: HTMLElement };\nexport type HostListenerOptions<T = any> = { host: HTMLElement, model: T, zone: AuroraZone, templateScope: ReactiveScope<ElementScope> };\n\n/**\n * ```ts\n * @Component({selector: 'tag-name'})\n * class ComponentModelOrAttributeDirectiveModel {\n * \n *\t@HostListener('window:load', ['$event.target', '\"load\"'])\n * \t@HostListener('click', ['$event.target', '\"click\"'])\n * \tpublic onClick(target: any, type: string){\n * \t\tconsole.log(target, type);\n * \t}\n * \n * }\n * ```\n * \n * window.addEventListener('load', $event => listener($event.target, 'load'));\n * \n * view.addEventListener('click', $event => listener($event.target, 'click'));\n * \n */\nexport class HostListenerHandler implements RenderHandler {\n\n\tprivate source: HTMLElement | Window;\n\tprivate eventName: string;\n\n\tprivate argumentsExpression: ArrayExpression;\n\tprivate stack: Stack;\n\n\tprivate scopeSubscription?: ScopeSubscription<ElementScope>;\n\n\n\tprivate listener = (event: Event) => {\n\t\tconst callback: Function | undefined = this.options.model[this.listenerRef.modelCallbackName];\n\t\tif (typeof callback !== 'function') {\n\t\t\treturn\n\t\t}\n\t\tconst eventScope = this.stack.pushBlockScopeFor({ $event: event });\n\t\tconst params = this.argumentsExpression.get(this.stack);\n\t\tthis.stack.clearTo(eventScope);\n\t\tthis.options.zone.run(\n\t\t\tcallback as () => void,\n\t\t\tthis.options.model,\n\t\t\tparams\n\t\t);\n\t\ttypeof event.preventDefault === 'function' && event.preventDefault();\n\t};\n\n\tconstructor(private listenerRef: ListenerRef, private options: HostListenerOptions) {\n\t\tthis.stack = new Stack(this.options.templateScope);\n\t}\n\tonInit(): void {\n\t\tconst args = this.listenerRef.args ?? [];\n\t\tconst array = `[${args.join(', ')}]`;\n\t\tthis.argumentsExpression = JavaScriptParser.parseScript(array) as ArrayExpression;\n\t\tif (this.listenerRef.eventName.includes(':')) {\n\t\t\tconst [eventSource, eventName] = this.listenerRef.eventName.split(':', 2);\n\t\t\tthis.eventName = eventName;\n\t\t\tif ('window' === eventSource.toLowerCase()) {\n\t\t\t\tthis.source = window;\n\t\t\t} else {\n\t\t\t\tlet source = this.options.templateScope.get(eventSource) as HTMLElement;\n\t\t\t\tthis.scopeSubscription = this.options.templateScope.subscribe(eventSource, (newValue: HTMLElement) => {\n\t\t\t\t\tif (source !== newValue) {\n\t\t\t\t\t\tif (source) {\n\t\t\t\t\t\t\tthis.removeEventListener();\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!newValue) {\n\t\t\t\t\t\tthis.removeEventListener();\n\t\t\t\t\t}\n\t\t\t\t\tsource = newValue;\n\t\t\t\t\tthis.addEventListener();\n\t\t\t\t});\n\t\t\t\tthis.source = source;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.eventName = this.listenerRef.eventName;\n\t\t\tthis.source = this.options.host;\n\t\t}\n\t\tthis.addEventListener();\n\t}\n\n\tprivate addEventListener() {\n\t\tthis.source?.addEventListener(this.eventName, this.listener);\n\t}\n\n\tprivate removeEventListener() {\n\t\tthis.source?.removeEventListener(this.eventName, this.listener);\n\t}\n\n\tonConnect() {\n\t\tthis.scopeSubscription?.resume();\n\t}\n\n\tonDisconnect() {\n\t\tthis.scopeSubscription?.pause();\n\t}\n\n\tonDestroy(): void {\n\t\tthis.scopeSubscription?.unsubscribe();\n\t\tthis.removeEventListener();\n\t}\n\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { OnDestroy, OnInit } from '../component/lifecycle.js';
|
|
2
|
-
export interface RenderHandler extends Partial<OnInit>, Partial<OnDestroy> {
|
|
3
|
-
/**
|
|
4
|
-
* execute when element attached to parent from ui
|
|
5
|
-
*/
|
|
6
|
-
onConnect?(): void;
|
|
7
|
-
/**
|
|
8
|
-
* execute when element disconnected from ui
|
|
9
|
-
*/
|
|
10
|
-
onDisconnect?(): void;
|
|
11
|
-
}
|
package/render/render-handler.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"render-handler.js","sourceRoot":"","sources":["../../../src/core/render/render-handler.ts"],"names":[],"mappings":"","sourcesContent":["import { OnDestroy, OnInit } from '../component/lifecycle.js';\n\nexport interface RenderHandler extends Partial<OnInit>, Partial<OnDestroy> {\n\n\t/**\n\t * execute when element attached to parent from ui\n\t */\n\tonConnect?(): void;\n\n\t/**\n\t * execute when element disconnected from ui\n\t */\n\tonDisconnect?(): void;\n\n}\n"]}
|