patron-oop 1.33.0 → 1.35.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +15 -0
- package/dist/patron.cjs +62 -51
- package/dist/patron.cjs.map +1 -1
- package/dist/patron.d.ts +28 -24
- package/dist/patron.js +61 -51
- package/dist/patron.js.map +1 -1
- package/dist/patron.min.js +1 -1
- package/dist/patron.min.mjs +1 -1
- package/dist/patron.min.mjs.map +1 -1
- package/dist/patron.mjs +61 -51
- package/dist/patron.mjs.map +1 -1
- package/package.json +1 -1
- package/src/Factory/Module.test.ts +0 -2
- package/src/Guest/GuestAware.ts +17 -5
- package/src/Guest/GuestAwareActive.ts +2 -2
- package/src/Guest/{GuestChain._asArray.test.ts → GuestAwareAll._asArray.test.ts} +6 -6
- package/src/Guest/GuestAwareAll._twoValuesAfter.test.ts +16 -0
- package/src/Guest/GuestAwareAll._twoValuesBefore.test.ts +16 -0
- package/src/Guest/{GuestChain._withPatron.test.ts → GuestAwareAll._withPatron.test.ts} +6 -6
- package/src/Guest/GuestAwareAll.ts +88 -0
- package/src/Guest/GuestAwareMap.fn.test.ts +31 -0
- package/src/Guest/GuestAwareMap.test.ts +4 -3
- package/src/Guest/GuestAwareMap.ts +12 -11
- package/src/Guest/GuestAwareRace.ts +6 -6
- package/src/Guest/GuestAwareSequence.test.ts +5 -4
- package/src/Guest/GuestAwareSequence.ts +13 -13
- package/src/Source/Source.ts +2 -2
- package/src/Source/SourceDynamic.ts +2 -2
- package/src/index.ts +1 -1
- package/examples/elegant_objects.html +0 -118
- package/examples/reactive.html +0 -65
- package/src/Guest/GuestChain._twoValuesAfter.test.ts +0 -16
- package/src/Guest/GuestChain._twoValuesBefore.test.ts +0 -16
- package/src/Guest/GuestChain.ts +0 -88
package/examples/reactive.html
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
<!doctype html>
|
2
|
-
<html lang="en">
|
3
|
-
<head>
|
4
|
-
<meta charset="UTF-8"/>
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
6
|
-
<title>Reactive Patron</title>
|
7
|
-
</head>
|
8
|
-
<body>
|
9
|
-
<h1>Reactive example</h1>
|
10
|
-
<div>
|
11
|
-
<label>
|
12
|
-
Поле ввода:
|
13
|
-
<input class="input-1"/>
|
14
|
-
</label>
|
15
|
-
</div>
|
16
|
-
<div>Результат ввода: <span class="result"></span></div>
|
17
|
-
<script type="module">
|
18
|
-
import 'https://cdn.jsdelivr.net/npm/patron-oop@1.8.0/dist/patron.min.js';
|
19
|
-
|
20
|
-
const {Patron, Source} = window.GUEST_LIBRARY;
|
21
|
-
|
22
|
-
class Input {
|
23
|
-
constructor(source, selector) {
|
24
|
-
this.source = source;
|
25
|
-
const el = document.querySelector(selector);
|
26
|
-
this.source.value(
|
27
|
-
new Patron((value) => {
|
28
|
-
el.value = value;
|
29
|
-
}),
|
30
|
-
);
|
31
|
-
el.addEventListener('keyup', (e) => {
|
32
|
-
this.give(e.target.value);
|
33
|
-
});
|
34
|
-
el.addEventListener('change', (e) => {
|
35
|
-
this.give(e.target.value);
|
36
|
-
});
|
37
|
-
}
|
38
|
-
|
39
|
-
receiving(guest) {
|
40
|
-
this.source.value(guest);
|
41
|
-
return this;
|
42
|
-
}
|
43
|
-
|
44
|
-
receive(value) {
|
45
|
-
this.source.give(value);
|
46
|
-
return this;
|
47
|
-
}
|
48
|
-
}
|
49
|
-
|
50
|
-
class Text {
|
51
|
-
constructor(selector) {
|
52
|
-
this.element = document.querySelector(selector);
|
53
|
-
}
|
54
|
-
|
55
|
-
receive(value) {
|
56
|
-
this.element.innerText = value;
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
|
-
new Input(new Source(2), '.input-1').value(
|
61
|
-
new Patron(new Text('.result')),
|
62
|
-
);
|
63
|
-
</script>
|
64
|
-
</body>
|
65
|
-
</html>
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import { expect, test } from "vitest";
|
2
|
-
import { Source } from "../Source/Source";
|
3
|
-
import { GuestChain } from "./GuestChain";
|
4
|
-
|
5
|
-
test("GuestChain._twoValuesAfter.test", () => {
|
6
|
-
const one = new Source(1);
|
7
|
-
const two = new Source(2);
|
8
|
-
const chain = new GuestChain<{ one: number; two: number }>();
|
9
|
-
|
10
|
-
chain.result((value) => {
|
11
|
-
expect(Object.values(value).join()).toBe("1,2");
|
12
|
-
});
|
13
|
-
|
14
|
-
one.value(chain.receiveKey("one"));
|
15
|
-
two.value(chain.receiveKey("two"));
|
16
|
-
});
|
@@ -1,16 +0,0 @@
|
|
1
|
-
import { expect, test } from "vitest";
|
2
|
-
import { Source } from "../Source/Source";
|
3
|
-
import { GuestChain } from "./GuestChain";
|
4
|
-
|
5
|
-
test("GuestChain._twoValuesBefore.test", () => {
|
6
|
-
const one = new Source(1);
|
7
|
-
const two = new Source(2);
|
8
|
-
const chain = new GuestChain<{ one: number; two: number }>();
|
9
|
-
|
10
|
-
one.value(chain.receiveKey("one"));
|
11
|
-
two.value(chain.receiveKey("two"));
|
12
|
-
|
13
|
-
chain.result((value) => {
|
14
|
-
expect(Object.values(value).join()).toBe("1,2");
|
15
|
-
});
|
16
|
-
});
|
package/src/Guest/GuestChain.ts
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
import { GuestCast } from "./GuestCast";
|
2
|
-
import { Source } from "../Source/Source";
|
3
|
-
import { Guest, GuestObjectType, GuestType } from "./Guest";
|
4
|
-
import { GuestObject } from "./GuestObject";
|
5
|
-
import { GuestPool } from "./GuestPool";
|
6
|
-
|
7
|
-
export interface ChainType<T = any> {
|
8
|
-
result(guest: GuestObjectType<T>): this;
|
9
|
-
resultArray(guest: GuestObjectType<T>): this;
|
10
|
-
receiveKey<R>(key: string): GuestObjectType<R>;
|
11
|
-
}
|
12
|
-
|
13
|
-
/**
|
14
|
-
* @url https://kosukhin.github.io/patron.site/#/guest/guest-chain
|
15
|
-
*/
|
16
|
-
export class GuestChain<T> implements ChainType<T> {
|
17
|
-
private theChain: Source<Record<string, unknown>>;
|
18
|
-
|
19
|
-
private keysKnown = new Set();
|
20
|
-
|
21
|
-
private keysFilled = new Set();
|
22
|
-
|
23
|
-
private filledChainPool = new GuestPool(this);
|
24
|
-
|
25
|
-
public constructor() {
|
26
|
-
this.theChain = new Source<Record<string, unknown>>({});
|
27
|
-
}
|
28
|
-
|
29
|
-
public resultArray(guest: GuestType<T>) {
|
30
|
-
const guestObject = new GuestObject(guest);
|
31
|
-
this.filledChainPool.add(
|
32
|
-
new GuestCast(guestObject, (value: Record<string, unknown>) => {
|
33
|
-
guestObject.give(Object.values(value) as T);
|
34
|
-
}),
|
35
|
-
);
|
36
|
-
if (this.isChainFilled()) {
|
37
|
-
this.theChain.value(
|
38
|
-
new Guest((chain: Record<string, unknown>) => {
|
39
|
-
this.filledChainPool.give(Object.values(chain));
|
40
|
-
}),
|
41
|
-
);
|
42
|
-
}
|
43
|
-
return this;
|
44
|
-
}
|
45
|
-
|
46
|
-
public result(guest: GuestType<T>) {
|
47
|
-
const guestObject = new GuestObject(guest);
|
48
|
-
if (this.isChainFilled()) {
|
49
|
-
this.filledChainPool.add(guestObject);
|
50
|
-
this.theChain.value(
|
51
|
-
new Guest((chain) => {
|
52
|
-
this.filledChainPool.give(chain);
|
53
|
-
}),
|
54
|
-
);
|
55
|
-
} else {
|
56
|
-
this.filledChainPool.add(guestObject);
|
57
|
-
}
|
58
|
-
return this;
|
59
|
-
}
|
60
|
-
|
61
|
-
public receiveKey<R>(key: string): GuestObjectType<R> {
|
62
|
-
this.keysKnown.add(key);
|
63
|
-
return new Guest((value) => {
|
64
|
-
// Обернул в очередь чтобы можно было синхронно наполнить очередь известных ключей
|
65
|
-
queueMicrotask(() => {
|
66
|
-
this.theChain.value(
|
67
|
-
new Guest((chain: Record<string, unknown>) => {
|
68
|
-
this.keysFilled.add(key);
|
69
|
-
const lastChain = {
|
70
|
-
...chain,
|
71
|
-
[key]: value,
|
72
|
-
};
|
73
|
-
this.theChain.give(lastChain);
|
74
|
-
if (this.isChainFilled()) {
|
75
|
-
this.filledChainPool.give(lastChain);
|
76
|
-
}
|
77
|
-
}),
|
78
|
-
);
|
79
|
-
});
|
80
|
-
});
|
81
|
-
}
|
82
|
-
|
83
|
-
private isChainFilled() {
|
84
|
-
return (
|
85
|
-
this.keysFilled.size > 0 && this.keysFilled.size === this.keysKnown.size
|
86
|
-
);
|
87
|
-
}
|
88
|
-
}
|