@runopencode/rx-stencil 0.4.1 → 0.4.3
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 +12 -11
- package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
- package/dist/cjs/index-CbERigo8.js +1211 -0
- package/dist/cjs/index.cjs.js +166 -447
- package/dist/cjs/loader.cjs.js +4 -6
- package/dist/cjs/rx-async.cjs.entry.js +29 -63
- package/dist/cjs/rx-stencil.cjs.js +14 -14
- package/dist/cjs/set-property-BZHuI0P5.js +9525 -0
- package/dist/collection/collection-manifest.json +2 -2
- package/dist/collection/components/async/async.css +3 -0
- package/dist/collection/components/async/async.js +62 -61
- package/dist/collection/index.js +0 -1
- package/dist/collection/rx/decorator/index.js +0 -1
- package/dist/collection/rx/decorator/query-selector-all.js +26 -27
- package/dist/collection/rx/decorator/query-selector.js +32 -33
- package/dist/collection/rx/index.js +0 -1
- package/dist/collection/rx/observable/index.js +1 -1
- package/dist/collection/rx/observable/mutation-observable.js +8 -9
- package/dist/collection/rx/observable/properties-observable.js +13 -0
- package/dist/collection/rx/observable/property-observable.js +20 -21
- package/dist/collection/rx/observable/render-observable.js +15 -16
- package/dist/collection/rx/operator/index.js +0 -1
- package/dist/collection/rx/operator/schedule-render.js +9 -10
- package/dist/collection/rx/operator/to-property.js +8 -9
- package/dist/collection/rx/operator/until-disconnected.js +56 -57
- package/dist/collection/rx/subscriber/index.js +0 -1
- package/dist/collection/rx/subscriber/set-property.js +12 -13
- package/dist/collection/utils/get-property-descriptor.js +10 -11
- package/dist/collection/utils/index.js +0 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.js +1 -562
- package/dist/components/rx-async.d.ts +2 -2
- package/dist/components/rx-async.js +1 -86
- package/dist/components/set-property.js +1 -1150
- package/dist/esm/app-globals-DQuL1Twl.js +3 -0
- package/dist/esm/index-BIBww8qU.js +1202 -0
- package/dist/esm/index.js +167 -447
- package/dist/esm/loader.js +5 -5
- package/dist/esm/rx-async.entry.js +29 -61
- package/dist/esm/rx-stencil.js +14 -13
- package/dist/esm/set-property-CpZKE-Xu.js +9520 -0
- package/dist/rx-stencil/index.esm.js +1 -2
- package/dist/rx-stencil/p-77100dee.entry.js +1 -0
- package/dist/rx-stencil/p-BIBww8qU.js +2 -0
- package/dist/rx-stencil/p-DQuL1Twl.js +1 -0
- package/dist/rx-stencil/p-IbpJ_cRo.js +1 -0
- package/dist/rx-stencil/rx-stencil.esm.js +1 -2
- package/dist/types/components/async/async.d.ts +5 -5
- package/dist/types/components.d.ts +7 -1
- package/dist/types/rx/decorator/query-selector-all.d.ts +9 -9
- package/dist/types/rx/decorator/query-selector.d.ts +9 -9
- package/dist/types/rx/observable/index.d.ts +1 -0
- package/dist/types/rx/observable/properties-observable.d.ts +6 -0
- package/dist/types/rx/subscriber/set-property.d.ts +12 -12
- package/dist/types/stencil-public-runtime.d.ts +225 -17
- package/docs/creation-operators.md +62 -3
- package/loader/cdn.js +1 -3
- package/loader/index.cjs.js +1 -3
- package/loader/index.d.ts +3 -0
- package/loader/index.es2017.js +1 -3
- package/loader/index.js +1 -3
- package/package.json +11 -10
- package/dist/cjs/index-5f6f12ab.js +0 -1265
- package/dist/cjs/index-5f6f12ab.js.map +0 -1
- package/dist/cjs/index.cjs.js.map +0 -1
- package/dist/cjs/loader.cjs.js.map +0 -1
- package/dist/cjs/rx-async.cjs.entry.js.map +0 -1
- package/dist/cjs/rx-stencil.cjs.js.map +0 -1
- package/dist/cjs/set-property-88176225.js +0 -1167
- package/dist/cjs/set-property-88176225.js.map +0 -1
- package/dist/collection/components/async/async.js.map +0 -1
- package/dist/collection/components/async/async.scss +0 -3
- package/dist/collection/index.js.map +0 -1
- package/dist/collection/rx/decorator/index.js.map +0 -1
- package/dist/collection/rx/decorator/query-selector-all.js.map +0 -1
- package/dist/collection/rx/decorator/query-selector.js.map +0 -1
- package/dist/collection/rx/index.js.map +0 -1
- package/dist/collection/rx/observable/index.js.map +0 -1
- package/dist/collection/rx/observable/mutation-observable.js.map +0 -1
- package/dist/collection/rx/observable/property-observable.js.map +0 -1
- package/dist/collection/rx/observable/render-observable.js.map +0 -1
- package/dist/collection/rx/operator/index.js.map +0 -1
- package/dist/collection/rx/operator/schedule-render.js.map +0 -1
- package/dist/collection/rx/operator/to-property.js.map +0 -1
- package/dist/collection/rx/operator/until-disconnected.js.map +0 -1
- package/dist/collection/rx/subscriber/index.js.map +0 -1
- package/dist/collection/rx/subscriber/set-property.js.map +0 -1
- package/dist/collection/utils/get-property-descriptor.js.map +0 -1
- package/dist/collection/utils/index.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/rx-async.js.map +0 -1
- package/dist/components/set-property.js.map +0 -1
- package/dist/esm/index-9102de09.js +0 -1236
- package/dist/esm/index-9102de09.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/loader.js.map +0 -1
- package/dist/esm/polyfills/core-js.js +0 -11
- package/dist/esm/polyfills/dom.js +0 -79
- package/dist/esm/polyfills/es5-html-element.js +0 -1
- package/dist/esm/polyfills/index.js +0 -34
- package/dist/esm/polyfills/system.js +0 -6
- package/dist/esm/rx-async.entry.js.map +0 -1
- package/dist/esm/rx-stencil.js.map +0 -1
- package/dist/esm/set-property-7fa82bef.js +0 -1150
- package/dist/esm/set-property-7fa82bef.js.map +0 -1
- package/dist/rx-stencil/index.esm.js.map +0 -1
- package/dist/rx-stencil/p-01af4414.entry.js +0 -2
- package/dist/rx-stencil/p-01af4414.entry.js.map +0 -1
- package/dist/rx-stencil/p-0cd0b2da.js +0 -2
- package/dist/rx-stencil/p-0cd0b2da.js.map +0 -1
- package/dist/rx-stencil/p-8411601b.js +0 -3
- package/dist/rx-stencil/p-8411601b.js.map +0 -1
- package/dist/rx-stencil/rx-stencil.esm.js.map +0 -1
- package/loader/package.json +0 -11
|
@@ -2,66 +2,67 @@ import { h, Host, } from "@stencil/core";
|
|
|
2
2
|
import { from, isObservable, of, switchMap, } from "rxjs";
|
|
3
3
|
import { propertyObservable, setProperty, } from "../../rx";
|
|
4
4
|
export class Async {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
if (value instanceof Promise) {
|
|
15
|
-
return from(value);
|
|
16
|
-
}
|
|
17
|
-
return of(value);
|
|
18
|
-
})).subscribe(setProperty(this, '_value', {
|
|
19
|
-
scheduleRender: true,
|
|
20
|
-
nextTick: false,
|
|
21
|
-
}));
|
|
22
|
-
}
|
|
23
|
-
disconnectedCallback() {
|
|
24
|
-
// noop
|
|
25
|
-
}
|
|
26
|
-
render() {
|
|
27
|
-
return (h(Host, null, this._value));
|
|
28
|
-
}
|
|
29
|
-
static get is() { return "rx-async"; }
|
|
30
|
-
static get originalStyleUrls() {
|
|
31
|
-
return {
|
|
32
|
-
"$": ["async.scss"]
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
static get styleUrls() {
|
|
36
|
-
return {
|
|
37
|
-
"$": ["async.css"]
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
static get properties() {
|
|
41
|
-
return {
|
|
42
|
-
"value": {
|
|
43
|
-
"type": "unknown",
|
|
44
|
-
"mutable": false,
|
|
45
|
-
"complexType": {
|
|
46
|
-
"original": "AsyncValue",
|
|
47
|
-
"resolved": "Observable<unknown> | Promise<unknown>",
|
|
48
|
-
"references": {
|
|
49
|
-
"AsyncValue": {
|
|
50
|
-
"location": "local",
|
|
51
|
-
"path": "/Users/thecelavi/Sites/RunOpenCode/stencil-libs/rx-stencil/src/components/async/async.tsx",
|
|
52
|
-
"id": "src/components/async/async.tsx::AsyncValue"
|
|
5
|
+
constructor() {
|
|
6
|
+
this.value = null;
|
|
7
|
+
this._value = null;
|
|
8
|
+
}
|
|
9
|
+
connectedCallback() {
|
|
10
|
+
propertyObservable(this, 'value').pipe(switchMap((value) => {
|
|
11
|
+
if (isObservable(value)) {
|
|
12
|
+
return value;
|
|
53
13
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
14
|
+
if (value instanceof Promise) {
|
|
15
|
+
return from(value);
|
|
16
|
+
}
|
|
17
|
+
return of(value);
|
|
18
|
+
})).subscribe(setProperty(this, '_value', {
|
|
19
|
+
scheduleRender: true,
|
|
20
|
+
nextTick: false,
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
disconnectedCallback() {
|
|
24
|
+
// noop
|
|
25
|
+
}
|
|
26
|
+
render() {
|
|
27
|
+
return (h(Host, { key: '83bc02eb1171d43e61d25232a0bc1ad024294e68' }, this._value));
|
|
28
|
+
}
|
|
29
|
+
static get is() { return "rx-async"; }
|
|
30
|
+
static get originalStyleUrls() {
|
|
31
|
+
return {
|
|
32
|
+
"$": ["async.scss"]
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
static get styleUrls() {
|
|
36
|
+
return {
|
|
37
|
+
"$": ["async.css"]
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
static get properties() {
|
|
41
|
+
return {
|
|
42
|
+
"value": {
|
|
43
|
+
"type": "unknown",
|
|
44
|
+
"mutable": false,
|
|
45
|
+
"complexType": {
|
|
46
|
+
"original": "AsyncValue",
|
|
47
|
+
"resolved": "Observable<unknown> | Promise<unknown>",
|
|
48
|
+
"references": {
|
|
49
|
+
"AsyncValue": {
|
|
50
|
+
"location": "local",
|
|
51
|
+
"path": "/Users/thecelavi/Sites/RunOpenCode/stencil-libs/rx-stencil/src/components/async/async.tsx",
|
|
52
|
+
"id": "src/components/async/async.tsx::AsyncValue"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"required": false,
|
|
57
|
+
"optional": false,
|
|
58
|
+
"docs": {
|
|
59
|
+
"tags": [],
|
|
60
|
+
"text": ""
|
|
61
|
+
},
|
|
62
|
+
"getter": false,
|
|
63
|
+
"setter": false,
|
|
64
|
+
"defaultValue": "null"
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
66
68
|
}
|
|
67
|
-
//# sourceMappingURL=async.js.map
|
package/dist/collection/index.js
CHANGED
|
@@ -10,32 +10,31 @@ import { observeSubNodes } from "./query-selector";
|
|
|
10
10
|
* set to null.
|
|
11
11
|
*/
|
|
12
12
|
export function QuerySelectorAll(selector, options) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
13
|
+
return (target, property) => {
|
|
14
|
+
let descriptor = {
|
|
15
|
+
set: function () {
|
|
16
|
+
throw new Error(`Property "${property}" is read-only.`);
|
|
17
|
+
},
|
|
18
|
+
get: function () {
|
|
19
|
+
let observableProperty = `__rx__query_selector_all__observable__shadow_root__${(options === null || options === void 0 ? void 0 : options.shadowRoot) ? 'yes' : 'no'}__mutation_observer__${(options === null || options === void 0 ? void 0 : options.mutationObserver) ? 'yes' : 'no'}__selector__${selector}__`;
|
|
20
|
+
if (!this[observableProperty]) {
|
|
21
|
+
let root = (options === null || options === void 0 ? void 0 : options.shadowRoot) ? getElement(this).shadowRoot : getElement(this);
|
|
22
|
+
let observable = (options === null || options === void 0 ? void 0 : options.mutationObserver) ? observeSubNodes(root) : renderObservable(this);
|
|
23
|
+
this[observableProperty] = observable.pipe(startWith(), map(() => Array.from(root.querySelectorAll(selector))), distinctUntilChanged((previous, current) => {
|
|
24
|
+
if (previous.length !== current.length) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
for (let i = 0; i < previous.length; i++) {
|
|
28
|
+
if (previous[i] !== current[i]) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}), shareReplay(1));
|
|
34
|
+
}
|
|
35
|
+
return this[observableProperty];
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(target, property, descriptor);
|
|
37
39
|
};
|
|
38
|
-
Object.defineProperty(target, property, descriptor);
|
|
39
|
-
};
|
|
40
40
|
}
|
|
41
|
-
//# sourceMappingURL=query-selector-all.js.map
|
|
@@ -8,22 +8,22 @@ import { mutationObservable, renderObservable, } from "../observable";
|
|
|
8
8
|
* {@internal}
|
|
9
9
|
*/
|
|
10
10
|
export function observeSubNodes(target) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
11
|
+
return mutationObservable(target, {
|
|
12
|
+
subtree: true,
|
|
13
|
+
childList: true,
|
|
14
|
+
}).pipe(filter((records) => {
|
|
15
|
+
for (let i = 0; i < records.length; i++) {
|
|
16
|
+
if ('childList' !== records[i].type) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (records[i].addedNodes.length || records[i].removedNodes.length) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}), map(() => {
|
|
25
|
+
/* noop */
|
|
26
|
+
}));
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
29
29
|
* Property decorator inspired by Angular's @ViewChild/@ContentChild.
|
|
@@ -33,22 +33,21 @@ export function observeSubNodes(target) {
|
|
|
33
33
|
* set to null.
|
|
34
34
|
*/
|
|
35
35
|
export function QuerySelector(selector, options) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
36
|
+
return (target, property) => {
|
|
37
|
+
let descriptor = {
|
|
38
|
+
set: function () {
|
|
39
|
+
throw new Error(`Property "${property}" is read-only.`);
|
|
40
|
+
},
|
|
41
|
+
get: function () {
|
|
42
|
+
let observableProperty = `__rx__query_selector__observable__shadow_root__${(options === null || options === void 0 ? void 0 : options.shadowRoot) ? 'yes' : 'no'}__mutation_observer__${(options === null || options === void 0 ? void 0 : options.mutationObserver) ? 'yes' : 'no'}__selector__${selector}__`;
|
|
43
|
+
if (!this[observableProperty]) {
|
|
44
|
+
let root = (options === null || options === void 0 ? void 0 : options.shadowRoot) ? getElement(this).shadowRoot : getElement(this);
|
|
45
|
+
let observable = (options === null || options === void 0 ? void 0 : options.mutationObserver) ? observeSubNodes(root) : renderObservable(this);
|
|
46
|
+
this[observableProperty] = observable.pipe(startWith(), map(() => root.querySelector(selector)), distinctUntilChanged(), shareReplay(1));
|
|
47
|
+
}
|
|
48
|
+
return this[observableProperty];
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
Object.defineProperty(target, property, descriptor);
|
|
50
52
|
};
|
|
51
|
-
Object.defineProperty(target, property, descriptor);
|
|
52
|
-
};
|
|
53
53
|
}
|
|
54
|
-
//# sourceMappingURL=query-selector.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { mutationObservable } from './mutation-observable';
|
|
2
2
|
export { propertyObservable } from './property-observable';
|
|
3
|
+
export { propertiesObservable } from './properties-observable';
|
|
3
4
|
export { renderObservable } from './render-observable';
|
|
4
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { Observable, } from "rxjs";
|
|
2
2
|
export function mutationObservable(target, options) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
return new Observable((observer) => {
|
|
4
|
+
let mutation = new MutationObserver((mutations) => {
|
|
5
|
+
observer.next(mutations);
|
|
6
|
+
});
|
|
7
|
+
mutation.observe(target, options);
|
|
8
|
+
return () => {
|
|
9
|
+
mutation.disconnect();
|
|
10
|
+
};
|
|
6
11
|
});
|
|
7
|
-
mutation.observe(target, options);
|
|
8
|
-
return () => {
|
|
9
|
-
mutation.disconnect();
|
|
10
|
-
};
|
|
11
|
-
});
|
|
12
12
|
}
|
|
13
|
-
//# sourceMappingURL=mutation-observable.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { combineLatest, } from "rxjs";
|
|
2
|
+
import { propertyObservable } from "./property-observable";
|
|
3
|
+
/**
|
|
4
|
+
* Returns an observable that emits an array of values from the given properties.
|
|
5
|
+
*/
|
|
6
|
+
export function propertiesObservable(cmp, ...properties) {
|
|
7
|
+
if (0 === properties.length) {
|
|
8
|
+
throw new Error('At least one property must be specified.');
|
|
9
|
+
}
|
|
10
|
+
return combineLatest(properties.map((property) => {
|
|
11
|
+
return propertyObservable(cmp, property);
|
|
12
|
+
}));
|
|
13
|
+
}
|
|
@@ -4,25 +4,24 @@ import { getPropertyDescriptor } from "../../utils";
|
|
|
4
4
|
* Returns an observable that emits property value when the component property value changes.
|
|
5
5
|
*/
|
|
6
6
|
export function propertyObservable(cmp, property) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
7
|
+
let subjectProperty = `__rx__subject_for_property__${property}__`;
|
|
8
|
+
if (!cmp[subjectProperty]) {
|
|
9
|
+
let descriptor = getPropertyDescriptor(cmp, property);
|
|
10
|
+
let previousSetter = descriptor.set;
|
|
11
|
+
let previousGetter = descriptor.get;
|
|
12
|
+
// we have to invoke previous getter on component instance to get the current value
|
|
13
|
+
let currentValue = undefined !== previousGetter ? previousGetter.call(cmp) : descriptor.value;
|
|
14
|
+
let subject = new BehaviorSubject(currentValue);
|
|
15
|
+
descriptor.set = function (value) {
|
|
16
|
+
if (previousSetter) {
|
|
17
|
+
previousSetter.call(this, value);
|
|
18
|
+
}
|
|
19
|
+
subject.next(value);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(cmp, property, descriptor);
|
|
22
|
+
cmp[subjectProperty] = subject;
|
|
23
|
+
}
|
|
24
|
+
return cmp[subjectProperty]
|
|
25
|
+
.asObservable()
|
|
26
|
+
.pipe(distinctUntilChanged());
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=property-observable.js.map
|
|
@@ -5,20 +5,19 @@ import { Observable, } from "rxjs";
|
|
|
5
5
|
* microtask (next tick).
|
|
6
6
|
*/
|
|
7
7
|
export function renderObservable(cmp) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
if ('function' !== typeof cmp.render) {
|
|
9
|
+
throw new Error('Component does not have a render function.');
|
|
10
|
+
}
|
|
11
|
+
return new Observable((subscriber) => {
|
|
12
|
+
let previousRender = cmp.render;
|
|
13
|
+
cmp.render = function () {
|
|
14
|
+
Promise.resolve().then(() => {
|
|
15
|
+
subscriber.next();
|
|
16
|
+
});
|
|
17
|
+
return previousRender.call(this);
|
|
18
|
+
};
|
|
19
|
+
return () => {
|
|
20
|
+
cmp.render = previousRender;
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
23
|
}
|
|
24
|
-
//# sourceMappingURL=render-observable.js.map
|
|
@@ -10,14 +10,13 @@ import { tap, } from "rxjs";
|
|
|
10
10
|
* can disable this behavior by passing `false` as second argument.
|
|
11
11
|
*/
|
|
12
12
|
export function scheduleRender(cmp, nextTick = true) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
return (source) => {
|
|
14
|
+
return source.pipe(tap(() => {
|
|
15
|
+
if (!nextTick) {
|
|
16
|
+
forceUpdate(cmp);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
Promise.resolve().then(() => forceUpdate(cmp));
|
|
20
|
+
}));
|
|
21
|
+
};
|
|
22
22
|
}
|
|
23
|
-
//# sourceMappingURL=schedule-render.js.map
|
|
@@ -7,13 +7,12 @@ import { getPropertyDescriptor } from "../../utils";
|
|
|
7
7
|
* observable).
|
|
8
8
|
*/
|
|
9
9
|
export function toProperty(cmp, property) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
// ensure that the property is defined on the component.
|
|
11
|
+
getPropertyDescriptor(cmp, property);
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
return (source) => {
|
|
14
|
+
return source.pipe(tap((value) => {
|
|
15
|
+
cmp[property] = value;
|
|
16
|
+
}));
|
|
17
|
+
};
|
|
18
18
|
}
|
|
19
|
-
//# sourceMappingURL=to-property.js.map
|
|
@@ -17,18 +17,18 @@ let disconnectObservables = new WeakMap();
|
|
|
17
17
|
* {@internal}
|
|
18
18
|
*/
|
|
19
19
|
let createUsingDisconnectedCallback = function (cmp) {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
let disconnectedSubject$ = new Subject();
|
|
25
|
-
cmp.disconnectedCallback = function () {
|
|
26
|
-
if (previousDisconnected) {
|
|
27
|
-
previousDisconnected.call(cmp);
|
|
20
|
+
let previousDisconnected = cmp.disconnectedCallback;
|
|
21
|
+
if (!previousDisconnected) {
|
|
22
|
+
throw new Error(`Component "${cmp.constructor.name}" does not have a "disconnectedCallback()" method defined.`);
|
|
28
23
|
}
|
|
29
|
-
disconnectedSubject
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
let disconnectedSubject$ = new Subject();
|
|
25
|
+
cmp.disconnectedCallback = function () {
|
|
26
|
+
if (previousDisconnected) {
|
|
27
|
+
previousDisconnected.call(cmp);
|
|
28
|
+
}
|
|
29
|
+
disconnectedSubject$.next();
|
|
30
|
+
};
|
|
31
|
+
return disconnectedSubject$.asObservable();
|
|
32
32
|
};
|
|
33
33
|
/**
|
|
34
34
|
* Mutation observer is our next heuristic. We will monitor parent
|
|
@@ -40,32 +40,32 @@ let createUsingDisconnectedCallback = function (cmp) {
|
|
|
40
40
|
* {@internal}
|
|
41
41
|
*/
|
|
42
42
|
let createUsingMutationObserver = function (cmp) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
43
|
+
let element = getElement(cmp);
|
|
44
|
+
if (null === element.parentNode) {
|
|
45
|
+
throw new Error(`Component "${cmp.constructor.name}" is not within DOM.`);
|
|
46
|
+
}
|
|
47
|
+
return new Observable((observer) => {
|
|
48
|
+
let mutationObserver = new MutationObserver((mutations) => {
|
|
49
|
+
mutations.forEach((record) => {
|
|
50
|
+
for (let node of Array.from(record.removedNodes)) {
|
|
51
|
+
if (node !== element) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
observer.next();
|
|
55
|
+
observer.complete();
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
mutationObserver.observe(element.parentNode, {
|
|
60
|
+
childList: true,
|
|
61
|
+
subtree: true,
|
|
62
|
+
});
|
|
63
|
+
return () => {
|
|
64
|
+
mutationObserver.disconnect();
|
|
65
|
+
// we can not re-use this observable, so we have to delete it
|
|
66
|
+
disconnectObservables.delete(cmp);
|
|
67
|
+
};
|
|
62
68
|
});
|
|
63
|
-
return () => {
|
|
64
|
-
mutationObserver.disconnect();
|
|
65
|
-
// we can not re-use this observable, so we have to delete it
|
|
66
|
-
disconnectObservables.delete(cmp);
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
69
|
};
|
|
70
70
|
/**
|
|
71
71
|
* Creates an observable that emits a value when the component
|
|
@@ -74,32 +74,31 @@ let createUsingMutationObserver = function (cmp) {
|
|
|
74
74
|
* {@internal}
|
|
75
75
|
*/
|
|
76
76
|
function createDisconnectObservable(cmp) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
77
|
+
let functions = [
|
|
78
|
+
createUsingDisconnectedCallback,
|
|
79
|
+
createUsingMutationObserver,
|
|
80
|
+
];
|
|
81
|
+
for (let fn of functions) {
|
|
82
|
+
try {
|
|
83
|
+
disconnectObservables.set(cmp, fn(cmp));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
// noop
|
|
88
|
+
}
|
|
88
89
|
}
|
|
89
|
-
|
|
90
|
-
throw new Error(`Could not create disconnect observable for component "${cmp.constructor.name}".`);
|
|
90
|
+
throw new Error(`Could not create disconnect observable for component "${cmp.constructor.name}".`);
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
93
|
* Operator that unsubscribes from the source observable when
|
|
94
94
|
* the component is disconnected from DOM.
|
|
95
95
|
*/
|
|
96
96
|
export function untilDisconnected(cmp) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
97
|
+
return (source) => {
|
|
98
|
+
if (!disconnectObservables.has(cmp)) {
|
|
99
|
+
createDisconnectObservable(cmp);
|
|
100
|
+
}
|
|
101
|
+
let disconnectObservable$ = disconnectObservables.get(cmp);
|
|
102
|
+
return source.pipe(takeUntil(disconnectObservable$));
|
|
103
|
+
};
|
|
104
104
|
}
|
|
105
|
-
//# sourceMappingURL=until-disconnected.js.map
|