@expressive/mvc 0.53.6 → 0.54.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/context.js +130 -126
- package/dist/esm/control.js +165 -158
- package/dist/esm/index.js +22 -8
- package/dist/esm/instruction/get.js +84 -84
- package/dist/esm/instruction/has.js +73 -70
- package/dist/esm/instruction/ref.js +58 -55
- package/dist/esm/instruction/set.js +77 -80
- package/dist/esm/instruction/use.js +60 -55
- package/dist/esm/model.js +247 -251
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/package.json +4 -4
- package/dist/esm/context.test.js +0 -211
- package/dist/esm/control.test.js +0 -183
- package/dist/esm/instruction/get.test.js +0 -645
- package/dist/esm/instruction/has.test.js +0 -354
- package/dist/esm/instruction/ref.test.js +0 -281
- package/dist/esm/instruction/set.test.js +0 -527
- package/dist/esm/instruction/use.test.js +0 -305
- package/dist/esm/mocks.js +0 -20
- package/dist/esm/model.test.js +0 -1541
|
@@ -1,73 +1,76 @@
|
|
|
1
|
-
import { Context } from
|
|
2
|
-
import { Model, update } from
|
|
3
|
-
import { use } from
|
|
4
|
-
const APPLY = new WeakMap();
|
|
1
|
+
import { Context } from "../context";
|
|
2
|
+
import { Model, update } from "../model";
|
|
3
|
+
import { use } from "./use";
|
|
4
|
+
const APPLY = /* @__PURE__ */ new WeakMap();
|
|
5
5
|
function has(arg1, arg2) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
applied.add(recipient);
|
|
61
|
-
apply();
|
|
62
|
-
return () => {
|
|
63
|
-
applied.delete(recipient);
|
|
64
|
-
apply();
|
|
65
|
-
if (typeof remove == "function")
|
|
66
|
-
remove();
|
|
67
|
-
};
|
|
68
|
-
});
|
|
6
|
+
return use((key, subject) => {
|
|
7
|
+
const applied = /* @__PURE__ */ new Set();
|
|
8
|
+
const apply = () => {
|
|
9
|
+
update(subject, key, Object.freeze(Array.from(applied)));
|
|
10
|
+
};
|
|
11
|
+
if (Model.is(arg1))
|
|
12
|
+
Context.get(subject, (context) => {
|
|
13
|
+
context.has(arg1, (model) => {
|
|
14
|
+
let remove;
|
|
15
|
+
let disconnect;
|
|
16
|
+
if (applied.has(model))
|
|
17
|
+
return;
|
|
18
|
+
const callback = APPLY.get(model);
|
|
19
|
+
if (callback) {
|
|
20
|
+
const after = callback(subject);
|
|
21
|
+
if (after === false)
|
|
22
|
+
return;
|
|
23
|
+
if (typeof after == "function")
|
|
24
|
+
disconnect = after;
|
|
25
|
+
}
|
|
26
|
+
if (typeof arg2 == "function") {
|
|
27
|
+
const done2 = arg2(model, subject);
|
|
28
|
+
if (done2 === false)
|
|
29
|
+
return false;
|
|
30
|
+
remove = () => {
|
|
31
|
+
if (typeof done2 == "function")
|
|
32
|
+
done2();
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
applied.add(model);
|
|
36
|
+
apply();
|
|
37
|
+
const done = () => {
|
|
38
|
+
ignore();
|
|
39
|
+
applied.delete(model);
|
|
40
|
+
apply();
|
|
41
|
+
if (disconnect)
|
|
42
|
+
disconnect();
|
|
43
|
+
if (typeof remove == "function")
|
|
44
|
+
remove();
|
|
45
|
+
};
|
|
46
|
+
const ignore = model.get(null, done);
|
|
47
|
+
return done;
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
else {
|
|
51
|
+
if (APPLY.has(subject))
|
|
52
|
+
throw new Error(`'has' callback can only be used once per model.`);
|
|
53
|
+
APPLY.set(subject, (recipient) => {
|
|
54
|
+
let remove;
|
|
55
|
+
if (arg1) {
|
|
56
|
+
remove = arg1(recipient, subject);
|
|
57
|
+
if (remove === false)
|
|
58
|
+
return false;
|
|
69
59
|
}
|
|
70
|
-
|
|
71
|
-
|
|
60
|
+
applied.add(recipient);
|
|
61
|
+
apply();
|
|
62
|
+
return () => {
|
|
63
|
+
applied.delete(recipient);
|
|
64
|
+
apply();
|
|
65
|
+
if (typeof remove == "function")
|
|
66
|
+
remove();
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return { value: [] };
|
|
71
|
+
});
|
|
72
72
|
}
|
|
73
|
-
export {
|
|
73
|
+
export {
|
|
74
|
+
has
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL2hhcy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHsgTW9kZWwsIHVwZGF0ZSB9IGZyb20gJy4uL21vZGVsJztcbmltcG9ydCB7IHVzZSB9IGZyb20gJy4vdXNlJztcblxuY29uc3QgQVBQTFkgPSBuZXcgV2Vha01hcDxNb2RlbCwgKG1vZGVsOiBNb2RlbCkgPT4gKCgpID0+IHZvaWQpIHwgYm9vbGVhbiB8IHZvaWQ+KCk7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIGhhcyB7XG4gIHR5cGUgQ2FsbGJhY2s8VCA9IGFueT4gPSAobW9kZWw6IFQsIHJlY2lwaWVudDogTW9kZWwpID0+IHZvaWQgfCBib29sZWFuIHwgKCgpID0+IHZvaWQpO1xufVxuXG5mdW5jdGlvbiBoYXMgPFQgZXh0ZW5kcyBNb2RlbD4gKHR5cGU6IE1vZGVsLlR5cGU8VD4sIGNhbGxiYWNrPzogaGFzLkNhbGxiYWNrPFQ+KTogcmVhZG9ubHkgVFtdO1xuZnVuY3Rpb24gaGFzIChjYWxsYmFjaz86IGhhcy5DYWxsYmFjayk6IHJlYWRvbmx5IE1vZGVsW107XG4gIFxuZnVuY3Rpb24gaGFzIDxUIGV4dGVuZHMgTW9kZWw+IChcbiAgYXJnMT86IE1vZGVsLlR5cGU8VD4gfCBoYXMuQ2FsbGJhY2s8TW9kZWw+LFxuICBhcmcyPzogaGFzLkNhbGxiYWNrPFQ+KXtcblxuICByZXR1cm4gdXNlPFRbXT4oKGtleSwgc3ViamVjdCkgPT4ge1xuICAgIGNvbnN0IGFwcGxpZWQgPSBuZXcgU2V0PE1vZGVsPigpO1xuICAgIGNvbnN0IGFwcGx5ID0gKCkgPT4ge1xuICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgT2JqZWN0LmZyZWV6ZShBcnJheS5mcm9tKGFwcGxpZWQpKSk7XG4gICAgfVxuXG4gICAgaWYoTW9kZWwuaXMoYXJnMSkpXG4gICAgICBDb250ZXh0LmdldChzdWJqZWN0LCBjb250ZXh0ID0+IHtcbiAgICAgICAgY29udGV4dC5oYXMoYXJnMSwgbW9kZWwgPT4ge1xuICAgICAgICAgIGxldCByZW1vdmU6ICgoKSA9PiB2b2lkKSB8IHZvaWQgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgbGV0IGRpc2Nvbm5lY3Q6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgXG4gICAgICAgICAgaWYoYXBwbGllZC5oYXMobW9kZWwpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gQVBQTFkuZ2V0KG1vZGVsKTtcbiAgXG4gICAgICAgICAgaWYoY2FsbGJhY2spe1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBjYWxsYmFjayhzdWJqZWN0KTtcbiAgXG4gICAgICAgICAgICBpZihhZnRlciA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgXG4gICAgICAgICAgICBpZih0eXBlb2YgYWZ0ZXIgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICBkaXNjb25uZWN0ID0gYWZ0ZXI7XG4gICAgICAgICAgfVxuICBcbiAgICAgICAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgICAgICAgY29uc3QgZG9uZSA9IGFyZzIobW9kZWwsIHN1YmplY3QpO1xuICBcbiAgICAgICAgICAgIGlmKGRvbmUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJlbW92ZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYodHlwZW9mIGRvbmUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIGFwcGxpZWQuYWRkKG1vZGVsKTtcbiAgICAgICAgICBhcHBseSgpO1xuICBcbiAgICAgICAgICBjb25zdCBkb25lID0gKCkgPT4geyBcbiAgICAgICAgICAgIGlnbm9yZSgpO1xuICBcbiAgICAgICAgICAgIGFwcGxpZWQuZGVsZXRlKG1vZGVsKTtcbiAgICAgICAgICAgIGFwcGx5KCk7XG4gIFxuICAgICAgICAgICAgaWYoZGlzY29ubmVjdClcbiAgICAgICAgICAgICAgZGlzY29ubmVjdCgpO1xuICBcbiAgICAgICAgICAgIGlmKHR5cGVvZiByZW1vdmUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIGNvbnN0IGlnbm9yZSA9IG1vZGVsLmdldChudWxsLCBkb25lKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4gZG9uZTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIGVsc2Uge1xuICAgICAgaWYoQVBQTFkuaGFzKHN1YmplY3QpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCdoYXMnIGNhbGxiYWNrIGNhbiBvbmx5IGJlIHVzZWQgb25jZSBwZXIgbW9kZWwuYCk7XG5cbiAgICAgIEFQUExZLnNldChzdWJqZWN0LCByZWNpcGllbnQgPT4ge1xuICAgICAgICBsZXQgcmVtb3ZlOiAoKCkgPT4gdm9pZCkgfCBib29sZWFuIHwgdm9pZDtcblxuICAgICAgICBpZihhcmcxKXtcbiAgICAgICAgICByZW1vdmUgPSBhcmcxKHJlY2lwaWVudCwgc3ViamVjdCk7XG4gIFxuICAgICAgICAgIGlmKHJlbW92ZSA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBhcHBsaWVkLmFkZChyZWNpcGllbnQpO1xuICAgICAgICBhcHBseSgpO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgYXBwbGllZC5kZWxldGUocmVjaXBpZW50KTtcbiAgICAgICAgICBhcHBseSgpO1xuXG4gICAgICAgICAgaWYodHlwZW9mIHJlbW92ZSA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdmFsdWU6IFtdIH07XG4gIH0pXG59XG5cbmV4cG9ydCB7IGhhcyB9Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsT0FBTyxjQUFjO0FBQzlCLFNBQVMsV0FBVztBQUVwQixNQUFNLFFBQVEsb0JBQUksUUFBZ0U7QUFTbEYsU0FBUyxJQUNQLE1BQ0EsTUFBdUI7QUFFdkIsU0FBTyxJQUFTLENBQUMsS0FBSyxZQUFZO0FBQ2hDLFVBQU0sVUFBVSxvQkFBSSxJQUFXO0FBQy9CLFVBQU0sUUFBUSxNQUFNO0FBQ2xCLGFBQU8sU0FBUyxLQUFLLE9BQU8sT0FBTyxNQUFNLEtBQUssT0FBTyxDQUFDLENBQUM7QUFBQSxJQUN6RDtBQUVBLFFBQUcsTUFBTSxHQUFHLElBQUk7QUFDZCxjQUFRLElBQUksU0FBUyxhQUFXO0FBQzlCLGdCQUFRLElBQUksTUFBTSxXQUFTO0FBQ3pCLGNBQUk7QUFDSixjQUFJO0FBRUosY0FBRyxRQUFRLElBQUksS0FBSztBQUNsQjtBQUVGLGdCQUFNLFdBQVcsTUFBTSxJQUFJLEtBQUs7QUFFaEMsY0FBRyxVQUFTO0FBQ1Ysa0JBQU0sUUFBUSxTQUFTLE9BQU87QUFFOUIsZ0JBQUcsVUFBVTtBQUNYO0FBRUYsZ0JBQUcsT0FBTyxTQUFTO0FBQ2pCLDJCQUFhO0FBQUEsVUFDakI7QUFFQSxjQUFHLE9BQU8sUUFBUSxZQUFXO0FBQzNCLGtCQUFNQSxRQUFPLEtBQUssT0FBTyxPQUFPO0FBRWhDLGdCQUFHQSxVQUFTO0FBQ1YscUJBQU87QUFFVCxxQkFBUyxNQUFNO0FBQ2Isa0JBQUcsT0FBT0EsU0FBUTtBQUNoQixnQkFBQUEsTUFBSztBQUFBLFlBQ1Q7QUFBQSxVQUNGO0FBRUEsa0JBQVEsSUFBSSxLQUFLO0FBQ2pCLGdCQUFNO0FBRU4sZ0JBQU0sT0FBTyxNQUFNO0FBQ2pCLG1CQUFPO0FBRVAsb0JBQVEsT0FBTyxLQUFLO0FBQ3BCLGtCQUFNO0FBRU4sZ0JBQUc7QUFDRCx5QkFBVztBQUViLGdCQUFHLE9BQU8sVUFBVTtBQUNsQixxQkFBTztBQUFBLFVBQ1g7QUFFQSxnQkFBTSxTQUFTLE1BQU0sSUFBSSxNQUFNLElBQUk7QUFFbkMsaUJBQU87QUFBQSxRQUNULENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxTQUNFO0FBQ0gsVUFBRyxNQUFNLElBQUksT0FBTztBQUNsQixjQUFNLElBQUksTUFBTSxpREFBaUQ7QUFFbkUsWUFBTSxJQUFJLFNBQVMsZUFBYTtBQUM5QixZQUFJO0FBRUosWUFBRyxNQUFLO0FBQ04sbUJBQVMsS0FBSyxXQUFXLE9BQU87QUFFaEMsY0FBRyxXQUFXO0FBQ1osbUJBQU87QUFBQSxRQUNYO0FBRUEsZ0JBQVEsSUFBSSxTQUFTO0FBQ3JCLGNBQU07QUFFTixlQUFPLE1BQU07QUFDWCxrQkFBUSxPQUFPLFNBQVM7QUFDeEIsZ0JBQU07QUFFTixjQUFHLE9BQU8sVUFBVTtBQUNsQixtQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQUEsRUFDckIsQ0FBQztBQUNIOyIsCiAgIm5hbWVzIjogWyJkb25lIl0KfQo=
|
|
@@ -1,59 +1,62 @@
|
|
|
1
|
-
import { context } from
|
|
2
|
-
import { define, update } from
|
|
3
|
-
import { use } from
|
|
1
|
+
import { context } from "../control";
|
|
2
|
+
import { define, update } from "../model";
|
|
3
|
+
import { use } from "./use";
|
|
4
4
|
function ref(arg, arg2) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
});
|
|
19
|
-
else {
|
|
20
|
-
const get = () => state[key];
|
|
21
|
-
const set = (value) => {
|
|
22
|
-
update(subject, key, value);
|
|
23
|
-
};
|
|
24
|
-
define(set, "current", { get, set });
|
|
25
|
-
define(set, "get", { value: get });
|
|
26
|
-
define(value, key, { value: set });
|
|
27
|
-
}
|
|
5
|
+
return use((key, subject, state) => {
|
|
6
|
+
let value = {};
|
|
7
|
+
if (arg === subject)
|
|
8
|
+
subject.get(() => {
|
|
9
|
+
for (const key2 in state)
|
|
10
|
+
if (typeof arg2 == "function")
|
|
11
|
+
define(value, key2, {
|
|
12
|
+
configurable: true,
|
|
13
|
+
get() {
|
|
14
|
+
const out = arg2(key2);
|
|
15
|
+
define(value, key2, { value: out });
|
|
16
|
+
return out;
|
|
17
|
+
}
|
|
28
18
|
});
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const get = () => state[key];
|
|
34
|
-
const set = (value) => {
|
|
35
|
-
if (!update(subject, key, value) || !arg)
|
|
36
|
-
return;
|
|
37
|
-
if (unset)
|
|
38
|
-
unset = void unset(value);
|
|
39
|
-
if (value === null && arg2 !== false)
|
|
40
|
-
return;
|
|
41
|
-
const ctx = context();
|
|
42
|
-
const out = arg.call(subject, value);
|
|
43
|
-
const flush = ctx();
|
|
44
|
-
unset = key => {
|
|
45
|
-
if (typeof out == "function")
|
|
46
|
-
out(key);
|
|
47
|
-
flush();
|
|
48
|
-
};
|
|
19
|
+
else {
|
|
20
|
+
const get = () => state[key2];
|
|
21
|
+
const set = (value2) => {
|
|
22
|
+
update(subject, key2, value2);
|
|
49
23
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
24
|
+
define(set, "current", { get, set });
|
|
25
|
+
define(set, "get", { value: get });
|
|
26
|
+
define(value, key2, { value: set });
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
else if (typeof arg == "object")
|
|
30
|
+
throw new Error("ref instruction does not support object which is not 'this'");
|
|
31
|
+
else {
|
|
32
|
+
let unset;
|
|
33
|
+
const get = () => state[key];
|
|
34
|
+
const set = (value2) => {
|
|
35
|
+
if (!update(subject, key, value2) || !arg)
|
|
36
|
+
return;
|
|
37
|
+
if (unset)
|
|
38
|
+
unset = void unset(value2);
|
|
39
|
+
if (value2 === null && arg2 !== false)
|
|
40
|
+
return;
|
|
41
|
+
const ctx = context();
|
|
42
|
+
const out = arg.call(subject, value2);
|
|
43
|
+
const flush = ctx();
|
|
44
|
+
unset = (key2) => {
|
|
45
|
+
if (typeof out == "function")
|
|
46
|
+
out(key2);
|
|
47
|
+
flush();
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
state[key] = null;
|
|
51
|
+
value = Object.defineProperties(set, {
|
|
52
|
+
current: { get, set },
|
|
53
|
+
get: { value: get }
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
define(subject, key, { value });
|
|
57
|
+
});
|
|
58
58
|
}
|
|
59
|
-
export {
|
|
59
|
+
export {
|
|
60
|
+
ref
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3JlZi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJy4uL2NvbnRyb2wnO1xuaW1wb3J0IHsgTW9kZWwsIGRlZmluZSwgdXBkYXRlIH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgdXNlIH0gZnJvbSAnLi91c2UnO1xuXG5kZWNsYXJlIG5hbWVzcGFjZSByZWYge1xuICB0eXBlIENhbGxiYWNrPFQ+ID0gKGFyZ3VtZW50OiBUKSA9PlxuICAgICgobmV4dDogVCB8IG51bGwpID0+IHZvaWQpIHwgUHJvbWlzZTx2b2lkPiB8IHZvaWQgfCBib29sZWFuO1xuXG4gIGludGVyZmFjZSBPYmplY3Q8VCA9IGFueT4ge1xuICAgIChuZXh0OiBUIHwgbnVsbCk6IHZvaWQ7XG5cbiAgICAvKiogQ3VycmVudCB2YWx1ZSBoZWxkIGJ5IHRoaXMgcmVmZXJlbmNlLiAqL1xuICAgIGN1cnJlbnQ6IFQgfCBudWxsO1xuXG4gICAgLyoqIFJldHJpZXZlIGN1cnJlbnQgdmFsdWUuICovXG4gICAgZ2V0KCk6IFQgfCBudWxsO1xuICB9XG5cbiAgLyoqIE9iamVjdCB3aXRoIHJlZmVyZW5jZXMgdG8gYWxsIG1hbmFnZWQgdmFsdWVzIG9mIGBUYC4gKi9cblxuICAvKiogT2JqZWN0IHdpdGggcmVmZXJlbmNlcyB0byBhbGwgbWFuYWdlZCB2YWx1ZXMgb2YgYFRgLiAqL1xuICB0eXBlIFByb3h5PFQgZXh0ZW5kcyBNb2RlbD4gPVxuICAgICYgeyBbUCBpbiBNb2RlbC5GaWVsZDxUPl0tPzogT2JqZWN0PFRbUF0+IH1cbiAgICAmIHsgZ2V0KCk6IFQgfTtcblxuICB0eXBlIEN1c3RvbVByb3h5PFQgZXh0ZW5kcyBNb2RlbCwgUj4gPVxuICAgICYgeyBbUCBpbiBNb2RlbC5GaWVsZDxUPl0tPzogUiB9XG4gICAgJiB7IGdldCgpOiBUIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCByZWZlcmVuY2VzIHRvIGFsbCBtYW5hZ2VkIHZhbHVlcy5cbiAqIEVhY2ggcHJvcGVydHkgaXMgYSBmdW5jdGlvbiB0byBzZXQgdmFsdWUgaW4gc3RhdGUgd2hlbiBpbnZva2VkLlxuICpcbiAqICpQcm9wZXJ0aWVzIGFyZSBzaW11bHRhbmVvdXNseSBhIHJlZi1mdW5jdGlvbiBhbmQgcmVmLW9iamVjdCwgdXNlIGFzIG5lZWRlZC4qXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFNvdXJjZSBtb2RlbCBmcm9tIHdoaWNoIHRvIHJlZmVyZW5jZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8VCBleHRlbmRzIE1vZGVsPiAodGFyZ2V0OiBUKTogcmVmLlByb3h5PFQ+O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdmFsdWVzIGJhc2VkIG9uIG1hbmFnZWQgdmFsdWVzLlxuICogRWFjaCBwcm9wZXJ0eSB3aWxsIGludm9rZSBtYXBwZXIgZnVuY3Rpb24gb24gZmlyc3QgYWNjZXNzIHN1cHBseVxuICogdGhlIGl0cyByZXR1cm4gdmFsdWUgZ29pbmcgZm9yd2FyZC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gU291cmNlIG1vZGVsIGZyb20gd2hpY2ggdG8gcmVmZXJlbmNlIHZhbHVlcy5cbiAqIEBwYXJhbSBtYXBwZXIgLSBGdW5jdGlvbiBwcm9kdWNpbmcgdGhlIHBsYWNlaG9sZGVyIHZhbHVlIGZvciBhbnkgZ2l2ZW4gcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8TyBleHRlbmRzIE1vZGVsLCBSPlxuICAodGFyZ2V0OiBPLCBtYXBwZXI6IChrZXk6IE1vZGVsLkZpZWxkPE8+KSA9PiBSKTogcmVmLkN1c3RvbVByb3h5PE8sIFI+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSByZWYtY29tcGF0aWJsZSBwcm9wZXJ0eS5cbiAqIFdpbGwgcGVyc2lzdCB2YWx1ZSwgYW5kIHVwZGF0ZXMgdG8gdGhpcyBhcmUgbWFkZSBwYXJ0IG9mIGNvbnRyb2xsZXIgZXZlbnQtc3RyZWFtLlxuICpcbiAqICpPdXRwdXQgaXMgc2ltdWx0YW5lb3VzbHkgYSByZWYtZnVuY3Rpb24gYW5kIHJlZi1vYmplY3QsIHVzZSBhcyBuZWVkZWQuKlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIHN5bmNocm9ub3VzbHkgZmlyZSB3aGVuIHJlZmVyZW5jZSBpcyBmaXJzdCBzZXQgb3IgZG9lcyB1cGRhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlZiA8VD4gKGNhbGxiYWNrPzogcmVmLkNhbGxiYWNrPFQ+KTogcmVmLk9iamVjdDxUPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVmLWNvbXBhdGlibGUgcHJvcGVydHkuXG4gKiBXaWxsIHBlcnNpc3QgdmFsdWUsIGFuZCB1cGRhdGVzIHRvIHRoaXMgYXJlIG1hZGUgcGFydCBvZiBjb250cm9sbGVyIGV2ZW50LXN0cmVhbS5cbiAqXG4gKiAqT3V0cHV0IGlzIHNpbXVsdGFuZW91c2x5IGEgcmVmLWZ1bmN0aW9uIGFuZCByZWYtb2JqZWN0LCB1c2UgYXMgbmVlZGVkLipcbiAqXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byBzeW5jaHJvbm91c2x5IGZpcmUgd2hlbiByZWZlcmVuY2UgaXMgZmlyc3Qgc2V0IG9yIGRvZXMgdXBkYXRlLlxuICogQHBhcmFtIGlnbm9yZU51bGwgLSBEZWZhdWx0IGB0cnVlYC4gSWYgYGZhbHNlYCwgd2lsbCBzdGlsbCBjYWxsYmFjayB3aXRoIGBudWxsYC5cbiAqL1xuZnVuY3Rpb24gcmVmIDxUPiAoY2FsbGJhY2s6IHJlZi5DYWxsYmFjazxUIHwgbnVsbD4sIGlnbm9yZU51bGw6IGJvb2xlYW4pOiByZWYuT2JqZWN0PFQ+O1xuXG5mdW5jdGlvbiByZWY8VD4oXG4gIGFyZz86IHJlZi5DYWxsYmFjazxUPiB8IE1vZGVsLFxuICBhcmcyPzogKChrZXk6IHN0cmluZykgPT4gYW55KSB8IGJvb2xlYW4pe1xuXG4gIHJldHVybiB1c2U8VD4oKGtleSwgc3ViamVjdCwgc3RhdGUpID0+IHtcbiAgICBsZXQgdmFsdWUgPSB7fTtcblxuICAgIGlmKGFyZyA9PT0gc3ViamVjdClcbiAgICAgIHN1YmplY3QuZ2V0KCgpID0+IHtcbiAgICAgICAgZm9yKGNvbnN0IGtleSBpbiBzdGF0ZSlcbiAgICAgICAgICBpZih0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICBkZWZpbmUodmFsdWUsIGtleSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGdldCgpe1xuICAgICAgICAgICAgICAgIGNvbnN0IG91dCA9IGFyZzIoa2V5KTtcbiAgICAgICAgICAgICAgICBkZWZpbmUodmFsdWUsIGtleSwgeyB2YWx1ZTogb3V0IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBnZXQgPSAoKSA9PiBzdGF0ZVtrZXldO1xuICAgICAgICAgICAgY29uc3Qgc2V0ID0gKHZhbHVlOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIHZhbHVlKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICAgIGRlZmluZShzZXQsIFwiY3VycmVudFwiLCB7IGdldCwgc2V0IH0pO1xuICAgICAgICAgICAgZGVmaW5lKHNldCwgXCJnZXRcIiwgeyB2YWx1ZTogZ2V0IH0pO1xuICAgICAgICAgICAgZGVmaW5lKHZhbHVlLCBrZXksIHsgdmFsdWU6IHNldCB9KTtcbiAgICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgZWxzZSBpZih0eXBlb2YgYXJnID09IFwib2JqZWN0XCIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWYgaW5zdHJ1Y3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBvYmplY3Qgd2hpY2ggaXMgbm90ICd0aGlzJ1wiKTtcblxuICAgIGVsc2Uge1xuICAgICAgbGV0IHVuc2V0OiAoKG5leHQ6IFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBnZXQgPSAoKSA9PiBzdGF0ZVtrZXldO1xuICAgICAgY29uc3Qgc2V0ID0gKHZhbHVlPzogYW55KSA9PiB7XG4gICAgICAgIGlmKCF1cGRhdGUoc3ViamVjdCwga2V5LCB2YWx1ZSkgfHwgIWFyZylcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgaWYodW5zZXQpXG4gICAgICAgICAgdW5zZXQgPSB2b2lkIHVuc2V0KHZhbHVlKTtcbiAgICBcbiAgICAgICAgaWYodmFsdWUgPT09IG51bGwgJiYgYXJnMiAhPT0gZmFsc2UpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGN0eCA9IGNvbnRleHQoKTtcbiAgICAgICAgY29uc3Qgb3V0ID0gYXJnLmNhbGwoc3ViamVjdCwgdmFsdWUpO1xuICAgICAgICBjb25zdCBmbHVzaCA9IGN0eCgpO1xuXG4gICAgICAgIHVuc2V0ID0ga2V5ID0+IHtcbiAgICAgICAgICBpZih0eXBlb2Ygb3V0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIG91dChrZXkpO1xuXG4gICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgXG4gICAgICBzdGF0ZVtrZXldID0gbnVsbDtcbiAgICAgIHZhbHVlID0gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc2V0LCB7XG4gICAgICAgIGN1cnJlbnQ6IHsgZ2V0LCBzZXQgfSxcbiAgICAgICAgZ2V0OiB7IHZhbHVlOiBnZXQgfVxuICAgICAgfSkgYXMgcmVmLk9iamVjdDxUPjtcbiAgICB9XG5cbiAgICBkZWZpbmUoc3ViamVjdCwga2V5LCB7IHZhbHVlIH0pO1xuICB9KVxufVxuXG5leHBvcnQgeyByZWYgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFnQixRQUFRLGNBQWM7QUFDdEMsU0FBUyxXQUFXO0FBc0VwQixTQUFTLElBQ1AsS0FDQSxNQUF3QztBQUV4QyxTQUFPLElBQU8sQ0FBQyxLQUFLLFNBQVMsVUFBVTtBQUNyQyxRQUFJLFFBQVEsQ0FBQztBQUViLFFBQUcsUUFBUTtBQUNULGNBQVEsSUFBSSxNQUFNO0FBQ2hCLG1CQUFVQSxRQUFPO0FBQ2YsY0FBRyxPQUFPLFFBQVE7QUFDaEIsbUJBQU8sT0FBT0EsTUFBSztBQUFBLGNBQ2pCLGNBQWM7QUFBQSxjQUNkLE1BQUs7QUFDSCxzQkFBTSxNQUFNLEtBQUtBLElBQUc7QUFDcEIsdUJBQU8sT0FBT0EsTUFBSyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2pDLHVCQUFPO0FBQUEsY0FDVDtBQUFBLFlBQ0YsQ0FBQztBQUFBLGVBQ0U7QUFDSCxrQkFBTSxNQUFNLE1BQU0sTUFBTUEsSUFBRztBQUMzQixrQkFBTSxNQUFNLENBQUNDLFdBQW1CO0FBQzlCLHFCQUFPLFNBQVNELE1BQUtDLE1BQUs7QUFBQSxZQUM1QjtBQUVBLG1CQUFPLEtBQUssV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQ25DLG1CQUFPLEtBQUssT0FBTyxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2pDLG1CQUFPLE9BQU9ELE1BQUssRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLFVBQ25DO0FBQUEsTUFDSixDQUFDO0FBQUEsYUFFSyxPQUFPLE9BQU87QUFDcEIsWUFBTSxJQUFJLE1BQU0sNkRBQTZEO0FBQUEsU0FFMUU7QUFDSCxVQUFJO0FBRUosWUFBTSxNQUFNLE1BQU0sTUFBTSxHQUFHO0FBQzNCLFlBQU0sTUFBTSxDQUFDQyxXQUFnQjtBQUMzQixZQUFHLENBQUMsT0FBTyxTQUFTLEtBQUtBLE1BQUssS0FBSyxDQUFDO0FBQ2xDO0FBRUYsWUFBRztBQUNELGtCQUFRLEtBQUssTUFBTUEsTUFBSztBQUUxQixZQUFHQSxXQUFVLFFBQVEsU0FBUztBQUM1QjtBQUVGLGNBQU0sTUFBTSxRQUFRO0FBQ3BCLGNBQU0sTUFBTSxJQUFJLEtBQUssU0FBU0EsTUFBSztBQUNuQyxjQUFNLFFBQVEsSUFBSTtBQUVsQixnQkFBUSxDQUFBRCxTQUFPO0FBQ2IsY0FBRyxPQUFPLE9BQU87QUFDZixnQkFBSUEsSUFBRztBQUVULGdCQUFNO0FBQUEsUUFDUjtBQUFBLE1BQ0Y7QUFFQSxZQUFNLEdBQUcsSUFBSTtBQUNiLGNBQVEsT0FBTyxpQkFBaUIsS0FBSztBQUFBLFFBQ25DLFNBQVMsRUFBRSxLQUFLLElBQUk7QUFBQSxRQUNwQixLQUFLLEVBQUUsT0FBTyxJQUFJO0FBQUEsTUFDcEIsQ0FBQztBQUFBLElBQ0g7QUFFQSxXQUFPLFNBQVMsS0FBSyxFQUFFLE1BQU0sQ0FBQztBQUFBLEVBQ2hDLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsia2V5IiwgInZhbHVlIl0KfQo=
|
|
@@ -1,86 +1,83 @@
|
|
|
1
|
-
import { context } from
|
|
2
|
-
import { event, update } from
|
|
3
|
-
import { use } from
|
|
1
|
+
import { context } from "../control";
|
|
2
|
+
import { event, update } from "../model";
|
|
3
|
+
import { use } from "./use";
|
|
4
4
|
function set(value, argument) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
event(subject, key);
|
|
26
|
-
property.get = () => { throw err; };
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
else
|
|
30
|
-
update(subject, key, value);
|
|
31
|
-
if (0 in arguments)
|
|
32
|
-
return subject[key];
|
|
33
|
-
}
|
|
34
|
-
if (argument)
|
|
35
|
-
init();
|
|
36
|
-
else
|
|
37
|
-
property.get = init;
|
|
38
|
-
}
|
|
39
|
-
else if (value !== undefined)
|
|
40
|
-
property.value = value;
|
|
41
|
-
if (typeof argument == "function") {
|
|
42
|
-
let unset;
|
|
43
|
-
property.set = function (value, previous) {
|
|
44
|
-
const ctx = context();
|
|
45
|
-
const out = argument.call(this, value, previous);
|
|
46
|
-
const flush = ctx();
|
|
47
|
-
if (out === false)
|
|
48
|
-
return out;
|
|
49
|
-
if (typeof unset == "function")
|
|
50
|
-
unset(value);
|
|
51
|
-
unset = (next) => {
|
|
52
|
-
if (typeof out == "function")
|
|
53
|
-
out(next);
|
|
54
|
-
flush();
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
else
|
|
59
|
-
property.set = value => {
|
|
60
|
-
property.get = undefined;
|
|
61
|
-
update(subject, key, value);
|
|
5
|
+
return use((key, subject) => {
|
|
6
|
+
const property = {};
|
|
7
|
+
if (typeof value == "function" || value instanceof Promise) {
|
|
8
|
+
let init2 = function() {
|
|
9
|
+
if (typeof value == "function")
|
|
10
|
+
try {
|
|
11
|
+
value = attempt(value.bind(subject, key));
|
|
12
|
+
} catch (err) {
|
|
13
|
+
console.warn(`Generating initial value for ${subject}.${key} failed.`);
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
property.get = argument === true;
|
|
17
|
+
if (value instanceof Promise) {
|
|
18
|
+
value.then((value2) => {
|
|
19
|
+
update(subject, key, value2);
|
|
20
|
+
return value2;
|
|
21
|
+
}).catch((err) => {
|
|
22
|
+
event(subject, key);
|
|
23
|
+
property.get = () => {
|
|
24
|
+
throw err;
|
|
62
25
|
};
|
|
63
|
-
|
|
64
|
-
|
|
26
|
+
});
|
|
27
|
+
} else
|
|
28
|
+
update(subject, key, value);
|
|
29
|
+
if (0 in arguments)
|
|
30
|
+
return subject[key];
|
|
31
|
+
};
|
|
32
|
+
var init = init2;
|
|
33
|
+
if (argument)
|
|
34
|
+
init2();
|
|
35
|
+
else
|
|
36
|
+
property.get = init2;
|
|
37
|
+
} else if (value !== void 0)
|
|
38
|
+
property.value = value;
|
|
39
|
+
if (typeof argument == "function") {
|
|
40
|
+
let unset;
|
|
41
|
+
property.set = function(value2, previous) {
|
|
42
|
+
const ctx = context();
|
|
43
|
+
const out = argument.call(this, value2, previous);
|
|
44
|
+
const flush = ctx();
|
|
45
|
+
if (out === false)
|
|
46
|
+
return out;
|
|
47
|
+
if (typeof unset == "function")
|
|
48
|
+
unset(value2);
|
|
49
|
+
unset = (next) => {
|
|
50
|
+
if (typeof out == "function")
|
|
51
|
+
out(next);
|
|
52
|
+
flush();
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
} else
|
|
56
|
+
property.set = (value2) => {
|
|
57
|
+
property.get = void 0;
|
|
58
|
+
update(subject, key, value2);
|
|
59
|
+
};
|
|
60
|
+
return property;
|
|
61
|
+
});
|
|
65
62
|
}
|
|
66
63
|
function attempt(fn) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
return retry(err);
|
|
82
|
-
}
|
|
64
|
+
function retry(err) {
|
|
65
|
+
if (err instanceof Promise)
|
|
66
|
+
return err.then(compute);
|
|
67
|
+
else
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
function compute() {
|
|
71
|
+
try {
|
|
72
|
+
const output = fn();
|
|
73
|
+
return output instanceof Promise ? output.catch(retry) : output;
|
|
74
|
+
} catch (err) {
|
|
75
|
+
return retry(err);
|
|
83
76
|
}
|
|
84
|
-
|
|
77
|
+
}
|
|
78
|
+
return compute();
|
|
85
79
|
}
|
|
86
|
-
export {
|
|
80
|
+
export {
|
|
81
|
+
set
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3NldC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJy4uL2NvbnRyb2wnO1xuaW1wb3J0IHsgTW9kZWwsIGV2ZW50LCB1cGRhdGUgfSBmcm9tICcuLi9tb2RlbCc7XG5pbXBvcnQgeyB1c2UgfSBmcm9tICcuL3VzZSc7XG5cbmRlY2xhcmUgbmFtZXNwYWNlIHNldCB7XG4gIHR5cGUgQ2FsbGJhY2s8VCwgUyA9IGFueT4gPSAodGhpczogUywgbmV4dDogVCwgcHJldmlvdXM6IFQpID0+XG4gICAgKChuZXh0OiBUKSA9PiB2b2lkKSB8IFByb21pc2U8YW55PiB8IHZvaWQgfCBib29sZWFuO1xuXG4gIHR5cGUgRmFjdG9yeTxULCBTID0gYW55PiA9ICh0aGlzOiBTLCBrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxUPiB8IFQ7XG59XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IGFzIGB1bmRlZmluZWRgIGJ1dCByZXF1aXJlZC5cbiAqIFxuICogUHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIHVudGlsIGl0IGlzIGRlZmluZWQuIElmIGFjY2Vzc2VkIHdoaWxlIHVuZGVmaW5lZCwgYSBoeWJyaWRcbiAqIGBQcm9taXNlYC9gRXJyb3JgIChha2E6IFtTdXNwZW5zZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2NvbmN1cnJlbnQtbW9kZS1zdXNwZW5zZS5odG1sKSkgd2lsbCBiZSB0aHJvd24uXG4gKi9cbmZ1bmN0aW9uIHNldCA8VCA9IGFueT4oKTogVDtcblxuLyoqXG4gKiBTZXQgcHJvcGVydHkgd2l0aCBhIGZhY3RvcnkgZnVuY3Rpb24uXG4gKiBcbiAqIFJ1biBmYWN0b3J5IG9ubHkgaWYvd2hlbiBhY2Nlc3NlZC4gVmFsdWUgd2lsbCBiZSB1bmRlZmluZWQgdW50aWxcbiAqIGZhY3RvcnkgcmVzb2x2ZXMsIHdoaWNoIHdpbGwgYWxzbyBkaXNwYXRjaCBhbiB1cGRhdGUgZm9yIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gc2V0IDxUPiAoZmFjdG9yeTogc2V0LkZhY3Rvcnk8VD4gfCBQcm9taXNlPFQ+LCByZXF1aXJlZDogZmFsc2UpOiBUIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFNldCBwcm9wZXJ0eSB3aXRoIGEgZmFjdG9yeSBmdW5jdGlvbi5cbiAqXG4gKiBJZiBhc3luYywgcHJvcGVydHkgY2Fubm90IGJlIGFjY2Vzc2VkIHVudGlsIHJlc29sdmVzLCB5ZWlsZGluZyBhIHJlc3VsdC5cbiAqIElmIGFjY2Vzc2VkIHdoaWxlIHN0aWxsIHByb2Nlc3NpbmcsIFJlYWN0IFN1c3BlbnNlIHdpbGwgYmUgdGhyb3duLlxuICpcbiAqIEBwYXJhbSBmYWN0b3J5IC0gQ2FsbGJhY2sgcnVuIHRvIGRlcnJpdmUgcHJvcGVydHkgdmFsdWUuXG4gKiBAcGFyYW0gcmVxdWlyZWQgLSBJZiB0cnVlIHJ1biBmYWN0b3J5IGltbWVkaWF0ZWx5IG9uIGNyZWF0aW9uLCBvdGhlcndpc2Ugb24gYWNjZXNzLlxuICovXG5mdW5jdGlvbiBzZXQgPFQ+IChmYWN0b3J5OiBzZXQuRmFjdG9yeTxUPiB8IFByb21pc2U8VD4sIHJlcXVpcmVkPzogYm9vbGVhbik6IFQ7XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgd2l0aCBlbXB0eSBwbGFjZWhvbGRlciBhbmQvb3IgdXBkYXRlIGNhbGxiYWNrLlxuICogXG4gKiBAcGFyYW0gdmFsdWUgLSBTdGFydGluZyB2YWx1ZSBmb3IgcHJvcGVydHkuIElmIHVuZGVmaW5lZCwgc3VzcGVuc2Ugd2lsbCBiZSB0aHJvd24gb24gYWNjZXNzLCB1bnRpbCB2YWx1ZSBpcyBzZXQgYW5kIGFjY2VwdGVkIGJ5IGNhbGxiYWNrLlxuICogQHBhcmFtIG9uVXBkYXRlIC0gQ2FsbGJhY2sgcnVuIHdoZW4gcHJvcGVydHkgaXMgc2V0LiBJZiByZXR1cm5zIGZhbHNlLCB1cGRhdGUgaXMgbm90IGFjY2VwdGVkIGFuZCBwcm9wZXJ0eSB3aWxsIGtlZXAgcHJldmlvdXMgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHNldCA8VD4gKHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBvblVwZGF0ZT86IHNldC5DYWxsYmFjazxUPik6IFQ7XG5cbmZ1bmN0aW9uIHNldCA8VD4gKFxuICB2YWx1ZT86IHNldC5GYWN0b3J5PFQ+IHwgUHJvbWlzZTxUPiB8IFQsXG4gIGFyZ3VtZW50Pzogc2V0LkNhbGxiYWNrPGFueT4gfCBib29sZWFuKXtcblxuICByZXR1cm4gdXNlPFQ+KChrZXksIHN1YmplY3QpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eTogTW9kZWwuRGVzY3JpcHRvciA9IHt9O1xuXG4gICAgaWYodHlwZW9mIHZhbHVlID09IFwiZnVuY3Rpb25cIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2Upe1xuICAgICAgZnVuY3Rpb24gaW5pdCgpe1xuICAgICAgICBpZih0eXBlb2YgdmFsdWUgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGF0dGVtcHQodmFsdWUuYmluZChzdWJqZWN0LCBrZXkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2F0Y2goZXJyKXtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgR2VuZXJhdGluZyBpbml0aWFsIHZhbHVlIGZvciAke3N1YmplY3R9LiR7a2V5fSBmYWlsZWQuYCk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgIHByb3BlcnR5LmdldCA9IGFyZ3VtZW50ID09PSB0cnVlO1xuXG4gICAgICAgIGlmKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSl7XG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgIGV2ZW50KHN1YmplY3QsIGtleSk7XG4gICAgICAgICAgICAgIHByb3BlcnR5LmdldCA9ICgpID0+IHsgdGhyb3cgZXJyIH07XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB1cGRhdGUoc3ViamVjdCwga2V5LCB2YWx1ZSk7XG5cbiAgICAgICAgaWYoMCBpbiBhcmd1bWVudHMpXG4gICAgICAgICAgcmV0dXJuIHN1YmplY3Rba2V5XTtcbiAgICAgIH1cblxuICAgICAgaWYoYXJndW1lbnQpXG4gICAgICAgIGluaXQoKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcHJvcGVydHkuZ2V0ID0gaW5pdDtcbiAgICB9XG4gICAgZWxzZSBpZih2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgcHJvcGVydHkudmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmKHR5cGVvZiBhcmd1bWVudCA9PSBcImZ1bmN0aW9uXCIpe1xuICAgICAgbGV0IHVuc2V0OiAoKG5leHQ6IFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICBwcm9wZXJ0eS5zZXQgPSBmdW5jdGlvbih0aGlzOiBhbnksIHZhbHVlOiBhbnksIHByZXZpb3VzOiBhbnkpe1xuICAgICAgICBjb25zdCBjdHggPSBjb250ZXh0KCk7XG4gICAgICAgIGNvbnN0IG91dCA9IGFyZ3VtZW50LmNhbGwodGhpcywgdmFsdWUsIHByZXZpb3VzKTtcbiAgICAgICAgY29uc3QgZmx1c2ggPSBjdHgoKTtcblxuICAgICAgICBpZihvdXQgPT09IGZhbHNlKVxuICAgICAgICAgIHJldHVybiBvdXQ7XG5cbiAgICAgICAgaWYodHlwZW9mIHVuc2V0ID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICB1bnNldCh2YWx1ZSk7XG5cbiAgICAgICAgdW5zZXQgPSAobmV4dDogVCkgPT4ge1xuICAgICAgICAgIGlmKHR5cGVvZiBvdXQgPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgb3V0KG5leHQpO1xuXG4gICAgICAgICAgZmx1c2goKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlXG4gICAgICBwcm9wZXJ0eS5zZXQgPSB2YWx1ZSA9PiB7XG4gICAgICAgIHByb3BlcnR5LmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdXBkYXRlKHN1YmplY3QsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgcmV0dXJuIHByb3BlcnR5O1xuICB9KVxufVxuXG5mdW5jdGlvbiBhdHRlbXB0KGZuOiAoKSA9PiBhbnkpOiBhbnkge1xuICBmdW5jdGlvbiByZXRyeShlcnI6IHVua25vd24pe1xuICAgIGlmKGVyciBpbnN0YW5jZW9mIFByb21pc2UpXG4gICAgICByZXR1cm4gZXJyLnRoZW4oY29tcHV0ZSk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgZXJyO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZSgpOiBhbnkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBmbigpO1xuXG4gICAgICByZXR1cm4gb3V0cHV0IGluc3RhbmNlb2YgUHJvbWlzZVxuICAgICAgICA/IG91dHB1dC5jYXRjaChyZXRyeSlcbiAgICAgICAgOiBvdXRwdXQ7XG4gICAgfVxuICAgIGNhdGNoKGVycil7XG4gICAgICByZXR1cm4gcmV0cnkoZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29tcHV0ZSgpO1xufVxuXG5leHBvcnQgeyBzZXQgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsZUFBZTtBQUN4QixTQUFnQixPQUFPLGNBQWM7QUFDckMsU0FBUyxXQUFXO0FBNENwQixTQUFTLElBQ1AsT0FDQSxVQUF1QztBQUV2QyxTQUFPLElBQU8sQ0FBQyxLQUFLLFlBQVk7QUFDOUIsVUFBTSxXQUE2QixDQUFDO0FBRXBDLFFBQUcsT0FBTyxTQUFTLGNBQWMsaUJBQWlCLFNBQVE7QUFDeEQsVUFBU0EsUUFBVCxXQUFlO0FBQ2IsWUFBRyxPQUFPLFNBQVM7QUFDakIsY0FBSTtBQUNGLG9CQUFRLFFBQVEsTUFBTSxLQUFLLFNBQVMsR0FBRyxDQUFDO0FBQUEsVUFDMUMsU0FDTSxLQUFJO0FBQ1Isb0JBQVEsS0FBSyxnQ0FBZ0MsT0FBTyxJQUFJLEdBQUcsVUFBVTtBQUNyRSxrQkFBTTtBQUFBLFVBQ1I7QUFFRixpQkFBUyxNQUFNLGFBQWE7QUFFNUIsWUFBRyxpQkFBaUIsU0FBUTtBQUMxQixnQkFDRyxLQUFLLENBQUFDLFdBQVM7QUFDYixtQkFBTyxTQUFTLEtBQUtBLE1BQUs7QUFDMUIsbUJBQU9BO0FBQUEsVUFDVCxDQUFDLEVBQ0EsTUFBTSxTQUFPO0FBQ1osa0JBQU0sU0FBUyxHQUFHO0FBQ2xCLHFCQUFTLE1BQU0sTUFBTTtBQUFFLG9CQUFNO0FBQUEsWUFBSTtBQUFBLFVBQ25DLENBQUM7QUFBQSxRQUNMO0FBRUUsaUJBQU8sU0FBUyxLQUFLLEtBQUs7QUFFNUIsWUFBRyxLQUFLO0FBQ04saUJBQU8sUUFBUSxHQUFHO0FBQUEsTUFDdEI7QUE1QlMsaUJBQUFEO0FBOEJULFVBQUc7QUFDRCxRQUFBQSxNQUFLO0FBQUE7QUFFTCxpQkFBUyxNQUFNQTtBQUFBLElBQ25CLFdBQ1EsVUFBVTtBQUNoQixlQUFTLFFBQVE7QUFFbkIsUUFBRyxPQUFPLFlBQVksWUFBVztBQUMvQixVQUFJO0FBRUosZUFBUyxNQUFNLFNBQW9CQyxRQUFZLFVBQWM7QUFDM0QsY0FBTSxNQUFNLFFBQVE7QUFDcEIsY0FBTSxNQUFNLFNBQVMsS0FBSyxNQUFNQSxRQUFPLFFBQVE7QUFDL0MsY0FBTSxRQUFRLElBQUk7QUFFbEIsWUFBRyxRQUFRO0FBQ1QsaUJBQU87QUFFVCxZQUFHLE9BQU8sU0FBUztBQUNqQixnQkFBTUEsTUFBSztBQUViLGdCQUFRLENBQUMsU0FBWTtBQUNuQixjQUFHLE9BQU8sT0FBTztBQUNmLGdCQUFJLElBQUk7QUFFVixnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVFLGVBQVMsTUFBTSxDQUFBQSxXQUFTO0FBQ3RCLGlCQUFTLE1BQU07QUFDZixlQUFPLFNBQVMsS0FBS0EsTUFBSztBQUFBLE1BQzVCO0FBRUYsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNIO0FBRUEsU0FBUyxRQUFRLElBQW9CO0FBQ25DLFdBQVMsTUFBTSxLQUFhO0FBQzFCLFFBQUcsZUFBZTtBQUNoQixhQUFPLElBQUksS0FBSyxPQUFPO0FBQUE7QUFFdkIsWUFBTTtBQUFBLEVBQ1Y7QUFFQSxXQUFTLFVBQWU7QUFDdEIsUUFBSTtBQUNGLFlBQU0sU0FBUyxHQUFHO0FBRWxCLGFBQU8sa0JBQWtCLFVBQ3JCLE9BQU8sTUFBTSxLQUFLLElBQ2xCO0FBQUEsSUFDTixTQUNNLEtBQUk7QUFDUixhQUFPLE1BQU0sR0FBRztBQUFBLElBQ2xCO0FBQUEsRUFDRjtBQUVBLFNBQU8sUUFBUTtBQUNqQjsiLAogICJuYW1lcyI6IFsiaW5pdCIsICJ2YWx1ZSJdCn0K
|
|
@@ -1,60 +1,65 @@
|
|
|
1
|
-
import { watch } from
|
|
2
|
-
import { define, fetch, mayAdopt, Model, PARENT, STATE, update } from
|
|
3
|
-
const INSTRUCT = new Map();
|
|
1
|
+
import { watch } from "../control";
|
|
2
|
+
import { define, fetch, mayAdopt, Model, PARENT, STATE, update } from "../model";
|
|
3
|
+
const INSTRUCT = /* @__PURE__ */ new Map();
|
|
4
4
|
function use(arg1, arg2) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
5
|
+
const token = Symbol("instruction");
|
|
6
|
+
if (Model.is(arg1)) {
|
|
7
|
+
const type = arg1;
|
|
8
|
+
arg1 = (key, subject) => {
|
|
9
|
+
const value = new type();
|
|
10
|
+
const desc = { set };
|
|
11
|
+
set(value);
|
|
12
|
+
PARENT.set(value, subject);
|
|
13
|
+
function set(next) {
|
|
14
|
+
if (next ? !(next instanceof type) : arg2 !== false)
|
|
15
|
+
throw new Error(`${subject}.${key} expected Model of type ${type} but got ${next && next.constructor}.`);
|
|
16
|
+
update(subject, key, next);
|
|
17
|
+
if (next && typeof arg2 == "function")
|
|
18
|
+
arg2(next);
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return desc;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
INSTRUCT.set(token, arg1);
|
|
25
|
+
return token;
|
|
26
26
|
}
|
|
27
27
|
Model.on((_, model) => {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
INSTRUCT.delete(value);
|
|
37
|
-
delete model[key];
|
|
38
|
-
const output = instruction.call(model, key, model, state);
|
|
39
|
-
if (!output)
|
|
40
|
-
continue;
|
|
41
|
-
const desc = typeof output == "object" ? output : { get: output };
|
|
42
|
-
if ("value" in desc)
|
|
43
|
-
state[key] = desc.value;
|
|
44
|
-
define(model, key, {
|
|
45
|
-
enumerable: desc.enumerable !== false,
|
|
46
|
-
get() {
|
|
47
|
-
return watch(this, key, typeof desc.get == "function"
|
|
48
|
-
? desc.get(this)
|
|
49
|
-
: fetch(model, key, desc.get));
|
|
50
|
-
},
|
|
51
|
-
set(next) {
|
|
52
|
-
if (desc.set === false)
|
|
53
|
-
throw new Error(`${model}.${key} is read-only.`);
|
|
54
|
-
update(model, key, next, desc.set);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
28
|
+
const state = STATE.get(model);
|
|
29
|
+
for (const key in model) {
|
|
30
|
+
const { value } = Object.getOwnPropertyDescriptor(model, key);
|
|
31
|
+
const instruction = INSTRUCT.get(value);
|
|
32
|
+
if (!instruction) {
|
|
33
|
+
mayAdopt(model, value);
|
|
34
|
+
continue;
|
|
57
35
|
}
|
|
58
|
-
|
|
36
|
+
INSTRUCT.delete(value);
|
|
37
|
+
delete model[key];
|
|
38
|
+
const output = instruction.call(model, key, model, state);
|
|
39
|
+
if (!output)
|
|
40
|
+
continue;
|
|
41
|
+
const desc = typeof output == "object" ? output : { get: output };
|
|
42
|
+
if ("value" in desc)
|
|
43
|
+
state[key] = desc.value;
|
|
44
|
+
define(model, key, {
|
|
45
|
+
enumerable: desc.enumerable !== false,
|
|
46
|
+
get() {
|
|
47
|
+
return watch(
|
|
48
|
+
this,
|
|
49
|
+
key,
|
|
50
|
+
typeof desc.get == "function" ? desc.get(this) : fetch(model, key, desc.get)
|
|
51
|
+
);
|
|
52
|
+
},
|
|
53
|
+
set(next) {
|
|
54
|
+
if (desc.set === false)
|
|
55
|
+
throw new Error(`${model}.${key} is read-only.`);
|
|
56
|
+
update(model, key, next, desc.set);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
59
61
|
});
|
|
60
|
-
export {
|
|
62
|
+
export {
|
|
63
|
+
use
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3VzZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICcuLi9jb250cm9sJztcbmltcG9ydCB7IGRlZmluZSwgZmV0Y2gsIG1heUFkb3B0LCBNb2RlbCwgUEFSRU5ULCBTVEFURSwgdXBkYXRlIH0gZnJvbSAnLi4vbW9kZWwnO1xuXG5jb25zdCBJTlNUUlVDVCA9IG5ldyBNYXA8c3ltYm9sLCBNb2RlbC5JbnN0cnVjdGlvbj4oKTtcblxuZnVuY3Rpb24gdXNlIDxUPiAoaW5zdHJ1Y3Rpb246IE1vZGVsLkluc3RydWN0aW9uPFQ+KTogVCBleHRlbmRzIHZvaWQgPyB1bmtub3duIDogVDtcblxuZnVuY3Rpb24gdXNlIDxUIGV4dGVuZHMgTW9kZWw+IChUeXBlOiBNb2RlbC5Jbml0PFQ+LCByZXF1aXJlZDogZmFsc2UpOiBUIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiB1c2UgPFQgZXh0ZW5kcyBNb2RlbD4gKFR5cGU6IE1vZGVsLkluaXQ8VD4sIHJlYWR5PzogKGk6IFQpID0+IHZvaWQpOiBUO1xuXG5mdW5jdGlvbiB1c2UoXG4gIGFyZzE6IE1vZGVsLkluaXQgfCBNb2RlbC5JbnN0cnVjdGlvbixcbiAgYXJnMj86ICgoaTogTW9kZWwpID0+IHZvaWQpIHwgYm9vbGVhbil7XG5cbiAgY29uc3QgdG9rZW4gPSBTeW1ib2woXCJpbnN0cnVjdGlvblwiKTtcblxuICBpZihNb2RlbC5pcyhhcmcxKSl7XG4gICAgY29uc3QgdHlwZSA9IGFyZzE7XG5cbiAgICBhcmcxID0gKGtleSwgc3ViamVjdCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBuZXcgdHlwZSgpO1xuICAgICAgY29uc3QgZGVzYzogTW9kZWwuRGVzY3JpcHRvciA9IHsgc2V0IH07XG5cbiAgICAgIHNldCh2YWx1ZSk7XG4gICAgICBQQVJFTlQuc2V0KHZhbHVlLCBzdWJqZWN0KTtcblxuICAgICAgZnVuY3Rpb24gc2V0KG5leHQ6IE1vZGVsIHwgdW5kZWZpbmVkKXtcbiAgICAgICAgaWYobmV4dCA/ICEobmV4dCBpbnN0YW5jZW9mIHR5cGUpIDogYXJnMiAhPT0gZmFsc2UpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3N1YmplY3R9LiR7a2V5fSBleHBlY3RlZCBNb2RlbCBvZiB0eXBlICR7dHlwZX0gYnV0IGdvdCAke25leHQgJiYgbmV4dC5jb25zdHJ1Y3Rvcn0uYClcbiAgXG4gICAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIG5leHQpO1xuICBcbiAgICAgICAgaWYobmV4dCAmJiB0eXBlb2YgYXJnMiA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgYXJnMihuZXh0KTtcbiAgXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgXG4gICAgICByZXR1cm4gZGVzYztcbiAgICB9XG4gIH1cblxuICBJTlNUUlVDVC5zZXQodG9rZW4sIGFyZzEpO1xuICByZXR1cm4gdG9rZW47XG59XG5cbk1vZGVsLm9uKChfLCBtb2RlbCkgPT4ge1xuICBjb25zdCBzdGF0ZSA9IFNUQVRFLmdldChtb2RlbCkhO1xuXG4gIGZvcihjb25zdCBrZXkgaW4gbW9kZWwpe1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobW9kZWwsIGtleSkhO1xuICAgIGNvbnN0IGluc3RydWN0aW9uID0gSU5TVFJVQ1QuZ2V0KHZhbHVlKTtcblxuICAgIGlmKCFpbnN0cnVjdGlvbil7XG4gICAgICBtYXlBZG9wdChtb2RlbCwgdmFsdWUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgSU5TVFJVQ1QuZGVsZXRlKHZhbHVlKTtcbiAgICBkZWxldGUgKG1vZGVsIGFzIGFueSlba2V5XTtcblxuICAgIGNvbnN0IG91dHB1dCA9IGluc3RydWN0aW9uLmNhbGwobW9kZWwsIGtleSwgbW9kZWwsIHN0YXRlKTtcblxuICAgIGlmKCFvdXRwdXQpXG4gICAgICBjb250aW51ZTtcblxuICAgIGNvbnN0IGRlc2MgPSB0eXBlb2Ygb3V0cHV0ID09IFwib2JqZWN0XCIgPyBvdXRwdXQgOiB7IGdldDogb3V0cHV0IH07XG5cbiAgICBpZihcInZhbHVlXCIgaW4gZGVzYylcbiAgICAgIHN0YXRlW2tleV0gPSBkZXNjLnZhbHVlO1xuXG4gICAgZGVmaW5lKG1vZGVsLCBrZXksIHtcbiAgICAgIGVudW1lcmFibGU6IGRlc2MuZW51bWVyYWJsZSAhPT0gZmFsc2UsXG4gICAgICBnZXQodGhpczogTW9kZWwpe1xuICAgICAgICByZXR1cm4gd2F0Y2godGhpcywga2V5LCBcbiAgICAgICAgICB0eXBlb2YgZGVzYy5nZXQgPT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IGRlc2MuZ2V0KHRoaXMpXG4gICAgICAgICAgICA6IGZldGNoKG1vZGVsLCBrZXksIGRlc2MuZ2V0KVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHNldChuZXh0KXtcbiAgICAgICAgaWYoZGVzYy5zZXQgPT09IGZhbHNlKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHttb2RlbH0uJHtrZXl9IGlzIHJlYWQtb25seS5gKTtcblxuICAgICAgICB1cGRhdGUobW9kZWwsIGtleSwgbmV4dCwgZGVzYy5zZXQpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0pO1xuXG5leHBvcnQgeyB1c2UgfSJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsYUFBYTtBQUN0QixTQUFTLFFBQVEsT0FBTyxVQUFVLE9BQU8sUUFBUSxPQUFPLGNBQWM7QUFFdEUsTUFBTSxXQUFXLG9CQUFJLElBQStCO0FBUXBELFNBQVMsSUFDUCxNQUNBLE1BQXNDO0FBRXRDLFFBQU0sUUFBUSxPQUFPLGFBQWE7QUFFbEMsTUFBRyxNQUFNLEdBQUcsSUFBSSxHQUFFO0FBQ2hCLFVBQU0sT0FBTztBQUViLFdBQU8sQ0FBQyxLQUFLLFlBQVk7QUFDdkIsWUFBTSxRQUFRLElBQUksS0FBSztBQUN2QixZQUFNLE9BQXlCLEVBQUUsSUFBSTtBQUVyQyxVQUFJLEtBQUs7QUFDVCxhQUFPLElBQUksT0FBTyxPQUFPO0FBRXpCLGVBQVMsSUFBSSxNQUF3QjtBQUNuQyxZQUFHLE9BQU8sRUFBRSxnQkFBZ0IsUUFBUSxTQUFTO0FBQzNDLGdCQUFNLElBQUksTUFBTSxHQUFHLE9BQU8sSUFBSSxHQUFHLDJCQUEyQixJQUFJLFlBQVksUUFBUSxLQUFLLFdBQVcsR0FBRztBQUV6RyxlQUFPLFNBQVMsS0FBSyxJQUFJO0FBRXpCLFlBQUcsUUFBUSxPQUFPLFFBQVE7QUFDeEIsZUFBSyxJQUFJO0FBRVgsZUFBTztBQUFBLE1BQ1Q7QUFFQSxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxXQUFTLElBQUksT0FBTyxJQUFJO0FBQ3hCLFNBQU87QUFDVDtBQUVBLE1BQU0sR0FBRyxDQUFDLEdBQUcsVUFBVTtBQUNyQixRQUFNLFFBQVEsTUFBTSxJQUFJLEtBQUs7QUFFN0IsYUFBVSxPQUFPLE9BQU07QUFDckIsVUFBTSxFQUFFLE1BQU0sSUFBSSxPQUFPLHlCQUF5QixPQUFPLEdBQUc7QUFDNUQsVUFBTSxjQUFjLFNBQVMsSUFBSSxLQUFLO0FBRXRDLFFBQUcsQ0FBQyxhQUFZO0FBQ2QsZUFBUyxPQUFPLEtBQUs7QUFDckI7QUFBQSxJQUNGO0FBRUEsYUFBUyxPQUFPLEtBQUs7QUFDckIsV0FBUSxNQUFjLEdBQUc7QUFFekIsVUFBTSxTQUFTLFlBQVksS0FBSyxPQUFPLEtBQUssT0FBTyxLQUFLO0FBRXhELFFBQUcsQ0FBQztBQUNGO0FBRUYsVUFBTSxPQUFPLE9BQU8sVUFBVSxXQUFXLFNBQVMsRUFBRSxLQUFLLE9BQU87QUFFaEUsUUFBRyxXQUFXO0FBQ1osWUFBTSxHQUFHLElBQUksS0FBSztBQUVwQixXQUFPLE9BQU8sS0FBSztBQUFBLE1BQ2pCLFlBQVksS0FBSyxlQUFlO0FBQUEsTUFDaEMsTUFBZ0I7QUFDZCxlQUFPO0FBQUEsVUFBTTtBQUFBLFVBQU07QUFBQSxVQUNqQixPQUFPLEtBQUssT0FBTyxhQUNmLEtBQUssSUFBSSxJQUFJLElBQ2IsTUFBTSxPQUFPLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDaEM7QUFBQSxNQUNGO0FBQUEsTUFDQSxJQUFJLE1BQUs7QUFDUCxZQUFHLEtBQUssUUFBUTtBQUNkLGdCQUFNLElBQUksTUFBTSxHQUFHLEtBQUssSUFBSSxHQUFHLGdCQUFnQjtBQUVqRCxlQUFPLE9BQU8sS0FBSyxNQUFNLEtBQUssR0FBRztBQUFBLE1BQ25DO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFNBQU87QUFDVCxDQUFDOyIsCiAgIm5hbWVzIjogW10KfQo=
|