@expressive/mvc 0.73.0 → 0.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +137 -0
  2. package/dist/component.d.ts +87 -0
  3. package/dist/component.js +111 -0
  4. package/dist/component.js.map +1 -0
  5. package/dist/context.d.ts +56 -0
  6. package/dist/context.js +201 -0
  7. package/dist/context.js.map +1 -0
  8. package/dist/field/def.d.ts +17 -0
  9. package/dist/field/def.js +29 -0
  10. package/dist/field/def.js.map +1 -0
  11. package/dist/field/get.d.ts +57 -0
  12. package/dist/field/get.js +90 -0
  13. package/dist/field/get.js.map +1 -0
  14. package/dist/field/hot.d.ts +16 -0
  15. package/dist/field/hot.js +98 -0
  16. package/dist/field/hot.js.map +1 -0
  17. package/dist/field/ref.d.ts +78 -0
  18. package/dist/field/ref.js +85 -0
  19. package/dist/field/ref.js.map +1 -0
  20. package/dist/field/set.d.ts +59 -0
  21. package/dist/field/set.js +84 -0
  22. package/dist/field/set.js.map +1 -0
  23. package/dist/index.d.ts +10 -502
  24. package/dist/index.js +11 -872
  25. package/dist/jsx-dev-runtime.d.ts +2 -0
  26. package/dist/jsx-dev-runtime.js +3 -0
  27. package/dist/jsx-runtime.d.ts +90 -0
  28. package/dist/jsx-runtime.js +57 -0
  29. package/dist/jsx-runtime.js.map +1 -0
  30. package/dist/observable.d.ts +58 -0
  31. package/dist/observable.js +184 -0
  32. package/dist/observable.js.map +1 -0
  33. package/dist/state.d.ts +311 -0
  34. package/dist/state.js +424 -0
  35. package/dist/state.js.map +1 -0
  36. package/package.json +35 -18
  37. package/dist/esm/context.d.ts +0 -62
  38. package/dist/esm/context.js +0 -158
  39. package/dist/esm/index.d.ts +0 -8
  40. package/dist/esm/index.js +0 -9
  41. package/dist/esm/instruction/get.d.ts +0 -36
  42. package/dist/esm/instruction/get.js +0 -77
  43. package/dist/esm/instruction/ref.d.ts +0 -71
  44. package/dist/esm/instruction/ref.js +0 -68
  45. package/dist/esm/instruction/set.d.ts +0 -69
  46. package/dist/esm/instruction/set.js +0 -118
  47. package/dist/esm/instruction/use.d.ts +0 -23
  48. package/dist/esm/instruction/use.js +0 -56
  49. package/dist/esm/observable.d.ts +0 -42
  50. package/dist/esm/observable.js +0 -121
  51. package/dist/esm/state.d.ts +0 -234
  52. package/dist/esm/state.js +0 -293
  53. package/dist/index.js.map +0 -1
