@ibyar/core 2.4.0 → 2.5.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.d.ts +23 -2
- package/annotation/decorators.d.ts.map +1 -1
- package/annotation/decorators.js +18 -0
- package/annotation/decorators.js.map +1 -1
- package/annotation/options.d.ts +5 -5
- package/annotation/options.d.ts.map +1 -1
- package/annotation/options.js.map +1 -1
- package/component/component.d.ts +14 -10
- package/component/component.d.ts.map +1 -1
- package/component/component.js +37 -0
- package/component/component.js.map +1 -1
- package/component/custom-element.d.ts +6 -2
- package/component/custom-element.d.ts.map +1 -1
- package/component/custom-element.js.map +1 -1
- package/component/events.js.map +1 -1
- package/component/initializer.d.ts +67 -0
- package/component/initializer.d.ts.map +1 -0
- package/component/initializer.js +59 -0
- package/component/initializer.js.map +1 -0
- package/di/inject.d.ts +11 -4
- package/di/inject.d.ts.map +1 -1
- package/di/inject.js +18 -2
- package/di/inject.js.map +1 -1
- package/di/provider.d.ts +7 -5
- package/di/provider.d.ts.map +1 -1
- package/di/provider.js +29 -13
- package/di/provider.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/initializer/input.d.ts +1 -0
- package/initializer/input.d.ts.map +1 -0
- package/initializer/input.js +2 -0
- package/initializer/input.js.map +1 -0
- package/linker/change-detector-ref.d.ts.map +1 -1
- package/linker/change-detector-ref.js +26 -4
- package/linker/change-detector-ref.js.map +1 -1
- package/linker/view-container-ref.d.ts +4 -4
- package/linker/view-container-ref.d.ts.map +1 -1
- package/linker/view-container-ref.js.map +1 -1
- package/package.json +6 -6
- package/pipe/pipe.d.ts +6 -6
- package/pipe/pipe.d.ts.map +1 -1
- package/pipe/pipe.js.map +1 -1
- package/signals/factory.d.ts +23 -0
- package/signals/factory.d.ts.map +1 -0
- package/signals/factory.js +65 -0
- package/signals/factory.js.map +1 -0
- package/signals/initializer.d.ts +26 -0
- package/signals/initializer.d.ts.map +1 -0
- package/signals/initializer.js +19 -0
- package/signals/initializer.js.map +1 -0
- package/signals/input.d.ts +1 -0
- package/signals/input.d.ts.map +1 -0
- package/signals/input.js +2 -0
- package/signals/input.js.map +1 -0
- package/signals/runtime.d.ts +37 -0
- package/signals/runtime.d.ts.map +1 -0
- package/signals/runtime.js +165 -0
- package/signals/runtime.js.map +1 -0
- package/signals/signals.d.ts +11 -9
- package/signals/signals.d.ts.map +1 -1
- package/signals/signals.js +23 -41
- package/signals/signals.js.map +1 -1
- package/utils/typeof.d.ts +4 -2
- package/utils/typeof.d.ts.map +1 -1
- package/utils/typeof.js.map +1 -1
- package/view/base-view.d.ts +2 -2
- package/view/base-view.d.ts.map +1 -1
- package/view/base-view.js +41 -23
- package/view/base-view.js.map +1 -1
- package/view/form-view.d.ts +2 -2
- package/view/form-view.d.ts.map +1 -1
- package/view/form-view.js.map +1 -1
- package/view/render.d.ts +2 -0
- package/view/render.d.ts.map +1 -1
- package/view/render.js +16 -0
- package/view/render.js.map +1 -1
- package/view/utils.d.ts +2 -2
- package/view/utils.d.ts.map +1 -1
- package/view/utils.js.map +1 -1
- package/view/view.d.ts +3 -3
- package/view/view.d.ts.map +1 -1
- package/view/view.js +15 -2
- package/view/view.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-container-ref.d.ts","sourceRoot":"","sources":["../../../src/core/linker/view-container-ref.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"view-container-ref.d.ts","sourceRoot":"","sources":["../../../src/core/linker/view-container-ref.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-container-ref.js","sourceRoot":"","sources":["../../../src/core/linker/view-container-ref.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MetadataClass } from '@ibyar/decorators';\nimport type { TypeOf } from '../utils/typeof.js';\nimport { ReactiveScopeControl } from '@ibyar/expressions';\nimport { TemplateRef } from './template-ref.js';\nimport { EmbeddedViewRef, EmbeddedViewRefImpl, ViewRef } from './view-ref.js';\nimport { getComponentView } from '../view/utils.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { ReflectComponents } from '../component/reflect.js';\n\ninterface IndexOptions {\n\t/**\n\t * the index to insert the \n\t */\n\tindex?: number;\n\t/**\n\t * the default value is true\n\t */\n\tinsert?: boolean\n}\n\nexport interface ViewContainerOptions<C> extends IndexOptions {\n\tcontext?: C;\n};\n\nexport interface ViewContainerComponentOptions extends IndexOptions {\n\tselector?: string;\n};\n\nexport interface HTMLElementOptions extends ElementCreationOptions, IndexOptions {\n\n}\n\nexport abstract class ViewContainerRef {\n\n\t/**\n\t * Anchor element that specifies the location of this container in the containing view.\n\t * Each view container can have only one anchor element, and each anchor element\n\t * can have only a single view container.\n\t * \n\t * Root elements of views attached to this container become siblings of the anchor element in\n\t * the rendered view.\n\t *\n\t * Access the `ViewContainerRef` of an element by placing a `Directive` injected\n\t * with `ViewContainerRef` on the element, or use a `ViewChild` query.\n\t *\n\t */\n\tabstract get anchorElement(): Element;\n\n\t/**\n\t * Destroys all views in this container.\n\t */\n\tabstract clear(): void;\n\n\t/**\n\t * Retrieves a view from this container.\n\t * @param index The 0-based index of the view to retrieve.\n\t * @returns The `ViewRef` instance, or null if the index is out of range.\n\t */\n\tabstract get(index: number): ViewRef | undefined;\n\n\t/**\n\t * Reports how many views are currently attached to this container.\n\t * @returns The number of views.\n\t */\n\tabstract get length(): number;\n\n\t/**\n\t * Instantiates an embedded view and inserts it\n\t * into this container.\n\t * @param templateRef The HTML template that defines the view.\n\t * @param context The data-binding context of the embedded view, as declared\n\t * in the `<ng-template>` usage.\n\t * @param index The 0-based index at which to insert the new view into this container.\n\t * If not specified, appends the new view as the last entry.\n\t *\n\t * @returns The `ViewRef` instance for the newly created view.\n\t */\n\tabstract createEmbeddedView<C extends {}>(templateRef: TemplateRef, options?: ViewContainerOptions<C>): EmbeddedViewRef<C>;\n\n\t/**\n\t * create component by tag name `selector`.\n\t * @param selector the tag name for the aurora custom-element\n\t * @param options \n\t */\n\tabstract createComponent<C extends {}>(selector: string, options?: IndexOptions): C;\n\n\t/**\n\t * create component by the aurora custom-element `View` Class\n\t * @param viewClass the generated aurora view class\n\t * @param options \n\t */\n\tabstract createComponent<C extends {}>(viewClass: TypeOf<HTMLComponent<C>>, options?: IndexOptions): C;\n\t/**\n\t * Instantiates a single component and inserts its host view into this container.\n\t *\n\t * @param componentType Component Type to use.\n\t * @param options An object that contains extra parameters:\n\t * * index: the index at which to insert the new component's host view into this container.\n\t * If not specified, appends the new view as the last entry.\n\t * * selector: the tag name of the new create component that attached with this model class.\n\t * \t\tAny Model class can have many views with different selectors.\n\t *\n\t * @returns The new `HTMLComponent` which contains the component instance and the host view.\n\t */\n\tabstract createComponent<C extends {}>(componentType: TypeOf<C>, options?: ViewContainerComponentOptions): C;\n\n\n\t/**\n\t * create an HTMLElement by tag name `selector`.\n\t * @param selector the tag name for the aurora custom-element\n\t * @param options \n\t */\n\tabstract createElement<K extends keyof HTMLElementTagNameMap>(selector: K, options?: HTMLElementOptions): HTMLElementTagNameMap[K];\n\tabstract createElement<K extends keyof HTMLElementDeprecatedTagNameMap>(selector: K, options?: HTMLElementOptions): HTMLElementDeprecatedTagNameMap[K];\n\n\t/**\n\t * create HTMLElement by View Class reference\n\t * @param viewClass the generated aurora view class\n\t * @param options \n\t */\n\tabstract createElement<C extends HTMLElement>(htmlElementClass: TypeOf<C>, options?: HTMLElementOptions): C;\n\n\t/**\n\t * create a text node and insert to the view\n\t * @param data \n\t * @param options \n\t */\n\tabstract createTextNode(data: string, options?: IndexOptions): Text;\n\n\t/**\n\t * Inserts a view into this container.\n\t * @param viewRef The view to insert.\n\t * @param index The 0-based index at which to insert the view.\n\t * If not specified, appends the new view as the last entry.\n\t * @returns The inserted `ViewRef` instance.\n\t *\n\t */\n\tabstract insert(viewRef: ViewRef, index?: number): ViewRef;\n\n\t/**\n\t * Moves a view to a new location in this container.\n\t * @param viewRef The view to move.\n\t * @param newIndex The 0-based index of the new location.\n\t * @returns The moved `ViewRef` instance.\n\t */\n\tabstract move(viewRef: ViewRef, newIndex: number): ViewRef;\n\n\t/**\n\t * Returns the index of a view within the current container.\n\t * @param viewRef The view to query.\n\t * @returns The 0-based index of the view's position in this container,\n\t * or `-1` if this container doesn't contain the view.\n\t */\n\tabstract indexOf(viewRef: ViewRef): number;\n\n\t/**\n\t * Destroys a view attached to this container\n\t * @param index The 0-based index of the view to destroy.\n\t * If not specified, the last view in the container is removed.\n\t */\n\tabstract remove(index?: number): void;\n\n\t/**\n\t * Detaches a view from this container without destroying it.\n\t * Use along with `insert()` to move a view within the current container.\n\t * @param index The 0-based index of the view to detach.\n\t * If not specified, the last view in the container is detached.\n\t */\n\tabstract detach(index?: number): ViewRef | undefined;\n\n\t/**\n\t * set the current views from this\n\t * @param views the new `ViewRef` list \n\t */\n\tabstract updateViews(views: ViewRef[]): void;\n}\n\n\nexport class ViewContainerRefImpl extends ViewContainerRef {\n\n\tprivate _views: EmbeddedViewRef<any>[] = [];\n\n\tconstructor(parent: Element, firstComment: Comment);\n\tconstructor(private _parent: Element, private _firstComment: Comment) {\n\t\tsuper();\n\t}\n\toverride get anchorElement(): Element {\n\t\treturn this._parent;\n\t}\n\toverride get length(): number {\n\t\treturn this._views.length;\n\t}\n\toverride clear(): void {\n\t\tif (this._views.length > 0) {\n\t\t\tfor (const elm of this._views) {\n\t\t\t\telm.destroy();\n\t\t\t}\n\t\t\tthis._views.splice(0);\n\t\t}\n\t}\n\toverride get(index: number): ViewRef | undefined {\n\t\tif (index >= this._views.length) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._views[index];\n\t}\n\toverride detach(index?: number): ViewRef | undefined {\n\t\tindex ??= this._views.length - 1;\n\t\tconst viewRef = this._views[index];\n\t\tviewRef.detach();\n\t\tthis._views.splice(index, 1);\n\t\treturn viewRef;\n\t}\n\toverride indexOf(viewRef: EmbeddedViewRef<any>): number {\n\t\treturn this._views.indexOf(viewRef);\n\t}\n\toverride remove(index?: number): void {\n\t\tindex ??= this._views.length - 1;\n\t\tthis._views[index].destroy();\n\t\tthis._views.splice(index, 1);\n\t}\n\toverride insert(viewRef: EmbeddedViewRef<any>, index?: number): ViewRef {\n\t\tindex = ((index ??= this._views.length) > this._views.length) ? this._views.length : index;\n\t\tconst lastNode = index == 0 ? this._firstComment : this._views[index - 1].last;\n\t\tthis._views.splice(index, 0, viewRef);\n\t\tviewRef.after(lastNode);\n\t\treturn viewRef;\n\t}\n\toverride move(viewRef: EmbeddedViewRef<any>, newIndex: number): ViewRef {\n\t\tconst oldIndex = this.indexOf(viewRef);\n\t\tif (oldIndex > -1) {\n\t\t\tthis.detach(oldIndex);\n\t\t} else {\n\t\t\t// should remove it from the container first\n\t\t\tviewRef.detach();\n\t\t}\n\t\treturn this.insert(viewRef, newIndex);\n\t}\n\toverride createEmbeddedView<C extends {}>(templateRef: TemplateRef, options?: ViewContainerOptions<C>): EmbeddedViewRef<C> {\n\t\tconst viewRef = templateRef.createEmbeddedView<C>(options?.context || <C>{}, this._parent);\n\t\t(options?.insert != false) && this.insert(viewRef, options?.index);\n\t\treturn viewRef;\n\t}\n\toverride createComponent<C extends {}>(selector: string, options?: IndexOptions): C;\n\toverride createComponent<C extends {}>(viewClass: MetadataClass<HTMLComponent<C>>, options?: IndexOptions): C;\n\toverride createComponent<C extends {}>(componentType: MetadataClass<C>, options?: ViewContainerComponentOptions): C;\n\toverride createComponent<C extends {}>(arg0: string | MetadataClass<C> | TypeOf<HTMLComponent<C>>, options?: ViewContainerComponentOptions): C {\n\t\tlet ViewClass: TypeOf<HTMLComponent<C>>;\n\t\tif (typeof arg0 === 'string') {\n\t\t\tViewClass = customElements.get(arg0) as TypeOf<HTMLComponent<C>>;\n\t\t} else if (typeof arg0 === 'function') {\n\t\t\tif (Reflect.has(arg0, 'observedAttributes')) {\n\t\t\t\tViewClass = arg0 as TypeOf<HTMLComponent<C>>;\n\t\t\t} else {\n\t\t\t\tconst componentType = arg0 as MetadataClass<C>;\n\t\t\t\tconst defaultTagName = ReflectComponents.getMetaDate(componentType)?.selector;\n\t\t\t\tconst view = getComponentView(componentType, options?.selector ?? defaultTagName);\n\t\t\t\tif (!view) {\n\t\t\t\t\tthrow new Error(`Can't find View component for class ${componentType.name}`);\n\t\t\t\t}\n\t\t\t\tViewClass = view;\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(`Can't find View component for args, ${arg0}, ${options}`);\n\t\t}\n\t\tconst component = new ViewClass();\n\t\tconst viewRef = new EmbeddedViewRefImpl<C>(component._modelScope, [component]);\n\t\t(options?.insert != false) && this.insert(viewRef, options?.index);\n\t\treturn component as any as C;\n\t}\n\n\toverride createElement<K extends keyof HTMLElementTagNameMap>(selector: K, options?: HTMLElementOptions): HTMLElementTagNameMap[K];\n\toverride createElement<K extends keyof HTMLElementDeprecatedTagNameMap>(selector: K, options?: HTMLElementOptions): HTMLElementDeprecatedTagNameMap[K];\n\toverride createElement<C extends HTMLElement>(arg0: string | TypeOf<C>, options?: HTMLElementOptions): C {\n\t\tlet element: C;\n\t\tif (typeof arg0 === 'string') {\n\t\t\telement = document.createElement(arg0, { is: options?.is }) as C;\n\t\t} else if (typeof arg0 === 'function') {\n\t\t\telement = new arg0();\n\t\t} else {\n\t\t\tthrow new Error(`Can't find View component for args, ${arg0}, ${options}`);\n\t\t}\n\t\tconst scope = ReactiveScopeControl.for<C>(element);\n\t\tconst viewRef = new EmbeddedViewRefImpl<C>(scope, [element]);\n\t\t(options?.insert != false) && this.insert(viewRef, options?.index);\n\t\treturn element;\n\t}\n\toverride createTextNode(data: string, options?: IndexOptions): Text {\n\t\tconst text = document.createTextNode(data);\n\t\tconst scope = ReactiveScopeControl.for<Text>(text);\n\t\tconst viewRef = new EmbeddedViewRefImpl<Text>(scope, [text]);\n\t\t(options?.insert != false) && this.insert(viewRef, options?.index);\n\t\treturn text;\n\t}\n\n\toverride updateViews(views: ViewRef[]): void {\n\t\tfor (let i = 0; i < views.length; i++) {\n\t\t\tthis.move(views[i] as EmbeddedViewRef<any>, i);\n\t\t}\n\t\twhile (this.length > views.length) {\n\t\t\tthis.remove();\n\t\t}\n\t}\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"view-container-ref.js","sourceRoot":"","sources":["../../../src/core/linker/view-container-ref.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MetadataClass } from '@ibyar/decorators';\nimport type { Type } from '../utils/typeof.js';\nimport { ReactiveScopeControl } from '@ibyar/expressions';\nimport { TemplateRef } from './template-ref.js';\nimport { EmbeddedViewRef, EmbeddedViewRefImpl, ViewRef } from './view-ref.js';\nimport { getComponentView } from '../view/utils.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { ReflectComponents } from '../component/reflect.js';\n\ninterface IndexOptions {\n\t/**\n\t * the index to insert the \n\t */\n\tindex?: number;\n\t/**\n\t * the default value is true\n\t */\n\tinsert?: boolean\n}\n\nexport interface ViewContainerOptions<C> extends IndexOptions {\n\tcontext?: C;\n};\n\nexport interface ViewContainerComponentOptions extends IndexOptions {\n\tselector?: string;\n};\n\nexport interface HTMLElementOptions extends ElementCreationOptions, IndexOptions {\n\n}\n\nexport abstract class ViewContainerRef {\n\n\t/**\n\t * Anchor element that specifies the location of this container in the containing view.\n\t * Each view container can have only one anchor element, and each anchor element\n\t * can have only a single view container.\n\t * \n\t * Root elements of views attached to this container become siblings of the anchor element in\n\t * the rendered view.\n\t *\n\t * Access the `ViewContainerRef` of an element by placing a `Directive` injected\n\t * with `ViewContainerRef` on the element, or use a `ViewChild` query.\n\t *\n\t */\n\tabstract get anchorElement(): Element;\n\n\t/**\n\t * Destroys all views in this container.\n\t */\n\tabstract clear(): void;\n\n\t/**\n\t * Retrieves a view from this container.\n\t * @param index The 0-based index of the view to retrieve.\n\t * @returns The `ViewRef` instance, or null if the index is out of range.\n\t */\n\tabstract get(index: number): ViewRef | undefined;\n\n\t/**\n\t * Reports how many views are currently attached to this container.\n\t * @returns The number of views.\n\t */\n\tabstract get length(): number;\n\n\t/**\n\t * Instantiates an embedded view and inserts it\n\t * into this container.\n\t * @param templateRef The HTML template that defines the view.\n\t * @param context The data-binding context of the embedded view, as declared\n\t * in the `<ng-template>` usage.\n\t * @param index The 0-based index at which to insert the new view into this container.\n\t * If not specified, appends the new view as the last entry.\n\t *\n\t * @returns The `ViewRef` instance for the newly created view.\n\t */\n\tabstract createEmbeddedView<C extends {}>(templateRef: TemplateRef, options?: ViewContainerOptions<C>): EmbeddedViewRef<C>;\n\n\t/**\n\t * create component by tag name `selector`.\n\t * @param selector the tag name for the aurora custom-element\n\t * @param options \n\t */\n\tabstract createComponent<C extends {}>(selector: string, options?: IndexOptions): C;\n\n\t/**\n\t * create component by the aurora custom-element `View` Class\n\t * @param viewClass the generated aurora view class\n\t * @param options \n\t */\n\tabstract createComponent<C extends {}>(viewClass: Type<HTMLComponent<C>>, options?: IndexOptions): C;\n\t/**\n\t * Instantiates a single component and inserts its host view into this container.\n\t *\n\t * @param componentType Component Type to use.\n\t * @param options An object that contains extra parameters:\n\t * * index: the index at which to insert the new component's host view into this container.\n\t * If not specified, appends the new view as the last entry.\n\t * * selector: the tag name of the new create component that attached with this model class.\n\t * \t\tAny Model class can have many views with different selectors.\n\t *\n\t * @returns The new `HTMLComponent` which contains the component instance and the host view.\n\t */\n\tabstract createComponent<C extends {}>(componentType: Type<C>, options?: ViewContainerComponentOptions): C;\n\n\n\t/**\n\t * create an HTMLElement by tag name `selector`.\n\t * @param selector the tag name for the aurora custom-element\n\t * @param options \n\t */\n\tabstract createElement<K extends keyof HTMLElementTagNameMap>(selector: K, options?: HTMLElementOptions): HTMLElementTagNameMap[K];\n\tabstract createElement<K extends keyof HTMLElementDeprecatedTagNameMap>(selector: K, options?: HTMLElementOptions): HTMLElementDeprecatedTagNameMap[K];\n\n\t/**\n\t * create HTMLElement by View Class reference\n\t * @param viewClass the generated aurora view class\n\t * @param options \n\t */\n\tabstract createElement<C extends HTMLElement>(htmlElementClass: Type<C>, options?: HTMLElementOptions): C;\n\n\t/**\n\t * create a text node and insert to the view\n\t * @param data \n\t * @param options \n\t */\n\tabstract createTextNode(data: string, options?: IndexOptions): Text;\n\n\t/**\n\t * Inserts a view into this container.\n\t * @param viewRef The view to insert.\n\t * @param index The 0-based index at which to insert the view.\n\t * If not specified, appends the new view as the last entry.\n\t * @returns The inserted `ViewRef` instance.\n\t *\n\t */\n\tabstract insert(viewRef: ViewRef, index?: number): ViewRef;\n\n\t/**\n\t * Moves a view to a new location in this container.\n\t * @param viewRef The view to move.\n\t * @param newIndex The 0-based index of the new location.\n\t * @returns The moved `ViewRef` instance.\n\t */\n\tabstract move(viewRef: ViewRef, newIndex: number): ViewRef;\n\n\t/**\n\t * Returns the index of a view within the current container.\n\t * @param viewRef The view to query.\n\t * @returns The 0-based index of the view's position in this container,\n\t * or `-1` if this container doesn't contain the view.\n\t */\n\tabstract indexOf(viewRef: ViewRef): number;\n\n\t/**\n\t * Destroys a view attached to this container\n\t * @param index The 0-based index of the view to destroy.\n\t * If not specified, the last view in the container is removed.\n\t */\n\tabstract remove(index?: number): void;\n\n\t/**\n\t * Detaches a view from this container without destroying it.\n\t * Use along with `insert()` to move a view within the current container.\n\t * @param index The 0-based index of the view to detach.\n\t * If not specified, the last view in the container is detached.\n\t */\n\tabstract detach(index?: number): ViewRef | undefined;\n\n\t/**\n\t * set the current views from this\n\t * @param views the new `ViewRef` list \n\t */\n\tabstract updateViews(views: ViewRef[]): void;\n}\n\n\nexport class ViewContainerRefImpl extends ViewContainerRef {\n\n\tprivate _views: EmbeddedViewRef<any>[] = [];\n\n\tconstructor(parent: Element, firstComment: Comment);\n\tconstructor(private _parent: Element, private _firstComment: Comment) {\n\t\tsuper();\n\t}\n\toverride get anchorElement(): Element {\n\t\treturn this._parent;\n\t}\n\toverride get length(): number {\n\t\treturn this._views.length;\n\t}\n\toverride clear(): void {\n\t\tif (this._views.length > 0) {\n\t\t\tfor (const elm of this._views) {\n\t\t\t\telm.destroy();\n\t\t\t}\n\t\t\tthis._views.splice(0);\n\t\t}\n\t}\n\toverride get(index: number): ViewRef | undefined {\n\t\tif (index >= this._views.length) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn this._views[index];\n\t}\n\toverride detach(index?: number): ViewRef | undefined {\n\t\tindex ??= this._views.length - 1;\n\t\tconst viewRef = this._views[index];\n\t\tviewRef.detach();\n\t\tthis._views.splice(index, 1);\n\t\treturn viewRef;\n\t}\n\toverride indexOf(viewRef: EmbeddedViewRef<any>): number {\n\t\treturn this._views.indexOf(viewRef);\n\t}\n\toverride remove(index?: number): void {\n\t\tindex ??= this._views.length - 1;\n\t\tthis._views[index].destroy();\n\t\tthis._views.splice(index, 1);\n\t}\n\toverride insert(viewRef: EmbeddedViewRef<any>, index?: number): ViewRef {\n\t\tindex = ((index ??= this._views.length) > this._views.length) ? this._views.length : index;\n\t\tconst lastNode = index == 0 ? this._firstComment : this._views[index - 1].last;\n\t\tthis._views.splice(index, 0, viewRef);\n\t\tviewRef.after(lastNode);\n\t\treturn viewRef;\n\t}\n\toverride move(viewRef: EmbeddedViewRef<any>, newIndex: number): ViewRef {\n\t\tconst oldIndex = this.indexOf(viewRef);\n\t\tif (oldIndex > -1) {\n\t\t\tthis.detach(oldIndex);\n\t\t} else {\n\t\t\t// should remove it from the container first\n\t\t\tviewRef.detach();\n\t\t}\n\t\treturn this.insert(viewRef, newIndex);\n\t}\n\toverride createEmbeddedView<C extends {}>(templateRef: TemplateRef, options?: ViewContainerOptions<C>): EmbeddedViewRef<C> {\n\t\tconst viewRef = templateRef.createEmbeddedView<C>(options?.context || <C>{}, this._parent);\n\t\t(options?.insert != false) && this.insert(viewRef, options?.index);\n\t\treturn viewRef;\n\t}\n\toverride createComponent<C extends {}>(selector: string, options?: IndexOptions): C;\n\toverride createComponent<C extends {}>(viewClass: MetadataClass<HTMLComponent<C>>, options?: IndexOptions): C;\n\toverride createComponent<C extends {}>(componentType: MetadataClass<C>, options?: ViewContainerComponentOptions): C;\n\toverride createComponent<C extends {}>(arg0: string | MetadataClass<C> | Type<HTMLComponent<C>>, options?: ViewContainerComponentOptions): C {\n\t\tlet ViewClass: Type<HTMLComponent<C>>;\n\t\tif (typeof arg0 === 'string') {\n\t\t\tViewClass = customElements.get(arg0) as Type<HTMLComponent<C>>;\n\t\t} else if (typeof arg0 === 'function') {\n\t\t\tif (Reflect.has(arg0, 'observedAttributes')) {\n\t\t\t\tViewClass = arg0 as Type<HTMLComponent<C>>;\n\t\t\t} else {\n\t\t\t\tconst componentType = arg0 as MetadataClass<C>;\n\t\t\t\tconst defaultTagName = ReflectComponents.getMetaDate(componentType)?.selector;\n\t\t\t\tconst view = getComponentView(componentType, options?.selector ?? defaultTagName);\n\t\t\t\tif (!view) {\n\t\t\t\t\tthrow new Error(`Can't find View component for class ${componentType.name}`);\n\t\t\t\t}\n\t\t\t\tViewClass = view;\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(`Can't find View component for args, ${arg0}, ${options}`);\n\t\t}\n\t\tconst component = new ViewClass();\n\t\tconst viewRef = new EmbeddedViewRefImpl<C>(component._modelScope, [component]);\n\t\t(options?.insert != false) && this.insert(viewRef, options?.index);\n\t\treturn component as any as C;\n\t}\n\n\toverride createElement<K extends keyof HTMLElementTagNameMap>(selector: K, options?: HTMLElementOptions): HTMLElementTagNameMap[K];\n\toverride createElement<K extends keyof HTMLElementDeprecatedTagNameMap>(selector: K, options?: HTMLElementOptions): HTMLElementDeprecatedTagNameMap[K];\n\toverride createElement<C extends HTMLElement>(arg0: string | Type<C>, options?: HTMLElementOptions): C {\n\t\tlet element: C;\n\t\tif (typeof arg0 === 'string') {\n\t\t\telement = document.createElement(arg0, { is: options?.is }) as C;\n\t\t} else if (typeof arg0 === 'function') {\n\t\t\telement = new arg0();\n\t\t} else {\n\t\t\tthrow new Error(`Can't find View component for args, ${arg0}, ${options}`);\n\t\t}\n\t\tconst scope = ReactiveScopeControl.for<C>(element);\n\t\tconst viewRef = new EmbeddedViewRefImpl<C>(scope, [element]);\n\t\t(options?.insert != false) && this.insert(viewRef, options?.index);\n\t\treturn element;\n\t}\n\toverride createTextNode(data: string, options?: IndexOptions): Text {\n\t\tconst text = document.createTextNode(data);\n\t\tconst scope = ReactiveScopeControl.for<Text>(text);\n\t\tconst viewRef = new EmbeddedViewRefImpl<Text>(scope, [text]);\n\t\t(options?.insert != false) && this.insert(viewRef, options?.index);\n\t\treturn text;\n\t}\n\n\toverride updateViews(views: ViewRef[]): void {\n\t\tfor (let i = 0; i < views.length; i++) {\n\t\t\tthis.move(views[i] as EmbeddedViewRef<any>, i);\n\t\t}\n\t\twhile (this.length > views.length) {\n\t\t\tthis.remove();\n\t\t}\n\t}\n\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ibyar/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
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",
|
|
@@ -35,16 +35,16 @@
|
|
|
35
35
|
"access": "public"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@ibyar/decorators": "^2.
|
|
39
|
-
"@ibyar/elements": "^2.
|
|
40
|
-
"@ibyar/expressions": "^2.
|
|
38
|
+
"@ibyar/decorators": "^2.5.0",
|
|
39
|
+
"@ibyar/elements": "^2.5.0",
|
|
40
|
+
"@ibyar/expressions": "^2.5.0",
|
|
41
41
|
"tslib": "^2.7.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"zone.js": "~0.15.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"typescript": "^5.6.
|
|
47
|
+
"typescript": "^5.6.3"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build": "tsc --build --verbose",
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"typescript",
|
|
79
79
|
"front-end"
|
|
80
80
|
],
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "67b064cb1a4a9c11cf4bf31da7dd7cc8bb3675ce"
|
|
82
82
|
}
|
package/pipe/pipe.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReactiveScopeControl, ReadOnlyScope, ScopeSubscription } from '@ibyar/expressions';
|
|
2
2
|
import { OnDestroy } from '../component/lifecycle.js';
|
|
3
3
|
import { ChangeDetectorRef } from '../linker/change-detector-ref.js';
|
|
4
|
-
import {
|
|
4
|
+
import { Type } from '../utils/typeof.js';
|
|
5
5
|
/**
|
|
6
6
|
* Pipes are used as singleton
|
|
7
7
|
* it will be created if it needed, had no life cycle
|
|
@@ -25,13 +25,13 @@ export declare class PipeProvider extends ReadOnlyScope<{
|
|
|
25
25
|
constructor();
|
|
26
26
|
has(pipeName: string): boolean;
|
|
27
27
|
get(pipeName: string): any;
|
|
28
|
-
getClass():
|
|
28
|
+
getClass(): Type<PipeProvider>;
|
|
29
29
|
}
|
|
30
30
|
export declare class AsyncPipeProvider extends ReadOnlyScope<object> {
|
|
31
31
|
constructor();
|
|
32
32
|
has(pipeName: string): boolean;
|
|
33
|
-
get(pipeName: string):
|
|
34
|
-
getClass():
|
|
33
|
+
get(pipeName: string): Type<AsyncPipeTransform<any, any>> | undefined;
|
|
34
|
+
getClass(): Type<AsyncPipeProvider>;
|
|
35
35
|
}
|
|
36
36
|
export declare class AsyncPipeScope<T extends {
|
|
37
37
|
[key: string]: AsyncPipeTransform<any, any>;
|
|
@@ -41,9 +41,9 @@ export declare class AsyncPipeScope<T extends {
|
|
|
41
41
|
}>(): AsyncPipeScope<P>;
|
|
42
42
|
private wrapper;
|
|
43
43
|
constructor();
|
|
44
|
-
set(propertyKey: keyof T, pipeClass:
|
|
44
|
+
set(propertyKey: keyof T, pipeClass: Type<AsyncPipeTransform<any, any>>, receiver?: any): boolean;
|
|
45
45
|
get(propertyKey: keyof T): any;
|
|
46
46
|
unsubscribe(propertyKey: keyof T, subscription?: ScopeSubscription<T>): void;
|
|
47
|
-
getClass():
|
|
47
|
+
getClass(): Type<AsyncPipeScope<T>>;
|
|
48
48
|
}
|
|
49
49
|
//# sourceMappingURL=pipe.d.ts.map
|
package/pipe/pipe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../../src/core/pipe/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,kCAAkC,CAAC;AAE9F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pipe.d.ts","sourceRoot":"","sources":["../../../src/core/pipe/pipe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,kCAAkC,CAAC;AAE9F,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IAClC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACvC;AAED,8BAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS;IAC3E,SAAS,CAAC,iBAAiB,EAAE,iBAAiB;gBAApC,iBAAiB,EAAE,iBAAiB;IAC1D,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAC/C,QAAQ,CAAC,SAAS,IAAI,IAAI;CAC1B;AAED,wBAAgB,eAAe,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAEpG;AAED,qBAAa,YAAa,SAAQ,aAAa,CAAC;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;CAAE,CAAC;;IAIhF,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAO9B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IAc1B,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC;CAG9B;AAED,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,MAAM,CAAC;;IAI3D,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS;IAOrE,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC;CAGnC;AAED,qBAAa,cAAc,CAAC,CAAC,SAAS;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,CAAE,SAAQ,oBAAoB,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KAAE,KAAK,cAAc,CAAC,CAAC,CAAC;IAGjG,OAAO,CAAC,OAAO,CAAmC;;IAIzC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,OAAO;IAWjG,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,GAAG,GAAG;IAG9B,WAAW,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAK9E,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;CAGnC"}
|
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;IACjB;IAAtB,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,CAAC;YAC3B,OAAO,IAAI,CAAC;QACb,CAAC;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,CAAC;YACzC,OAAO,aAAa,CAAC;QACtB,CAAC;QACD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAA0B,QAAQ,CAAC,CAAC;QACjF,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACpD,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;QACtB,CAAC;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,CAAC;YAC3B,OAAO,OAAO,CAAC,UAAU,CAAC;QAC3B,CAAC;QACD,OAAO;IACR,CAAC;IACD,QAAQ;QACP,OAAO,iBAAiB,CAAC;IAC1B,CAAC;CACD;AAED,MAAM,OAAO,cAA0E,SAAQ,oBAAuB;IACrH,MAAM,CAAC,UAAU;QAChB,OAAO,IAAI,cAAc,EAAE,CAAC;IAC7B,CAAC;IACO,OAAO,GAAgC,EAAE,CAAC;IAClD;QACC,KAAK,CAAC,EAAO,CAAC,CAAC;IAChB,CAAC;IACQ,GAAG,CAAC,WAAoB,EAAE,
|
|
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 { Type } 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(): Type<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): Type<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(): Type<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: Type<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(): Type<AsyncPipeScope<T>> {\n\t\treturn AsyncPipeScope;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ReactiveNode, Signal, SignalScope } from '@ibyar/expressions';
|
|
2
|
+
declare class SignalScopeFactory {
|
|
3
|
+
private scopes;
|
|
4
|
+
private effectState;
|
|
5
|
+
push(scope: SignalScope): void;
|
|
6
|
+
pop(scop: SignalScope): void;
|
|
7
|
+
signal<T, S extends typeof Signal<T>>(initValue?: T, signalType?: S): InstanceType<S>;
|
|
8
|
+
signalFn<T, S extends typeof Signal<T>>(initValue: T, signalType?: S): import("@ibyar/expressions").WritableSignal<T>;
|
|
9
|
+
computed<T>(computation: () => T): import("@ibyar/expressions").Computed<T>;
|
|
10
|
+
computedFn<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
|
|
11
|
+
lazy<T>(computation: () => T): import("@ibyar/expressions").Lazy<T>;
|
|
12
|
+
lazyFn<T>(computation: () => T): import("@ibyar/expressions").ReactiveSignal<T>;
|
|
13
|
+
effect(effectFn: (onCleanup?: (clean: () => void) => void) => void): {
|
|
14
|
+
destroy(): void;
|
|
15
|
+
};
|
|
16
|
+
untracked<T>(reactiveNode: ReactiveNode<T>): T;
|
|
17
|
+
untracked<T>(nonReactiveReadsFn: () => T): T;
|
|
18
|
+
private assertValidContext;
|
|
19
|
+
private wrapEffect;
|
|
20
|
+
}
|
|
21
|
+
export declare const signalScopeFactory: SignalScopeFactory;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/core/signals/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIvE,cAAM,kBAAkB;IAEvB,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,WAAW,CAAqB;IAExC,IAAI,CAAC,KAAK,EAAE,WAAW;IAIvB,GAAG,CAAC,IAAI,EAAE,WAAW;IAMrB,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAKrF,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC;IAKpE,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC;IAIhC,UAAU,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC;IAKlC,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC;IAI5B,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC;IAI9B,MAAM,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,IAAI;;;IAKlE,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9C,SAAS,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,GAAG,CAAC;IAU5C,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,UAAU;CAOlB;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ReactiveNode, SignalScope } from '@ibyar/expressions';
|
|
2
|
+
class SignalScopeFactory {
|
|
3
|
+
scopes = [SignalScope.create()];
|
|
4
|
+
effectState = [];
|
|
5
|
+
push(scope) {
|
|
6
|
+
this.scopes.push(scope);
|
|
7
|
+
}
|
|
8
|
+
pop(scop) {
|
|
9
|
+
if (this.scopes.pop() !== scop) {
|
|
10
|
+
throw new Error('expect scope is not matching');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
signal(initValue, signalType) {
|
|
14
|
+
this.assertValidContext();
|
|
15
|
+
return this.scopes.at(-1).createSignal(initValue, signalType);
|
|
16
|
+
}
|
|
17
|
+
signalFn(initValue, signalType) {
|
|
18
|
+
this.assertValidContext();
|
|
19
|
+
return this.scopes.at(-1).createSignalFn(initValue, signalType);
|
|
20
|
+
}
|
|
21
|
+
computed(computation) {
|
|
22
|
+
this.assertValidContext();
|
|
23
|
+
return this.scopes.at(-1).createComputed(computation);
|
|
24
|
+
}
|
|
25
|
+
computedFn(computation) {
|
|
26
|
+
this.assertValidContext();
|
|
27
|
+
return this.scopes.at(-1).createComputedFn(computation);
|
|
28
|
+
}
|
|
29
|
+
lazy(computation) {
|
|
30
|
+
this.assertValidContext();
|
|
31
|
+
return this.scopes.at(-1).createLazy(computation);
|
|
32
|
+
}
|
|
33
|
+
lazyFn(computation) {
|
|
34
|
+
this.assertValidContext();
|
|
35
|
+
return this.scopes.at(-1).createLazyFn(computation);
|
|
36
|
+
}
|
|
37
|
+
effect(effectFn) {
|
|
38
|
+
this.assertValidContext();
|
|
39
|
+
const scope = this.scopes.at(-1);
|
|
40
|
+
return scope.createEffect(this.wrapEffect(scope, effectFn));
|
|
41
|
+
}
|
|
42
|
+
untracked(nonReactiveReads) {
|
|
43
|
+
const scope = this.effectState.at(-1);
|
|
44
|
+
scope?.untrack();
|
|
45
|
+
const value = nonReactiveReads instanceof ReactiveNode
|
|
46
|
+
? nonReactiveReads.get()
|
|
47
|
+
: nonReactiveReads();
|
|
48
|
+
scope?.track();
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
assertValidContext() {
|
|
52
|
+
if (this.scopes.length <= 0) {
|
|
53
|
+
throw new Error('Create a Signal, Computed and Effect is only allowed in class constructor.');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
wrapEffect(scope, effectFn) {
|
|
57
|
+
return (onCleanup) => {
|
|
58
|
+
this.effectState.push(scope);
|
|
59
|
+
effectFn(onCleanup);
|
|
60
|
+
this.effectState.pop();
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export const signalScopeFactory = new SignalScopeFactory();
|
|
65
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/core/signals/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIvE,MAAM,kBAAkB;IAEf,MAAM,GAAkB,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,WAAW,GAAkB,EAAE,CAAC;IAExC,IAAI,CAAC,KAAkB;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,IAAiB;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAED,MAAM,CAAgC,SAAa,EAAE,UAAc;QAClE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAED,QAAQ,CAAgC,SAAY,EAAE,UAAc;QACnE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,cAAc,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,QAAQ,CAAI,WAAoB;QAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IACD,UAAU,CAAI,WAAoB;QACjC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAI,WAAoB;QAC3B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,CAAI,WAAoB;QAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,CAAC,QAA2D;QACjE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QAClC,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;IAGD,SAAS,CAAI,gBAA6C;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,EAAE,OAAO,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,gBAAgB,YAAY,YAAY;YACrD,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE;YACxB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtB,KAAK,EAAE,KAAK,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACd,CAAC;IACO,kBAAkB;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAC/F,CAAC;IACF,CAAC;IACO,UAAU,CAAI,KAAkB,EAAE,QAAkB;QAC3D,OAAO,CAAC,SAAS,EAAE,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,QAAQ,CAAC,SAAS,CAAC,CAAC;YACpB,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC,CAAC;IACH,CAAC;CACD;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC","sourcesContent":["import { ReactiveNode, Signal, SignalScope } from '@ibyar/expressions';\n\ntype EffectFn = (onCleanup?: (clean: () => void) => void) => void;\n\nclass SignalScopeFactory {\n\n\tprivate scopes: SignalScope[] = [SignalScope.create()];\n\tprivate effectState: SignalScope[] = [];\n\n\tpush(scope: SignalScope) {\n\t\tthis.scopes.push(scope);\n\t}\n\n\tpop(scop: SignalScope) {\n\t\tif (this.scopes.pop() !== scop) {\n\t\t\tthrow new Error('expect scope is not matching');\n\t\t}\n\t}\n\n\tsignal<T, S extends typeof Signal<T>>(initValue?: T, signalType?: S): InstanceType<S> {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createSignal(initValue, signalType);\n\t}\n\n\tsignalFn<T, S extends typeof Signal<T>>(initValue: T, signalType?: S) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createSignalFn(initValue, signalType);\n\t}\n\n\tcomputed<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createComputed(computation);\n\t}\n\tcomputedFn<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createComputedFn(computation);\n\t}\n\n\tlazy<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createLazy(computation);\n\t}\n\tlazyFn<T>(computation: () => T) {\n\t\tthis.assertValidContext();\n\t\treturn this.scopes.at(-1)!.createLazyFn(computation);\n\t}\n\teffect(effectFn: (onCleanup?: (clean: () => void) => void) => void) {\n\t\tthis.assertValidContext();\n\t\tconst scope = this.scopes.at(-1)!;\n\t\treturn scope.createEffect(this.wrapEffect(scope, effectFn));\n\t}\n\tuntracked<T>(reactiveNode: ReactiveNode<T>): T;\n\tuntracked<T>(nonReactiveReadsFn: () => T): T;\n\tuntracked<T>(nonReactiveReads: (() => T) | ReactiveNode<T>): T {\n\t\tconst scope = this.effectState.at(-1);\n\t\tscope?.untrack();\n\t\tconst value = nonReactiveReads instanceof ReactiveNode\n\t\t\t? nonReactiveReads.get()\n\t\t\t: nonReactiveReads();\n\t\tscope?.track();\n\t\treturn value;\n\t}\n\tprivate assertValidContext(): void {\n\t\tif (this.scopes.length <= 0) {\n\t\t\tthrow new Error('Create a Signal, Computed and Effect is only allowed in class constructor.');\n\t\t}\n\t}\n\tprivate wrapEffect<T>(scope: SignalScope, effectFn: EffectFn): EffectFn {\n\t\treturn (onCleanup) => {\n\t\t\tthis.effectState.push(scope);\n\t\t\teffectFn(onCleanup);\n\t\t\tthis.effectState.pop();\n\t\t};\n\t}\n}\n\nexport const signalScopeFactory = new SignalScopeFactory();\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ReactiveSignal } from '@ibyar/expressions';
|
|
2
|
+
import { OutputEventEmitter, OutputEventOptions } from '../component/events.js';
|
|
3
|
+
export interface InputOptions<T, TransformT> {
|
|
4
|
+
alias?: string;
|
|
5
|
+
transform?: (v: TransformT) => T;
|
|
6
|
+
}
|
|
7
|
+
export type InputOptionsWithoutTransform<T> = Omit<InputOptions<T, T>, 'transform'> & {
|
|
8
|
+
transform?: undefined;
|
|
9
|
+
};
|
|
10
|
+
export type InputOptionsWithTransform<T, TransformT> = Required<Pick<InputOptions<T, TransformT>, 'transform'>> & InputOptions<T, TransformT>;
|
|
11
|
+
export interface InputSignalWithTransform<T, TransformT> extends ReactiveSignal<T> {
|
|
12
|
+
}
|
|
13
|
+
export interface InputSignal<T, TransformT = T> extends InputSignalWithTransform<T, TransformT> {
|
|
14
|
+
}
|
|
15
|
+
export declare function input<T>(): InputSignal<T>;
|
|
16
|
+
export declare function input<T>(initialValue: T, opts?: InputOptionsWithoutTransform<T>): InputSignal<T>;
|
|
17
|
+
export declare function input<T, TransformT = T>(initialValue: T, opts: InputOptionsWithTransform<T, TransformT>): InputSignalWithTransform<T, TransformT>;
|
|
18
|
+
export declare namespace input {
|
|
19
|
+
var required: {
|
|
20
|
+
<T>(): InputSignal<T>;
|
|
21
|
+
<T>(opts?: InputOptionsWithoutTransform<T>): InputSignal<T>;
|
|
22
|
+
<T, TransformT = T>(opts: InputOptionsWithTransform<T, TransformT>): InputSignalWithTransform<T, TransformT>;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare function output<T>(opts?: OutputEventOptions): OutputEventEmitter<T>;
|
|
26
|
+
//# sourceMappingURL=initializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initializer.d.ts","sourceRoot":"","sources":["../../../src/core/signals/initializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGhF,MAAM,WAAW,YAAY,CAAC,CAAC,EAAE,UAAU;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,4BAA4B,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,CAAA;AAE/G,MAAM,MAAM,yBAAyB,CAAC,CAAC,EAAE,UAAU,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAE9I,MAAM,WAAW,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;CAEjF;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAE,SAAQ,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAC;CAE9F;AAED,wBAAgB,KAAK,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,wBAAgB,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,4BAA4B,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAClG,wBAAgB,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,yBAAyB,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;yBAAnI,KAAK;;SAUH,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC;SACpB,CAAC,SAAS,4BAA4B,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;SAC1D,CAAC,EAAE,UAAU,YAAY,yBAAyB,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,wBAAwB,CAAC,CAAC,EAAE,UAAU,CAAC;;;AAQ7H,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAE1E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { signalScopeFactory } from './factory.js';
|
|
2
|
+
import { OutputEventEmitter } from '../component/events.js';
|
|
3
|
+
export function input(initialValue, opts) {
|
|
4
|
+
const signal = signalScopeFactory.signal(initialValue);
|
|
5
|
+
if (opts?.transform) {
|
|
6
|
+
const setOriginal = signal.set;
|
|
7
|
+
signal.set = (value) => setOriginal(opts.transform(value));
|
|
8
|
+
}
|
|
9
|
+
;
|
|
10
|
+
return signal;
|
|
11
|
+
}
|
|
12
|
+
function required(opts) {
|
|
13
|
+
return input(undefined, opts);
|
|
14
|
+
}
|
|
15
|
+
input.required = required;
|
|
16
|
+
export function output(opts) {
|
|
17
|
+
return new OutputEventEmitter(opts);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=initializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initializer.js","sourceRoot":"","sources":["../../../src/core/signals/initializer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAsB,MAAM,wBAAwB,CAAC;AAuBhF,MAAM,UAAU,KAAK,CAAoB,YAAgB,EAAE,IAAkC;IAC5F,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACvD,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC;QAC/B,MAAM,CAAC,GAAG,GAAG,CAAC,KAAQ,EAAQ,EAAE,CAAC,WAAW,CAAC,IAAK,CAAC,SAAU,CAAC,KAA0B,CAAC,CAAC,CAAC;IAC5F,CAAC;IAAA,CAAC;IACF,OAAO,MAAoC,CAAC;AAC7C,CAAC;AAKD,SAAS,QAAQ,CAAoB,IAAkC;IACtE,OAAO,KAAK,CAAC,SAAc,EAAE,IAAgD,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAG1B,MAAM,UAAU,MAAM,CAAI,IAAyB;IAClD,OAAO,IAAI,kBAAkB,CAAI,IAAI,CAAC,CAAC;AACxC,CAAC","sourcesContent":["import { ReactiveSignal } from '@ibyar/expressions';\nimport { signalScopeFactory } from './factory.js';\nimport { OutputEventEmitter, OutputEventOptions } from '../component/events.js';\n\n\nexport interface InputOptions<T, TransformT> {\n\talias?: string;\n\ttransform?: (v: TransformT) => T;\n}\n\nexport type InputOptionsWithoutTransform<T> = Omit<InputOptions<T, T>, 'transform'> & { transform?: undefined }\n\nexport type InputOptionsWithTransform<T, TransformT> = Required<Pick<InputOptions<T, TransformT>, 'transform'>> & InputOptions<T, TransformT>;\n\nexport interface InputSignalWithTransform<T, TransformT> extends ReactiveSignal<T> {\n\n}\n\nexport interface InputSignal<T, TransformT = T> extends InputSignalWithTransform<T, TransformT> {\n\n}\n\nexport function input<T>(): InputSignal<T>;\nexport function input<T>(initialValue: T, opts?: InputOptionsWithoutTransform<T>): InputSignal<T>;\nexport function input<T, TransformT = T>(initialValue: T, opts: InputOptionsWithTransform<T, TransformT>): InputSignalWithTransform<T, TransformT>;\nexport function input<T, TransformT = T>(initialValue?: T, opts?: InputOptions<T, TransformT>): InputSignal<T, TransformT> {\n\tconst signal = signalScopeFactory.signal(initialValue);\n\tif (opts?.transform) {\n\t\tconst setOriginal = signal.set;\n\t\tsignal.set = (value: T): void => setOriginal(opts!.transform!(value as any as TransformT));\n\t};\n\treturn signal as InputSignal<T, TransformT>;\n}\n\nfunction required<T>(): InputSignal<T>;\nfunction required<T>(opts?: InputOptionsWithoutTransform<T>): InputSignal<T>;\nfunction required<T, TransformT = T>(opts: InputOptionsWithTransform<T, TransformT>): InputSignalWithTransform<T, TransformT>;\nfunction required<T, TransformT = T>(opts?: InputOptions<T, TransformT>): InputSignal<T, TransformT> {\n\treturn input(undefined as T, opts as InputOptionsWithTransform<T, TransformT>);\n}\n\ninput.required = required;\n\n\nexport function output<T>(opts?: OutputEventOptions): OutputEventEmitter<T> {\n\treturn new OutputEventEmitter<T>(opts);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/core/signals/input.ts"],"names":[],"mappings":""}
|
package/signals/input.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/core/signals/input.ts"],"names":[],"mappings":"","sourcesContent":[""]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { CallExpression, ExpressionNode, MemberExpression, VisitorCallback } from '@ibyar/expressions';
|
|
2
|
+
type Key = 'input' | 'output' | 'model' | 'formValue' | 'view' | 'viewChild' | 'viewChildren' | 'signal' | 'computed' | 'lazy' | 'signalNode' | 'computedNode' | 'lazyNode';
|
|
3
|
+
type RuntimeOption = {
|
|
4
|
+
name: Key;
|
|
5
|
+
alias: string;
|
|
6
|
+
};
|
|
7
|
+
export type SignalRuntimeMetadata = {
|
|
8
|
+
signal: Key;
|
|
9
|
+
necessity?: 'required';
|
|
10
|
+
options: Array<RuntimeOption>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* scan model class for (inputs and output) property definitions with value by function call.
|
|
14
|
+
*/
|
|
15
|
+
export declare class RuntimeClassMetadata {
|
|
16
|
+
static INSTANCE: RuntimeClassMetadata;
|
|
17
|
+
static scanMetadata(modelClass: Function): SignalRuntimeMetadata[];
|
|
18
|
+
static scanClass(modelClass: Function, visitorCallback: VisitorCallback): void;
|
|
19
|
+
scan(modelClass: Function): SignalRuntimeMetadata[];
|
|
20
|
+
/**
|
|
21
|
+
* scan class `Function` for properties and methods definitions.
|
|
22
|
+
* @param modelClass
|
|
23
|
+
* @param visitorCallback
|
|
24
|
+
*/
|
|
25
|
+
scanModelClass(modelClass: Function, visitorCallback: VisitorCallback): void;
|
|
26
|
+
getClassScript(modelClass: Function): string;
|
|
27
|
+
getClassList(modelClass: Function): Function[];
|
|
28
|
+
newModelInitializers(): SignalRuntimeMetadata[];
|
|
29
|
+
createVisitor(properties: SignalRuntimeMetadata[]): VisitorCallback;
|
|
30
|
+
getAliasNameFromOptionArgument(call: CallExpression): string | undefined;
|
|
31
|
+
isProperty(node: ExpressionNode, property: string): boolean;
|
|
32
|
+
isCallOf(call: CallExpression, objectName: string, propertyName?: string): boolean;
|
|
33
|
+
isMemberOf(member: MemberExpression, objectName: string, propertyName: string): boolean;
|
|
34
|
+
hasMemberOfThis(member: ExpressionNode): Key | false;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/core/signals/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,cAAc,EAAE,cAAc,EAG9B,gBAAgB,EAEA,eAAe,EAC/B,MAAM,oBAAoB,CAAC;AAE5B,KAAK,GAAG,GACL,OAAO,GACP,QAAQ,GACR,OAAO,GACP,WAAW,GACX,MAAM,GACN,WAAW,GACX,cAAc,GACd,QAAQ,GACR,UAAU,GACV,MAAM,GACN,YAAY,GACZ,cAAc,GACd,UAAU,CAAC;AAEd,KAAK,aAAa,GAAG;IACpB,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;CAC9B,CAAC;AAEF;;GAEG;AACH,qBAAa,oBAAoB;IAEhC,MAAM,CAAC,QAAQ,uBAA8B;IAE7C,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ;IAIxC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe;IAIvE,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,qBAAqB,EAAE;IAOnD;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe;IAMrE,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM;IAI5C,YAAY,CAAC,UAAU,EAAE,QAAQ,GAAG,QAAQ,EAAE;IAS9C,oBAAoB,IAAI,qBAAqB,EAAE;IAqB/C,aAAa,CAAC,UAAU,EAAE,qBAAqB,EAAE,GAAG,eAAe;IA4CnE,8BAA8B,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAgBxE,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK3D,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO;IAUlF,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAcvF,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,GAAG,GAAG,KAAK;CAgBpD"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { CallExpression, expressionVisitor, Identifier, JavaScriptParser, Literal, MemberExpression, Property, ThisExpression } from '@ibyar/expressions';
|
|
2
|
+
/**
|
|
3
|
+
* scan model class for (inputs and output) property definitions with value by function call.
|
|
4
|
+
*/
|
|
5
|
+
export class RuntimeClassMetadata {
|
|
6
|
+
static INSTANCE = new RuntimeClassMetadata();
|
|
7
|
+
static scanMetadata(modelClass) {
|
|
8
|
+
return RuntimeClassMetadata.INSTANCE.scan(modelClass);
|
|
9
|
+
}
|
|
10
|
+
static scanClass(modelClass, visitorCallback) {
|
|
11
|
+
return RuntimeClassMetadata.INSTANCE.scanModelClass(modelClass, visitorCallback);
|
|
12
|
+
}
|
|
13
|
+
scan(modelClass) {
|
|
14
|
+
const metadata = this.newModelInitializers();
|
|
15
|
+
const visitor = this.createVisitor(metadata);
|
|
16
|
+
this.scanModelClass(modelClass, visitor);
|
|
17
|
+
return metadata;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* scan class `Function` for properties and methods definitions.
|
|
21
|
+
* @param modelClass
|
|
22
|
+
* @param visitorCallback
|
|
23
|
+
*/
|
|
24
|
+
scanModelClass(modelClass, visitorCallback) {
|
|
25
|
+
const script = this.getClassScript(modelClass);
|
|
26
|
+
const expr = JavaScriptParser.parse(script);
|
|
27
|
+
expressionVisitor.visit(expr, visitorCallback);
|
|
28
|
+
}
|
|
29
|
+
getClassScript(modelClass) {
|
|
30
|
+
return this.getClassList(modelClass).map((ref, index) => `const Class${index} = ${ref};`).join('\n');
|
|
31
|
+
;
|
|
32
|
+
}
|
|
33
|
+
getClassList(modelClass) {
|
|
34
|
+
const list = [];
|
|
35
|
+
while (modelClass instanceof Function) {
|
|
36
|
+
list.push(modelClass);
|
|
37
|
+
modelClass = Object.getPrototypeOf(modelClass);
|
|
38
|
+
}
|
|
39
|
+
return list.reverse();
|
|
40
|
+
}
|
|
41
|
+
newModelInitializers() {
|
|
42
|
+
return [
|
|
43
|
+
{ signal: 'input', options: [] },
|
|
44
|
+
{ signal: 'input', necessity: 'required', options: [] },
|
|
45
|
+
{ signal: 'output', options: [] },
|
|
46
|
+
{ signal: 'model', options: [] },
|
|
47
|
+
{ signal: 'model', necessity: 'required', options: [] },
|
|
48
|
+
{ signal: 'signal', options: [] },
|
|
49
|
+
{ signal: 'computed', options: [] },
|
|
50
|
+
{ signal: 'lazy', options: [] },
|
|
51
|
+
{ signal: 'formValue', options: [] },
|
|
52
|
+
{ signal: 'view', options: [] },
|
|
53
|
+
{ signal: 'viewChild', options: [] },
|
|
54
|
+
{ signal: 'viewChild', necessity: 'required', options: [] },
|
|
55
|
+
{ signal: 'viewChildren', options: [] },
|
|
56
|
+
{ signal: 'signalNode', options: [] },
|
|
57
|
+
{ signal: 'computedNode', options: [] },
|
|
58
|
+
{ signal: 'lazyNode', options: [] },
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
createVisitor(properties) {
|
|
62
|
+
return (expression, type) => {
|
|
63
|
+
if (type === 'PropertyDefinition') {
|
|
64
|
+
const definition = expression;
|
|
65
|
+
const key = definition.getKey();
|
|
66
|
+
const value = definition.getValue();
|
|
67
|
+
if (definition.isPrivate()
|
|
68
|
+
|| definition.isStatic()
|
|
69
|
+
|| !(key instanceof Identifier || key instanceof Literal)
|
|
70
|
+
|| !(value instanceof CallExpression)) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const property = properties.find(property => this.isCallOf(value, property.signal, property.necessity));
|
|
74
|
+
if (property) {
|
|
75
|
+
const name = key instanceof Identifier ? key.getName() : key.getValue();
|
|
76
|
+
const alias = this.getAliasNameFromOptionArgument(value);
|
|
77
|
+
property.options.push({ name, alias: alias ?? name });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else if (type === 'MethodDefinition') {
|
|
81
|
+
const definition = expression;
|
|
82
|
+
if (definition.getKind() !== 'constructor') {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
expressionVisitor.visit(definition.getValue(), (exp, expType) => {
|
|
86
|
+
if (expType === 'AssignmentExpression') {
|
|
87
|
+
const assignment = exp;
|
|
88
|
+
const right = assignment.getRight();
|
|
89
|
+
if (right instanceof CallExpression) {
|
|
90
|
+
const property = properties.find(property => this.isCallOf(right, property.signal, property.necessity));
|
|
91
|
+
if (!property) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const name = this.hasMemberOfThis(assignment.getLeft());
|
|
95
|
+
if (name) {
|
|
96
|
+
const alias = this.getAliasNameFromOptionArgument(right);
|
|
97
|
+
property.options.push({ name, alias: alias ?? name });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
getAliasNameFromOptionArgument(call) {
|
|
106
|
+
let alias;
|
|
107
|
+
call.getArguments()?.forEach(argument => expressionVisitor.visit(argument, (exp, type, control) => {
|
|
108
|
+
if (exp instanceof Property) {
|
|
109
|
+
if (this.isProperty(exp.getKey(), 'alias')) {
|
|
110
|
+
const value = exp.getValue();
|
|
111
|
+
if (value instanceof Literal) {
|
|
112
|
+
alias = value.getValue();
|
|
113
|
+
control.abort();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}));
|
|
118
|
+
return alias;
|
|
119
|
+
}
|
|
120
|
+
isProperty(node, property) {
|
|
121
|
+
return (node instanceof Identifier && node.getName() === property)
|
|
122
|
+
|| (node instanceof Literal && node.getValue() === property);
|
|
123
|
+
}
|
|
124
|
+
isCallOf(call, objectName, propertyName) {
|
|
125
|
+
const callee = call.getCallee();
|
|
126
|
+
if (propertyName && callee instanceof MemberExpression) {
|
|
127
|
+
return this.isMemberOf(callee, objectName, propertyName);
|
|
128
|
+
}
|
|
129
|
+
else if (!propertyName && callee instanceof Identifier && callee.getName() === objectName) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
isMemberOf(member, objectName, propertyName) {
|
|
135
|
+
const object = member.getObject();
|
|
136
|
+
const property = member.getProperty();
|
|
137
|
+
if (object instanceof Identifier && object.getName() === objectName) {
|
|
138
|
+
if (property instanceof Identifier && property.getName() === propertyName) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
else if (property instanceof Literal && property.getValue() === propertyName) {
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
hasMemberOfThis(member) {
|
|
149
|
+
if (!(member instanceof MemberExpression)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
const object = member.getObject();
|
|
153
|
+
const property = member.getProperty();
|
|
154
|
+
if (object instanceof ThisExpression) {
|
|
155
|
+
if (property instanceof Identifier) {
|
|
156
|
+
return property.getName();
|
|
157
|
+
}
|
|
158
|
+
else if (property instanceof Literal) {
|
|
159
|
+
return property.getValue();
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=runtime.js.map
|