@joist/observable 3.1.0 → 3.1.2
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/package.json +3 -2
- package/src/lib/{meta.test.ts → metadata.test.ts} +3 -4
- package/src/lib/metadata.ts +45 -0
- package/src/lib/observe.test.ts +4 -2
- package/src/lib/observe.ts +26 -51
- package/src/lib/watch.test.ts +24 -0
- package/src/lib/watch.ts +11 -0
- package/target/lib/metadata.d.ts +21 -0
- package/target/lib/metadata.js +32 -0
- package/target/lib/metadata.js.map +1 -0
- package/target/lib/{meta.test.js → metadata.test.js} +4 -5
- package/target/lib/metadata.test.js.map +1 -0
- package/target/lib/observe.d.ts +3 -8
- package/target/lib/observe.js +20 -30
- package/target/lib/observe.js.map +1 -1
- package/target/lib/observe.test.js +28 -8
- package/target/lib/observe.test.js.map +1 -1
- package/target/lib/watch.d.ts +2 -0
- package/target/lib/watch.js +9 -0
- package/target/lib/watch.js.map +1 -0
- package/target/lib/watch.test.d.ts +1 -0
- package/target/lib/watch.test.js +35 -0
- package/target/lib/watch.test.js.map +1 -0
- package/src/lib/meta.ts +0 -23
- package/target/lib/meta.d.ts +0 -10
- package/target/lib/meta.js +0 -17
- package/target/lib/meta.js.map +0 -1
- package/target/lib/meta.test.js.map +0 -1
- /package/target/lib/{meta.test.d.ts → metadata.test.d.ts} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@joist/observable",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./target/lib.js",
|
|
6
6
|
"module": "./target/lib.js",
|
|
@@ -46,7 +46,8 @@
|
|
|
46
46
|
"clean": "if-file-deleted",
|
|
47
47
|
"files": [
|
|
48
48
|
"src/**",
|
|
49
|
-
"tsconfig.json"
|
|
49
|
+
"tsconfig.json",
|
|
50
|
+
"../../tsconfig.json"
|
|
50
51
|
],
|
|
51
52
|
"output": [
|
|
52
53
|
"target/**",
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { expect } from '@open-wc/testing';
|
|
2
|
-
import {
|
|
2
|
+
import { ObservableInstanceMetaDataStore } from './metadata.js';
|
|
3
3
|
|
|
4
4
|
describe('meta:meta', () => {
|
|
5
5
|
it('should return default metadata', () => {
|
|
6
6
|
const key = {};
|
|
7
|
-
const data = new
|
|
7
|
+
const data = new ObservableInstanceMetaDataStore().read(key);
|
|
8
8
|
|
|
9
9
|
expect(data).to.deep.equal({
|
|
10
10
|
changes: new Set(),
|
|
11
|
-
upgradable: new Map(),
|
|
12
11
|
scheduler: null,
|
|
13
12
|
});
|
|
14
13
|
});
|
|
15
14
|
|
|
16
15
|
it('should return the same metadata object after init', () => {
|
|
17
16
|
const key = {};
|
|
18
|
-
const data = new
|
|
17
|
+
const data = new ObservableInstanceMetaDataStore();
|
|
19
18
|
|
|
20
19
|
expect(data.read(key)).to.equal(data.read(key));
|
|
21
20
|
});
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
(Symbol as any).metadata ??= Symbol('Symbol.metadata');
|
|
2
|
+
|
|
3
|
+
export type EffectFn = (changes: Set<string | symbol>) => void;
|
|
4
|
+
|
|
5
|
+
export abstract class MetadataStore<Metadata> {
|
|
6
|
+
#data = new WeakMap<object, Metadata>();
|
|
7
|
+
|
|
8
|
+
read<T extends object>(value: T): Metadata {
|
|
9
|
+
let data = this.#data.get(value);
|
|
10
|
+
|
|
11
|
+
if (!data) {
|
|
12
|
+
data = this.init();
|
|
13
|
+
|
|
14
|
+
this.#data.set(value, data);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return data;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
abstract init(): Metadata;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class ObservableInstanceMetadata {
|
|
24
|
+
scheduler: Promise<void> | null = null;
|
|
25
|
+
changes = new Set<string | symbol>();
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export class ObservableInstanceMetaDataStore extends MetadataStore<ObservableInstanceMetadata> {
|
|
29
|
+
init() {
|
|
30
|
+
return new ObservableInstanceMetadata();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class ObservableMetadata {
|
|
35
|
+
effects: Set<EffectFn> = new Set();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export class ObservableMetadataStore extends MetadataStore<ObservableMetadata> {
|
|
39
|
+
init() {
|
|
40
|
+
return new ObservableMetadata();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export const instanceMetadataStore = new ObservableInstanceMetaDataStore();
|
|
45
|
+
export const observableMetadataStore = new ObservableMetadataStore();
|
package/src/lib/observe.test.ts
CHANGED
|
@@ -98,9 +98,11 @@ describe('observable: observe()', () => {
|
|
|
98
98
|
fixture<any>(html`<observable-1></observable-1>`).then((el) => {
|
|
99
99
|
el.value = 100;
|
|
100
100
|
|
|
101
|
-
customElements.
|
|
101
|
+
customElements.whenDefined('observable-1').then(() => {
|
|
102
|
+
el.value++;
|
|
103
|
+
});
|
|
102
104
|
|
|
103
|
-
|
|
105
|
+
customElements.define('observable-1', Counter);
|
|
104
106
|
});
|
|
105
107
|
});
|
|
106
108
|
});
|
package/src/lib/observe.ts
CHANGED
|
@@ -1,76 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
(Symbol as any).metadata ??= Symbol('Symbol.metadata');
|
|
3
|
-
|
|
4
|
-
import { EffectFn, MetaData } from './meta.js';
|
|
5
|
-
|
|
6
|
-
const metaData = new MetaData();
|
|
7
|
-
|
|
8
|
-
export interface ObservableCtx {
|
|
9
|
-
metadata: {
|
|
10
|
-
effects?: Set<EffectFn>;
|
|
11
|
-
};
|
|
12
|
-
}
|
|
1
|
+
import { EffectFn, instanceMetadataStore, observableMetadataStore } from './metadata.js';
|
|
13
2
|
|
|
14
3
|
export function observe<This extends object, Value>(
|
|
15
4
|
base: ClassAccessorDecoratorTarget<This, Value>,
|
|
16
|
-
ctx: ClassAccessorDecoratorContext<This, Value>
|
|
5
|
+
ctx: ClassAccessorDecoratorContext<This, Value>
|
|
17
6
|
): ClassAccessorDecoratorResult<This, Value> {
|
|
18
|
-
// handle upgradable values (specifically custom elements)
|
|
19
|
-
ctx.addInitializer(function (this: This) {
|
|
20
|
-
const meta = metaData.read(this);
|
|
21
|
-
|
|
22
|
-
let value: Value | undefined;
|
|
23
|
-
|
|
24
|
-
// attempt to read value.
|
|
25
|
-
try {
|
|
26
|
-
value = ctx.access.get(this);
|
|
27
|
-
} catch {}
|
|
28
|
-
|
|
29
|
-
if (value) {
|
|
30
|
-
// if there is a value, delete it and cache it for init
|
|
31
|
-
delete (<any>this)[ctx.name];
|
|
32
|
-
|
|
33
|
-
meta.upgradable.set(ctx.name, value);
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
|
|
37
7
|
return {
|
|
38
8
|
init(value) {
|
|
39
|
-
|
|
9
|
+
let val: Value | null = null;
|
|
40
10
|
|
|
41
|
-
|
|
42
|
-
|
|
11
|
+
// START: Make upgradable custom elements work
|
|
12
|
+
try {
|
|
13
|
+
val = ctx.access.get(this);
|
|
14
|
+
} catch {}
|
|
15
|
+
|
|
16
|
+
if (val) {
|
|
17
|
+
delete (<any>this)[ctx.name];
|
|
18
|
+
|
|
19
|
+
return val;
|
|
43
20
|
}
|
|
21
|
+
// END
|
|
44
22
|
|
|
45
23
|
return value;
|
|
46
24
|
},
|
|
47
25
|
set(value) {
|
|
48
|
-
const
|
|
26
|
+
const instanceMeta = instanceMetadataStore.read(this);
|
|
27
|
+
const observableMeta = observableMetadataStore.read(ctx.metadata);
|
|
49
28
|
|
|
50
|
-
if (
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
effect.call(this, meta.changes);
|
|
55
|
-
}
|
|
29
|
+
if (instanceMeta.scheduler === null) {
|
|
30
|
+
instanceMeta.scheduler = Promise.resolve().then(() => {
|
|
31
|
+
for (let effect of observableMeta.effects) {
|
|
32
|
+
effect.call(this, instanceMeta.changes);
|
|
56
33
|
}
|
|
57
34
|
|
|
58
|
-
|
|
59
|
-
|
|
35
|
+
instanceMeta.scheduler = null;
|
|
36
|
+
instanceMeta.changes.clear();
|
|
60
37
|
});
|
|
61
38
|
}
|
|
62
39
|
|
|
63
|
-
|
|
40
|
+
instanceMeta.changes.add(ctx.name);
|
|
64
41
|
|
|
65
42
|
base.set.call(this, value);
|
|
66
43
|
},
|
|
67
44
|
};
|
|
68
45
|
}
|
|
69
46
|
|
|
70
|
-
export function effect<T extends object>(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
)
|
|
74
|
-
ctx.metadata.effects ??= new Set();
|
|
75
|
-
ctx.metadata.effects.add(value);
|
|
47
|
+
export function effect<T extends object>(value: EffectFn, ctx: ClassMethodDecoratorContext<T>) {
|
|
48
|
+
const data = observableMetadataStore.read(ctx.metadata);
|
|
49
|
+
|
|
50
|
+
data.effects.add(value);
|
|
76
51
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { expect } from '@open-wc/testing';
|
|
2
|
+
|
|
3
|
+
import { observe } from './observe.js';
|
|
4
|
+
import { watch } from './watch.js';
|
|
5
|
+
|
|
6
|
+
describe('observable: observe()', () => {
|
|
7
|
+
it('should watch externally from the class', (done) => {
|
|
8
|
+
class Counter {
|
|
9
|
+
@observe static accessor value = 0;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
watch(Counter, () => {
|
|
13
|
+
expect(Counter.value).to.equal(1);
|
|
14
|
+
|
|
15
|
+
done();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
expect(Counter.value).to.equal(0);
|
|
19
|
+
|
|
20
|
+
Counter.value++;
|
|
21
|
+
|
|
22
|
+
expect(Counter.value).to.equal(1);
|
|
23
|
+
});
|
|
24
|
+
});
|
package/src/lib/watch.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { EffectFn, observableMetadataStore } from './metadata.js';
|
|
2
|
+
|
|
3
|
+
export function watch(value: new () => object, cb: EffectFn) {
|
|
4
|
+
const key = value[Symbol.metadata];
|
|
5
|
+
|
|
6
|
+
if (key) {
|
|
7
|
+
const meta = observableMetadataStore.read(key);
|
|
8
|
+
|
|
9
|
+
meta.effects.add(cb);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type EffectFn = (changes: Set<string | symbol>) => void;
|
|
2
|
+
export declare abstract class MetadataStore<Metadata> {
|
|
3
|
+
#private;
|
|
4
|
+
read<T extends object>(value: T): Metadata;
|
|
5
|
+
abstract init(): Metadata;
|
|
6
|
+
}
|
|
7
|
+
export declare class ObservableInstanceMetadata {
|
|
8
|
+
scheduler: Promise<void> | null;
|
|
9
|
+
changes: Set<string | symbol>;
|
|
10
|
+
}
|
|
11
|
+
export declare class ObservableInstanceMetaDataStore extends MetadataStore<ObservableInstanceMetadata> {
|
|
12
|
+
init(): ObservableInstanceMetadata;
|
|
13
|
+
}
|
|
14
|
+
export declare class ObservableMetadata {
|
|
15
|
+
effects: Set<EffectFn>;
|
|
16
|
+
}
|
|
17
|
+
export declare class ObservableMetadataStore extends MetadataStore<ObservableMetadata> {
|
|
18
|
+
init(): ObservableMetadata;
|
|
19
|
+
}
|
|
20
|
+
export declare const instanceMetadataStore: ObservableInstanceMetaDataStore;
|
|
21
|
+
export declare const observableMetadataStore: ObservableMetadataStore;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
Symbol.metadata ??= Symbol('Symbol.metadata');
|
|
2
|
+
export class MetadataStore {
|
|
3
|
+
#data = new WeakMap();
|
|
4
|
+
read(value) {
|
|
5
|
+
let data = this.#data.get(value);
|
|
6
|
+
if (!data) {
|
|
7
|
+
data = this.init();
|
|
8
|
+
this.#data.set(value, data);
|
|
9
|
+
}
|
|
10
|
+
return data;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class ObservableInstanceMetadata {
|
|
14
|
+
scheduler = null;
|
|
15
|
+
changes = new Set();
|
|
16
|
+
}
|
|
17
|
+
export class ObservableInstanceMetaDataStore extends MetadataStore {
|
|
18
|
+
init() {
|
|
19
|
+
return new ObservableInstanceMetadata();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class ObservableMetadata {
|
|
23
|
+
effects = new Set();
|
|
24
|
+
}
|
|
25
|
+
export class ObservableMetadataStore extends MetadataStore {
|
|
26
|
+
init() {
|
|
27
|
+
return new ObservableMetadata();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export const instanceMetadataStore = new ObservableInstanceMetaDataStore();
|
|
31
|
+
export const observableMetadataStore = new ObservableMetadataStore();
|
|
32
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAIvD,MAAM,OAAgB,aAAa;IACjC,KAAK,GAAG,IAAI,OAAO,EAAoB,CAAC;IAExC,IAAI,CAAmB,KAAQ;QAC7B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CAGF;AAED,MAAM,OAAO,0BAA0B;IACrC,SAAS,GAAyB,IAAI,CAAC;IACvC,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;CACtC;AAED,MAAM,OAAO,+BAAgC,SAAQ,aAAyC;IAC5F,IAAI;QACF,OAAO,IAAI,0BAA0B,EAAE,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,kBAAkB;IAC7B,OAAO,GAAkB,IAAI,GAAG,EAAE,CAAC;CACpC;AAED,MAAM,OAAO,uBAAwB,SAAQ,aAAiC;IAC5E,IAAI;QACF,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,+BAA+B,EAAE,CAAC;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { expect } from '@open-wc/testing';
|
|
2
|
-
import {
|
|
2
|
+
import { ObservableInstanceMetaDataStore } from './metadata.js';
|
|
3
3
|
describe('meta:meta', () => {
|
|
4
4
|
it('should return default metadata', () => {
|
|
5
5
|
const key = {};
|
|
6
|
-
const data = new
|
|
6
|
+
const data = new ObservableInstanceMetaDataStore().read(key);
|
|
7
7
|
expect(data).to.deep.equal({
|
|
8
8
|
changes: new Set(),
|
|
9
|
-
upgradable: new Map(),
|
|
10
9
|
scheduler: null,
|
|
11
10
|
});
|
|
12
11
|
});
|
|
13
12
|
it('should return the same metadata object after init', () => {
|
|
14
13
|
const key = {};
|
|
15
|
-
const data = new
|
|
14
|
+
const data = new ObservableInstanceMetaDataStore();
|
|
16
15
|
expect(data.read(key)).to.equal(data.read(key));
|
|
17
16
|
});
|
|
18
17
|
});
|
|
19
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=metadata.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.test.js","sourceRoot":"","sources":["../../src/lib/metadata.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAEhE,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,+BAA+B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7D,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,+BAA+B,EAAE,CAAC;QAEnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/target/lib/observe.d.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import { EffectFn } from './
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
effects?: Set<EffectFn>;
|
|
5
|
-
};
|
|
6
|
-
}
|
|
7
|
-
export declare function observe<This extends object, Value>(base: ClassAccessorDecoratorTarget<This, Value>, ctx: ClassAccessorDecoratorContext<This, Value> & ObservableCtx): ClassAccessorDecoratorResult<This, Value>;
|
|
8
|
-
export declare function effect<T extends object>(value: EffectFn, ctx: ClassMethodDecoratorContext<T> & ObservableCtx): void;
|
|
1
|
+
import { EffectFn } from './metadata.js';
|
|
2
|
+
export declare function observe<This extends object, Value>(base: ClassAccessorDecoratorTarget<This, Value>, ctx: ClassAccessorDecoratorContext<This, Value>): ClassAccessorDecoratorResult<This, Value>;
|
|
3
|
+
export declare function effect<T extends object>(value: EffectFn, ctx: ClassMethodDecoratorContext<T>): void;
|
package/target/lib/observe.js
CHANGED
|
@@ -1,47 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
import { MetaData } from './meta.js';
|
|
3
|
-
const metaData = new MetaData();
|
|
1
|
+
import { instanceMetadataStore, observableMetadataStore } from './metadata.js';
|
|
4
2
|
export function observe(base, ctx) {
|
|
5
|
-
ctx.addInitializer(function () {
|
|
6
|
-
const meta = metaData.read(this);
|
|
7
|
-
let value;
|
|
8
|
-
try {
|
|
9
|
-
value = ctx.access.get(this);
|
|
10
|
-
}
|
|
11
|
-
catch { }
|
|
12
|
-
if (value) {
|
|
13
|
-
delete this[ctx.name];
|
|
14
|
-
meta.upgradable.set(ctx.name, value);
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
3
|
return {
|
|
18
4
|
init(value) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
5
|
+
let val = null;
|
|
6
|
+
try {
|
|
7
|
+
val = ctx.access.get(this);
|
|
8
|
+
}
|
|
9
|
+
catch { }
|
|
10
|
+
if (val) {
|
|
11
|
+
delete this[ctx.name];
|
|
12
|
+
return val;
|
|
22
13
|
}
|
|
23
14
|
return value;
|
|
24
15
|
},
|
|
25
16
|
set(value) {
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
17
|
+
const instanceMeta = instanceMetadataStore.read(this);
|
|
18
|
+
const observableMeta = observableMetadataStore.read(ctx.metadata);
|
|
19
|
+
if (instanceMeta.scheduler === null) {
|
|
20
|
+
instanceMeta.scheduler = Promise.resolve().then(() => {
|
|
21
|
+
for (let effect of observableMeta.effects) {
|
|
22
|
+
effect.call(this, instanceMeta.changes);
|
|
33
23
|
}
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
instanceMeta.scheduler = null;
|
|
25
|
+
instanceMeta.changes.clear();
|
|
36
26
|
});
|
|
37
27
|
}
|
|
38
|
-
|
|
28
|
+
instanceMeta.changes.add(ctx.name);
|
|
39
29
|
base.set.call(this, value);
|
|
40
30
|
},
|
|
41
31
|
};
|
|
42
32
|
}
|
|
43
33
|
export function effect(value, ctx) {
|
|
44
|
-
|
|
45
|
-
|
|
34
|
+
const data = observableMetadataStore.read(ctx.metadata);
|
|
35
|
+
data.effects.add(value);
|
|
46
36
|
}
|
|
47
37
|
//# sourceMappingURL=observe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/lib/observe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../src/lib/observe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAEzF,MAAM,UAAU,OAAO,CACrB,IAA+C,EAC/C,GAA+C;IAE/C,OAAO;QACL,IAAI,CAAC,KAAK;YACR,IAAI,GAAG,GAAiB,IAAI,CAAC;YAG7B,IAAI,CAAC;gBACH,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAEV,IAAI,GAAG,EAAE,CAAC;gBACR,OAAa,IAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAE7B,OAAO,GAAG,CAAC;YACb,CAAC;YAGD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,GAAG,CAAC,KAAK;YACP,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,cAAc,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAElE,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBACpC,YAAY,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;oBACnD,KAAK,IAAI,MAAM,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;wBAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;oBAC1C,CAAC;oBAED,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC;oBAC9B,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC/B,CAAC,CAAC,CAAC;YACL,CAAC;YAED,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEnC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAmB,KAAe,EAAE,GAAmC;IAC3F,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAExD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -7,24 +7,27 @@ describe('observable: observe()', () => {
|
|
|
7
7
|
let _staticExtraInitializers = [];
|
|
8
8
|
let _static_value_decorators;
|
|
9
9
|
let _static_value_initializers = [];
|
|
10
|
+
let _static_value_extraInitializers = [];
|
|
10
11
|
let _static_onPropChanged_decorators;
|
|
11
12
|
return class Counter {
|
|
12
13
|
static {
|
|
13
14
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
14
15
|
_static_value_decorators = [observe];
|
|
15
16
|
_static_onPropChanged_decorators = [effect];
|
|
16
|
-
__esDecorate(this, null, _static_value_decorators, { kind: "accessor", name: "value", static: true, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _static_value_initializers,
|
|
17
|
+
__esDecorate(this, null, _static_value_decorators, { kind: "accessor", name: "value", static: true, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _static_value_initializers, _static_value_extraInitializers);
|
|
17
18
|
__esDecorate(this, null, _static_onPropChanged_decorators, { kind: "method", name: "onPropChanged", static: true, private: false, access: { has: obj => "onPropChanged" in obj, get: obj => obj.onPropChanged }, metadata: _metadata }, null, _staticExtraInitializers);
|
|
18
19
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
19
|
-
__runInitializers(this, _staticExtraInitializers);
|
|
20
20
|
}
|
|
21
|
-
static #value_accessor_storage = __runInitializers(this, _static_value_initializers, 0);
|
|
21
|
+
static #value_accessor_storage = (__runInitializers(this, _staticExtraInitializers), __runInitializers(this, _static_value_initializers, 0));
|
|
22
22
|
static get value() { return Counter.#value_accessor_storage; }
|
|
23
23
|
static set value(value) { Counter.#value_accessor_storage = value; }
|
|
24
24
|
static onPropChanged() {
|
|
25
25
|
expect(Counter.value).to.equal(1);
|
|
26
26
|
done();
|
|
27
27
|
}
|
|
28
|
+
static {
|
|
29
|
+
__runInitializers(this, _static_value_extraInitializers);
|
|
30
|
+
}
|
|
28
31
|
};
|
|
29
32
|
})();
|
|
30
33
|
expect(Counter.value).to.equal(0);
|
|
@@ -36,6 +39,7 @@ describe('observable: observe()', () => {
|
|
|
36
39
|
let _instanceExtraInitializers = [];
|
|
37
40
|
let _value_decorators;
|
|
38
41
|
let _value_initializers = [];
|
|
42
|
+
let _value_extraInitializers = [];
|
|
39
43
|
let _private_onChange_decorators;
|
|
40
44
|
let _private_onChange_descriptor;
|
|
41
45
|
return class Counter {
|
|
@@ -43,7 +47,7 @@ describe('observable: observe()', () => {
|
|
|
43
47
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
44
48
|
_value_decorators = [observe];
|
|
45
49
|
_private_onChange_decorators = [effect];
|
|
46
|
-
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers,
|
|
50
|
+
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
|
|
47
51
|
__esDecorate(this, _private_onChange_descriptor = { value: __setFunctionName(function () {
|
|
48
52
|
expect(this.value).to.equal(1);
|
|
49
53
|
done();
|
|
@@ -54,6 +58,9 @@ describe('observable: observe()', () => {
|
|
|
54
58
|
get value() { return this.#value_accessor_storage; }
|
|
55
59
|
set value(value) { this.#value_accessor_storage = value; }
|
|
56
60
|
get #onChange() { return _private_onChange_descriptor.value; }
|
|
61
|
+
constructor() {
|
|
62
|
+
__runInitializers(this, _value_extraInitializers);
|
|
63
|
+
}
|
|
57
64
|
};
|
|
58
65
|
})();
|
|
59
66
|
const counter = new Counter();
|
|
@@ -66,13 +73,14 @@ describe('observable: observe()', () => {
|
|
|
66
73
|
let _instanceExtraInitializers = [];
|
|
67
74
|
let _value_decorators;
|
|
68
75
|
let _value_initializers = [];
|
|
76
|
+
let _value_extraInitializers = [];
|
|
69
77
|
let _onChange_decorators;
|
|
70
78
|
return class Counter {
|
|
71
79
|
static {
|
|
72
80
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
73
81
|
_value_decorators = [observe];
|
|
74
82
|
_onChange_decorators = [effect];
|
|
75
|
-
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers,
|
|
83
|
+
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
|
|
76
84
|
__esDecorate(this, null, _onChange_decorators, { kind: "method", name: "onChange", static: false, private: false, access: { has: obj => "onChange" in obj, get: obj => obj.onChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
77
85
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
78
86
|
}
|
|
@@ -83,6 +91,9 @@ describe('observable: observe()', () => {
|
|
|
83
91
|
expect(changes.has('value')).to.be.true;
|
|
84
92
|
done();
|
|
85
93
|
}
|
|
94
|
+
constructor() {
|
|
95
|
+
__runInitializers(this, _value_extraInitializers);
|
|
96
|
+
}
|
|
86
97
|
};
|
|
87
98
|
})();
|
|
88
99
|
const counter = new Counter();
|
|
@@ -94,13 +105,14 @@ describe('observable: observe()', () => {
|
|
|
94
105
|
let _instanceExtraInitializers = [];
|
|
95
106
|
let _value_decorators;
|
|
96
107
|
let _value_initializers = [];
|
|
108
|
+
let _value_extraInitializers = [];
|
|
97
109
|
let _onChange_decorators;
|
|
98
110
|
return class Counter extends _classSuper {
|
|
99
111
|
static {
|
|
100
112
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
101
113
|
_value_decorators = [observe];
|
|
102
114
|
_onChange_decorators = [effect];
|
|
103
|
-
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers,
|
|
115
|
+
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
|
|
104
116
|
__esDecorate(this, null, _onChange_decorators, { kind: "method", name: "onChange", static: false, private: false, access: { has: obj => "onChange" in obj, get: obj => obj.onChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
105
117
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
106
118
|
}
|
|
@@ -110,6 +122,10 @@ describe('observable: observe()', () => {
|
|
|
110
122
|
onChange() {
|
|
111
123
|
this.dispatchEvent(new Event('changed'));
|
|
112
124
|
}
|
|
125
|
+
constructor() {
|
|
126
|
+
super(...arguments);
|
|
127
|
+
__runInitializers(this, _value_extraInitializers);
|
|
128
|
+
}
|
|
113
129
|
};
|
|
114
130
|
})();
|
|
115
131
|
const counter = new Counter();
|
|
@@ -125,13 +141,14 @@ describe('observable: observe()', () => {
|
|
|
125
141
|
let _instanceExtraInitializers = [];
|
|
126
142
|
let _value_decorators;
|
|
127
143
|
let _value_initializers = [];
|
|
144
|
+
let _value_extraInitializers = [];
|
|
128
145
|
let _onChange_decorators;
|
|
129
146
|
return class Counter extends _classSuper {
|
|
130
147
|
static {
|
|
131
148
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
132
149
|
_value_decorators = [observe];
|
|
133
150
|
_onChange_decorators = [effect];
|
|
134
|
-
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers,
|
|
151
|
+
__esDecorate(this, null, _value_decorators, { kind: "accessor", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _value_initializers, _value_extraInitializers);
|
|
135
152
|
__esDecorate(this, null, _onChange_decorators, { kind: "method", name: "onChange", static: false, private: false, access: { has: obj => "onChange" in obj, get: obj => obj.onChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
136
153
|
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
137
154
|
}
|
|
@@ -140,6 +157,7 @@ describe('observable: observe()', () => {
|
|
|
140
157
|
set value(value) { this.#value_accessor_storage = value; }
|
|
141
158
|
constructor() {
|
|
142
159
|
super();
|
|
160
|
+
__runInitializers(this, _value_extraInitializers);
|
|
143
161
|
expect(this.value).to.equal(100);
|
|
144
162
|
}
|
|
145
163
|
onChange() {
|
|
@@ -150,8 +168,10 @@ describe('observable: observe()', () => {
|
|
|
150
168
|
})();
|
|
151
169
|
fixture(html `<observable-1></observable-1>`).then((el) => {
|
|
152
170
|
el.value = 100;
|
|
171
|
+
customElements.whenDefined('observable-1').then(() => {
|
|
172
|
+
el.value++;
|
|
173
|
+
});
|
|
153
174
|
customElements.define('observable-1', Counter);
|
|
154
|
-
el.value++;
|
|
155
175
|
});
|
|
156
176
|
});
|
|
157
177
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe.test.js","sourceRoot":"","sources":["../../src/lib/observe.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE/C,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,mCAAmC,EAAE,CAAC,IAAI,EAAE,EAAE;YACzC,OAAO
|
|
1
|
+
{"version":3,"file":"observe.test.js","sourceRoot":"","sources":["../../src/lib/observe.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/lib/watch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAElE,MAAM,UAAU,KAAK,CAAC,KAAuB,EAAE,EAAY;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { expect } from '@open-wc/testing';
|
|
3
|
+
import { observe } from './observe.js';
|
|
4
|
+
import { watch } from './watch.js';
|
|
5
|
+
describe('observable: observe()', () => {
|
|
6
|
+
it('should watch externally from the class', (done) => {
|
|
7
|
+
let Counter = (() => {
|
|
8
|
+
let _static_value_decorators;
|
|
9
|
+
let _static_value_initializers = [];
|
|
10
|
+
let _static_value_extraInitializers = [];
|
|
11
|
+
return class Counter {
|
|
12
|
+
static {
|
|
13
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
|
|
14
|
+
_static_value_decorators = [observe];
|
|
15
|
+
__esDecorate(this, null, _static_value_decorators, { kind: "accessor", name: "value", static: true, private: false, access: { has: obj => "value" in obj, get: obj => obj.value, set: (obj, value) => { obj.value = value; } }, metadata: _metadata }, _static_value_initializers, _static_value_extraInitializers);
|
|
16
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
17
|
+
}
|
|
18
|
+
static #value_accessor_storage = __runInitializers(this, _static_value_initializers, 0);
|
|
19
|
+
static get value() { return Counter.#value_accessor_storage; }
|
|
20
|
+
static set value(value) { Counter.#value_accessor_storage = value; }
|
|
21
|
+
static {
|
|
22
|
+
__runInitializers(this, _static_value_extraInitializers);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
})();
|
|
26
|
+
watch(Counter, () => {
|
|
27
|
+
expect(Counter.value).to.equal(1);
|
|
28
|
+
done();
|
|
29
|
+
});
|
|
30
|
+
expect(Counter.value).to.equal(0);
|
|
31
|
+
Counter.value++;
|
|
32
|
+
expect(Counter.value).to.equal(1);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=watch.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.test.js","sourceRoot":"","sources":["../../src/lib/watch.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,wCAAwC,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9C,OAAO;;;;yBAAP,OAAO;;;gDACV,OAAO;oBAAC,0KAAgB,KAAK,6BAAL,KAAK,mGAAK;;;gBAA1B,MAAM,+EAAkB,CAAC,EAAC;gBAA1B,MAAM,KAAU,KAAK,YAD1B,OAAO,2BACwB;gBAA1B,WAAgB,KAAK,UAD1B,OAAO,mCACwB;;;;;;QAGrC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAElC,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAElC,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/src/lib/meta.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export type EffectFn = (changes: Set<string | symbol>) => void;
|
|
2
|
-
|
|
3
|
-
export class ObservableMetaData {
|
|
4
|
-
scheduler: Promise<void> | null = null;
|
|
5
|
-
upgradable = new Map<string | symbol, unknown>();
|
|
6
|
-
changes = new Set<string | symbol>();
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export class MetaData {
|
|
10
|
-
#data = new WeakMap<object, ObservableMetaData>();
|
|
11
|
-
|
|
12
|
-
read<T extends object>(value: T) {
|
|
13
|
-
if (this.#data.has(value)) {
|
|
14
|
-
return this.#data.get(value) as ObservableMetaData;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const data = new ObservableMetaData();
|
|
18
|
-
|
|
19
|
-
this.#data.set(value, data);
|
|
20
|
-
|
|
21
|
-
return data;
|
|
22
|
-
}
|
|
23
|
-
}
|
package/target/lib/meta.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export type EffectFn = (changes: Set<string | symbol>) => void;
|
|
2
|
-
export declare class ObservableMetaData {
|
|
3
|
-
scheduler: Promise<void> | null;
|
|
4
|
-
upgradable: Map<string | symbol, unknown>;
|
|
5
|
-
changes: Set<string | symbol>;
|
|
6
|
-
}
|
|
7
|
-
export declare class MetaData {
|
|
8
|
-
#private;
|
|
9
|
-
read<T extends object>(value: T): ObservableMetaData;
|
|
10
|
-
}
|
package/target/lib/meta.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export class ObservableMetaData {
|
|
2
|
-
scheduler = null;
|
|
3
|
-
upgradable = new Map();
|
|
4
|
-
changes = new Set();
|
|
5
|
-
}
|
|
6
|
-
export class MetaData {
|
|
7
|
-
#data = new WeakMap();
|
|
8
|
-
read(value) {
|
|
9
|
-
if (this.#data.has(value)) {
|
|
10
|
-
return this.#data.get(value);
|
|
11
|
-
}
|
|
12
|
-
const data = new ObservableMetaData();
|
|
13
|
-
this.#data.set(value, data);
|
|
14
|
-
return data;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=meta.js.map
|
package/target/lib/meta.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/lib/meta.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAkB;IAC7B,SAAS,GAAyB,IAAI,CAAC;IACvC,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;IACjD,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;CACtC;AAED,MAAM,OAAO,QAAQ;IACnB,KAAK,GAAG,IAAI,OAAO,EAA8B,CAAC;IAElD,IAAI,CAAmB,KAAQ;QAC7B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAuB,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAE5B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"meta.test.js","sourceRoot":"","sources":["../../src/lib/meta.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACzB,OAAO,EAAE,IAAI,GAAG,EAAE;YAClB,UAAU,EAAE,IAAI,GAAG,EAAE;YACrB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAE5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
File without changes
|