@@ -1,118 +0,0 @@
1
- import { addListener, event, scope, watch } from "../observable.js";
2
- import { METHOD, State, access, update } from "../state.js";
3
- import { use } from "./use.js";
4
-
5
- //#region src/instruction/set.ts
6
- const STALE = /* @__PURE__ */ new WeakSet();
7
- function set(value, argument) {
8
- return use((key, subject, state) => {
9
- if (typeof value == "symbol") throw new Error(`Attempted to use an instruction result (probably use or get) as computed source for ${subject}.${key}. This is not allowed.`);
10
- const property = {};
11
- if (value instanceof State || value === true) {
12
- let from = subject;
13
- let getter;
14
- if (value instanceof State) {
15
- from = value;
16
- getter = argument;
17
- } else {
18
- const fn = METHOD.get(argument) || argument;
19
- getter = ((p, k) => fn.call(p, k, p));
20
- }
21
- const source = (resolve) => resolve(from);
22
- let reset;
23
- let isAsync;
24
- let proxy;
25
- function connect(self) {
26
- reset = watch(self, (current) => {
27
- proxy = current;
28
- if (!(key in state) || STALE.delete(compute)) compute(!reset);
29
- return (didUpdate) => {
30
- if (didUpdate) {
31
- STALE.add(compute);
32
- event(subject, key, true);
33
- }
34
- };
35
- }, false);
36
- }
37
- function compute(initial) {
38
- let next;
39
- try {
40
- next = getter.call(proxy, proxy, key);
41
- } catch (err) {
42
- console.warn(`An exception was thrown while ${initial ? "initializing" : "refreshing"} ${subject}.${key}.`);
43
- if (initial) throw err;
44
- console.error(err);
45
- }
46
- update(subject, key, next, !isAsync);
47
- }
48
- return () => {
49
- if (!proxy) {
50
- source(connect);
51
- isAsync = true;
52
- }
53
- if (STALE.delete(compute)) compute();
54
- return access(subject, key, !proxy);
55
- };
56
- }
57
- if (typeof value == "function" || value instanceof Promise) {
58
- function init() {
59
- if (typeof value == "function") try {
60
- value = attempt(value.bind(subject, key));
61
- } catch (err) {
62
- console.warn(`Generating initial value for ${subject}.${key} failed.`);
63
- throw err;
64
- }
65
- property.get = argument !== false;
66
- const set = (value) => subject[key] = value;
67
- if (value instanceof Promise) value.then(set, (error) => {
68
- event(subject, key);
69
- property.get = () => {
70
- throw error;
71
- };
72
- });
73
- else set(value);
74
- if (argument) return null;
75
- return subject[key];
76
- }
77
- if (argument) addListener(subject, init, true);
78
- else property.get = init;
79
- } else if (value !== void 0) property.value = value;
80
- if (typeof argument == "function") {
81
- let unset;
82
- property.set = function(value, previous) {
83
- const exit = scope();
84
- const returns = argument.call(this, value, previous);
85
- const flush = exit();
86
- if (returns === false) return false;
87
- if (typeof unset == "function") unset(value);
88
- unset = (next) => {
89
- if (typeof returns == "function") returns(next);
90
- flush();
91
- };
92
- };
93
- } else property.set = (value) => {
94
- property.get = void 0;
95
- update(subject, key, value);
96
- };
97
- return property;
98
- });
99
- }
100
- function attempt(fn) {
101
- function retry(err) {
102
- if (err instanceof Promise) return err.then(compute);
103
- else throw err;
104
- }
105
- function compute() {
106
- try {
107
- const output = fn();
108
- return output instanceof Promise ? output.catch(retry) : output;
109
- } catch (err) {
110
- return retry(err);
111
- }
112
- }
113
- return compute();
114
- }
115
-
116
- //#endregion
117
- export { set };
118
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnN0cnVjdGlvbi9zZXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWRkTGlzdGVuZXIsIHNjb3BlLCB3YXRjaCB9IGZyb20gJy4uL29ic2VydmFibGUnO1xuaW1wb3J0IHsgYWNjZXNzLCBldmVudCwgTUVUSE9ELCBTdGF0ZSwgdXBkYXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb24sIHVzZSB9IGZyb20gJy4vdXNlJztcblxuY29uc3QgU1RBTEUgPSBuZXcgV2Vha1NldDwoKSA9PiB2b2lkPigpO1xuXG5kZWNsYXJlIG5hbWVzcGFjZSBzZXQge1xuICB0eXBlIENhbGxiYWNrPFQsIFMgPSBhbnk+ID0gKFxuICAgIHRoaXM6IFMsXG4gICAgbmV4dDogVCxcbiAgICBwcmV2aW91czogVFxuICApID0+ICgobmV4dDogVCkgPT4gdm9pZCkgfCBQcm9taXNlPGFueT4gfCB2b2lkIHwgYm9vbGVhbjtcblxuICB0eXBlIENvbXB1dGU8VCwgUyA9IGFueT4gPSAob246IFMsIGtleTogc3RyaW5nKSA9PiBUO1xuXG4gIHR5cGUgRmFjdG9yeTxULCBTID0gYW55PiA9ICh0aGlzOiBTLCBrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxUPiB8IFQ7XG59XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IGFzIGB1bmRlZmluZWRgIGJ1dCByZXF1aXJlZC5cbiAqXG4gKiBQcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgdW50aWwgaXQgaXMgZGVmaW5lZC4gSWYgYWNjZXNzZWQgd2hpbGUgdW5kZWZpbmVkLCBhIGh5YnJpZFxuICogYFByb21pc2VgL2BFcnJvcmAgKGFrYTogW1N1c3BlbnNlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvY29uY3VycmVudC1tb2RlLXN1c3BlbnNlLmh0bWwpKSB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gc2V0PFQgPSBhbnk+KCk6IFQ7XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IHdpdGggYSBmYWN0b3J5IGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZSoqIEZhY3RvcnkgaXMgbGF6eSEgSXQgd2lsbCBvbmx5IHJ1biBpZi93aGVuIHByb3BlcnR5IGlzIGFjY2Vzc2VkLlxuICogVmFsdWUgd2lsbCBiZSB1bmRlZmluZWQgdW50aWwgZmFjdG9yeSByZXNvbHZlcywgd2hpY2ggd2lsbCBhbHNvIGRpc3BhdGNoIGFuIHVwZGF0ZSBmb3IgdGhlIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBzZXQ8VD4oZmFjdG9yeTogc2V0LkZhY3Rvcnk8VD4sIHJlcXVpcmVkOiBmYWxzZSk6IFQgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogU2V0IHByb3BlcnR5IHdpdGggYSBmYWN0b3J5IGZ1bmN0aW9uLlxuICpcbiAqIElmIGFzeW5jLCBwcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgdW50aWwgcmVzb2x2ZXMsIHllaWxkaW5nIGEgcmVzdWx0LlxuICogSWYgYWNjZXNzZWQgd2hpbGUgc3RpbGwgcHJvY2Vzc2luZywgUmVhY3QgU3VzcGVuc2Ugd2lsbCBiZSB0aHJvd24uXG4gKlxuICogQHBhcmFtIGZhY3RvcnkgLSBDYWxsYmFjayBydW4gdG8gZGVycml2ZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSByZXF1aXJlZCAtIElmIHRydWUgcnVuIGZhY3RvcnkgaW1tZWRpYXRlbHkgb24gY3JlYXRpb24sIG90aGVyd2lzZSBvbiBhY2Nlc3MuXG4gKi9cbmZ1bmN0aW9uIHNldDxUPihmYWN0b3J5OiBzZXQuRmFjdG9yeTxUPiwgcmVxdWlyZWQ/OiBib29sZWFuKTogVDtcblxuLyoqXG4gKiBTZXQgcHJvcGVydHkgd2l0aCBhIGZhY3RvcnkgZnVuY3Rpb24uXG4gKlxuICogSWYgYXN5bmMsIHByb3BlcnR5IGNhbm5vdCBiZSBhY2Nlc3NlZCB1bnRpbCByZXNvbHZlcywgeWVpbGRpbmcgYSByZXN1bHQuXG4gKiBJZiBhY2Nlc3NlZCB3aGlsZSBzdGlsbCBwcm9jZXNzaW5nLCBSZWFjdCBTdXNwZW5zZSB3aWxsIGJlIHRocm93bi5cbiAqXG4gKiBAcGFyYW0gZmFjdG9yeSAtIENhbGxiYWNrIHJ1biB0byBkZXJyaXZlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIG9uVXBkYXRlIC0gQ2FsbGJhY2sgcnVuIHdoZW4gcHJvcGVydHkgaXMgZmluaXNoZWQgY29tcHV0aW5nIG9yIGlzIHNldC5cbiAqL1xuZnVuY3Rpb24gc2V0PFQ+KGZhY3Rvcnk6IHNldC5GYWN0b3J5PFQ+LCBvblVwZGF0ZT86IHNldC5DYWxsYmFjazxUPik6IFQ7XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgd2l0aCBlbXB0eSBwbGFjZWhvbGRlciBhbmQvb3IgdXBkYXRlIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFN0YXJ0aW5nIHZhbHVlIGZvciBwcm9wZXJ0eS4gSWYgdW5kZWZpbmVkLCBzdXNwZW5zZSB3aWxsIGJlIHRocm93biBvbiBhY2Nlc3MsIHVudGlsIHZhbHVlIGlzIHNldCBhbmQgYWNjZXB0ZWQgYnkgY2FsbGJhY2suXG4gKiBAcGFyYW0gb25VcGRhdGUgLSBDYWxsYmFjayBydW4gd2hlbiBwcm9wZXJ0eSBpcyBzZXQuIElmIHJldHVybnMgZmFsc2UsIHVwZGF0ZSBpcyBub3QgYWNjZXB0ZWQgYW5kIHByb3BlcnR5IHdpbGwga2VlcCBwcmV2aW91cyB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc2V0PFQ+KHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBvblVwZGF0ZT86IHNldC5DYWxsYmFjazxUPik6IFQ7XG5cbi8qKlxuICogSW1wbGVtZW50IGEgcmVhY3RpdmUgY29tcHV0ZWQgdmFsdWUgdXNpbmcgYSBtZXRob2QgcmVmZXJlbmNlLlxuICpcbiAqIFRoZSBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHJlLXJ1biB3aGVuIGFueSBhY2Nlc3NlZCBwcm9wZXJ0aWVzIGNoYW5nZS5cbiAqIFVzZSBgdHJ1ZWAgdG8gaW5kaWNhdGUgcmVhY3RpdmUgbW9kZSB3aXRoIGltcGxpY2l0IGB0aGlzYCBhcyB0aGUgc291cmNlLlxuICpcbiAqIEBwYXJhbSByZWFjdGl2ZVRvVGhpcyAtIFBhc3MgYHRydWVgIHRvIGVuYWJsZSByZWFjdGl2ZSBtb2RlIHdpdGggaW1wbGljaXQgdGhpc1xuICogQHBhcmFtIG1ldGhvZCAtIE1ldGhvZCByZWZlcmVuY2Ugb3IgY29tcHV0ZSBmdW5jdGlvbiB0byB1c2VcbiAqL1xuZnVuY3Rpb24gc2V0PFIsIFQgPSBhbnk+KFxuICByZWFjdGl2ZVRvVGhpczogdHJ1ZSxcbiAgbWV0aG9kOiBzZXQuQ29tcHV0ZTxSLCBUPiB8IEZ1bmN0aW9uXG4pOiBSO1xuXG4vKipcbiAqIEltcGxlbWVudCBhIGNvbXB1dGVkIHZhbHVlOyBvdXRwdXQgd2lsbCBiZSBnZW5lcmF0ZWQgYnkgcHJvdmlkZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHJlYWN0aXZlVG8gLSBTb3VyY2Ugc3RhdGUgZnJvbSB3aGljaCBjb21wdXRlZCB2YWx1ZSB3aWxsIGJlIGEgc3Vic2NyaWJlci5cbiAqIEBwYXJhbSBjb21wdXRlIC0gQ29tcHV0ZSBmdW5jdGlvbi4gQm91bmQgdG8gYSBzdWJzY3JpYmVyLXByb3h5IG9mIHNvdXJjZSwgcmV0dXJucyBvdXRwdXQgdmFsdWUuIFdpbGwgdXBkYXRlIGF1dG9tYXRpY2FsbHkgYXMgaW5wdXQgdmFsdWVzIGNoYW5nZS5cbiAqL1xuZnVuY3Rpb24gc2V0PFIsIFQgZXh0ZW5kcyBTdGF0ZT4ocmVhY3RpdmVUbzogVCwgY29tcHV0ZTogc2V0LkNvbXB1dGU8UiwgVD4pOiBSO1xuXG5mdW5jdGlvbiBzZXQ8VCA9IGFueT4odmFsdWU/OiB1bmtub3duLCBhcmd1bWVudD86IHVua25vd24pOiBhbnkge1xuICByZXR1cm4gdXNlPFQ+KChrZXksIHN1YmplY3QsIHN0YXRlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJylcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEF0dGVtcHRlZCB0byB1c2UgYW4gaW5zdHJ1Y3Rpb24gcmVzdWx0IChwcm9iYWJseSB1c2Ugb3IgZ2V0KSBhcyBjb21wdXRlZCBzb3VyY2UgZm9yICR7c3ViamVjdH0uJHtrZXl9LiBUaGlzIGlzIG5vdCBhbGxvd2VkLmBcbiAgICAgICk7XG5cbiAgICBjb25zdCBwcm9wZXJ0eTogSW5zdHJ1Y3Rpb24uRGVzY3JpcHRvciA9IHt9O1xuXG4gICAgLy8gSGFuZGxlIHJlYWN0aXZlIGNvbXB1dGUgbW9kZXNcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdGF0ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgbGV0IGZyb20gPSBzdWJqZWN0O1xuICAgICAgbGV0IGdldHRlcjogc2V0LkNvbXB1dGU8VCwgYW55PjtcblxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU3RhdGUpIHtcbiAgICAgICAgZnJvbSA9IHZhbHVlO1xuICAgICAgICBnZXR0ZXIgPSBhcmd1bWVudCBhcyBzZXQuQ29tcHV0ZTxULCBhbnk+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWUgPT09IHRydWUsIGltcGxpY2l0IHRoaXMgd2l0aCBtZXRob2QgcmVmZXJlbmNlXG4gICAgICAgIGNvbnN0IGZuID0gTUVUSE9ELmdldChhcmd1bWVudCkgfHwgYXJndW1lbnQ7XG4gICAgICAgIGdldHRlciA9ICgocCwgaykgPT4gZm4uY2FsbChwLCBrLCBwKSkgYXMgc2V0LkNvbXB1dGU8VCwgYW55PjtcbiAgICAgIH1cblxuICAgICAgdHlwZSBTb3VyY2U8VCBleHRlbmRzIFN0YXRlID0gU3RhdGU+ID0gKHJlc29sdmU6ICh4OiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xuICAgICAgY29uc3Qgc291cmNlOiBTb3VyY2UgPSAocmVzb2x2ZSkgPT4gcmVzb2x2ZShmcm9tKTtcblxuICAgICAgbGV0IHJlc2V0OiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgaXNBc3luYzogYm9vbGVhbjtcbiAgICAgIGxldCBwcm94eTogYW55O1xuXG4gICAgICBmdW5jdGlvbiBjb25uZWN0KHNlbGY6IFN0YXRlKSB7XG4gICAgICAgIHJlc2V0ID0gd2F0Y2goXG4gICAgICAgICAgc2VsZixcbiAgICAgICAgICAoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgcHJveHkgPSBjdXJyZW50O1xuXG4gICAgICAgICAgICBpZiAoIShrZXkgaW4gc3RhdGUpIHx8IFNUQUxFLmRlbGV0ZShjb21wdXRlKSkgY29tcHV0ZSghcmVzZXQpO1xuXG4gICAgICAgICAgICByZXR1cm4gKGRpZFVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZGlkVXBkYXRlKSB7XG4gICAgICAgICAgICAgICAgU1RBTEUuYWRkKGNvbXB1dGUpO1xuICAgICAgICAgICAgICAgIGV2ZW50KHN1YmplY3QsIGtleSwgdHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBjb21wdXRlKGluaXRpYWw/OiBib29sZWFuKSB7XG4gICAgICAgIGxldCBuZXh0OiBUIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV4dCA9IGdldHRlci5jYWxsKHByb3h5LCBwcm94eSwga2V5KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYEFuIGV4Y2VwdGlvbiB3YXMgdGhyb3duIHdoaWxlICR7XG4gICAgICAgICAgICAgIGluaXRpYWwgPyAnaW5pdGlhbGl6aW5nJyA6ICdyZWZyZXNoaW5nJ1xuICAgICAgICAgICAgfSAke3N1YmplY3R9LiR7a2V5fS5gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpbml0aWFsKSB0aHJvdyBlcnI7XG5cbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGUoc3ViamVjdCwga2V5LCBuZXh0LCAhaXNBc3luYyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmICghcHJveHkpIHtcbiAgICAgICAgICBzb3VyY2UoY29ubmVjdCk7XG4gICAgICAgICAgaXNBc3luYyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoU1RBTEUuZGVsZXRlKGNvbXB1dGUpKSBjb21wdXRlKCk7XG5cbiAgICAgICAgcmV0dXJuIGFjY2VzcyhzdWJqZWN0LCBrZXksICFwcm94eSkgYXMgVDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGZhY3RvcnkvdmFsdWUgbW9kZXMgKGV4aXN0aW5nIGxvZ2ljKVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsdWUgPSBhdHRlbXB0KHZhbHVlLmJpbmQoc3ViamVjdCwga2V5KSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgIGBHZW5lcmF0aW5nIGluaXRpYWwgdmFsdWUgZm9yICR7c3ViamVjdH0uJHtrZXl9IGZhaWxlZC5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICBwcm9wZXJ0eS5nZXQgPSBhcmd1bWVudCAhPT0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2V0ID0gKHZhbHVlOiBhbnkpID0+IChzdWJqZWN0W2tleV0gPSB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSlcbiAgICAgICAgICB2YWx1ZS50aGVuKHNldCwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBldmVudChzdWJqZWN0LCBrZXkpO1xuICAgICAgICAgICAgcHJvcGVydHkuZ2V0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSk7XG4gICAgICAgIGVsc2Ugc2V0KHZhbHVlKTtcblxuICAgICAgICBpZiAoYXJndW1lbnQpIHJldHVybiBudWxsO1xuXG4gICAgICAgIHJldHVybiBzdWJqZWN0W2tleV07XG4gICAgICB9XG5cbiAgICAgIGlmIChhcmd1bWVudCkge1xuICAgICAgICBhZGRMaXN0ZW5lcihzdWJqZWN0LCBpbml0LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3BlcnR5LmdldCA9IGluaXQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0eS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGV0IHVuc2V0OiAoKG5leHQ6IFQpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuXG4gICAgICBwcm9wZXJ0eS5zZXQgPSBmdW5jdGlvbiAodGhpczogYW55LCB2YWx1ZTogYW55LCBwcmV2aW91czogYW55KSB7XG4gICAgICAgIGNvbnN0IGV4aXQgPSBzY29wZSgpO1xuICAgICAgICBjb25zdCByZXR1cm5zID0gYXJndW1lbnQuY2FsbCh0aGlzLCB2YWx1ZSwgcHJldmlvdXMpO1xuICAgICAgICBjb25zdCBmbHVzaCA9IGV4aXQoKTtcblxuICAgICAgICBpZiAocmV0dXJucyA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBpZiAodHlwZW9mIHVuc2V0ID09ICdmdW5jdGlvbicpIHVuc2V0KHZhbHVlKTtcblxuICAgICAgICB1bnNldCA9IChuZXh0OiBUKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXR1cm5zID09ICdmdW5jdGlvbicpIHJldHVybnMobmV4dCk7XG5cbiAgICAgICAgICBmbHVzaCgpO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9IGVsc2VcbiAgICAgIHByb3BlcnR5LnNldCA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICBwcm9wZXJ0eS5nZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHVwZGF0ZShzdWJqZWN0LCBrZXksIHZhbHVlKTtcbiAgICAgIH07XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0KGZuOiAoKSA9PiBhbnkpOiBhbnkge1xuICAvLyBJZ25vcmUgVFM4MDAwNjogRnVuY3Rpb24gbXVzdCBiZSBzeW5jaHJvbm91cy5cbiAgZnVuY3Rpb24gcmV0cnkoZXJyOiB1bmtub3duKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBlcnIudGhlbihjb21wdXRlKTtcbiAgICBlbHNlIHRocm93IGVycjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGUoKTogYW55IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZm4oKTtcblxuICAgICAgcmV0dXJuIG91dHB1dCBpbnN0YW5jZW9mIFByb21pc2UgPyBvdXRwdXQuY2F0Y2gocmV0cnkpIDogb3V0cHV0O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHJldHJ5KGVycik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbXB1dGUoKTtcbn1cblxuZXhwb3J0IHsgc2V0IH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsTUFBTSx3QkFBUSxJQUFJLFNBQXFCO0FBa0Z2QyxTQUFTLElBQWEsT0FBaUIsVUFBeUI7QUFDOUQsUUFBTyxLQUFRLEtBQUssU0FBUyxVQUFVO0FBQ3JDLE1BQUksT0FBTyxTQUFTLFNBQ2xCLE9BQU0sSUFBSSxNQUNSLHVGQUF1RixRQUFRLEdBQUcsSUFBSSx3QkFDdkc7RUFFSCxNQUFNLFdBQW1DLEVB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
@@ -1,23 +0,0 @@
1
- import { State } from "../state.js";
2
-
3
- //#region src/instruction/use.d.ts
4
- /**
5
- * Property initializer, will run upon instance creation.
6
- * Optional returned callback will run when once upon first access.
7
- */
8
- type Instruction<T = any, M extends State = any> = (this: M, key: Extract<State.Field<M>, string>, thisArg: M, state: State.Values<M>) => Instruction.Descriptor<T> | ((source: M) => T) | void;
9
- declare namespace Instruction {
10
- type Getter<T> = (source: State) => T;
11
- type Descriptor<T = any> = {
12
- get?: Getter<T> | boolean;
13
- set?: State.Setter<T> | boolean;
14
- enumerable?: boolean;
15
- value?: T;
16
- };
17
- }
18
- declare function use<T>(instruction: Instruction<T>): T extends void ? unknown : T;
19
- declare function use<T extends State>(Type: State.Type<T>, required: false): T | undefined;
20
- declare function use<T extends State>(Type: State.Type<T>, ready?: (i: T) => void): T;
21
- //#endregion
22
- export { Instruction, use };
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLmQudHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2luc3RydWN0aW9uL3VzZS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi4vc3RhdGUnO1xuLyoqXG4gKiBQcm9wZXJ0eSBpbml0aWFsaXplciwgd2lsbCBydW4gdXBvbiBpbnN0YW5jZSBjcmVhdGlvbi5cbiAqIE9wdGlvbmFsIHJldHVybmVkIGNhbGxiYWNrIHdpbGwgcnVuIHdoZW4gb25jZSB1cG9uIGZpcnN0IGFjY2Vzcy5cbiAqL1xudHlwZSBJbnN0cnVjdGlvbjxUID0gYW55LCBNIGV4dGVuZHMgU3RhdGUgPSBhbnk+ID0gKHRoaXM6IE0sIGtleTogRXh0cmFjdDxTdGF0ZS5GaWVsZDxNPiwgc3RyaW5nPiwgdGhpc0FyZzogTSwgc3RhdGU6IFN0YXRlLlZhbHVlczxNPikgPT4gSW5zdHJ1Y3Rpb24uRGVzY3JpcHRvcjxUPiB8ICgoc291cmNlOiBNKSA9PiBUKSB8IHZvaWQ7XG5kZWNsYXJlIG5hbWVzcGFjZSBJbnN0cnVjdGlvbiB7XG4gICAgdHlwZSBHZXR0ZXI8VD4gPSAoc291cmNlOiBTdGF0ZSkgPT4gVDtcbiAgICB0eXBlIERlc2NyaXB0b3I8VCA9IGFueT4gPSB7XG4gICAgICAgIGdldD86IEdldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgICAgIHNldD86IFN0YXRlLlNldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgICAgIGVudW1lcmFibGU/OiBib29sZWFuO1xuICAgICAgICB2YWx1ZT86IFQ7XG4gICAgfTtcbn1cbmRlY2xhcmUgZnVuY3Rpb24gdXNlPFQ+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUPik6IFQgZXh0ZW5kcyB2b2lkID8gdW5rbm93biA6IFQ7XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFR5cGU6IFN0YXRlLlR5cGU8VD4sIHJlcXVpcmVkOiBmYWxzZSk6IFQgfCB1bmRlZmluZWQ7XG5kZWNsYXJlIGZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFR5cGU6IFN0YXRlLlR5cGU8VD4sIHJlYWR5PzogKGk6IFQpID0+IHZvaWQpOiBUO1xuZXhwb3J0IHsgdXNlLCBJbnN0cnVjdGlvbiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFFLGNBQUE7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQSxZQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDRixJQUFHLGNBQVM7Q0FBQTtFQUFXLE1BQUU7RUFBSTtFQUFLO0VBQUs7RUFBQTtFQUFTO0VBQUEsTUFBUTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3hELElBQUcsTUFBQTtDQUFRO0VBQUMsTUFBUTtFQUFDO0VBQUE7RUFBYztFQUFJO0VBQUE7Q0FBSztFQUFBO0VBQUs7RUFBSTtFQUFDO0VBQU07RUFBQTtFQUFNO0NBQUE7QUFDbEUsSUFBRSxNQUFBO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNGLElBQUksTUFBQztDQUFBO0VBQUEsTUFBZTtFQUFDO0VBQU87RUFBQSxNQUFRO0VBQU87RUFBQztFQUFJO0NBQUU7RUFBQztFQUFDO0VBQU87RUFBRTtFQUFLO0VBQUE7RUFBUTtFQUFLO0VBQUM7RUFBTztFQUFHO0NBQUEifQ==
@@ -1,56 +0,0 @@
1
- import { PARENT, STATE, State, access, follow, uid, update } from "../state.js";
2
-
3
- //#region src/instruction/use.ts
4
- const INSTRUCTION = /* @__PURE__ */ new Map();
5
- function use(arg1, arg2) {
6
- if (State.is(arg1)) arg1 = childInstruction(arg1, arg2);
7
- const token = Symbol("instruction-" + uid());
8
- INSTRUCTION.set(token, arg1);
9
- return token;
10
- }
11
- function childInstruction(type, arg2) {
12
- return (key, subject) => {
13
- function set(next) {
14
- if (next ? !(next instanceof type) : arg2 !== false) throw new Error(`${subject}.${key} expected State of type ${type} but got ${next && next.constructor}.`);
15
- update(subject, key, next);
16
- if (next && typeof arg2 == "function") arg2(next);
17
- return false;
18
- }
19
- const value = new type();
20
- set(value);
21
- PARENT.set(value, subject);
22
- value.set();
23
- return { set };
24
- };
25
- }
26
- function init() {
27
- const state = STATE.get(this);
28
- for (const key in this) {
29
- const { value } = Object.getOwnPropertyDescriptor(this, key);
30
- const instruction = INSTRUCTION.get(value);
31
- if (!instruction) continue;
32
- INSTRUCTION.delete(value);
33
- delete this[key];
34
- const output = instruction.call(this, key, this, state);
35
- if (!output) continue;
36
- const desc = typeof output == "object" ? output : { get: output };
37
- if ("value" in desc) state[key] = desc.value;
38
- const self = this;
39
- Object.defineProperty(self, key, {
40
- enumerable: desc.enumerable !== false,
41
- get() {
42
- return follow(this, key, typeof desc.get == "function" ? desc.get(this) : access(self, key, desc.get));
43
- },
44
- set(next) {
45
- if (desc.set === false) throw new Error(`${self}.${key} is read-only.`);
46
- update(self, key, next, desc.set);
47
- }
48
- });
49
- }
50
- return null;
51
- }
52
- State.on(init);
53
-
54
- //#endregion
55
- export { use };
56
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbnN0cnVjdGlvbi91c2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWNjZXNzLCBmb2xsb3csIFN0YXRlLCBQQVJFTlQsIFNUQVRFLCB1aWQsIHVwZGF0ZSB9IGZyb20gJy4uL3N0YXRlJztcblxuLyoqXG4gKiBQcm9wZXJ0eSBpbml0aWFsaXplciwgd2lsbCBydW4gdXBvbiBpbnN0YW5jZSBjcmVhdGlvbi5cbiAqIE9wdGlvbmFsIHJldHVybmVkIGNhbGxiYWNrIHdpbGwgcnVuIHdoZW4gb25jZSB1cG9uIGZpcnN0IGFjY2Vzcy5cbiAqL1xudHlwZSBJbnN0cnVjdGlvbjxUID0gYW55LCBNIGV4dGVuZHMgU3RhdGUgPSBhbnk+ID1cbiAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWxsb3cgZm9yIG51bWJlcnMvc3ltYm9sIHByb3BlcnRpZXM/XG4gIChcbiAgICB0aGlzOiBNLFxuICAgIGtleTogRXh0cmFjdDxTdGF0ZS5GaWVsZDxNPiwgc3RyaW5nPixcbiAgICB0aGlzQXJnOiBNLFxuICAgIHN0YXRlOiBTdGF0ZS5WYWx1ZXM8TT5cbiAgKSA9PiBJbnN0cnVjdGlvbi5EZXNjcmlwdG9yPFQ+IHwgKChzb3VyY2U6IE0pID0+IFQpIHwgdm9pZDtcblxuZGVjbGFyZSBuYW1lc3BhY2UgSW5zdHJ1Y3Rpb24ge1xuICB0eXBlIEdldHRlcjxUPiA9IChzb3VyY2U6IFN0YXRlKSA9PiBUO1xuXG4gIHR5cGUgRGVzY3JpcHRvcjxUID0gYW55PiA9IHtcbiAgICBnZXQ/OiBHZXR0ZXI8VD4gfCBib29sZWFuO1xuICAgIHNldD86IFN0YXRlLlNldHRlcjxUPiB8IGJvb2xlYW47XG4gICAgZW51bWVyYWJsZT86IGJvb2xlYW47XG4gICAgdmFsdWU/OiBUO1xuICB9O1xufVxuXG5jb25zdCBJTlNUUlVDVElPTiA9IG5ldyBNYXA8c3ltYm9sLCBJbnN0cnVjdGlvbj4oKTtcblxuZnVuY3Rpb24gdXNlPFQ+KGluc3RydWN0aW9uOiBJbnN0cnVjdGlvbjxUPik6IFQgZXh0ZW5kcyB2b2lkID8gdW5rbm93biA6IFQ7XG5cbmZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFxuICBUeXBlOiBTdGF0ZS5UeXBlPFQ+LFxuICByZXF1aXJlZDogZmFsc2Vcbik6IFQgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIHVzZTxUIGV4dGVuZHMgU3RhdGU+KFR5cGU6IFN0YXRlLlR5cGU8VD4sIHJlYWR5PzogKGk6IFQpID0+IHZvaWQpOiBUO1xuXG5mdW5jdGlvbiB1c2UoXG4gIGFyZzE6IFN0YXRlLlR5cGUgfCBJbnN0cnVjdGlvbixcbiAgYXJnMj86ICgoaTogU3RhdGUpID0+IHZvaWQpIHwgYm9vbGVhblxuKSB7XG4gIGlmIChTdGF0ZS5pcyhhcmcxKSkgYXJnMSA9IGNoaWxkSW5zdHJ1Y3Rpb24oYXJnMSwgYXJnMik7XG5cbiAgY29uc3QgdG9rZW4gPSBTeW1ib2woJ2luc3RydWN0aW9uLScgKyB1aWQoKSk7XG4gIElOU1RSVUNUSU9OLnNldCh0b2tlbiwgYXJnMSk7XG4gIHJldHVybiB0b2tlbjtcbn1cblxuZnVuY3Rpb24gY2hpbGRJbnN0cnVjdGlvbihcbiAgdHlwZTogU3RhdGUuVHlwZTxTdGF0ZT4sXG4gIGFyZzI/OiAoKGk6IFN0YXRlKSA9PiB2b2lkKSB8IGJvb2xlYW5cbik6IEluc3RydWN0aW9uPGFueSwgYW55PiB7XG4gIHJldHVybiAoa2V5LCBzdWJqZWN0KSA9PiB7XG4gICAgZnVuY3Rpb24gc2V0KG5leHQ6IFN0YXRlIHwgdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobmV4dCA/ICEobmV4dCBpbnN0YW5jZW9mIHR5cGUpIDogYXJnMiAhPT0gZmFsc2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtzdWJqZWN0fS4ke2tleX0gZXhwZWN0ZWQgU3RhdGUgb2YgdHlwZSAke3R5cGV9IGJ1dCBnb3QgJHtcbiAgICAgICAgICAgIG5leHQgJiYgbmV4dC5jb25zdHJ1Y3RvclxuICAgICAgICAgIH0uYFxuICAgICAgICApO1xuXG4gICAgICB1cGRhdGUoc3ViamVjdCwga2V5LCBuZXh0KTtcblxuICAgICAgaWYgKG5leHQgJiYgdHlwZW9mIGFyZzIgPT0gJ2Z1bmN0aW9uJykgYXJnMihuZXh0KTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IHR5cGUoKTtcblxuICAgIHNldCh2YWx1ZSk7XG4gICAgUEFSRU5ULnNldCh2YWx1ZSwgc3ViamVjdCk7XG4gICAgdmFsdWUuc2V0KCk7XG5cbiAgICByZXR1cm4geyBzZXQgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaW5pdCh0aGlzOiBTdGF0ZSkge1xuICBjb25zdCBzdGF0ZSA9IFNUQVRFLmdldCh0aGlzKSE7XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gdGhpcykge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGhpcywga2V5KSE7XG4gICAgY29uc3QgaW5zdHJ1Y3Rpb24gPSBJTlNUUlVDVElPTi5nZXQodmFsdWUpO1xuXG4gICAgaWYgKCFpbnN0cnVjdGlvbikgY29udGludWU7XG5cbiAgICBJTlNUUlVDVElPTi5kZWxldGUodmFsdWUpO1xuICAgIGRlbGV0ZSAodGhpcyBhcyBhbnkpW2tleV07XG5cbiAgICBjb25zdCBvdXRwdXQgPSBpbnN0cnVjdGlvbi5jYWxsKHRoaXMsIGtleSwgdGhpcywgc3RhdGUpO1xuXG4gICAgaWYgKCFvdXRwdXQpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgZGVzYyA9IHR5cGVvZiBvdXRwdXQgPT0gJ29iamVjdCcgPyBvdXRwdXQgOiB7IGdldDogb3V0cHV0IH07XG5cbiAgICBpZiAoJ3ZhbHVlJyBpbiBkZXNjKSBzdGF0ZVtrZXldID0gZGVzYy52YWx1ZTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYsIGtleSwge1xuICAgICAgZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlICE9PSBmYWxzZSxcbiAgICAgIGdldCh0aGlzOiBTdGF0ZSkge1xuICAgICAgICByZXR1cm4gZm9sbG93KFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHR5cGVvZiBkZXNjLmdldCA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGRlc2MuZ2V0KHRoaXMpXG4gICAgICAgICAgICA6IGFjY2VzcyhzZWxmLCBrZXksIGRlc2MuZ2V0KVxuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIHNldChuZXh0KSB7XG4gICAgICAgIGlmIChkZXNjLnNldCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7c2VsZn0uJHtrZXl9IGlzIHJlYWQtb25seS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZShzZWxmLCBrZXksIG5leHQsIGRlc2Muc2V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5TdGF0ZS5vbihpbml0KTtcblxuZXhwb3J0IHsgdXNlLCBJbnN0cnVjdGlvbiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7QUEwQkEsTUFBTSw4QkFBYyxJQUFJLEtBQTBCO0FBV2xELFNBQVMsSUFDUCxNQUNBLE1BQ0E7QUFDQSxLQUFJLE1BQU0sR0FBRyxLQUFLLENBQUUsUUFBTyxpQkFBaUIsTUFBTSxLQUFLO0NBRXZELE1BQU0sUUFBUSxPQUFPLGlCQUFpQixLQUFLLENBQUM7QUFDNUMsYUFBWSxJQUFJLE9BQU8sS0FBSztBQUM1QixRQUFPOztBQUdULFNBQVMsaUJBQ1AsTUFDQSxNQUN1QjtBQUN2QixTQUFRLEtBQUssWUFBWTtFQUN2QixTQUFTLElBQUksTUFBeUI7QUFDcEMsT0FBSSxPQUFPLEVBQUUsZ0JBQWdCLFFBQVEsU0FBUyxNQUM1QyxPQUFNLElBQUksTUFDUixHQUFHLFFBQVEsR0FBRyxJQUFJLDBCQUEwQixLQUFLLFdBQy9DLFFBQVEsS0FBSyxZQUNkLEdBQ0Y7QUFFSCxVQUFPLFNBQVMsS0FBSyxLQUFLO0FBRTFCLE9BQUksUUFBUSxPQUFPLFFBQVEsV0FBWSxNQUFLLEtBQUs7QUFFakQsVUFBTzs7RUFHVCxNQUFNLFFBQVEsSUFBSSxNQUFNO0FBRXhCLE1BQUksTUFBTTtBQUNWLFNBQU8sSUFBSSxPQUFPLFFBQVE7QUFDMUIsUUFBTSxLQUFLO0FBRVgsU0FBTyxFQUFFLEtBQUs7OztBQUlsQixTQUFTLE9BQWtCO0NBQ3pCLE1BQU0sUUFBUSxNQUFNLElBQUksS0FBSztBQUU3QixNQUFLLE1BQU0sT0FBTyxNQUFNO0VBQ3RCLE1BQU0sRUFBRSxVQUFVLE9BQU8seUJBQXlCLE1BQU0sSUFBSTtFQUM1RCxNQUFNLGNBQWMsWUFBWSxJQUFJLE1BQU07QUFFMUMsTUFBSSxDQUFDLFlBQWE7QUFFbEIsY0FBWSxPQUFPLE1BQU07QUFDekIsU0FBUSxLQUFhO0VBRXJCLE1BQU0sU0FBUyxZQUFZLEtBQUssTUFBTSxLQUFLLE1BQU0sTUFBTTtBQUV2RCxNQUFJLENBQUMsT0FBUTtFQUViLE1BQU0sT0FBTyxPQUFPLFVBQVUsV0FBVyxTQUFTLEVBQUUsS0FBSyxRQUFRO0FBRWpFLE1BQUksV0FBVyxLQUFNLE9BQU0sT0FBTyxLQUFLO0VBRXZDLE1BQU0sT0FBTztBQUViLFNBQU8sZUFBZSxNQUFNLEtBQUs7R0FDL0IsWUFBWSxLQUFLLGVBQWU7R0FDaEMsTUFBaUI7QUFDZixXQUFPLE9BQ0wsTUFDQSxLQUNBLE9BQU8sS0FBSyxPQUFPLGFBQ2YsS0FBSyxJQUFJLEtBQUssR0FDZCxPQUFPLE1BQU0sS0FBSyxLQUFLLElBQUksQ0FDaEM7O0dBRUgsSUFBSSxNQUFNO0FBQ1IsUUFBSSxLQUFLLFFBQVEsTUFDZixPQUFNLElBQUksTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLGdCQUFnQjtBQUdqRCxXQUFPLE1BQU0sS0FBSyxNQUFNLEtBQUssSUFBSTs7R0FFcEMsQ0FBQzs7QUFHSixRQUFPOztBQUdULE1BQU0sR0FBRyxLQUFLIn0=
@@ -1,42 +0,0 @@
1
- //#region src/observable.d.ts
2
- /**
3
- * Update callback function.
4
- *
5
- * @param key -
6
- * - `string` - property which has updated.
7
- * - `false` - a normal update has completed.
8
- * - `true` - initial event; instance is ready.
9
- * - `null` - terminal event; instance is expired.
10
- * @param source - Instance of State for which update has occured.
11
- */
12
- type Notify<T extends Observable = any> = (this: T, key: Event, source: T) => (() => void) | null | void;
13
- type Effect<T extends Observable> = (proxy: T) => ((update: boolean | null) => void) | Promise<void> | null | void;
14
- type Event = number | string | null | boolean | symbol;
15
- type PromiseLite<T = void> = {
16
- then: (callback: () => T) => T;
17
- };
18
- declare namespace Observable {
19
- type Callback = () => void | PromiseLite;
20
- }
21
- interface Observable {
22
- [Observable](callback: Observable.Callback, required?: boolean): this | void;
23
- }
24
- declare const Observable: unique symbol;
25
- /** Update register. */
26
- declare const PENDING_KEYS: WeakMap<Observable, Set<string | number | symbol>>;
27
- declare function addListener<T extends Observable>(subject: T, callback: Notify<T>, select?: Event | Set<Event>): () => boolean;
28
- declare function event(subject: Observable, key?: string | number | symbol | null, silent?: boolean): void;
29
- /**
30
- * Create a side-effect which will update whenever values accessed change.
31
- * Callback is called immediately and whenever values are stale.
32
- *
33
- * @param target - Instance of State to observe.
34
- * @param callback - Function to invoke when values change.
35
- * @param requireValues - If `true` will throw if accessing a value which is `undefined`.
36
- */
37
- declare function watch<T extends Observable>(target: T, callback: Effect<Required<T>>, requireValues: true): () => void;
38
- declare function watch<T extends Observable>(target: T, callback: Effect<T>, recursive?: boolean): () => void;
39
- declare function scope(): () => () => void;
40
- //#endregion
41
- export { Notify, Observable, PENDING_KEYS, addListener, event, scope, watch };
42
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vYnNlcnZhYmxlLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVcGRhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGtleSAtXG4gKiAgIC0gYHN0cmluZ2AgLSBwcm9wZXJ0eSB3aGljaCBoYXMgdXBkYXRlZC5cbiAqICAgLSBgZmFsc2VgIC0gYSBub3JtYWwgdXBkYXRlIGhhcyBjb21wbGV0ZWQuXG4gKiAgIC0gYHRydWVgIC0gaW5pdGlhbCBldmVudDsgaW5zdGFuY2UgaXMgcmVhZHkuXG4gKiAgIC0gYG51bGxgIC0gdGVybWluYWwgZXZlbnQ7IGluc3RhbmNlIGlzIGV4cGlyZWQuXG4gKiBAcGFyYW0gc291cmNlIC0gSW5zdGFuY2Ugb2YgU3RhdGUgZm9yIHdoaWNoIHVwZGF0ZSBoYXMgb2NjdXJlZC5cbiAqL1xudHlwZSBOb3RpZnk8VCBleHRlbmRzIE9ic2VydmFibGUgPSBhbnk+ID0gKHRoaXM6IFQsIGtleTogRXZlbnQsIHNvdXJjZTogVCkgPT4gKCgpID0+IHZvaWQpIHwgbnVsbCB8IHZvaWQ7XG50eXBlIEVmZmVjdDxUIGV4dGVuZHMgT2JzZXJ2YWJsZT4gPSAocHJveHk6IFQpID0+ICgodXBkYXRlOiBib29sZWFuIHwgbnVsbCkgPT4gdm9pZCkgfCBQcm9taXNlPHZvaWQ+IHwgbnVsbCB8IHZvaWQ7XG50eXBlIEV2ZW50ID0gbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IGJvb2xlYW4gfCBzeW1ib2w7XG50eXBlIFByb21pc2VMaXRlPFQgPSB2b2lkPiA9IHtcbiAgICB0aGVuOiAoY2FsbGJhY2s6ICgpID0+IFQpID0+IFQ7XG59O1xuZGVjbGFyZSBuYW1lc3BhY2UgT2JzZXJ2YWJsZSB7XG4gICAgdHlwZSBDYWxsYmFjayA9ICgpID0+IHZvaWQgfCBQcm9taXNlTGl0ZTtcbn1cbmludGVyZmFjZSBPYnNlcnZhYmxlIHtcbiAgICBbT2JzZXJ2YWJsZV0oY2FsbGJhY2s6IE9ic2VydmFibGUuQ2FsbGJhY2ssIHJlcXVpcmVkPzogYm9vbGVhbik6IHRoaXMgfCB2b2lkO1xufVxuZGVjbGFyZSBjb25zdCBPYnNlcnZhYmxlOiB1bmlxdWUgc3ltYm9sO1xuLyoqIFVwZGF0ZSByZWdpc3Rlci4gKi9cbmRlY2xhcmUgY29uc3QgUEVORElOR19LRVlTOiBXZWFrTWFwPE9ic2VydmFibGUsIFNldDxzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2w+PjtcbmRlY2xhcmUgZnVuY3Rpb24gYWRkTGlzdGVuZXI8VCBleHRlbmRzIE9ic2VydmFibGU+KHN1YmplY3Q6IFQsIGNhbGxiYWNrOiBOb3RpZnk8VD4sIHNlbGVjdD86IEV2ZW50IHwgU2V0PEV2ZW50Pik6ICgpID0+IGJvb2xlYW47XG5kZWNsYXJlIGZ1bmN0aW9uIGV2ZW50KHN1YmplY3Q6IE9ic2VydmFibGUsIGtleT86IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCB8IG51bGwsIHNpbGVudD86IGJvb2xlYW4pOiB2b2lkO1xuLyoqXG4gKiBDcmVhdGUgYSBzaWRlLWVmZmVjdCB3aGljaCB3aWxsIHVwZGF0ZSB3aGVuZXZlciB2YWx1ZXMgYWNjZXNzZWQgY2hhbmdlLlxuICogQ2FsbGJhY2sgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFuZCB3aGVuZXZlciB2YWx1ZXMgYXJlIHN0YWxlLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBJbnN0YW5jZSBvZiBTdGF0ZSB0byBvYnNlcnZlLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdmFsdWVzIGNoYW5nZS5cbiAqIEBwYXJhbSByZXF1aXJlVmFsdWVzIC0gSWYgYHRydWVgIHdpbGwgdGhyb3cgaWYgYWNjZXNzaW5nIGEgdmFsdWUgd2hpY2ggaXMgYHVuZGVmaW5lZGAuXG4gKi9cbmRlY2xhcmUgZnVuY3Rpb24gd2F0Y2g8VCBleHRlbmRzIE9ic2VydmFibGU+KHRhcmdldDogVCwgY2FsbGJhY2s6IEVmZmVjdDxSZXF1aXJlZDxUPj4sIHJlcXVpcmVWYWx1ZXM6IHRydWUpOiAoKSA9PiB2b2lkO1xuZGVjbGFyZSBmdW5jdGlvbiB3YXRjaDxUIGV4dGVuZHMgT2JzZXJ2YWJsZT4odGFyZ2V0OiBULCBjYWxsYmFjazogRWZmZWN0PFQ+LCByZWN1cnNpdmU/OiBib29sZWFuKTogKCkgPT4gdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHNjb3BlKCk6ICgpID0+ICgpID0+IHZvaWQ7XG5leHBvcnQgeyBhZGRMaXN0ZW5lciwgd2F0Y2gsIGV2ZW50LCBOb3RpZnksIFBFTkRJTkdfS0VZUywgT2JzZXJ2YWJsZSB9O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUEsSUFBRSxTQUFBO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDRixJQUFHLFNBQU87Q0FBQTtFQUFBLE1BQVM7RUFBQTtFQUFRO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMzQixJQUFDLFFBQUE7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxFQUFBO0NBQUE7QUFDRCxJQUFJLGNBQVU7Q0FBQTtFQUFBLE1BQUEsQ0FBQSxHQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2QsSUFBSSxhQUFhO0NBQUM7T0FBUyxDQUFBLFlBQVU7Q0FBQSxDQUFBLElBQU8sR0FBQTtDQUFBO0FBQzVDLElBQUksYUFBYTtDQUFDO09BQVEsQ0FBQSxXQUFXLFNBQVM7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzlDLElBQUksYUFBWTtDQUFBO09BQVEsRUFBSztDQUFFLEVBQUE7Q0FBQTtBQUMvQixJQUFJLGVBQVk7Q0FBQTtPQUFjO0VBQUM7RUFBWTtFQUFDO0VBQU87Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbkQsSUFBSSxjQUFjO0NBQUM7RUFBQSxNQUFTO0VBQUE7RUFBYTtFQUFBO0VBQU07RUFBTztFQUFJO0VBQU87RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDakUsSUFBRSxRQUFBO0NBQUE7T0FBQSxDQUFBLFdBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNGLElBQUksUUFBUTtDQUFDO0VBQUMsTUFBUTtFQUFBO0VBQWE7RUFBRztFQUFHO0VBQVU7RUFBTTtDQUFBO0VBQUE7RUFBTztFQUFBO0VBQVM7RUFBSTtFQUFJO0VBQUk7RUFBSTtFQUFJO0VBQUE7Q0FBSTtBQUNqRyxJQUFJLFFBQVE7Q0FBQztFQUFDLE1BQVE7RUFBQTtFQUFhO0VBQUU7RUFBQTtFQUFXO0NBQUU7RUFBQztFQUFDO0VBQU87RUFBQztFQUFPO0VBQUc7RUFBSztFQUFJO0VBQUE7Q0FBSTtBQUNuRixJQUFXLFFBQVE7Q0FBQztPQUFVLEVBQUM7Q0FBQSxFQUFLO0NBQUMifQ==
@@ -1,121 +0,0 @@
1
- //#region src/observable.ts
2
- const Observable = Symbol("observe");
3
- /** Placeholder event determines if state is initialized or not. */
4
- const onReady = () => null;
5
- const LISTENERS = /* @__PURE__ */ new WeakMap();
6
- /** Events pending for a given object. */
7
- const PENDING = /* @__PURE__ */ new WeakMap();
8
- /** Update register. */
9
- const PENDING_KEYS = /* @__PURE__ */ new WeakMap();
10
- /** Central event dispatch. Bunches all updates to occur at same time. */
11
- const DISPATCH = /* @__PURE__ */ new Set();
12
- function addListener(subject, callback, select) {
13
- let listeners = LISTENERS.get(subject);
14
- if (!listeners) LISTENERS.set(subject, listeners = new Map([[onReady, void 0]]));
15
- if (select !== void 0 && !(select instanceof Set)) select = new Set([select]);
16
- if (!listeners.has(onReady) && !select) callback.call(subject, true, subject);
17
- listeners.set(callback, select);
18
- return () => listeners.delete(callback);
19
- }
20
- function emit(state, key) {
21
- const listeners = LISTENERS.get(state);
22
- const notReady = listeners.has(onReady);
23
- if (key === true && !notReady) return;
24
- let pending = PENDING.get(state);
25
- if (pending) {
26
- pending.add(key);
27
- return;
28
- }
29
- PENDING.set(state, pending = new Set(notReady ? [true, key] : [key]));
30
- for (const key of pending) for (const [callback, filter] of listeners) if (!filter || filter.has(key)) {
31
- const after = callback.call(state, key, state);
32
- if (after) enqueue(after);
33
- else if (after === null) listeners.delete(callback);
34
- }
35
- if (key === null) listeners.clear();
36
- PENDING.delete(state);
37
- }
38
- function event(subject, key, silent) {
39
- if (key === null) return emit(subject, key);
40
- if (!key) return emit(subject, true);
41
- let pending = PENDING_KEYS.get(subject);
42
- if (!pending) {
43
- PENDING_KEYS.set(subject, pending = /* @__PURE__ */ new Set());
44
- if (!silent) enqueue(() => {
45
- emit(subject, false);
46
- PENDING_KEYS.delete(subject);
47
- });
48
- }
49
- pending.add(key);
50
- if (!silent) emit(subject, key);
51
- }
52
- function enqueue(eventHandler) {
53
- if (!DISPATCH.size) setTimeout(() => {
54
- DISPATCH.forEach((event) => {
55
- try {
56
- event();
57
- } catch (err) {
58
- console.error(err);
59
- }
60
- });
61
- DISPATCH.clear();
62
- }, 0);
63
- DISPATCH.add(eventHandler);
64
- }
65
- function watch(target, callback, argument) {
66
- let unset;
67
- let reset;
68
- function invoke() {
69
- let ignore = true;
70
- function onUpdate() {
71
- if (ignore || reset === null) return;
72
- ignore = true;
73
- if (reset && unset) {
74
- unset(true);
75
- unset = void 0;
76
- }
77
- enqueue(invoke);
78
- return { then: enqueue };
79
- }
80
- try {
81
- const exit = argument === false ? void 0 : scope();
82
- const output = callback(target[Observable](onUpdate, argument === true));
83
- const flush = exit ? exit() : () => {};
84
- ignore = false;
85
- reset = output === null ? null : invoke;
86
- unset = (key) => {
87
- if (typeof output == "function") output(key);
88
- flush();
89
- };
90
- } catch (err) {
91
- if (err instanceof Promise) {
92
- reset = void 0;
93
- err.then(invoke);
94
- } else throw err;
95
- }
96
- }
97
- function cleanup() {
98
- if (unset) unset(false);
99
- reset = null;
100
- }
101
- if (EffectContext && argument !== false) EffectContext.add(cleanup);
102
- addListener(target, (key) => {
103
- if (key === true) invoke();
104
- else if (!reset) return reset;
105
- if (key === null && unset) unset(null);
106
- });
107
- return cleanup;
108
- }
109
- let EffectContext;
110
- function scope() {
111
- const last = EffectContext;
112
- const context = EffectContext = /* @__PURE__ */ new Set();
113
- return () => {
114
- EffectContext = last;
115
- return () => context.forEach((fn) => fn());
116
- };
117
- }
118
-
119
- //#endregion
120
- export { Observable, PENDING_KEYS, addListener, event, scope, watch };
121
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JzZXJ2YWJsZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb2JzZXJ2YWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFVwZGF0ZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5IC1cbiAqICAgLSBgc3RyaW5nYCAtIHByb3BlcnR5IHdoaWNoIGhhcyB1cGRhdGVkLlxuICogICAtIGBmYWxzZWAgLSBhIG5vcm1hbCB1cGRhdGUgaGFzIGNvbXBsZXRlZC5cbiAqICAgLSBgdHJ1ZWAgLSBpbml0aWFsIGV2ZW50OyBpbnN0YW5jZSBpcyByZWFkeS5cbiAqICAgLSBgbnVsbGAgLSB0ZXJtaW5hbCBldmVudDsgaW5zdGFuY2UgaXMgZXhwaXJlZC5cbiAqIEBwYXJhbSBzb3VyY2UgLSBJbnN0YW5jZSBvZiBTdGF0ZSBmb3Igd2hpY2ggdXBkYXRlIGhhcyBvY2N1cmVkLlxuICovXG50eXBlIE5vdGlmeTxUIGV4dGVuZHMgT2JzZXJ2YWJsZSA9IGFueT4gPSAoXG4gIHRoaXM6IFQsXG4gIGtleTogRXZlbnQsXG4gIHNvdXJjZTogVFxuKSA9PiAoKCkgPT4gdm9pZCkgfCBudWxsIHwgdm9pZDtcblxudHlwZSBFZmZlY3Q8VCBleHRlbmRzIE9ic2VydmFibGU+ID0gKFxuICBwcm94eTogVFxuKSA9PiAoKHVwZGF0ZTogYm9vbGVhbiB8IG51bGwpID0+IHZvaWQpIHwgUHJvbWlzZTx2b2lkPiB8IG51bGwgfCB2b2lkO1xuXG50eXBlIEV2ZW50ID0gbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IGJvb2xlYW4gfCBzeW1ib2w7XG5cbnR5cGUgUHJvbWlzZUxpdGU8VCA9IHZvaWQ+ID0geyB0aGVuOiAoY2FsbGJhY2s6ICgpID0+IFQpID0+IFQgfTtcblxuZGVjbGFyZSBuYW1lc3BhY2UgT2JzZXJ2YWJsZSB7XG4gIGV4cG9ydCB0eXBlIENhbGxiYWNrID0gKCkgPT4gdm9pZCB8IFByb21pc2VMaXRlO1xufVxuXG5pbnRlcmZhY2UgT2JzZXJ2YWJsZSB7XG4gIFtPYnNlcnZhYmxlXShjYWxsYmFjazogT2JzZXJ2YWJsZS5DYWxsYmFjaywgcmVxdWlyZWQ/OiBib29sZWFuKTogdGhpcyB8IHZvaWQ7XG59XG5cbmNvbnN0IE9ic2VydmFibGUgPSBTeW1ib2woJ29ic2VydmUnKTtcblxuLyoqIFBsYWNlaG9sZGVyIGV2ZW50IGRldGVybWluZXMgaWYgc3RhdGUgaXMgaW5pdGlhbGl6ZWQgb3Igbm90LiAqL1xuY29uc3Qgb25SZWFkeSA9ICgpID0+IG51bGw7XG5cbmNvbnN0IExJU1RFTkVSUyA9IG5ldyBXZWFrTWFwPFxuICBPYnNlcnZhYmxlLFxuICBNYXA8Tm90aWZ5LCBTZXQ8RXZlbnQ+IHwgdW5kZWZpbmVkPlxuPigpO1xuXG4vKiogRXZlbnRzIHBlbmRpbmcgZm9yIGEgZ2l2ZW4gb2JqZWN0LiAqL1xuY29uc3QgUEVORElORyA9IG5ldyBXZWFrTWFwPE9ic2VydmFibGUsIFNldDxFdmVudD4+KCk7XG5cbi8qKiBVcGRhdGUgcmVnaXN0ZXIuICovXG5jb25zdCBQRU5ESU5HX0tFWVMgPSBuZXcgV2Vha01hcDxPYnNlcnZhYmxlLCBTZXQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sPj4oKTtcblxuLyoqIENlbnRyYWwgZXZlbnQgZGlzcGF0Y2guIEJ1bmNoZXMgYWxsIHVwZGF0ZXMgdG8gb2NjdXIgYXQgc2FtZSB0aW1lLiAqL1xuY29uc3QgRElTUEFUQ0ggPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG5cbmZ1bmN0aW9uIGFkZExpc3RlbmVyPFQgZXh0ZW5kcyBPYnNlcnZhYmxlPihcbiAgc3ViamVjdDogVCxcbiAgY2FsbGJhY2s6IE5vdGlmeTxUPixcbiAgc2VsZWN0PzogRXZlbnQgfCBTZXQ8RXZlbnQ+XG4pIHtcbiAgbGV0IGxpc3RlbmVycyA9IExJU1RFTkVSUy5nZXQoc3ViamVjdCkhO1xuXG4gIGlmICghbGlzdGVuZXJzKVxuICAgIExJU1RFTkVSUy5zZXQoc3ViamVjdCwgKGxpc3RlbmVycyA9IG5ldyBNYXAoW1tvblJlYWR5LCB1bmRlZmluZWRdXSkpKTtcblxuICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQgJiYgIShzZWxlY3QgaW5zdGFuY2VvZiBTZXQpKVxuICAgIHNlbGVjdCA9IG5ldyBTZXQoW3NlbGVjdF0pO1xuXG4gIGlmICghbGlzdGVuZXJzLmhhcyhvblJlYWR5KSAmJiAhc2VsZWN0KSB7XG4gICAgY2FsbGJhY2suY2FsbChzdWJqZWN0LCB0cnVlLCBzdWJqZWN0KTtcbiAgfVxuXG4gIGxpc3RlbmVycy5zZXQoY2FsbGJhY2ssIHNlbGVjdCk7XG5cbiAgcmV0dXJuICgpID0+IGxpc3RlbmVycy5kZWxldGUoY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBlbWl0KHN0YXRlOiBPYnNlcnZhYmxlLCBrZXk6IEV2ZW50KTogdm9pZCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IExJU1RFTkVSUy5nZXQoc3RhdGUpITtcbiAgY29uc3Qgbm90UmVhZHkgPSBsaXN0ZW5lcnMuaGFzKG9uUmVhZHkpO1xuXG4gIGlmIChrZXkgPT09IHRydWUgJiYgIW5vdFJlYWR5KSByZXR1cm47XG5cbiAgbGV0IHBlbmRpbmcgPSBQRU5ESU5HLmdldChzdGF0ZSk7XG5cbiAgaWYgKHBlbmRpbmcpIHtcbiAgICBwZW5kaW5nLmFkZChrZXkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIFBFTkRJTkcuc2V0KHN0YXRlLCAocGVuZGluZyA9IG5ldyBTZXQobm90UmVhZHkgPyBbdHJ1ZSwga2V5XSA6IFtrZXldKSkpO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIHBlbmRpbmcpXG4gICAgZm9yIChjb25zdCBbY2FsbGJhY2ssIGZpbHRlcl0gb2YgbGlzdGVuZXJzKVxuICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnN0IGFmdGVyID0gY2FsbGJhY2suY2FsbChzdGF0ZSwga2V5LCBzdGF0ZSk7XG5cbiAgICAgICAgaWYgKGFmdGVyKSB7XG4gICAgICAgICAgZW5xdWV1ZShhZnRlcik7XG4gICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMuZGVsZXRlKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIGlmIChrZXkgPT09IG51bGwpIGxpc3RlbmVycy5jbGVhcigpO1xuXG4gIFBFTkRJTkcuZGVsZXRlKHN0YXRlKTtcbn1cblxuZnVuY3Rpb24gZXZlbnQoXG4gIHN1YmplY3Q6IE9ic2VydmFibGUsXG4gIGtleT86IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCB8IG51bGwsXG4gIHNpbGVudD86IGJvb2xlYW5cbikge1xuICBpZiAoa2V5ID09PSBudWxsKSByZXR1cm4gZW1pdChzdWJqZWN0LCBrZXkpO1xuXG4gIGlmICgha2V5KSByZXR1cm4gZW1pdChzdWJqZWN0LCB0cnVlKTtcblxuICBsZXQgcGVuZGluZyA9IFBFTkRJTkdfS0VZUy5nZXQoc3ViamVjdCk7XG5cbiAgaWYgKCFwZW5kaW5nKSB7XG4gICAgUEVORElOR19LRVlTLnNldChzdWJqZWN0LCAocGVuZGluZyA9IG5ldyBTZXQoKSkpO1xuXG4gICAgaWYgKCFzaWxlbnQpXG4gICAgICBlbnF1ZXVlKCgpID0+IHtcbiAgICAgICAgZW1pdChzdWJqZWN0LCBmYWxzZSk7XG4gICAgICAgIFBFTkRJTkdfS0VZUy5kZWxldGUoc3ViamVjdCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHBlbmRpbmcuYWRkKGtleSk7XG5cbiAgaWYgKCFzaWxlbnQpIGVtaXQoc3ViamVjdCwga2V5KTtcbn1cblxuZnVuY3Rpb24gZW5xdWV1ZShldmVudEhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgaWYgKCFESVNQQVRDSC5zaXplKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgRElTUEFUQ0guZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBldmVudCgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgRElTUEFUQ0guY2xlYXIoKTtcbiAgICB9LCAwKTtcblxuICBESVNQQVRDSC5hZGQoZXZlbnRIYW5kbGVyKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBzaWRlLWVmZmVjdCB3aGljaCB3aWxsIHVwZGF0ZSB3aGVuZXZlciB2YWx1ZXMgYWNjZXNzZWQgY2hhbmdlLlxuICogQ2FsbGJhY2sgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IGFuZCB3aGVuZXZlciB2YWx1ZXMgYXJlIHN0YWxlLlxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBJbnN0YW5jZSBvZiBTdGF0ZSB0byBvYnNlcnZlLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdmFsdWVzIGNoYW5nZS5cbiAqIEBwYXJhbSByZXF1aXJlVmFsdWVzIC0gSWYgYHRydWVgIHdpbGwgdGhyb3cgaWYgYWNjZXNzaW5nIGEgdmFsdWUgd2hpY2ggaXMgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIHdhdGNoPFQgZXh0ZW5kcyBPYnNlcnZhYmxlPihcbiAgdGFyZ2V0OiBULFxuICBjYWxsYmFjazogRWZmZWN0PFJlcXVpcmVkPFQ+PixcbiAgcmVxdWlyZVZhbHVlczogdHJ1ZVxuKTogKCkgPT4gdm9pZDtcblxuZnVuY3Rpb24gd2F0Y2g8VCBleHRlbmRzIE9ic2VydmFibGU+KFxuICB0YXJnZXQ6IFQsXG4gIGNhbGxiYWNrOiBFZmZlY3Q8VD4sXG4gIHJlY3Vyc2l2ZT86IGJvb2xlYW5cbik6ICgpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHdhdGNoPFQgZXh0ZW5kcyBPYnNlcnZhYmxlPihcbiAgdGFyZ2V0OiBULFxuICBjYWxsYmFjazogRWZmZWN0PFQ+LFxuICBhcmd1bWVudD86IGJvb2xlYW5cbikge1xuICBsZXQgdW5zZXQ6ICgodXBkYXRlOiBib29sZWFuIHwgbnVsbCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIGxldCByZXNldDogKCgpID0+IHZvaWQpIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiBpbnZva2UoKSB7XG4gICAgbGV0IGlnbm9yZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBmdW5jdGlvbiBvblVwZGF0ZSgpOiB2b2lkIHwgUHJvbWlzZUxpdGU8dm9pZD4ge1xuICAgICAgaWYgKGlnbm9yZSB8fCByZXNldCA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICBpZ25vcmUgPSB0cnVlO1xuXG4gICAgICBpZiAocmVzZXQgJiYgdW5zZXQpIHtcbiAgICAgICAgdW5zZXQodHJ1ZSk7XG4gICAgICAgIHVuc2V0ID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBlbnF1ZXVlKGludm9rZSk7XG4gICAgICByZXR1cm4geyB0aGVuOiBlbnF1ZXVlIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGV4aXQgPSBhcmd1bWVudCA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBzY29wZSgpO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gY2FsbGJhY2soXG4gICAgICAgIHRhcmdldFtPYnNlcnZhYmxlXShvblVwZGF0ZSwgYXJndW1lbnQgPT09IHRydWUpIGFzIFRcbiAgICAgICk7XG4gICAgICBjb25zdCBmbHVzaCA9IGV4aXQgPyBleGl0KCkgOiAoKSA9PiB7fTtcblxuICAgICAgaWdub3JlID0gZmFsc2U7XG4gICAgICByZXNldCA9IG91dHB1dCA9PT0gbnVsbCA/IG51bGwgOiBpbnZva2U7XG4gICAgICB1bnNldCA9IChrZXkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBvdXRwdXQgPT0gJ2Z1bmN0aW9uJykgb3V0cHV0KGtleSk7XG5cbiAgICAgICAgZmx1c2goKTtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXNldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZXJyLnRoZW4oaW52b2tlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIGlmICh1bnNldCkgdW5zZXQoZmFsc2UpO1xuXG4gICAgcmVzZXQgPSBudWxsO1xuICB9XG5cbiAgaWYgKEVmZmVjdENvbnRleHQgJiYgYXJndW1lbnQgIT09IGZhbHNlKSBFZmZlY3RDb250ZXh0LmFkZChjbGVhbnVwKTtcblxuICBhZGRMaXN0ZW5lcih0YXJnZXQsIChrZXkpID0+IHtcbiAgICBpZiAoa2V5ID09PSB0cnVlKSBpbnZva2UoKTtcbiAgICBlbHNlIGlmICghcmVzZXQpIHJldHVybiByZXNldDtcblxuICAgIGlmIChrZXkgPT09IG51bGwgJiYgdW5zZXQpIHVuc2V0KG51bGwpO1xuICB9KTtcblxuICByZXR1cm4gY2xlYW51cDtcbn1cblxubGV0IEVmZmVjdENvbnRleHQ6IFNldDwoKSA9PiB2b2lkPiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHNjb3BlKCkge1xuICBjb25zdCBsYXN0ID0gRWZmZWN0Q29udGV4dDtcbiAgY29uc3QgY29udGV4dCA9IChFZmZlY3RDb250ZXh0ID0gbmV3IFNldCgpKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIEVmZmVjdENvbnRleHQgPSBsYXN0O1xuICAgIHJldHVybiAoKSA9PiBjb250ZXh0LmZvckVhY2goKGZuKSA9PiBmbigpKTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgYWRkTGlzdGVuZXIsIHdhdGNoLCBldmVudCwgTm90aWZ5LCBQRU5ESU5HX0tFWVMsIE9ic2VydmFibGUgfTtcbiJdLCJtYXBwaW5ncyI6IjtBQWdDQSxNQUFNLGFBQWEsT0FBTyxVQUFVOztBQUdwQyxNQUFNLGdCQUFnQjtBQUV0QixNQUFNLDRCQUFZLElBQUksU0FHbkI7O0FBR0gsTUFBTSwwQkFBVSxJQUFJLFNBQWlDOztBQUdyRCxNQUFNLCtCQUFlLElBQUksU0FBb0Q7O0FBRzdFLE1BQU0sMkJBQVcsSUFBSSxLQUFpQjtBQUV0QyxT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