@ng-atomic/core 0.0.1
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/README.md +7 -0
- package/esm2022/index.mjs +2 -0
- package/esm2022/lib/action-store.mjs +21 -0
- package/esm2022/lib/action.mjs +7 -0
- package/esm2022/lib/component-store.mjs +51 -0
- package/esm2022/lib/effect.mjs +21 -0
- package/esm2022/lib/index.mjs +6 -0
- package/esm2022/lib/injectable-component.mjs +82 -0
- package/esm2022/ng-atomic-core.mjs +5 -0
- package/fesm2022/ng-atomic-core.mjs +181 -0
- package/fesm2022/ng-atomic-core.mjs.map +1 -0
- package/index.d.ts +1 -0
- package/lib/action-store.d.ts +11 -0
- package/lib/action.d.ts +11 -0
- package/lib/component-store.d.ts +20 -0
- package/lib/effect.d.ts +22 -0
- package/lib/index.d.ts +5 -0
- package/lib/injectable-component.d.ts +31 -0
- package/package.json +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './lib';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvcmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWInIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { EventEmitter, Injectable } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class NgAtomicRootActionStore {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.actions$ = new EventEmitter();
|
|
6
|
+
this.actions$.subscribe(action => this.log(action, 'root'));
|
|
7
|
+
}
|
|
8
|
+
dispatch(action) {
|
|
9
|
+
this.actions$.emit(action);
|
|
10
|
+
}
|
|
11
|
+
log(action, scope = 'default') {
|
|
12
|
+
console.debug(action, scope);
|
|
13
|
+
}
|
|
14
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicRootActionStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
15
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicRootActionStore, providedIn: 'root' }); }
|
|
16
|
+
}
|
|
17
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicRootActionStore, decorators: [{
|
|
18
|
+
type: Injectable,
|
|
19
|
+
args: [{ providedIn: 'root' }]
|
|
20
|
+
}], ctorParameters: function () { return []; } });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb3JlL3NyYy9saWIvYWN0aW9uLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUl6RCxNQUFNLE9BQU8sdUJBQXVCO0lBR2xDO1FBRlMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFHN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsR0FBRyxDQUFDLE1BQWMsRUFBRSxRQUFnQixTQUFTO1FBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7K0dBYlUsdUJBQXVCO21IQUF2Qix1QkFBdUIsY0FEWCxNQUFNOzs0RkFDbEIsdUJBQXVCO2tCQURuQyxVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIjtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTmdBdG9taWNSb290QWN0aW9uU3RvcmUge1xuICByZWFkb25seSBhY3Rpb25zJCA9IG5ldyBFdmVudEVtaXR0ZXI8QWN0aW9uPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYWN0aW9ucyQuc3Vic2NyaWJlKGFjdGlvbiA9PiB0aGlzLmxvZyhhY3Rpb24sICdyb290JykpO1xuICB9XG5cbiAgZGlzcGF0Y2goYWN0aW9uOiBBY3Rpb24pIHtcbiAgICB0aGlzLmFjdGlvbnMkLmVtaXQoYWN0aW9uKTtcbiAgfVxuXG4gIGxvZyhhY3Rpb246IEFjdGlvbiwgc2NvcGU6IHN0cmluZyA9ICdkZWZhdWx0Jykge1xuICAgIGNvbnNvbGUuZGVidWcoYWN0aW9uLCBzY29wZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export function resolveActions(actions, ...args) {
|
|
2
|
+
if (typeof actions === 'function') {
|
|
3
|
+
return actions(...args);
|
|
4
|
+
}
|
|
5
|
+
return actions;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb3JlL3NyYy9saWIvYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sVUFBVSxjQUFjLENBQUMsT0FBZ0IsRUFBRSxHQUFHLElBQVc7SUFDN0QsSUFBSSxPQUFPLE9BQU8sS0FBSyxVQUFVLEVBQUU7UUFDakMsT0FBTyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUN6QjtJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEFjdGlvbjxUID0gYW55PiB7XG4gIGlkOiBzdHJpbmc7XG4gIHBheWxvYWQ/OiBUO1xuICBuYW1lPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IEFjdGlvbjxUPltdLFxufVxuXG5leHBvcnQgdHlwZSBBY3Rpb25zID0gKCguLi5hcmdzOiBhbnlbXSkgPT4gQWN0aW9uW10pIHwgQWN0aW9uW107XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQWN0aW9ucyhhY3Rpb25zOiBBY3Rpb25zLCAuLi5hcmdzOiBhbnlbXSkge1xuICBpZiAodHlwZW9mIGFjdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYWN0aW9ucyguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gYWN0aW9ucztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { DestroyRef, Directive, EventEmitter, inject } from "@angular/core";
|
|
2
|
+
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
3
|
+
import { InjectableComponent } from "./injectable-component";
|
|
4
|
+
import { EffectMap } from "./effect";
|
|
5
|
+
import { NgAtomicRootActionStore } from "./action-store";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class NgAtomicComponentStore {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.action = new EventEmitter();
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicComponentStore, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
12
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NgAtomicComponentStore, isStandalone: true, ngImport: i0 }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicComponentStore, decorators: [{
|
|
15
|
+
type: Directive,
|
|
16
|
+
args: [{ standalone: true }]
|
|
17
|
+
}] });
|
|
18
|
+
export class NgAtomicComponent extends InjectableComponent {
|
|
19
|
+
#destroy$;
|
|
20
|
+
constructor() {
|
|
21
|
+
super();
|
|
22
|
+
this._effectMap = new EffectMap();
|
|
23
|
+
this.root = inject(NgAtomicRootActionStore);
|
|
24
|
+
this.#destroy$ = inject(DestroyRef);
|
|
25
|
+
this.root.actions$.pipe(takeUntilDestroyed(this.#destroy$)).subscribe(action => this.#effect(action, 'root'));
|
|
26
|
+
}
|
|
27
|
+
dispatch(action, scope = 'default') {
|
|
28
|
+
this.root.log(action, scope);
|
|
29
|
+
const effect = this.#effect(action, scope);
|
|
30
|
+
if (scope === 'root' && (!effect?.props || effect?.props?.dispatch)) {
|
|
31
|
+
this.root.actions$.emit(action);
|
|
32
|
+
}
|
|
33
|
+
else if (!effect?.props || effect?.props?.dispatch) {
|
|
34
|
+
this.action.emit(action);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
#effect(action, scope = 'default') {
|
|
38
|
+
const effect = (this._effectMap ?? new EffectMap()).get(action.id, scope);
|
|
39
|
+
if (effect?.key && effect?.props?.scope === scope) {
|
|
40
|
+
this[effect?.key](effect.props.accessor(action));
|
|
41
|
+
}
|
|
42
|
+
return effect;
|
|
43
|
+
}
|
|
44
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
45
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NgAtomicComponent, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
|
|
46
|
+
}
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicComponent, decorators: [{
|
|
48
|
+
type: Directive,
|
|
49
|
+
args: [{ standalone: true }]
|
|
50
|
+
}], ctorParameters: function () { return []; } });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb3JlL3NyYy9saWIvY29tcG9uZW50LXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHekQsTUFBTSxPQUFPLHNCQUFzQjtJQURuQztRQUVXLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBQzlDOytHQUZZLHNCQUFzQjttR0FBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7QUFNL0IsTUFBTSxPQUFPLGlCQUFrQixTQUFRLG1CQUFtQjtJQUd4RCxTQUFTLENBQXNCO0lBRS9CO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFMQSxlQUFVLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUM3QixTQUFJLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUk3QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3JCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDbkMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxRQUFRLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxTQUFTO1FBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRTtZQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDakM7YUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNwRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBYyxFQUFFLEtBQUssR0FBRyxTQUFTO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUUsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUNoRCxJQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQTVCVSxpQkFBaUI7bUdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsU0FBUzttQkFBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiO1xuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCI7XG5pbXBvcnQgeyBJbmplY3RhYmxlQ29tcG9uZW50IH0gZnJvbSBcIi4vaW5qZWN0YWJsZS1jb21wb25lbnRcIjtcbmltcG9ydCB7IEVmZmVjdE1hcCB9IGZyb20gXCIuL2VmZmVjdFwiO1xuaW1wb3J0IHsgTmdBdG9taWNSb290QWN0aW9uU3RvcmUgfSBmcm9tIFwiLi9hY3Rpb24tc3RvcmVcIjtcblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ0F0b21pY0NvbXBvbmVudFN0b3JlIHtcbiAgcmVhZG9ubHkgYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb24+KCk7XG59XG5cbkBEaXJlY3RpdmUoeyBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmdBdG9taWNDb21wb25lbnQgZXh0ZW5kcyBJbmplY3RhYmxlQ29tcG9uZW50IHtcbiAgcHJvdGVjdGVkIF9lZmZlY3RNYXAgPSBuZXcgRWZmZWN0TWFwKCk7XG4gIHByb3RlY3RlZCByb290ID0gaW5qZWN0KE5nQXRvbWljUm9vdEFjdGlvblN0b3JlKTtcbiAgI2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5yb290LmFjdGlvbnMkLnBpcGUoXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveSQpLFxuICAgICkuc3Vic2NyaWJlKGFjdGlvbiA9PiB0aGlzLiNlZmZlY3QoYWN0aW9uLCAncm9vdCcpKTtcbiAgfVxuXG4gIGRpc3BhdGNoKGFjdGlvbjogQWN0aW9uLCBzY29wZSA9ICdkZWZhdWx0Jykge1xuICAgIHRoaXMucm9vdC5sb2coYWN0aW9uLCBzY29wZSk7XG4gICAgY29uc3QgZWZmZWN0ID0gdGhpcy4jZWZmZWN0KGFjdGlvbiwgc2NvcGUpO1xuICAgIGlmIChzY29wZSA9PT0gJ3Jvb3QnICYmICghZWZmZWN0Py5wcm9wcyB8fCBlZmZlY3Q/LnByb3BzPy5kaXNwYXRjaCkpIHtcbiAgICAgIHRoaXMucm9vdC5hY3Rpb25zJC5lbWl0KGFjdGlvbik7XG4gICAgfSBlbHNlIGlmICghZWZmZWN0Py5wcm9wcyB8fCBlZmZlY3Q/LnByb3BzPy5kaXNwYXRjaCkge1xuICAgICAgdGhpcy5hY3Rpb24uZW1pdChhY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gICNlZmZlY3QoYWN0aW9uOiBBY3Rpb24sIHNjb3BlID0gJ2RlZmF1bHQnKSB7XG4gICAgY29uc3QgZWZmZWN0ID0gKHRoaXMuX2VmZmVjdE1hcCA/PyBuZXcgRWZmZWN0TWFwKCkpLmdldChhY3Rpb24uaWQsIHNjb3BlKTtcbiAgICBpZiAoZWZmZWN0Py5rZXkgJiYgZWZmZWN0Py5wcm9wcz8uc2NvcGUgPT09IHNjb3BlKSB7XG4gICAgICAodGhpcyBhcyBhbnkpW2VmZmVjdD8ua2V5XShlZmZlY3QucHJvcHMuYWNjZXNzb3IoYWN0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiBlZmZlY3Q7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export class EffectMap extends Map {
|
|
2
|
+
get(key, scope = 'default') {
|
|
3
|
+
return super.get(this.makeKey(key, scope));
|
|
4
|
+
}
|
|
5
|
+
set(key, value) {
|
|
6
|
+
return super.set(this.makeKey(key, value.props.scope), value);
|
|
7
|
+
}
|
|
8
|
+
has(key, scope = 'default') {
|
|
9
|
+
return super.has(this.makeKey(key, scope));
|
|
10
|
+
}
|
|
11
|
+
makeKey(key, scope = 'default') {
|
|
12
|
+
return `[${scope}]#${key}`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function Effect(id, { dispatch = false, scope = 'default', accessor = (action) => action.payload, } = {}) {
|
|
16
|
+
return function (target, propertyKey, descriptor) {
|
|
17
|
+
target['_effectMap'] ??= new EffectMap();
|
|
18
|
+
target['_effectMap'].set(id, { key: propertyKey, props: { dispatch, scope, accessor } });
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG5nLWF0b21pYy9jb3JlL3NyYy9saWIvZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE1BQU0sT0FBTyxTQUFVLFNBQVEsR0FBOEM7SUFDbEUsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFLLEdBQUcsU0FBUztRQUN6QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRVEsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUEyQztRQUNuRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRVEsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFLLEdBQUcsU0FBUztRQUN6QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRU8sT0FBTyxDQUFDLEdBQVcsRUFBRSxLQUFLLEdBQUcsU0FBUztRQUM1QyxPQUFPLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsRUFBVSxFQUFFLEVBQ2pDLFFBQVEsR0FBRyxLQUFLLEVBQ2hCLEtBQUssR0FBRyxTQUFTLEVBQ2pCLFFBQVEsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sTUFDckIsRUFBRTtJQUMxQixPQUFPLFVBQVUsTUFBVyxFQUFFLFdBQW1CLEVBQUUsVUFBOEI7UUFDL0UsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBFZmZlY3RQcm9wcyB7XG4gIGRpc3BhdGNoOiBib29sZWFuO1xuICBzY29wZTogc3RyaW5nO1xuICBhY2Nlc3NvcjogPFQgPSBhbnk+KGFjdGlvbjogQWN0aW9uKSA9PiBUO1xufVxuXG5leHBvcnQgY2xhc3MgRWZmZWN0TWFwIGV4dGVuZHMgTWFwPHN0cmluZywge2tleTogc3RyaW5nLCBwcm9wczogRWZmZWN0UHJvcHN9PiB7XG4gIG92ZXJyaWRlIGdldChrZXk6IHN0cmluZywgc2NvcGUgPSAnZGVmYXVsdCcpOiB7IGtleTogc3RyaW5nOyBwcm9wczogRWZmZWN0UHJvcHM7IH0ge1xuICAgIHJldHVybiBzdXBlci5nZXQodGhpcy5tYWtlS2V5KGtleSwgc2NvcGUpKSE7IFxuICB9XG5cbiAgb3ZlcnJpZGUgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogeyBrZXk6IHN0cmluZzsgcHJvcHM6IEVmZmVjdFByb3BzOyB9KTogdGhpcyB7XG4gICAgcmV0dXJuIHN1cGVyLnNldCh0aGlzLm1ha2VLZXkoa2V5LCB2YWx1ZS5wcm9wcy5zY29wZSksIHZhbHVlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGhhcyhrZXk6IHN0cmluZywgc2NvcGUgPSAnZGVmYXVsdCcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3VwZXIuaGFzKHRoaXMubWFrZUtleShrZXksIHNjb3BlKSk7XG4gIH1cblxuICBwcml2YXRlIG1ha2VLZXkoa2V5OiBzdHJpbmcsIHNjb3BlID0gJ2RlZmF1bHQnKSB7XG4gICAgcmV0dXJuIGBbJHtzY29wZX1dIyR7a2V5fWA7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVmZmVjdChpZDogc3RyaW5nLCB7XG4gIGRpc3BhdGNoID0gZmFsc2UsXG4gIHNjb3BlID0gJ2RlZmF1bHQnLFxuICBhY2Nlc3NvciA9IChhY3Rpb246IEFjdGlvbikgPT4gYWN0aW9uLnBheWxvYWQsXG59OiBQYXJ0aWFsPEVmZmVjdFByb3BzPiA9IHt9KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgIHRhcmdldFsnX2VmZmVjdE1hcCddID8/PSBuZXcgRWZmZWN0TWFwKCk7XG4gICAgdGFyZ2V0WydfZWZmZWN0TWFwJ10uc2V0KGlkLCB7a2V5OiBwcm9wZXJ0eUtleSwgcHJvcHM6IHtkaXNwYXRjaCwgc2NvcGUsIGFjY2Vzc29yfX0pO1xuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './action-store';
|
|
2
|
+
export * from './action';
|
|
3
|
+
export * from './effect';
|
|
4
|
+
export * from './component-store';
|
|
5
|
+
export * from './injectable-component';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvcmUvc3JjL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uLXN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vZWZmZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50LXN0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vaW5qZWN0YWJsZS1jb21wb25lbnQnO1xuIl19
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { DestroyRef, Directive, ElementRef, EventEmitter, Injector, Input, Output, ViewContainerRef, inject } from "@angular/core";
|
|
2
|
+
import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export function provideComponent(abstract, typeOrFactory) {
|
|
5
|
+
async function loadComponentType() {
|
|
6
|
+
if (typeof typeOrFactory === 'function' && !typeOrFactory.prototype) {
|
|
7
|
+
return await typeOrFactory();
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
return typeOrFactory;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
;
|
|
14
|
+
return { provide: abstract['TOKEN'], useValue: loadComponentType };
|
|
15
|
+
}
|
|
16
|
+
export function getInputs(type, meta = 'ɵcmp') {
|
|
17
|
+
return Object.entries(type[meta]['inputs']);
|
|
18
|
+
}
|
|
19
|
+
export function getInputsByComponentRef(cmp) {
|
|
20
|
+
return getInputs(cmp.instance.constructor);
|
|
21
|
+
}
|
|
22
|
+
export function getOutputsByInstance(cmp) {
|
|
23
|
+
return Object.entries(cmp.instance.constructor['ɵcmp']['outputs']);
|
|
24
|
+
}
|
|
25
|
+
export class InjectableComponent {
|
|
26
|
+
constructor() {
|
|
27
|
+
this.#outlet = inject(ViewContainerRef);
|
|
28
|
+
this.#injector = inject(Injector);
|
|
29
|
+
this.#destroy$ = inject(DestroyRef);
|
|
30
|
+
this.#el = inject(ElementRef);
|
|
31
|
+
this.injectable = false;
|
|
32
|
+
this.action = new EventEmitter();
|
|
33
|
+
}
|
|
34
|
+
#outlet;
|
|
35
|
+
#injector;
|
|
36
|
+
#destroy$;
|
|
37
|
+
#el;
|
|
38
|
+
#setAttribute(component) {
|
|
39
|
+
const hostElement = component.hostView.rootNodes[0];
|
|
40
|
+
const attributes = this.#el.nativeElement.attributes;
|
|
41
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
42
|
+
const attr = attributes.item(i);
|
|
43
|
+
if (attr.name.startsWith('_ngcontent')) {
|
|
44
|
+
hostElement.setAttribute(attr.name, attr.value);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
#bindInputs(component) {
|
|
49
|
+
Object.entries(this.constructor['ɵdir']['inputs']).forEach(([key, value]) => {
|
|
50
|
+
if (key === 'injectable')
|
|
51
|
+
return;
|
|
52
|
+
component.setInput(key, this[value]);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
#bindOutputs(component) {
|
|
56
|
+
getOutputsByInstance(component).forEach(([alias, attr]) => {
|
|
57
|
+
component.instance[attr].pipe(takeUntilDestroyed(this.#destroy$)).subscribe((value) => this[attr].emit(value));
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
ngOnInit() {
|
|
61
|
+
if (this.injectable) {
|
|
62
|
+
this.#injector.get(this.constructor['TOKEN'])().then(type => {
|
|
63
|
+
const ref = this.#outlet.createComponent(type);
|
|
64
|
+
this.#bindInputs(ref);
|
|
65
|
+
this.#bindOutputs(ref);
|
|
66
|
+
this.#setAttribute(ref);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InjectableComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
71
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.12", type: InjectableComponent, isStandalone: true, inputs: { injectable: ["injectable", "injectable", (value) => value === '' ? true : value] }, outputs: { action: "action" }, ngImport: i0 }); }
|
|
72
|
+
}
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InjectableComponent, decorators: [{
|
|
74
|
+
type: Directive,
|
|
75
|
+
args: [{ standalone: true }]
|
|
76
|
+
}], propDecorators: { injectable: [{
|
|
77
|
+
type: Input,
|
|
78
|
+
args: [{ transform: (value) => value === '' ? true : value }]
|
|
79
|
+
}], action: [{
|
|
80
|
+
type: Output
|
|
81
|
+
}] } });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZS1jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvcmUvc3JjL2xpYi9pbmplY3RhYmxlLWNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFtQixZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVEsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hLLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQVFoRSxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLFFBQW1CLEVBQ25CLGFBQTZDO0lBRTdDLEtBQUssVUFBVSxpQkFBaUI7UUFDOUIsSUFBSSxPQUFPLGFBQWEsS0FBSyxVQUFVLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFO1lBQ25FLE9BQU8sTUFBTyxhQUFtQyxFQUFFLENBQUM7U0FDckQ7YUFBTTtZQUNMLE9BQU8sYUFBMkIsQ0FBQztTQUNwQztJQUNILENBQUM7SUFBQSxDQUFDO0lBQ0YsT0FBTyxFQUFFLE9BQU8sRUFBRyxRQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0FBQzlFLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFJLElBQWEsRUFBRSxPQUF3QixNQUFNO0lBQ3hFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBRSxJQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFVLEdBQW9CO0lBQ25FLE9BQU8sU0FBUyxDQUFFLEdBQUcsQ0FBQyxRQUFnQixDQUFDLFdBQXNCLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsTUFBTSxV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QUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzsrR0F6Q21CLG1CQUFtQjttR0FBbkIsbUJBQW1CLHlFQTJDcEIsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSzs7NEZBM0MxQyxtQkFBbUI7a0JBRHhDLFNBQVM7bUJBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFOzhCQTZDckIsVUFBVTtzQkFEakIsS0FBSzt1QkFBQyxFQUFDLFNBQVMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUM7Z0JBSXJELE1BQU07c0JBRGYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgRGVzdHJveVJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPdXRwdXQsIFR5cGUsIFZpZXdDb250YWluZXJSZWYsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiO1xuaW1wb3J0IHsgTmdBdG9taWNDb21wb25lbnRTdG9yZSB9IGZyb20gXCIuL2NvbXBvbmVudC1zdG9yZVwiO1xuXG5leHBvcnQgdHlwZSBUeXBlRmFjdG9yeUFzeW5jPFQ+ID0gKCkgPT4gUHJvbWlzZTxUeXBlPFQ+PjtcblxuZXhwb3J0IHR5cGUgVHlwZUZhY3Rvcnk8VD4gPSAoKSA9PiAoVHlwZTxUPiB8IFByb21pc2U8VHlwZTxUPj4pO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvbXBvbmVudDxBQlMgPSBhbnksIElNUEwgPSBhbnk+KFxuICBhYnN0cmFjdDogVHlwZTxBQlM+LFxuICB0eXBlT3JGYWN0b3J5OiBUeXBlPElNUEw+IHwgVHlwZUZhY3Rvcnk8SU1QTD4sXG4pIHtcbiAgYXN5bmMgZnVuY3Rpb24gbG9hZENvbXBvbmVudFR5cGUoKTogUHJvbWlzZTxUeXBlPElNUEw+PiB7XG4gICAgaWYgKHR5cGVvZiB0eXBlT3JGYWN0b3J5ID09PSAnZnVuY3Rpb24nICYmICF0eXBlT3JGYWN0b3J5LnByb3RvdHlwZSkge1xuICAgICAgcmV0dXJuIGF3YWl0ICh0eXBlT3JGYWN0b3J5IGFzIFR5cGVGYWN0b3J5PElNUEw+KSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHlwZU9yRmFjdG9yeSBhcyBUeXBlPElNUEw+O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHsgcHJvdmlkZTogKGFic3RyYWN0IGFzIGFueSlbJ1RPS0VOJ10sIHVzZVZhbHVlOiBsb2FkQ29tcG9uZW50VHlwZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5wdXRzPFQ+KHR5cGU6IFR5cGU8VD4sIG1ldGE6ICfJtWNtcCcgfCAnybVkaXInID0gJ8m1Y21wJyk6IFtzdHJpbmcsIHN0cmluZ11bXSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcygodHlwZSBhcyBhbnkpW21ldGFdWydpbnB1dHMnXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dHNCeUNvbXBvbmVudFJlZjxUID0gYW55PihjbXA6IENvbXBvbmVudFJlZjxUPik6IFtzdHJpbmcsIHN0cmluZ11bXSB7XG4gIHJldHVybiBnZXRJbnB1dHMoKGNtcC5pbnN0YW5jZSBhcyBhbnkpLmNvbnN0cnVjdG9yIGFzIFR5cGU8VD4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0cHV0c0J5SW5zdGFuY2U8VCA9IGFueT4oY21wOiBDb21wb25lbnRSZWY8VD4pOiBbc3RyaW5nLCBzdHJpbmddW10ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoKGNtcC5pbnN0YW5jZSBhcyBhbnkpLmNvbnN0cnVjdG9yWyfJtWNtcCddWydvdXRwdXRzJ10pO1xufVxuXG5ARGlyZWN0aXZlKHsgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEluamVjdGFibGVDb21wb25lbnQ8VCBleHRlbmRzIE5nQXRvbWljQ29tcG9uZW50U3RvcmUgPSBhbnk+IHtcbiAgcmVhZG9ubHkgI291dGxldCA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcmVhZG9ubHkgI2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgcmVhZG9ubHkgI2Rlc3Ryb3kkID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICByZWFkb25seSAjZWwgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgI3NldEF0dHJpYnV0ZShjb21wb25lbnQ6IENvbXBvbmVudFJlZjxUPikge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gKGNvbXBvbmVudC5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCA9IHRoaXMuI2VsLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSkhO1xuICAgICAgaWYgKGF0dHIubmFtZS5zdGFydHNXaXRoKCdfbmdjb250ZW50JykpIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgI2JpbmRJbnB1dHMoY29tcG9uZW50OiBDb21wb25lbnRSZWY8VD4pIHtcbiAgICBPYmplY3QuZW50cmllczxzdHJpbmc+KCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSlbJ8m1ZGlyJ11bJ2lucHV0cyddKS5mb3JFYWNoKChba2V5LCB2YWx1ZV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICdpbmplY3RhYmxlJykgcmV0dXJuO1xuICAgICAgY29tcG9uZW50LnNldElucHV0KGtleSwgKHRoaXMgYXMgYW55KVt2YWx1ZV0pO1xuICAgIH0pO1xuICB9XG5cbiAgI2JpbmRPdXRwdXRzKGNvbXBvbmVudDogQ29tcG9uZW50UmVmPFQ+KSB7XG4gICAgZ2V0T3V0cHV0c0J5SW5zdGFuY2UoY29tcG9uZW50KS5mb3JFYWNoKChbYWxpYXMsIGF0dHJdOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAoY29tcG9uZW50Lmluc3RhbmNlIGFzIGFueSlbYXR0cl0ucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3kkKVxuICAgICAgKS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+ICh0aGlzIGFzIGFueSlbYXR0cl0uZW1pdCh2YWx1ZSkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuaW5qZWN0YWJsZSkge1xuICAgICAgdGhpcy4jaW5qZWN0b3IuZ2V0PFR5cGVGYWN0b3J5QXN5bmM8VD4+KCh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSlbJ1RPS0VOJ10pKCkudGhlbih0eXBlID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy4jb3V0bGV0LmNyZWF0ZUNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgdGhpcy4jYmluZElucHV0cyhyZWYpO1xuICAgICAgICB0aGlzLiNiaW5kT3V0cHV0cyhyZWYpO1xuICAgICAgICB0aGlzLiNzZXRBdHRyaWJ1dGUocmVmKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCh7dHJhbnNmb3JtOiAodmFsdWU6IGFueSkgPT4gdmFsdWUgPT09ICcnID8gdHJ1ZSA6IHZhbHVlfSlcbiAgcHJpdmF0ZSBpbmplY3RhYmxlID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpXG4gIHByb3RlY3RlZCBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbj4oKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYXRvbWljLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbmctYXRvbWljL2NvcmUvc3JjL25nLWF0b21pYy1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, Injectable, inject, ViewContainerRef, Injector, DestroyRef, ElementRef, Directive, Input, Output } from '@angular/core';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
|
|
5
|
+
class NgAtomicRootActionStore {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.actions$ = new EventEmitter();
|
|
8
|
+
this.actions$.subscribe(action => this.log(action, 'root'));
|
|
9
|
+
}
|
|
10
|
+
dispatch(action) {
|
|
11
|
+
this.actions$.emit(action);
|
|
12
|
+
}
|
|
13
|
+
log(action, scope = 'default') {
|
|
14
|
+
console.debug(action, scope);
|
|
15
|
+
}
|
|
16
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicRootActionStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
17
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicRootActionStore, providedIn: 'root' }); }
|
|
18
|
+
}
|
|
19
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicRootActionStore, decorators: [{
|
|
20
|
+
type: Injectable,
|
|
21
|
+
args: [{ providedIn: 'root' }]
|
|
22
|
+
}], ctorParameters: function () { return []; } });
|
|
23
|
+
|
|
24
|
+
function resolveActions(actions, ...args) {
|
|
25
|
+
if (typeof actions === 'function') {
|
|
26
|
+
return actions(...args);
|
|
27
|
+
}
|
|
28
|
+
return actions;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
class EffectMap extends Map {
|
|
32
|
+
get(key, scope = 'default') {
|
|
33
|
+
return super.get(this.makeKey(key, scope));
|
|
34
|
+
}
|
|
35
|
+
set(key, value) {
|
|
36
|
+
return super.set(this.makeKey(key, value.props.scope), value);
|
|
37
|
+
}
|
|
38
|
+
has(key, scope = 'default') {
|
|
39
|
+
return super.has(this.makeKey(key, scope));
|
|
40
|
+
}
|
|
41
|
+
makeKey(key, scope = 'default') {
|
|
42
|
+
return `[${scope}]#${key}`;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function Effect(id, { dispatch = false, scope = 'default', accessor = (action) => action.payload, } = {}) {
|
|
46
|
+
return function (target, propertyKey, descriptor) {
|
|
47
|
+
target['_effectMap'] ??= new EffectMap();
|
|
48
|
+
target['_effectMap'].set(id, { key: propertyKey, props: { dispatch, scope, accessor } });
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function provideComponent(abstract, typeOrFactory) {
|
|
53
|
+
async function loadComponentType() {
|
|
54
|
+
if (typeof typeOrFactory === 'function' && !typeOrFactory.prototype) {
|
|
55
|
+
return await typeOrFactory();
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
return typeOrFactory;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
;
|
|
62
|
+
return { provide: abstract['TOKEN'], useValue: loadComponentType };
|
|
63
|
+
}
|
|
64
|
+
function getInputs(type, meta = 'ɵcmp') {
|
|
65
|
+
return Object.entries(type[meta]['inputs']);
|
|
66
|
+
}
|
|
67
|
+
function getInputsByComponentRef(cmp) {
|
|
68
|
+
return getInputs(cmp.instance.constructor);
|
|
69
|
+
}
|
|
70
|
+
function getOutputsByInstance(cmp) {
|
|
71
|
+
return Object.entries(cmp.instance.constructor['ɵcmp']['outputs']);
|
|
72
|
+
}
|
|
73
|
+
class InjectableComponent {
|
|
74
|
+
constructor() {
|
|
75
|
+
this.#outlet = inject(ViewContainerRef);
|
|
76
|
+
this.#injector = inject(Injector);
|
|
77
|
+
this.#destroy$ = inject(DestroyRef);
|
|
78
|
+
this.#el = inject(ElementRef);
|
|
79
|
+
this.injectable = false;
|
|
80
|
+
this.action = new EventEmitter();
|
|
81
|
+
}
|
|
82
|
+
#outlet;
|
|
83
|
+
#injector;
|
|
84
|
+
#destroy$;
|
|
85
|
+
#el;
|
|
86
|
+
#setAttribute(component) {
|
|
87
|
+
const hostElement = component.hostView.rootNodes[0];
|
|
88
|
+
const attributes = this.#el.nativeElement.attributes;
|
|
89
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
90
|
+
const attr = attributes.item(i);
|
|
91
|
+
if (attr.name.startsWith('_ngcontent')) {
|
|
92
|
+
hostElement.setAttribute(attr.name, attr.value);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
#bindInputs(component) {
|
|
97
|
+
Object.entries(this.constructor['ɵdir']['inputs']).forEach(([key, value]) => {
|
|
98
|
+
if (key === 'injectable')
|
|
99
|
+
return;
|
|
100
|
+
component.setInput(key, this[value]);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
#bindOutputs(component) {
|
|
104
|
+
getOutputsByInstance(component).forEach(([alias, attr]) => {
|
|
105
|
+
component.instance[attr].pipe(takeUntilDestroyed(this.#destroy$)).subscribe((value) => this[attr].emit(value));
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
ngOnInit() {
|
|
109
|
+
if (this.injectable) {
|
|
110
|
+
this.#injector.get(this.constructor['TOKEN'])().then(type => {
|
|
111
|
+
const ref = this.#outlet.createComponent(type);
|
|
112
|
+
this.#bindInputs(ref);
|
|
113
|
+
this.#bindOutputs(ref);
|
|
114
|
+
this.#setAttribute(ref);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InjectableComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
119
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "16.2.12", type: InjectableComponent, isStandalone: true, inputs: { injectable: ["injectable", "injectable", (value) => value === '' ? true : value] }, outputs: { action: "action" }, ngImport: i0 }); }
|
|
120
|
+
}
|
|
121
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InjectableComponent, decorators: [{
|
|
122
|
+
type: Directive,
|
|
123
|
+
args: [{ standalone: true }]
|
|
124
|
+
}], propDecorators: { injectable: [{
|
|
125
|
+
type: Input,
|
|
126
|
+
args: [{ transform: (value) => value === '' ? true : value }]
|
|
127
|
+
}], action: [{
|
|
128
|
+
type: Output
|
|
129
|
+
}] } });
|
|
130
|
+
|
|
131
|
+
class NgAtomicComponentStore {
|
|
132
|
+
constructor() {
|
|
133
|
+
this.action = new EventEmitter();
|
|
134
|
+
}
|
|
135
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicComponentStore, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
136
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NgAtomicComponentStore, isStandalone: true, ngImport: i0 }); }
|
|
137
|
+
}
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicComponentStore, decorators: [{
|
|
139
|
+
type: Directive,
|
|
140
|
+
args: [{ standalone: true }]
|
|
141
|
+
}] });
|
|
142
|
+
class NgAtomicComponent extends InjectableComponent {
|
|
143
|
+
#destroy$;
|
|
144
|
+
constructor() {
|
|
145
|
+
super();
|
|
146
|
+
this._effectMap = new EffectMap();
|
|
147
|
+
this.root = inject(NgAtomicRootActionStore);
|
|
148
|
+
this.#destroy$ = inject(DestroyRef);
|
|
149
|
+
this.root.actions$.pipe(takeUntilDestroyed(this.#destroy$)).subscribe(action => this.#effect(action, 'root'));
|
|
150
|
+
}
|
|
151
|
+
dispatch(action, scope = 'default') {
|
|
152
|
+
this.root.log(action, scope);
|
|
153
|
+
const effect = this.#effect(action, scope);
|
|
154
|
+
if (scope === 'root' && (!effect?.props || effect?.props?.dispatch)) {
|
|
155
|
+
this.root.actions$.emit(action);
|
|
156
|
+
}
|
|
157
|
+
else if (!effect?.props || effect?.props?.dispatch) {
|
|
158
|
+
this.action.emit(action);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
#effect(action, scope = 'default') {
|
|
162
|
+
const effect = (this._effectMap ?? new EffectMap()).get(action.id, scope);
|
|
163
|
+
if (effect?.key && effect?.props?.scope === scope) {
|
|
164
|
+
this[effect?.key](effect.props.accessor(action));
|
|
165
|
+
}
|
|
166
|
+
return effect;
|
|
167
|
+
}
|
|
168
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
169
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: NgAtomicComponent, isStandalone: true, usesInheritance: true, ngImport: i0 }); }
|
|
170
|
+
}
|
|
171
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgAtomicComponent, decorators: [{
|
|
172
|
+
type: Directive,
|
|
173
|
+
args: [{ standalone: true }]
|
|
174
|
+
}], ctorParameters: function () { return []; } });
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Generated bundle index. Do not edit.
|
|
178
|
+
*/
|
|
179
|
+
|
|
180
|
+
export { Effect, EffectMap, InjectableComponent, NgAtomicComponent, NgAtomicComponentStore, NgAtomicRootActionStore, getInputs, getInputsByComponentRef, getOutputsByInstance, provideComponent, resolveActions };
|
|
181
|
+
//# sourceMappingURL=ng-atomic-core.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ng-atomic-core.mjs","sources":["../../../../../packages/@ng-atomic/core/src/lib/action-store.ts","../../../../../packages/@ng-atomic/core/src/lib/action.ts","../../../../../packages/@ng-atomic/core/src/lib/effect.ts","../../../../../packages/@ng-atomic/core/src/lib/injectable-component.ts","../../../../../packages/@ng-atomic/core/src/lib/component-store.ts","../../../../../packages/@ng-atomic/core/src/ng-atomic-core.ts"],"sourcesContent":["import { EventEmitter, Injectable } from \"@angular/core\";\nimport { Action } from \"./action\";\n\n@Injectable({providedIn: 'root'})\nexport class NgAtomicRootActionStore {\n readonly actions$ = new EventEmitter<Action>();\n\n constructor() {\n this.actions$.subscribe(action => this.log(action, 'root'));\n }\n\n dispatch(action: Action) {\n this.actions$.emit(action);\n }\n\n log(action: Action, scope: string = 'default') {\n console.debug(action, scope);\n }\n}\n","export interface Action<T = any> {\n id: string;\n payload?: T;\n name?: string;\n icon?: string;\n color?: string;\n disabled?: boolean;\n children?: Action<T>[],\n}\n\nexport type Actions = ((...args: any[]) => Action[]) | Action[];\n\nexport function resolveActions(actions: Actions, ...args: any[]) {\n if (typeof actions === 'function') {\n return actions(...args);\n }\n return actions;\n}\n","import { Action } from \"./action\";\n\nexport interface EffectProps {\n dispatch: boolean;\n scope: string;\n accessor: <T = any>(action: Action) => T;\n}\n\nexport class EffectMap extends Map<string, {key: string, props: EffectProps}> {\n override get(key: string, scope = 'default'): { key: string; props: EffectProps; } {\n return super.get(this.makeKey(key, scope))!; \n }\n\n override set(key: string, value: { key: string; props: EffectProps; }): this {\n return super.set(this.makeKey(key, value.props.scope), value);\n }\n\n override has(key: string, scope = 'default'): boolean {\n return super.has(this.makeKey(key, scope));\n }\n\n private makeKey(key: string, scope = 'default') {\n return `[${scope}]#${key}`;\n }\n}\n\nexport function Effect(id: string, {\n dispatch = false,\n scope = 'default',\n accessor = (action: Action) => action.payload,\n}: Partial<EffectProps> = {}) {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n target['_effectMap'] ??= new EffectMap();\n target['_effectMap'].set(id, {key: propertyKey, props: {dispatch, scope, accessor}});\n };\n}\n","import { ComponentRef, DestroyRef, Directive, ElementRef, EmbeddedViewRef, EventEmitter, Injector, Input, Output, Type, ViewContainerRef, inject } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Action } from \"./action\";\nimport { NgAtomicComponentStore } from \"./component-store\";\n\nexport type TypeFactoryAsync<T> = () => Promise<Type<T>>;\n\nexport type TypeFactory<T> = () => (Type<T> | Promise<Type<T>>);\n\nexport function provideComponent<ABS = any, IMPL = any>(\n abstract: Type<ABS>,\n typeOrFactory: Type<IMPL> | TypeFactory<IMPL>,\n) {\n async function loadComponentType(): Promise<Type<IMPL>> {\n if (typeof typeOrFactory === 'function' && !typeOrFactory.prototype) {\n return await (typeOrFactory as TypeFactory<IMPL>)();\n } else {\n return typeOrFactory as Type<IMPL>;\n }\n };\n return { provide: (abstract as any)['TOKEN'], useValue: loadComponentType };\n}\n\nexport function getInputs<T>(type: Type<T>, meta: 'ɵcmp' | 'ɵdir' = 'ɵcmp'): [string, string][] {\n return Object.entries((type as any)[meta]['inputs']);\n}\n\nexport function getInputsByComponentRef<T = any>(cmp: ComponentRef<T>): [string, string][] {\n return getInputs((cmp.instance as any).constructor as Type<T>);\n}\n\nexport function getOutputsByInstance<T = any>(cmp: ComponentRef<T>): [string, string][] {\n return Object.entries((cmp.instance as any).constructor['ɵcmp']['outputs']);\n}\n\n@Directive({ standalone: true })\nexport abstract class InjectableComponent<T extends NgAtomicComponentStore = any> {\n readonly #outlet = inject(ViewContainerRef);\n readonly #injector = inject(Injector);\n readonly #destroy$ = inject(DestroyRef);\n readonly #el = inject(ElementRef);\n\n #setAttribute(component: ComponentRef<T>) {\n const hostElement = (component.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n const attributes: NamedNodeMap = this.#el.nativeElement.attributes;\n for (let i = 0; i < attributes.length; i++) {\n const attr = attributes.item(i)!;\n if (attr.name.startsWith('_ngcontent')) {\n hostElement.setAttribute(attr.name, attr.value);\n }\n }\n }\n\n #bindInputs(component: ComponentRef<T>) {\n Object.entries<string>((this.constructor as any)['ɵdir']['inputs']).forEach(([key, value]: [string, string]) => {\n if (key === 'injectable') return;\n component.setInput(key, (this as any)[value]);\n });\n }\n\n #bindOutputs(component: ComponentRef<T>) {\n getOutputsByInstance(component).forEach(([alias, attr]: [string, string]) => {\n (component.instance as any)[attr].pipe(\n takeUntilDestroyed(this.#destroy$)\n ).subscribe((value: any) => (this as any)[attr].emit(value));\n });\n }\n\n ngOnInit() {\n if (this.injectable) {\n this.#injector.get<TypeFactoryAsync<T>>((this.constructor as any)['TOKEN'])().then(type => {\n const ref = this.#outlet.createComponent(type);\n this.#bindInputs(ref);\n this.#bindOutputs(ref);\n this.#setAttribute(ref);\n });\n }\n }\n\n @Input({transform: (value: any) => value === '' ? true : value})\n private injectable = false;\n\n @Output()\n protected action = new EventEmitter<Action>();\n}\n","import { DestroyRef, Directive, EventEmitter, inject } from \"@angular/core\";\nimport { takeUntilDestroyed } from \"@angular/core/rxjs-interop\";\nimport { Action } from \"./action\";\nimport { InjectableComponent } from \"./injectable-component\";\nimport { EffectMap } from \"./effect\";\nimport { NgAtomicRootActionStore } from \"./action-store\";\n\n@Directive({ standalone: true })\nexport class NgAtomicComponentStore {\n readonly action = new EventEmitter<Action>();\n}\n\n@Directive({ standalone: true })\nexport class NgAtomicComponent extends InjectableComponent {\n protected _effectMap = new EffectMap();\n protected root = inject(NgAtomicRootActionStore);\n #destroy$ = inject(DestroyRef);\n\n constructor() {\n super();\n this.root.actions$.pipe(\n takeUntilDestroyed(this.#destroy$),\n ).subscribe(action => this.#effect(action, 'root'));\n }\n\n dispatch(action: Action, scope = 'default') {\n this.root.log(action, scope);\n const effect = this.#effect(action, scope);\n if (scope === 'root' && (!effect?.props || effect?.props?.dispatch)) {\n this.root.actions$.emit(action);\n } else if (!effect?.props || effect?.props?.dispatch) {\n this.action.emit(action);\n }\n }\n\n #effect(action: Action, scope = 'default') {\n const effect = (this._effectMap ?? new EffectMap()).get(action.id, scope);\n if (effect?.key && effect?.props?.scope === scope) {\n (this as any)[effect?.key](effect.props.accessor(action));\n }\n return effect;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EventEmitter } from "@angular/core";
|
|
2
|
+
import { Action } from "./action";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class NgAtomicRootActionStore {
|
|
5
|
+
readonly actions$: EventEmitter<Action<any>>;
|
|
6
|
+
constructor();
|
|
7
|
+
dispatch(action: Action): void;
|
|
8
|
+
log(action: Action, scope?: string): void;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgAtomicRootActionStore, never>;
|
|
10
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<NgAtomicRootActionStore>;
|
|
11
|
+
}
|
package/lib/action.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Action<T = any> {
|
|
2
|
+
id: string;
|
|
3
|
+
payload?: T;
|
|
4
|
+
name?: string;
|
|
5
|
+
icon?: string;
|
|
6
|
+
color?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
children?: Action<T>[];
|
|
9
|
+
}
|
|
10
|
+
export type Actions = ((...args: any[]) => Action[]) | Action[];
|
|
11
|
+
export declare function resolveActions(actions: Actions, ...args: any[]): Action<any>[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EventEmitter } from "@angular/core";
|
|
2
|
+
import { Action } from "./action";
|
|
3
|
+
import { InjectableComponent } from "./injectable-component";
|
|
4
|
+
import { EffectMap } from "./effect";
|
|
5
|
+
import { NgAtomicRootActionStore } from "./action-store";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class NgAtomicComponentStore {
|
|
8
|
+
readonly action: EventEmitter<Action<any>>;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgAtomicComponentStore, never>;
|
|
10
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgAtomicComponentStore, never, never, {}, {}, never, never, true, never>;
|
|
11
|
+
}
|
|
12
|
+
export declare class NgAtomicComponent extends InjectableComponent {
|
|
13
|
+
#private;
|
|
14
|
+
protected _effectMap: EffectMap;
|
|
15
|
+
protected root: NgAtomicRootActionStore;
|
|
16
|
+
constructor();
|
|
17
|
+
dispatch(action: Action, scope?: string): void;
|
|
18
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgAtomicComponent, never>;
|
|
19
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgAtomicComponent, never, never, {}, {}, never, never, true, never>;
|
|
20
|
+
}
|
package/lib/effect.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Action } from "./action";
|
|
2
|
+
export interface EffectProps {
|
|
3
|
+
dispatch: boolean;
|
|
4
|
+
scope: string;
|
|
5
|
+
accessor: <T = any>(action: Action) => T;
|
|
6
|
+
}
|
|
7
|
+
export declare class EffectMap extends Map<string, {
|
|
8
|
+
key: string;
|
|
9
|
+
props: EffectProps;
|
|
10
|
+
}> {
|
|
11
|
+
get(key: string, scope?: string): {
|
|
12
|
+
key: string;
|
|
13
|
+
props: EffectProps;
|
|
14
|
+
};
|
|
15
|
+
set(key: string, value: {
|
|
16
|
+
key: string;
|
|
17
|
+
props: EffectProps;
|
|
18
|
+
}): this;
|
|
19
|
+
has(key: string, scope?: string): boolean;
|
|
20
|
+
private makeKey;
|
|
21
|
+
}
|
|
22
|
+
export declare function Effect(id: string, { dispatch, scope, accessor, }?: Partial<EffectProps>): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ComponentRef, EventEmitter, Type } from "@angular/core";
|
|
2
|
+
import { Action } from "./action";
|
|
3
|
+
import { NgAtomicComponentStore } from "./component-store";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export type TypeFactoryAsync<T> = () => Promise<Type<T>>;
|
|
6
|
+
export type TypeFactory<T> = () => (Type<T> | Promise<Type<T>>);
|
|
7
|
+
export declare function provideComponent<ABS = any, IMPL = any>(abstract: Type<ABS>, typeOrFactory: Type<IMPL> | TypeFactory<IMPL>): {
|
|
8
|
+
provide: any;
|
|
9
|
+
useValue: () => Promise<Type<IMPL>>;
|
|
10
|
+
};
|
|
11
|
+
export declare function getInputs<T>(type: Type<T>, meta?: 'ɵcmp' | 'ɵdir'): [
|
|
12
|
+
string,
|
|
13
|
+
string
|
|
14
|
+
][];
|
|
15
|
+
export declare function getInputsByComponentRef<T = any>(cmp: ComponentRef<T>): [
|
|
16
|
+
string,
|
|
17
|
+
string
|
|
18
|
+
][];
|
|
19
|
+
export declare function getOutputsByInstance<T = any>(cmp: ComponentRef<T>): [
|
|
20
|
+
string,
|
|
21
|
+
string
|
|
22
|
+
][];
|
|
23
|
+
export declare abstract class InjectableComponent<T extends NgAtomicComponentStore = any> {
|
|
24
|
+
#private;
|
|
25
|
+
ngOnInit(): void;
|
|
26
|
+
private injectable;
|
|
27
|
+
protected action: EventEmitter<Action<any>>;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<InjectableComponent<any>, never>;
|
|
29
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<InjectableComponent<any>, never, never, { "injectable": { "alias": "injectable"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
|
|
30
|
+
static ngAcceptInputType_injectable: any;
|
|
31
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ng-atomic/core",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"peerDependencies": {
|
|
5
|
+
"@angular/common": "16.2.12",
|
|
6
|
+
"@angular/core": "16.2.12"
|
|
7
|
+
},
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"tslib": "^2.3.0"
|
|
10
|
+
},
|
|
11
|
+
"sideEffects": false,
|
|
12
|
+
"module": "fesm2022/ng-atomic-core.mjs",
|
|
13
|
+
"typings": "index.d.ts",
|
|
14
|
+
"exports": {
|
|
15
|
+
"./package.json": {
|
|
16
|
+
"default": "./package.json"
|
|
17
|
+
},
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./index.d.ts",
|
|
20
|
+
"esm2022": "./esm2022/ng-atomic-core.mjs",
|
|
21
|
+
"esm": "./esm2022/ng-atomic-core.mjs",
|
|
22
|
+
"default": "./fesm2022/ng-atomic-core.mjs"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|