@jscutlery/microwave 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,112 @@
1
+ # Microwave
2
+
3
+ `@jscutlery/microwave` brings simplified and performant reactivity to Angular.
4
+
5
+ # 🪄 Features
6
+
7
+ ⚡️ Less change detection: Microwave will only trigger change detection when properties change.
8
+
9
+ 😌 Less RxJS Spaghetti: Focus on your features without sacrificing performance.
10
+
11
+ 🚦 Coalescing: regroup changes and trigger change detection once per component.
12
+
13
+ ✅ Microwave is ZoneJS agnostic so it will work with or without it.
14
+
15
+ 👯‍♀️ Don't trigger useless change detections when a property's value has been set to the same value.
16
+
17
+ # Table of Contents
18
+
19
+ - [Microwave](#microwave)
20
+ - [🪄 Features](#-features)
21
+ - [Table of Contents](#table-of-contents)
22
+ - [📝 Usage](#-usage)
23
+ - [`@Microwave`](#microwave-1)
24
+ - [`@Microwave` + `watch`](#microwave--watch)
25
+ - [Change detection strategies](#change-detection-strategies)
26
+ - [Custom strategies.](#custom-strategies)
27
+ - [Upcoming features](#upcoming-features)
28
+ - [Acknowledgements](#acknowledgements)
29
+ - [Nuke it](#nuke-it)
30
+
31
+ # 📝 Usage
32
+
33
+ ## `@Microwave`
34
+
35
+ Just add the `@Microwave` decorator and let it [nuke](#nuke-it) your component!
36
+
37
+ ```ts
38
+ import { Microwave } from '@jscutlery/microwave';
39
+
40
+ @Microwave()
41
+ @Component({
42
+ template: `...`,
43
+ })
44
+ class GreetingsComponent {
45
+ /* ⚠️ Important: properties should be initialized, otherwise they won't be detected by Microwave. */
46
+ name?: string = undefined;
47
+ }
48
+ ```
49
+
50
+ ## `@Microwave` + `watch`
51
+
52
+ Watch property changes.
53
+
54
+ ```ts
55
+ @Microwave()
56
+ @Component({
57
+ template: `<h1>Welcome {{ upperCaseName }}</h1>`,
58
+ })
59
+ class GreetingsComponent {
60
+ @Input() name?: string = undefined;
61
+ upperCaseName?: string = undefined;
62
+
63
+ constructor() {
64
+ /* Note that you don't have to handle the subscription as the returned observable
65
+ * will be unsubscribed from when the component is destroyed.
66
+ * Though, if you add operators, you will have to handle subscriptions. */
67
+ watch(this, 'name').subscribe((name) => {
68
+ this.upperCaseName = name.toUpperCase();
69
+ });
70
+ }
71
+ }
72
+ ```
73
+
74
+ ## Change detection strategies
75
+
76
+ You can customize the change detection strategy using the `strategy` parameter.
77
+
78
+ ```ts
79
+ @Microwave({
80
+ strategy: asyncStrategy,
81
+ })
82
+ export class MyComponent {}
83
+ ```
84
+
85
+ Here are the current strategies.
86
+
87
+ ### Custom strategies.
88
+
89
+ You can implement your own strategy using the `Strategy<T>` signature.
90
+
91
+ | Strategy | Description |
92
+ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
93
+ | asapStrategy | This is the default strategy. It will trigger change detection independently for each component while coalescing changes and scheduling the change detection on the microtask queue. |
94
+ | asyncStrategy | Local strategy coalescing using macrotasks |
95
+ | rafStrategy | Local strategy coalescing using `requestAnimationFrame` |
96
+ | syncStrategy | Local strategy without coalescing so it will trigger change detection each time a property changes. |
97
+
98
+ ## Upcoming features
99
+
100
+ - [ ] provide multiple Microwave strategies
101
+ - [ ] `watch` multiple properties
102
+ - [ ] automatically unsubscribe even when using operators with `watch(...).pipe(...)`
103
+
104
+ # Acknowledgements
105
+
106
+ The [RxAngular](https://github.com/rx-angular/rx-angular) team for the inspiration. In fact, the first prototype was built during the creation of the RxState Marmicode Tasting video: https://youtu.be/CcQYj4V2IKw
107
+
108
+ ## Nuke it
109
+
110
+ Wordplay by [@AlyssaNicoll](https://twitter.com/AlyssaNicoll) & [@schwarty](https://twitter.com/schwarty).
111
+
112
+ Cf. Angular Air [https://youtu.be/CmspcYY6jjU](https://youtu.be/CmspcYY6jjU)
@@ -0,0 +1,3 @@
1
+ export { Microwave, watch } from './lib/microwave';
2
+ export { asapStrategy, asyncStrategy, createLocalStrategy, rafStrategy, syncStrategy, } from './lib/strategies';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taWNyb3dhdmUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUNMLFlBQVksRUFDWixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxZQUFZLEdBQ2IsTUFBTSxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFN0cmF0ZWd5LCBTdHJhdGVneURldktpdCB9IGZyb20gJy4vbGliL2RldmtpdCc7XG5leHBvcnQgeyBNaWNyb3dhdmUsIHdhdGNoIH0gZnJvbSAnLi9saWIvbWljcm93YXZlJztcbmV4cG9ydCB7XG4gIGFzYXBTdHJhdGVneSxcbiAgYXN5bmNTdHJhdGVneSxcbiAgY3JlYXRlTG9jYWxTdHJhdGVneSxcbiAgcmFmU3RyYXRlZ3ksXG4gIHN5bmNTdHJhdGVneSxcbn0gZnJvbSAnLi9saWIvc3RyYXRlZ2llcyc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNjdXRsZXJ5LW1pY3Jvd2F2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pY3Jvd2F2ZS9zcmMvanNjdXRsZXJ5LW1pY3Jvd2F2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { getEngine } from './core/engine';
2
+ import { getStrategyDevKit } from './devkit';
3
+ import { decorateComponent } from './shared/decorator';
4
+ export function applyStrategy(componentType, strategy) {
5
+ _bindComponentToEngine(componentType, {
6
+ onCreate(component) {
7
+ strategy(getStrategyDevKit(component));
8
+ },
9
+ });
10
+ }
11
+ export function _bindComponentToEngine(componentType, { onCreate }) {
12
+ decorateComponent(componentType, {
13
+ onCreate(component, changeDetectionFns) {
14
+ getEngine(component).setChangeDetectionFns(changeDetectionFns);
15
+ onCreate(component);
16
+ },
17
+ onInit(component) {
18
+ getEngine(component).markInitialized();
19
+ },
20
+ onDestroy(component) {
21
+ getEngine(component).markDestroyed();
22
+ },
23
+ onPropertyDeclare(component, property, value) {
24
+ getEngine(component).setProperty(property, value);
25
+ },
26
+ onPropertyGet(component, property) {
27
+ return getEngine(component).getProperty(property);
28
+ },
29
+ onPropertySet(component, property, value) {
30
+ getEngine(component).setProperty(property, value);
31
+ },
32
+ });
33
+ }
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taWNyb3dhdmUvc3JjL2xpYi9hcHBseS1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBWSxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sb0JBQW9CLENBQUM7QUFFekUsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsYUFBa0MsRUFDbEMsUUFBcUI7SUFFckIsc0JBQXNCLENBQUMsYUFBYSxFQUFFO1FBQ3BDLFFBQVEsQ0FBQyxTQUFTO1lBQ2hCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxhQUFrQyxFQUNsQyxFQUFFLFFBQVEsRUFBd0M7SUFFbEQsaUJBQWlCLENBQUMsYUFBYSxFQUFFO1FBQy9CLFFBQVEsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCO1lBQ3BDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQy9ELFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsTUFBTSxDQUFDLFNBQVM7WUFDZCxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUNELFNBQVMsQ0FBQyxTQUFTO1lBQ2pCLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QyxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLO1lBQzFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxhQUFhLENBQUMsU0FBUyxFQUFFLFFBQVE7WUFDL0IsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFDRCxhQUFhLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLO1lBQ3RDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi9jb3JlL2VuZ2luZSc7XG5pbXBvcnQgeyBnZXRTdHJhdGVneURldktpdCwgU3RyYXRlZ3kgfSBmcm9tICcuL2RldmtpdCc7XG5pbXBvcnQgeyBkZWNvcmF0ZUNvbXBvbmVudCwgSXZ5Q29tcG9uZW50VHlwZSB9IGZyb20gJy4vc2hhcmVkL2RlY29yYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVN0cmF0ZWd5PFQ+KFxuICBjb21wb25lbnRUeXBlOiBJdnlDb21wb25lbnRUeXBlPFQ+LFxuICBzdHJhdGVneTogU3RyYXRlZ3k8VD5cbikge1xuICBfYmluZENvbXBvbmVudFRvRW5naW5lKGNvbXBvbmVudFR5cGUsIHtcbiAgICBvbkNyZWF0ZShjb21wb25lbnQpIHtcbiAgICAgIHN0cmF0ZWd5KGdldFN0cmF0ZWd5RGV2S2l0KGNvbXBvbmVudCkpO1xuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX2JpbmRDb21wb25lbnRUb0VuZ2luZTxUPihcbiAgY29tcG9uZW50VHlwZTogSXZ5Q29tcG9uZW50VHlwZTxUPixcbiAgeyBvbkNyZWF0ZSB9OiB7IG9uQ3JlYXRlOiAoY29tcG9uZW50OiBUKSA9PiB2b2lkIH1cbikge1xuICBkZWNvcmF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlLCB7XG4gICAgb25DcmVhdGUoY29tcG9uZW50LCBjaGFuZ2VEZXRlY3Rpb25GbnMpIHtcbiAgICAgIGdldEVuZ2luZShjb21wb25lbnQpLnNldENoYW5nZURldGVjdGlvbkZucyhjaGFuZ2VEZXRlY3Rpb25GbnMpO1xuICAgICAgb25DcmVhdGUoY29tcG9uZW50KTtcbiAgICB9LFxuICAgIG9uSW5pdChjb21wb25lbnQpIHtcbiAgICAgIGdldEVuZ2luZShjb21wb25lbnQpLm1hcmtJbml0aWFsaXplZCgpO1xuICAgIH0sXG4gICAgb25EZXN0cm95KGNvbXBvbmVudCkge1xuICAgICAgZ2V0RW5naW5lKGNvbXBvbmVudCkubWFya0Rlc3Ryb3llZCgpO1xuICAgIH0sXG4gICAgb25Qcm9wZXJ0eURlY2xhcmUoY29tcG9uZW50LCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgICAgIGdldEVuZ2luZShjb21wb25lbnQpLnNldFByb3BlcnR5KHByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBvblByb3BlcnR5R2V0KGNvbXBvbmVudCwgcHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBnZXRFbmdpbmUoY29tcG9uZW50KS5nZXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgfSxcbiAgICBvblByb3BlcnR5U2V0KGNvbXBvbmVudCwgcHJvcGVydHksIHZhbHVlKSB7XG4gICAgICBnZXRFbmdpbmUoY29tcG9uZW50KS5zZXRQcm9wZXJ0eShwcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLWRldGVjdGlvbi1mbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taWNyb3dhdmUvc3JjL2xpYi9jb3JlL2NoYW5nZS1kZXRlY3Rpb24tZm5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFuIGFsdGVybmF0aXZlIHRvIENoYW5nZURldGVjdG9yUmVmIHRvIHN0YXkgbG9vc2VseSBjb3VwbGVkLlxuICogUGx1cywgdGhpcyBmdW5jdGlvbnMgY2FuIGJlIGRlc3RydWN0dXJlZCBhcyB0aGV5IGRvbid0IHVzZSBgdGhpc2AuXG4gKiBMZXQncyB0cnkgdG8gcmVkdWNlIHRoZSBzdXJmYWNlIGFuZCBub3QgZXhwb3NlIGFsbCBmdW5jdGlvbnNcbiAqIGlmIHdlIGRvbid0IG5lZWQgdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VEZXRlY3Rpb25GbnMge1xuICBkZXRhY2goKTogdm9pZDtcbiAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkO1xufVxuIl19
@@ -0,0 +1,65 @@
1
+ import { BehaviorSubject, map, mapTo, ReplaySubject, take, } from 'rxjs';
2
+ /**
3
+ * This should stay decoupled from Angular.
4
+ *
5
+ * @param component an instance of anything
6
+ * @returns an set of methods and observables that respectively
7
+ * control and represent the state of the object.
8
+ */
9
+ export function getEngine(component) {
10
+ /* Memoize engine. */
11
+ const engine = component[_ENGINE_SYMBOL];
12
+ if (engine != null) {
13
+ return engine;
14
+ }
15
+ const destroyed$ = new ReplaySubject(1);
16
+ const initialized$ = new ReplaySubject(1);
17
+ const state$ = new BehaviorSubject({});
18
+ let changeDetectionFns;
19
+ return (component[_ENGINE_SYMBOL] = {
20
+ destroyed$: destroyed$.pipe(take(1)),
21
+ initialized$: initialized$.pipe(take(1)),
22
+ changed$: state$.pipe(mapTo(undefined)),
23
+ detach() {
24
+ changeDetectionFns.detach();
25
+ },
26
+ detectChanges() {
27
+ changeDetectionFns.detectChanges();
28
+ },
29
+ markDestroyed() {
30
+ destroyed$.next();
31
+ },
32
+ markInitialized() {
33
+ initialized$.next();
34
+ },
35
+ setChangeDetectionFns(_changeDetectionFns) {
36
+ changeDetectionFns = _changeDetectionFns;
37
+ },
38
+ getProperty(property) {
39
+ return state$.value[property];
40
+ },
41
+ setProperty(property, value) {
42
+ /* Don't set value if it didn't change.
43
+ * This is more performant than `distinctUntilChanged` all over the place. */
44
+ if (state$.value[property] === value) {
45
+ return;
46
+ }
47
+ state$.next({ ...state$.value, [property]: value });
48
+ },
49
+ watchProperty(property) {
50
+ return state$.pipe(map((state) => state[property]));
51
+ },
52
+ });
53
+ }
54
+ export const _ENGINE_SYMBOL = Symbol('MicrowaveEngine');
55
+ export function _getPropertySubject(subjectsMap, property) {
56
+ let subject = subjectsMap.get(property);
57
+ if (subject == null) {
58
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
+ subject = new BehaviorSubject(undefined);
60
+ subjectsMap.set(property, subject);
61
+ }
62
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+ return subject;
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWljcm93YXZlL3NyYy9saWIvY29yZS9lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixHQUFHLEVBQ0gsS0FBSyxFQUVMLGFBQWEsRUFDYixJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFHZDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixTQUEyQjtJQUUzQixxQkFBcUI7SUFDckIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3pDLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtRQUNsQixPQUFPLE1BQU0sQ0FBQztLQUNmO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxhQUFhLENBQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQWEsRUFBRSxDQUFDLENBQUM7SUFDbkQsSUFBSSxrQkFBc0MsQ0FBQztJQUUzQyxPQUFPLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHO1FBQ2xDLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxZQUFZLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU07WUFDSixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM5QixDQUFDO1FBQ0QsYUFBYTtZQUNYLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxhQUFhO1lBQ1gsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxlQUFlO1lBQ2IsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxxQkFBcUIsQ0FBQyxtQkFBdUM7WUFDM0Qsa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7UUFDM0MsQ0FBQztRQUNELFdBQVcsQ0FBQyxRQUFRO1lBQ2xCLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLO1lBQ3pCO3lGQUM2RTtZQUM3RSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFO2dCQUNwQyxPQUFPO2FBQ1I7WUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsYUFBYSxDQUFDLFFBQVE7WUFDcEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQW9DeEQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxXQUF1QyxFQUN2QyxRQUFjO0lBRWQsSUFBSSxPQUFPLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUV4QyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7UUFDbkIsOERBQThEO1FBQzlELE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxTQUFnQixDQUFDLENBQUM7UUFDaEQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDcEM7SUFFRCw4REFBOEQ7SUFDOUQsT0FBTyxPQUFjLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgbWFwLFxuICBtYXBUbyxcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25GbnMgfSBmcm9tICcuL2NoYW5nZS1kZXRlY3Rpb24tZm5zJztcblxuLyoqXG4gKiBUaGlzIHNob3VsZCBzdGF5IGRlY291cGxlZCBmcm9tIEFuZ3VsYXIuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudCBhbiBpbnN0YW5jZSBvZiBhbnl0aGluZ1xuICogQHJldHVybnMgYW4gc2V0IG9mIG1ldGhvZHMgYW5kIG9ic2VydmFibGVzIHRoYXQgcmVzcGVjdGl2ZWx5XG4gKiBjb250cm9sIGFuZCByZXByZXNlbnQgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbmdpbmU8VCwgSyBleHRlbmRzIGtleW9mIFQgPSBrZXlvZiBUPihcbiAgY29tcG9uZW50OiBNaWNyb3dhdmVkPFQsIEs+XG4pOiBNaWNyb3dhdmVFbmdpbmU8VCwgSz4ge1xuICAvKiBNZW1vaXplIGVuZ2luZS4gKi9cbiAgY29uc3QgZW5naW5lID0gY29tcG9uZW50W19FTkdJTkVfU1lNQk9MXTtcbiAgaWYgKGVuZ2luZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGVuZ2luZTtcbiAgfVxuXG4gIGNvbnN0IGRlc3Ryb3llZCQgPSBuZXcgUmVwbGF5U3ViamVjdDx2b2lkPigxKTtcbiAgY29uc3QgaW5pdGlhbGl6ZWQkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG4gIGNvbnN0IHN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFydGlhbDxUPj4oe30pO1xuICBsZXQgY2hhbmdlRGV0ZWN0aW9uRm5zOiBDaGFuZ2VEZXRlY3Rpb25GbnM7XG5cbiAgcmV0dXJuIChjb21wb25lbnRbX0VOR0lORV9TWU1CT0xdID0ge1xuICAgIGRlc3Ryb3llZCQ6IGRlc3Ryb3llZCQucGlwZSh0YWtlKDEpKSxcbiAgICBpbml0aWFsaXplZCQ6IGluaXRpYWxpemVkJC5waXBlKHRha2UoMSkpLFxuICAgIGNoYW5nZWQkOiBzdGF0ZSQucGlwZShtYXBUbyh1bmRlZmluZWQpKSxcbiAgICBkZXRhY2goKSB7XG4gICAgICBjaGFuZ2VEZXRlY3Rpb25GbnMuZGV0YWNoKCk7XG4gICAgfSxcbiAgICBkZXRlY3RDaGFuZ2VzKCkge1xuICAgICAgY2hhbmdlRGV0ZWN0aW9uRm5zLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LFxuICAgIG1hcmtEZXN0cm95ZWQoKSB7XG4gICAgICBkZXN0cm95ZWQkLm5leHQoKTtcbiAgICB9LFxuICAgIG1hcmtJbml0aWFsaXplZCgpIHtcbiAgICAgIGluaXRpYWxpemVkJC5uZXh0KCk7XG4gICAgfSxcbiAgICBzZXRDaGFuZ2VEZXRlY3Rpb25GbnMoX2NoYW5nZURldGVjdGlvbkZuczogQ2hhbmdlRGV0ZWN0aW9uRm5zKSB7XG4gICAgICBjaGFuZ2VEZXRlY3Rpb25GbnMgPSBfY2hhbmdlRGV0ZWN0aW9uRm5zO1xuICAgIH0sXG4gICAgZ2V0UHJvcGVydHkocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBzdGF0ZSQudmFsdWVbcHJvcGVydHldO1xuICAgIH0sXG4gICAgc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKSB7XG4gICAgICAvKiBEb24ndCBzZXQgdmFsdWUgaWYgaXQgZGlkbid0IGNoYW5nZS5cbiAgICAgICAqIFRoaXMgaXMgbW9yZSBwZXJmb3JtYW50IHRoYW4gYGRpc3RpbmN0VW50aWxDaGFuZ2VkYCBhbGwgb3ZlciB0aGUgcGxhY2UuICovXG4gICAgICBpZiAoc3RhdGUkLnZhbHVlW3Byb3BlcnR5XSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZSQubmV4dCh7IC4uLnN0YXRlJC52YWx1ZSwgW3Byb3BlcnR5XTogdmFsdWUgfSk7XG4gICAgfSxcbiAgICB3YXRjaFByb3BlcnR5KHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gc3RhdGUkLnBpcGUobWFwKChzdGF0ZSkgPT4gc3RhdGVbcHJvcGVydHldKSk7XG4gICAgfSxcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBfRU5HSU5FX1NZTUJPTCA9IFN5bWJvbCgnTWljcm93YXZlRW5naW5lJyk7XG5cbmV4cG9ydCB0eXBlIE1pY3Jvd2F2ZWQ8VCwgSyBleHRlbmRzIGtleW9mIFQ+ID0gVCAmIHtcbiAgW19FTkdJTkVfU1lNQk9MXT86IE1pY3Jvd2F2ZUVuZ2luZTxULCBLPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWljcm93YXZlRW5naW5lPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiB7XG4gIC8qKlxuICAgKiBGdW5jdGlvbnMgYmVsb3cgZm9ybSB0aGUgc3RyYXRlZ3kgZmFjYWRlLlxuICAgKi9cbiAgZGVzdHJveWVkJDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgLyogVGVsbHMgd2hlbiBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQgKG5nT25Jbml0KS4gKi9cbiAgaW5pdGlhbGl6ZWQkOiBPYnNlcnZhYmxlPHZvaWQ+O1xuICAvKiBUZWxscyBpZiBzb21lIHByb3BlcnR5IGNoYW5nZWQuICovXG4gIGNoYW5nZWQkOiBPYnNlcnZhYmxlPHZvaWQ+O1xuICBkZXRhY2goKTogdm9pZDtcbiAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgdG8gYmluZCB3aXRoIGNvbXBvbmVudC5cbiAgICovXG4gIHNldENoYW5nZURldGVjdGlvbkZucyhjaGFuZ2VEZXRlY3Rpb25GbnM6IENoYW5nZURldGVjdGlvbkZucyk6IHZvaWQ7XG4gIG1hcmtEZXN0cm95ZWQoKTogdm9pZDtcbiAgbWFya0luaXRpYWxpemVkKCk6IHZvaWQ7XG4gIGdldFByb3BlcnR5PFBST1AgZXh0ZW5kcyBLPihwcm9wZXJ0eTogUFJPUCk6IFRbUFJPUF0gfCB1bmRlZmluZWQ7XG4gIHNldFByb3BlcnR5PFBST1AgZXh0ZW5kcyBLPihwcm9wZXJ0eTogUFJPUCwgdmFsdWU6IFRbUFJPUF0pOiB2b2lkO1xuICB3YXRjaFByb3BlcnR5PFBST1AgZXh0ZW5kcyBLPihcbiAgICBwcm9wZXJ0eTogUFJPUFxuICApOiBPYnNlcnZhYmxlPFRbUFJPUF0gfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgdHlwZSBNaWNyb3dhdmVTdWJqZWN0c01hcDxULCBLIGV4dGVuZHMga2V5b2YgVD4gPSBNYXA8XG4gIEssXG4gIEJlaGF2aW9yU3ViamVjdDxUW0tdPlxuPjtcblxuZXhwb3J0IGZ1bmN0aW9uIF9nZXRQcm9wZXJ0eVN1YmplY3Q8VCwgSyBleHRlbmRzIGtleW9mIFQsIFBST1AgZXh0ZW5kcyBLPihcbiAgc3ViamVjdHNNYXA6IE1pY3Jvd2F2ZVN1YmplY3RzTWFwPFQsIEs+LFxuICBwcm9wZXJ0eTogUFJPUFxuKTogQmVoYXZpb3JTdWJqZWN0PFRbUFJPUF0+IHtcbiAgbGV0IHN1YmplY3QgPSBzdWJqZWN0c01hcC5nZXQocHJvcGVydHkpO1xuXG4gIGlmIChzdWJqZWN0ID09IG51bGwpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCBhcyBhbnkpO1xuICAgIHN1YmplY3RzTWFwLnNldChwcm9wZXJ0eSwgc3ViamVjdCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICByZXR1cm4gc3ViamVjdCBhcyBhbnk7XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ import { getEngine } from './core/engine';
2
+ export function getStrategyDevKit(component) {
3
+ const { changed$, destroyed$, initialized$, detach, detectChanges } = getEngine(component);
4
+ return { changed$, destroyed$, initialized$, detach, detectChanges };
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2a2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWljcm93YXZlL3NyYy9saWIvZGV2a2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsU0FBMkI7SUFFM0IsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FDakUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDdkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEVuZ2luZSwgTWljcm93YXZlZCwgTWljcm93YXZlRW5naW5lIH0gZnJvbSAnLi9jb3JlL2VuZ2luZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHJhdGVneURldktpdDxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+KFxuICBjb21wb25lbnQ6IE1pY3Jvd2F2ZWQ8VCwgSz5cbik6IFN0cmF0ZWd5RGV2S2l0PFQsIEs+IHtcbiAgY29uc3QgeyBjaGFuZ2VkJCwgZGVzdHJveWVkJCwgaW5pdGlhbGl6ZWQkLCBkZXRhY2gsIGRldGVjdENoYW5nZXMgfSA9XG4gICAgZ2V0RW5naW5lKGNvbXBvbmVudCk7XG4gIHJldHVybiB7IGNoYW5nZWQkLCBkZXN0cm95ZWQkLCBpbml0aWFsaXplZCQsIGRldGFjaCwgZGV0ZWN0Q2hhbmdlcyB9O1xufVxuXG5leHBvcnQgdHlwZSBTdHJhdGVneURldktpdDxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+ID0gUGljazxcbiAgTWljcm93YXZlRW5naW5lPFQsIEs+LFxuICAnY2hhbmdlZCQnIHwgJ2Rlc3Ryb3llZCQnIHwgJ2luaXRpYWxpemVkJCcgfCAnZGV0YWNoJyB8ICdkZXRlY3RDaGFuZ2VzJ1xuPjtcblxuZXhwb3J0IHR5cGUgU3RyYXRlZ3k8VD4gPSAoc3RyYXRlZ3lEZXZLaXQ6IFN0cmF0ZWd5RGV2S2l0PFQ+KSA9PiB2b2lkO1xuIl19
@@ -0,0 +1,14 @@
1
+ import { takeUntil } from 'rxjs';
2
+ import { applyStrategy } from './apply-strategy';
3
+ import { getEngine } from './core/engine';
4
+ import { asapStrategy } from './strategies/asap';
5
+ export function Microwave({ strategy = asapStrategy } = {}) {
6
+ return function MicrowaveDecorator(componentType) {
7
+ applyStrategy(componentType, strategy);
8
+ };
9
+ }
10
+ export function watch(component, property) {
11
+ const { destroyed$, watchProperty } = getEngine(component);
12
+ return watchProperty(property).pipe(takeUntil(destroyed$));
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWljcm93YXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWljcm93YXZlL3NyYy9saWIvbWljcm93YXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE1BQU0sVUFBVSxTQUFTLENBQUMsRUFBRSxRQUFRLEdBQUcsWUFBWSxFQUFFLEdBQUcsRUFBRTtJQUN4RCxPQUFPLFNBQVMsa0JBQWtCLENBQUksYUFBa0M7UUFDdEUsYUFBYSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FDbkIsU0FBWSxFQUNaLFFBQVc7SUFFWCxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRCxPQUFPLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgYXBwbHlTdHJhdGVneSB9IGZyb20gJy4vYXBwbHktc3RyYXRlZ3knO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi9jb3JlL2VuZ2luZSc7XG5pbXBvcnQgeyBJdnlDb21wb25lbnRUeXBlIH0gZnJvbSAnLi9zaGFyZWQvZGVjb3JhdG9yJztcbmltcG9ydCB7IGFzYXBTdHJhdGVneSB9IGZyb20gJy4vc3RyYXRlZ2llcy9hc2FwJztcblxuZXhwb3J0IGZ1bmN0aW9uIE1pY3Jvd2F2ZSh7IHN0cmF0ZWd5ID0gYXNhcFN0cmF0ZWd5IH0gPSB7fSkge1xuICByZXR1cm4gZnVuY3Rpb24gTWljcm93YXZlRGVjb3JhdG9yPFQ+KGNvbXBvbmVudFR5cGU6IEl2eUNvbXBvbmVudFR5cGU8VD4pIHtcbiAgICBhcHBseVN0cmF0ZWd5KGNvbXBvbmVudFR5cGUsIHN0cmF0ZWd5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoPFQsIEsgZXh0ZW5kcyBrZXlvZiBUID0ga2V5b2YgVD4oXG4gIGNvbXBvbmVudDogVCxcbiAgcHJvcGVydHk6IEtcbik6IE9ic2VydmFibGU8VFtLXSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGRlc3Ryb3llZCQsIHdhdGNoUHJvcGVydHkgfSA9IGdldEVuZ2luZShjb21wb25lbnQpO1xuICByZXR1cm4gd2F0Y2hQcm9wZXJ0eShwcm9wZXJ0eSkucGlwZSh0YWtlVW50aWwoZGVzdHJveWVkJCkpO1xufVxuIl19
@@ -0,0 +1,89 @@
1
+ import { ChangeDetectorRef, ɵɵdirectiveInject } from '@angular/core';
2
+ /**
3
+ * Decorate Angular components with custom hooks.
4
+ *
5
+ * @param componentType the component class to decorate.
6
+ * @param hooks
7
+ */
8
+ export function decorateComponent(componentType, hooks) {
9
+ const { onCreate, onInit, onDestroy, onPropertyDeclare, onPropertyGet, onPropertySet, } = hooks;
10
+ if (!componentType.ɵfac) {
11
+ throw new Error(`${componentType.name} is either not a component or not compiled.`);
12
+ }
13
+ /**
14
+ * Override component factory.
15
+ */
16
+ const factory = _decorate(componentType.ɵfac,
17
+ /*
18
+ * Override getters & setters.
19
+ */
20
+ (factoryFn) => () => {
21
+ /* Grab change detector to control it. */
22
+ const cdr = ɵɵdirectiveInject(ChangeDetectorRef);
23
+ const component = factoryFn();
24
+ /**
25
+ * Notify about creation.
26
+ */
27
+ onCreate(component, {
28
+ detach() {
29
+ cdr.detach();
30
+ },
31
+ detectChanges() {
32
+ cdr.detectChanges();
33
+ },
34
+ });
35
+ /**
36
+ * This will only list initialized properties.
37
+ * That's the reason why all properties should be initialized
38
+ * when using Microwave.
39
+ */
40
+ for (const property of Object.getOwnPropertyNames(component)) {
41
+ /**
42
+ * Notify when property is discovered.
43
+ */
44
+ onPropertyDeclare(component, property, component[property]);
45
+ Object.defineProperty(component, property, {
46
+ set(value) {
47
+ /**
48
+ * Call setter.
49
+ */
50
+ onPropertySet(component, property, value);
51
+ },
52
+ get() {
53
+ /**
54
+ * Call getter.
55
+ */
56
+ return onPropertyGet(component, property);
57
+ },
58
+ });
59
+ }
60
+ return component;
61
+ });
62
+ /**
63
+ * Override factory with the newly decorated one.
64
+ */
65
+ Object.defineProperty(componentType, 'ɵfac', {
66
+ get() {
67
+ return factory;
68
+ },
69
+ });
70
+ /**
71
+ * Link hooks.
72
+ */
73
+ _spyOnMethod(componentType, 'ngOnInit', onInit);
74
+ _spyOnMethod(componentType, 'ngOnDestroy', onDestroy);
75
+ }
76
+ export function _spyOnMethod(klass, methodName, callback) {
77
+ const proto = klass.prototype;
78
+ proto[methodName] = _decorate(proto[methodName], (wrappedMethod) => {
79
+ return function () {
80
+ callback(this);
81
+ return wrappedMethod?.bind(this)?.();
82
+ };
83
+ });
84
+ }
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ export function _decorate(fn, decorator) {
87
+ return decorator(fn);
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWljcm93YXZlL3NyYy9saWIvc2hhcmVkL2RlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQVEsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0U7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLGFBQWtDLEVBQ2xDLEtBQXdCO0lBRXhCLE1BQU0sRUFDSixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGFBQWEsR0FDZCxHQUFHLEtBQUssQ0FBQztJQUVWLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxhQUFhLENBQUMsSUFBSSw2Q0FBNkMsQ0FDbkUsQ0FBQztLQUNIO0lBRUQ7O09BRUc7SUFDSCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQ3ZCLGFBQWEsQ0FBQyxJQUFJO0lBQ2xCOztPQUVHO0lBQ0gsQ0FBQyxTQUFrQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUU7UUFDM0IseUNBQXlDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFakQsTUFBTSxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFFOUI7O1dBRUc7UUFDSCxRQUFRLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE1BQU07Z0JBQ0osR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2YsQ0FBQztZQUNELGFBQWE7Z0JBQ1gsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSDs7OztXQUlHO1FBQ0gsS0FBSyxNQUFNLFFBQVEsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQy9DLFNBQVMsQ0FDRSxFQUFFO1lBQ2I7O2VBRUc7WUFDSCxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRTVELE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRTtnQkFDekMsR0FBRyxDQUFDLEtBQUs7b0JBQ1A7O3VCQUVHO29CQUNILGFBQWEsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO2dCQUNELEdBQUc7b0JBQ0Q7O3VCQUVHO29CQUNILE9BQU8sYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDNUMsQ0FBQzthQUNGLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUNGLENBQUM7SUFFRjs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRTtRQUMzQyxHQUFHO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVIOztPQUVHO0lBQ0gsWUFBWSxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEQsWUFBWSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEQsQ0FBQztBQTZDRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixLQUFjLEVBQ2QsVUFBa0IsRUFDbEIsUUFBK0I7SUFFL0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUM5QixLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUMzQixLQUFLLENBQUMsVUFBVSxDQUFDLEVBQ2pCLENBQUMsYUFBeUIsRUFBRSxFQUFFO1FBQzVCLE9BQU87WUFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDZixPQUFPLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELDhEQUE4RDtBQUM5RCxNQUFNLFVBQVUsU0FBUyxDQUN2QixFQUFLLEVBQ0wsU0FBdUI7SUFFdkIsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBUeXBlLCDJtcm1ZGlyZWN0aXZlSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25GbnMgfSBmcm9tICcuLi9jb3JlL2NoYW5nZS1kZXRlY3Rpb24tZm5zJztcblxuLyoqXG4gKiBEZWNvcmF0ZSBBbmd1bGFyIGNvbXBvbmVudHMgd2l0aCBjdXN0b20gaG9va3MuXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudFR5cGUgdGhlIGNvbXBvbmVudCBjbGFzcyB0byBkZWNvcmF0ZS5cbiAqIEBwYXJhbSBob29rc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb3JhdGVDb21wb25lbnQ8VCwgSyBleHRlbmRzIGtleW9mIFQgPSBrZXlvZiBUPihcbiAgY29tcG9uZW50VHlwZTogSXZ5Q29tcG9uZW50VHlwZTxUPixcbiAgaG9va3M6IERlY29yYXRvckhvb2tzPFQ+XG4pIHtcbiAgY29uc3Qge1xuICAgIG9uQ3JlYXRlLFxuICAgIG9uSW5pdCxcbiAgICBvbkRlc3Ryb3ksXG4gICAgb25Qcm9wZXJ0eURlY2xhcmUsXG4gICAgb25Qcm9wZXJ0eUdldCxcbiAgICBvblByb3BlcnR5U2V0LFxuICB9ID0gaG9va3M7XG5cbiAgaWYgKCFjb21wb25lbnRUeXBlLsm1ZmFjKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7Y29tcG9uZW50VHlwZS5uYW1lfSBpcyBlaXRoZXIgbm90IGEgY29tcG9uZW50IG9yIG5vdCBjb21waWxlZC5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBjb21wb25lbnQgZmFjdG9yeS5cbiAgICovXG4gIGNvbnN0IGZhY3RvcnkgPSBfZGVjb3JhdGUoXG4gICAgY29tcG9uZW50VHlwZS7JtWZhYyxcbiAgICAvKlxuICAgICAqIE92ZXJyaWRlIGdldHRlcnMgJiBzZXR0ZXJzLlxuICAgICAqL1xuICAgIChmYWN0b3J5Rm46ICgpID0+IFQpID0+ICgpID0+IHtcbiAgICAgIC8qIEdyYWIgY2hhbmdlIGRldGVjdG9yIHRvIGNvbnRyb2wgaXQuICovXG4gICAgICBjb25zdCBjZHIgPSDJtcm1ZGlyZWN0aXZlSW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgICAgY29uc3QgY29tcG9uZW50ID0gZmFjdG9yeUZuKCk7XG5cbiAgICAgIC8qKlxuICAgICAgICogTm90aWZ5IGFib3V0IGNyZWF0aW9uLlxuICAgICAgICovXG4gICAgICBvbkNyZWF0ZShjb21wb25lbnQsIHtcbiAgICAgICAgZGV0YWNoKCkge1xuICAgICAgICAgIGNkci5kZXRhY2goKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICAgICAgICBjZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyB3aWxsIG9ubHkgbGlzdCBpbml0aWFsaXplZCBwcm9wZXJ0aWVzLlxuICAgICAgICogVGhhdCdzIHRoZSByZWFzb24gd2h5IGFsbCBwcm9wZXJ0aWVzIHNob3VsZCBiZSBpbml0aWFsaXplZFxuICAgICAgICogd2hlbiB1c2luZyBNaWNyb3dhdmUuXG4gICAgICAgKi9cbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXG4gICAgICAgIGNvbXBvbmVudFxuICAgICAgKSBhcyBBcnJheTxLPikge1xuICAgICAgICAvKipcbiAgICAgICAgICogTm90aWZ5IHdoZW4gcHJvcGVydHkgaXMgZGlzY292ZXJlZC5cbiAgICAgICAgICovXG4gICAgICAgIG9uUHJvcGVydHlEZWNsYXJlKGNvbXBvbmVudCwgcHJvcGVydHksIGNvbXBvbmVudFtwcm9wZXJ0eV0pO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21wb25lbnQsIHByb3BlcnR5LCB7XG4gICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENhbGwgc2V0dGVyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBvblByb3BlcnR5U2V0KGNvbXBvbmVudCwgcHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2FsbCBnZXR0ZXIuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHJldHVybiBvblByb3BlcnR5R2V0KGNvbXBvbmVudCwgcHJvcGVydHkpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbiAgKTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgZmFjdG9yeSB3aXRoIHRoZSBuZXdseSBkZWNvcmF0ZWQgb25lLlxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbXBvbmVudFR5cGUsICfJtWZhYycsIHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeTtcbiAgICB9LFxuICB9KTtcblxuICAvKipcbiAgICogTGluayBob29rcy5cbiAgICovXG4gIF9zcHlPbk1ldGhvZChjb21wb25lbnRUeXBlLCAnbmdPbkluaXQnLCBvbkluaXQpO1xuICBfc3B5T25NZXRob2QoY29tcG9uZW50VHlwZSwgJ25nT25EZXN0cm95Jywgb25EZXN0cm95KTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNvcmF0b3JIb29rczxULCBLIGV4dGVuZHMga2V5b2YgVCA9IGtleW9mIFQ+IHtcbiAgLyoqXG4gICAqIEhvb2sgY2FsbGVkIHdoZW4gYSBuZXcgY29tcG9uZW50IGlzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnQgdGhlIGNyZWF0ZWQgY29tcG9uZW50LlxuICAgKiBAcGFyYW0gYXJncyBjaGFuZ2UgZGV0ZWN0aW9uIGZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgY2hhbmdlIGRldGVjdGlvbi5cbiAgICovXG4gIG9uQ3JlYXRlKGNvbXBvbmVudDogVCwgYXJnczogQ2hhbmdlRGV0ZWN0aW9uRm5zKTogdm9pZDtcblxuICAvKipcbiAgICogSG9vayBjYWxsZWQgd2hlbiBhIG5ldyBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnQgdGhlIGNyZWF0ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgb25Jbml0KGNvbXBvbmVudDogVCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEhvb2sgY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSByZWFsIG5nT25EZXN0cm95IChpZiBpbXBsZW1lbnRlZCkgaXMgY2FsbGVkLlxuICAgKi9cbiAgb25EZXN0cm95KGNvbXBvbmVudDogVCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEhvb2sgY2FsbGVkIHdoZW4gYSBwcm9wZXJ0eSBpcyBkaXNjb3ZlcmVkLlxuICAgKiBUaGlzIGlzIHRoZSBvcHBvcnR1bml0eSB0byBncmFiIHRoZSBpbml0aWFsIHZhbHVlIGJlZm9yZVxuICAgKiB0aGUgcHJvcGVydHkgaXMgcmVwbGFjZWQgYnkgZ2V0dGVycyBhbmQgc2V0dGVycy5cbiAgICovXG4gIG9uUHJvcGVydHlEZWNsYXJlKGNvbXBvbmVudDogVCwgcHJvcGVydHk6IEssIHZhbHVlOiBUW0tdKTogdm9pZDtcblxuICAvKipcbiAgICogSG9vayBjYWxsZWQgdG8gcmV0cmlldmUgYSBwcm9wZXJ0eS5cbiAgICovXG4gIG9uUHJvcGVydHlHZXQoY29tcG9uZW50OiBULCBwcm9wZXJ0eTogSyk6IFRbS10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvb2sgY2FsbGVkIHRvIHNldCBhIHByb3BlcnR5LlxuICAgKi9cbiAgb25Qcm9wZXJ0eVNldChjb21wb25lbnQ6IFQsIHByb3BlcnR5OiBLLCB2YWx1ZTogVFtLXSk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSXZ5Q29tcG9uZW50VHlwZTxUPiBleHRlbmRzIFR5cGU8VD4ge1xuICDJtWZhYz86ICgpID0+IFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfc3B5T25NZXRob2Q8VD4oXG4gIGtsYXNzOiBUeXBlPFQ+LFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGNhbGxiYWNrOiAoaW5zdGFuY2U6IFQpID0+IHZvaWRcbikge1xuICBjb25zdCBwcm90byA9IGtsYXNzLnByb3RvdHlwZTtcbiAgcHJvdG9bbWV0aG9kTmFtZV0gPSBfZGVjb3JhdGUoXG4gICAgcHJvdG9bbWV0aG9kTmFtZV0sXG4gICAgKHdyYXBwZWRNZXRob2Q6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAodGhpczogVCkge1xuICAgICAgICBjYWxsYmFjayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHdyYXBwZWRNZXRob2Q/LmJpbmQodGhpcyk/LigpO1xuICAgICAgfTtcbiAgICB9XG4gICk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gX2RlY29yYXRlPEYgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGFueT4oXG4gIGZuOiBGLFxuICBkZWNvcmF0b3I6IChmbjogRikgPT4gRlxuKSB7XG4gIHJldHVybiBkZWNvcmF0b3IoZm4pO1xufVxuIl19
@@ -0,0 +1,9 @@
1
+ import { audit } from 'rxjs';
2
+ import { createLocalStrategy } from './local';
3
+ /**
4
+ * A strategy that coalesces changes using microtask scheduling.
5
+ */
6
+ export const asapStrategy = createLocalStrategy({
7
+ coalescer: audit(() => Promise.resolve()),
8
+ });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pY3Jvd2F2ZS9zcmMvbGliL3N0cmF0ZWdpZXMvYXNhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU5Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBc0IsbUJBQW1CLENBQUM7SUFDakUsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Q0FDMUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXVkaXQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN0cmF0ZWd5IH0gZnJvbSAnLi4vZGV2a2l0JztcbmltcG9ydCB7IGNyZWF0ZUxvY2FsU3RyYXRlZ3kgfSBmcm9tICcuL2xvY2FsJztcblxuLyoqXG4gKiBBIHN0cmF0ZWd5IHRoYXQgY29hbGVzY2VzIGNoYW5nZXMgdXNpbmcgbWljcm90YXNrIHNjaGVkdWxpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBhc2FwU3RyYXRlZ3k6IFN0cmF0ZWd5PHVua25vd24+ID0gY3JlYXRlTG9jYWxTdHJhdGVneSh7XG4gIGNvYWxlc2NlcjogYXVkaXQoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKCkpLFxufSk7XG4iXX0=
@@ -0,0 +1,9 @@
1
+ import { audit, timer } from 'rxjs';
2
+ import { createLocalStrategy } from './local';
3
+ /**
4
+ * A strategy that coalesces changes using macrotask scheduling.
5
+ */
6
+ export const asyncStrategy = createLocalStrategy({
7
+ coalescer: audit(() => timer(0)),
8
+ });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taWNyb3dhdmUvc3JjL2xpYi9zdHJhdGVnaWVzL2FzeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU5Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBc0IsbUJBQW1CLENBQUM7SUFDbEUsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXVkaXQsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdHJhdGVneSB9IGZyb20gJy4uL2RldmtpdCc7XG5pbXBvcnQgeyBjcmVhdGVMb2NhbFN0cmF0ZWd5IH0gZnJvbSAnLi9sb2NhbCc7XG5cbi8qKlxuICogQSBzdHJhdGVneSB0aGF0IGNvYWxlc2NlcyBjaGFuZ2VzIHVzaW5nIG1hY3JvdGFzayBzY2hlZHVsaW5nLlxuICovXG5leHBvcnQgY29uc3QgYXN5bmNTdHJhdGVneTogU3RyYXRlZ3k8dW5rbm93bj4gPSBjcmVhdGVMb2NhbFN0cmF0ZWd5KHtcbiAgY29hbGVzY2VyOiBhdWRpdCgoKSA9PiB0aW1lcigwKSksXG59KTtcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export { createLocalStrategy } from './local';
2
+ export { syncStrategy } from './sync';
3
+ export { asapStrategy } from './asap';
4
+ export { asyncStrategy } from './async';
5
+ export { rafStrategy } from './raf';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taWNyb3dhdmUvc3JjL2xpYi9zdHJhdGVnaWVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgY3JlYXRlTG9jYWxTdHJhdGVneSB9IGZyb20gJy4vbG9jYWwnO1xuZXhwb3J0IHsgc3luY1N0cmF0ZWd5IH0gZnJvbSAnLi9zeW5jJztcbmV4cG9ydCB7IGFzYXBTdHJhdGVneSB9IGZyb20gJy4vYXNhcCc7XG5leHBvcnQgeyBhc3luY1N0cmF0ZWd5IH0gZnJvbSAnLi9hc3luYyc7XG5leHBvcnQgeyByYWZTdHJhdGVneSB9IGZyb20gJy4vcmFmJztcbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import { concat, takeUntil } from 'rxjs';
2
+ /**
3
+ * Creates a change detection strategy which is local to the component.
4
+ * It implements optional coalescing which can be customized using `coalescer` parameter.
5
+ *
6
+ * @example createLocalStrategy()
7
+ * @example createLocalStrategy({coalescer: audit(() => Promise.resolve())})
8
+ *
9
+ * @returns a strategy that can be used with Microwave decorator.
10
+ */
11
+ export const createLocalStrategy = ({ coalescer, } = {}) => ({ initialized$, changed$, destroyed$, detach, detectChanges }) => {
12
+ /**
13
+ * Detach change detection as we want to take control.
14
+ */
15
+ detach();
16
+ /**
17
+ * Trigger change detection initially and on property changes.
18
+ * Coalesce through micro-tasks.
19
+ */
20
+ let source$ = concat(initialized$, changed$);
21
+ if (coalescer != null) {
22
+ source$ = source$.pipe(coalescer);
23
+ }
24
+ source$.pipe(takeUntil(destroyed$)).subscribe(() => detectChanges());
25
+ };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taWNyb3dhdmUvc3JjL2xpYi9zdHJhdGVnaWVzL2xvY2FsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQTRCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUduRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUM5QixDQUFDLEVBQ0MsU0FBUyxNQUN5QyxFQUFFLEVBQXFCLEVBQUUsQ0FDN0UsQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFO0lBQ2hFOztPQUVHO0lBQ0gsTUFBTSxFQUFFLENBQUM7SUFFVDs7O09BR0c7SUFDSCxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLElBQUksU0FBUyxJQUFJLElBQUksRUFBRTtRQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNuQztJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7QUFDdkUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29uY2F0LCBNb25vVHlwZU9wZXJhdG9yRnVuY3Rpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU3RyYXRlZ3kgfSBmcm9tICcuLi9kZXZraXQnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjaGFuZ2UgZGV0ZWN0aW9uIHN0cmF0ZWd5IHdoaWNoIGlzIGxvY2FsIHRvIHRoZSBjb21wb25lbnQuXG4gKiBJdCBpbXBsZW1lbnRzIG9wdGlvbmFsIGNvYWxlc2Npbmcgd2hpY2ggY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcgYGNvYWxlc2NlcmAgcGFyYW1ldGVyLlxuICpcbiAqIEBleGFtcGxlIGNyZWF0ZUxvY2FsU3RyYXRlZ3koKVxuICogQGV4YW1wbGUgY3JlYXRlTG9jYWxTdHJhdGVneSh7Y29hbGVzY2VyOiBhdWRpdCgoKSA9PiBQcm9taXNlLnJlc29sdmUoKSl9KVxuICpcbiAqIEByZXR1cm5zIGEgc3RyYXRlZ3kgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIE1pY3Jvd2F2ZSBkZWNvcmF0b3IuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVMb2NhbFN0cmF0ZWd5ID1cbiAgKHtcbiAgICBjb2FsZXNjZXIsXG4gIH06IHsgY29hbGVzY2VyPzogTW9ub1R5cGVPcGVyYXRvckZ1bmN0aW9uPHZvaWQ+IH0gPSB7fSk6IFN0cmF0ZWd5PHVua25vd24+ID0+XG4gICh7IGluaXRpYWxpemVkJCwgY2hhbmdlZCQsIGRlc3Ryb3llZCQsIGRldGFjaCwgZGV0ZWN0Q2hhbmdlcyB9KSA9PiB7XG4gICAgLyoqXG4gICAgICogRGV0YWNoIGNoYW5nZSBkZXRlY3Rpb24gYXMgd2Ugd2FudCB0byB0YWtlIGNvbnRyb2wuXG4gICAgICovXG4gICAgZGV0YWNoKCk7XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaW5pdGlhbGx5IGFuZCBvbiBwcm9wZXJ0eSBjaGFuZ2VzLlxuICAgICAqIENvYWxlc2NlIHRocm91Z2ggbWljcm8tdGFza3MuXG4gICAgICovXG4gICAgbGV0IHNvdXJjZSQgPSBjb25jYXQoaW5pdGlhbGl6ZWQkLCBjaGFuZ2VkJCk7XG5cbiAgICBpZiAoY29hbGVzY2VyICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSQgPSBzb3VyY2UkLnBpcGUoY29hbGVzY2VyKTtcbiAgICB9XG5cbiAgICBzb3VyY2UkLnBpcGUodGFrZVVudGlsKGRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKCkgPT4gZGV0ZWN0Q2hhbmdlcygpKTtcbiAgfTtcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ import { audit, animationFrames } from 'rxjs';
2
+ import { createLocalStrategy } from './local';
3
+ /**
4
+ * A strategy that coalesces changes using requestAnimationFrame scheduler.
5
+ */
6
+ export const rafStrategy = createLocalStrategy({
7
+ coalescer: audit(() => animationFrames()),
8
+ });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWljcm93YXZlL3NyYy9saWIvc3RyYXRlZ2llcy9yYWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTlDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFzQixtQkFBbUIsQ0FBQztJQUNoRSxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO0NBQzFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF1ZGl0LCBhbmltYXRpb25GcmFtZXMgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFN0cmF0ZWd5IH0gZnJvbSAnLi4vZGV2a2l0JztcbmltcG9ydCB7IGNyZWF0ZUxvY2FsU3RyYXRlZ3kgfSBmcm9tICcuL2xvY2FsJztcblxuLyoqXG4gKiBBIHN0cmF0ZWd5IHRoYXQgY29hbGVzY2VzIGNoYW5nZXMgdXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHNjaGVkdWxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IHJhZlN0cmF0ZWd5OiBTdHJhdGVneTx1bmtub3duPiA9IGNyZWF0ZUxvY2FsU3RyYXRlZ3koe1xuICBjb2FsZXNjZXI6IGF1ZGl0KCgpID0+IGFuaW1hdGlvbkZyYW1lcygpKSxcbn0pO1xuIl19
@@ -0,0 +1,3 @@
1
+ import { createLocalStrategy } from './local';
2
+ export const syncStrategy = createLocalStrategy();
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pY3Jvd2F2ZS9zcmMvbGliL3N0cmF0ZWdpZXMvc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHOUMsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFzQixtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTG9jYWxTdHJhdGVneSB9IGZyb20gJy4vbG9jYWwnO1xuaW1wb3J0IHsgU3RyYXRlZ3kgfSBmcm9tICcuLi9kZXZraXQnO1xuXG5leHBvcnQgY29uc3Qgc3luY1N0cmF0ZWd5OiBTdHJhdGVneTx1bmtub3duPiA9IGNyZWF0ZUxvY2FsU3RyYXRlZ3koKTtcbiJdfQ==