scoundrel-remote-eval 1.0.22 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -145,6 +145,20 @@ const firstValue = await array[0]
|
|
|
145
145
|
const length = await array.length
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
+
## Chaining proxy calls
|
|
149
|
+
|
|
150
|
+
You can chain method calls on the same proxy and only `await` once (the last call's result is returned):
|
|
151
|
+
|
|
152
|
+
```js
|
|
153
|
+
const result = await array
|
|
154
|
+
.__chain()
|
|
155
|
+
.push("one")
|
|
156
|
+
.push("two")
|
|
157
|
+
.toString()
|
|
158
|
+
|
|
159
|
+
expect(result).toEqual("one,two")
|
|
160
|
+
```
|
|
161
|
+
|
|
148
162
|
## Explicit return helpers
|
|
149
163
|
|
|
150
164
|
Use the explicit helpers when you need a definite return type:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-proxy.d.ts","sourceRoot":"","sources":["../../src/client/reference-proxy.js"],"names":[],"mappings":";oBAGa,GAAG;;;;;UAEF,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;;;;WACtF,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;;;;aACnD,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;;
|
|
1
|
+
{"version":3,"file":"reference-proxy.d.ts","sourceRoot":"","sources":["../../src/client/reference-proxy.js"],"names":[],"mappings":";oBAGa,GAAG;;;;;UAEF,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;;;;WACtF,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;;;;aACnD,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC;;AA2HrD;;;GAGG;AACH,+CAHW,GAAG,GACD,KAAK,CAEoE"}
|
|
@@ -30,6 +30,52 @@ const proxyPropertySpawner = (reference, prop) => {
|
|
|
30
30
|
});
|
|
31
31
|
return methodProxy;
|
|
32
32
|
};
|
|
33
|
+
/**
|
|
34
|
+
* @param {import("./reference.js").default} reference Reference to chain
|
|
35
|
+
* @returns {Proxy} Chainable proxy that executes on await
|
|
36
|
+
*/
|
|
37
|
+
const createChainProxy = (reference) => {
|
|
38
|
+
const state = {
|
|
39
|
+
reference,
|
|
40
|
+
/** @type {Array<{method: string, args: any[]}>} */
|
|
41
|
+
steps: []
|
|
42
|
+
};
|
|
43
|
+
const executeChain = async () => {
|
|
44
|
+
const baseReference = state.reference;
|
|
45
|
+
if (state.steps.length === 0) {
|
|
46
|
+
return await referenceProxy(baseReference).__serialize();
|
|
47
|
+
}
|
|
48
|
+
for (let index = 0; index < state.steps.length; index += 1) {
|
|
49
|
+
const step = state.steps[index];
|
|
50
|
+
const isLast = index === state.steps.length - 1;
|
|
51
|
+
if (isLast) {
|
|
52
|
+
return await baseReference.callMethodResult(step.method, ...step.args);
|
|
53
|
+
}
|
|
54
|
+
await baseReference.callMethodResult(step.method, ...step.args);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const handler = {
|
|
58
|
+
get(target, prop) {
|
|
59
|
+
void target;
|
|
60
|
+
if (prop === "__execChain")
|
|
61
|
+
return executeChain;
|
|
62
|
+
if (prop === "then")
|
|
63
|
+
return (resolve, reject) => executeChain().then(resolve, reject);
|
|
64
|
+
if (prop === "catch")
|
|
65
|
+
return (reject) => executeChain().catch(reject);
|
|
66
|
+
if (prop === "finally")
|
|
67
|
+
return (callback) => executeChain().finally(callback);
|
|
68
|
+
if (typeof prop !== "string")
|
|
69
|
+
return undefined;
|
|
70
|
+
return (...args) => {
|
|
71
|
+
state.steps.push({ method: prop, args });
|
|
72
|
+
return chainProxy;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const chainProxy = new Proxy({}, handler);
|
|
77
|
+
return /** @type {Proxy} */ (chainProxy);
|
|
78
|
+
};
|
|
33
79
|
const proxyObjectHandler = {
|
|
34
80
|
/**
|
|
35
81
|
* @param {import("./reference.js").default|(() => import("./reference.js").default)} reference Reference instance or factory
|
|
@@ -44,6 +90,9 @@ const proxyObjectHandler = {
|
|
|
44
90
|
const boundMethod = method.bind(reference);
|
|
45
91
|
return boundMethod;
|
|
46
92
|
}
|
|
93
|
+
if (prop == "__chain") {
|
|
94
|
+
return () => createChainProxy(reference);
|
|
95
|
+
}
|
|
47
96
|
if (prop == "then" || prop == "catch" || prop == "finally")
|
|
48
97
|
return undefined;
|
|
49
98
|
if (prop == "asymmetricMatch" || prop == "jasmineToString")
|
|
@@ -70,4 +119,4 @@ const proxyObjectHandler = {
|
|
|
70
119
|
*/
|
|
71
120
|
const referenceProxy = (wrappedObject) => new Proxy(wrappedObject, proxyObjectHandler);
|
|
72
121
|
export default referenceProxy;
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLXByb3h5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9yZWZlcmVuY2UtcHJveHkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQy9DLHVFQUF1RTtJQUN2RSxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUV6RixNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFO1FBQ25DLElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUNyRixVQUFVLEVBQUUsS0FBSztTQUNsQjtRQUNELEtBQUssRUFBRTtZQUNMLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEUsVUFBVSxFQUFFLEtBQUs7U0FDbEI7UUFDRCxPQUFPLEVBQUU7WUFDUCxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzFFLFVBQVUsRUFBRSxLQUFLO1NBQ2xCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxrQkFBa0IsR0FBRztJQUN6Qjs7OztPQUlHO0lBQ0gsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJO1FBQ2pCLElBQUksT0FBTyxTQUFTLElBQUksVUFBVTtZQUFFLFNBQVMsR0FBRyxTQUFTLEVBQUUsQ0FBQTtRQUUzRCxJQUFJLElBQUksSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUMxQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFBO1lBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFFMUMsT0FBTyxXQUFXLENBQUE7UUFDcEIsQ0FBQztRQUVELElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFDNUUsSUFBSSxJQUFJLElBQUksaUJBQWlCLElBQUksSUFBSSxJQUFJLGlCQUFpQjtZQUFFLE9BQU8sU0FBUyxDQUFBO1FBRTVFLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sU0FBUyxDQUFBO1FBRTlDLE9BQU8sb0JBQW9CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUTtRQUMxQixLQUFLLFFBQVEsQ0FBQTtRQUNiLEtBQUssSUFBSSxDQUFBO1FBQ1QsS0FBSyxRQUFRLENBQUE7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUE7SUFDckQsQ0FBQztDQUNGLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUE7QUFFdEYsZUFBZSxjQUFjLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqXG4gKiBAdHlwZWRlZiB7YW55fSBQcm94eVxuICogQHR5cGVkZWYge29iamVjdH0gUHJveHlQcm9taXNlTWV0aG9kc1xuICogQHByb3BlcnR5IHsob25mdWxmaWxsZWQ/OiAodmFsdWU6IGFueSkgPT4gYW55LCBvbnJlamVjdGVkPzogKHJlYXNvbjogYW55KSA9PiBhbnkpID0+IFByb21pc2U8YW55Pn0gdGhlbiBQcm9taXNlLXN0eWxlIHRoZW4gaGFuZGxlclxuICogQHByb3BlcnR5IHsob25yZWplY3RlZD86IChyZWFzb246IGFueSkgPT4gYW55KSA9PiBQcm9taXNlPGFueT59IGNhdGNoIFByb21pc2Utc3R5bGUgY2F0Y2ggaGFuZGxlclxuICogQHByb3BlcnR5IHsob25maW5hbGx5PzogKCkgPT4gYW55KSA9PiBQcm9taXNlPGFueT59IGZpbmFsbHkgUHJvbWlzZS1zdHlsZSBmaW5hbGx5IGhhbmRsZXJcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZWZlcmVuY2UuanNcIikuZGVmYXVsdH0gcmVmZXJlbmNlIFJlZmVyZW5jZSB0byBwcm94eVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgbmFtZSB0byByZXNvbHZlXG4gKiBAcmV0dXJucyB7KCguLi5hcmdzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+KSAmIFByb3h5UHJvbWlzZU1ldGhvZHN9IENhbGxhYmxlIHByb3h5IGZvciBtZXRob2Qgb3IgYXR0cmlidXRlXG4gKi9cbmNvbnN0IHByb3h5UHJvcGVydHlTcGF3bmVyID0gKHJlZmVyZW5jZSwgcHJvcCkgPT4ge1xuICAvKiogQHR5cGUgeygoLi4uYXJnczogYW55W10pID0+IFByb21pc2U8YW55PikgJiBQcm94eVByb21pc2VNZXRob2RzfSAqL1xuICBjb25zdCBtZXRob2RQcm94eSA9IC8qKiBAdHlwZSB7YW55fSAqLyAoKC4uLmFyZ3MpID0+IHJlZmVyZW5jZS5jYWxsTWV0aG9kKHByb3AsIC4uLmFyZ3MpKVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG1ldGhvZFByb3h5LCB7XG4gICAgdGhlbjoge1xuICAgICAgdmFsdWU6IChyZXNvbHZlLCByZWplY3QpID0+IHJlZmVyZW5jZS5yZWFkQXR0cmlidXRlUmVzdWx0KHByb3ApLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSxcbiAgICBjYXRjaDoge1xuICAgICAgdmFsdWU6IChyZWplY3QpID0+IHJlZmVyZW5jZS5yZWFkQXR0cmlidXRlUmVzdWx0KHByb3ApLmNhdGNoKHJlamVjdCksXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgZmluYWxseToge1xuICAgICAgdmFsdWU6IChjYWxsYmFjaykgPT4gcmVmZXJlbmNlLnJlYWRBdHRyaWJ1dGVSZXN1bHQocHJvcCkuZmluYWxseShjYWxsYmFjayksXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbWV0aG9kUHJveHlcbn1cblxuY29uc3QgcHJveHlPYmplY3RIYW5kbGVyID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlZmVyZW5jZS5qc1wiKS5kZWZhdWx0fCgoKSA9PiBpbXBvcnQoXCIuL3JlZmVyZW5jZS5qc1wiKS5kZWZhdWx0KX0gcmVmZXJlbmNlIFJlZmVyZW5jZSBpbnN0YW5jZSBvciBmYWN0b3J5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWUgdG8gcmVzb2x2ZVxuICAgKiBAcmV0dXJucyB7YW55fSBQcm94eSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gICAqL1xuICBnZXQocmVmZXJlbmNlLCBwcm9wKSB7XG4gICAgaWYgKHR5cGVvZiByZWZlcmVuY2UgPT0gXCJmdW5jdGlvblwiKSByZWZlcmVuY2UgPSByZWZlcmVuY2UoKVxuXG4gICAgaWYgKHByb3AgPT0gXCJfX3NlcmlhbGl6ZVwiKSB7XG4gICAgICBjb25zdCBtZXRob2QgPSByZWZlcmVuY2Uuc2VyaWFsaXplXG4gICAgICBjb25zdCBib3VuZE1ldGhvZCA9IG1ldGhvZC5iaW5kKHJlZmVyZW5jZSlcblxuICAgICAgcmV0dXJuIGJvdW5kTWV0aG9kXG4gICAgfVxuXG4gICAgaWYgKHByb3AgPT0gXCJ0aGVuXCIgfHwgcHJvcCA9PSBcImNhdGNoXCIgfHwgcHJvcCA9PSBcImZpbmFsbHlcIikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChwcm9wID09IFwiYXN5bW1ldHJpY01hdGNoXCIgfHwgcHJvcCA9PSBcImphc21pbmVUb1N0cmluZ1wiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBpZiAodHlwZW9mIHByb3AgIT09IFwic3RyaW5nXCIpIHJldHVybiB1bmRlZmluZWRcblxuICAgIHJldHVybiBwcm94eVByb3BlcnR5U3Bhd25lcihyZWZlcmVuY2UsIHByb3ApXG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9yZWZlcmVuY2UuanNcIikuZGVmYXVsdHwoKCkgPT4gaW1wb3J0KFwiLi9yZWZlcmVuY2UuanNcIikuZGVmYXVsdCl9IHJlY2VpdmVyIFByb3h5IHJlY2VpdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWUgYmVpbmcgc2V0XG4gICAqIEBwYXJhbSB7YW55fSBuZXdWYWx1ZSBOZXcgdmFsdWUgZm9yIHRoZSBwcm9wZXJ0eVxuICAgKi9cbiAgc2V0KHJlY2VpdmVyLCBwcm9wLCBuZXdWYWx1ZSkge1xuICAgIHZvaWQgcmVjZWl2ZXJcbiAgICB2b2lkIHByb3BcbiAgICB2b2lkIG5ld1ZhbHVlXG4gICAgdGhyb3cgbmV3IEVycm9yKFwic2V0IHByb3BlcnR5IGlzbid0IHN1cHBvcnRlZCB5ZXRcIilcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55fSB3cmFwcGVkT2JqZWN0IFRhcmdldCB0byB3cmFwIGluIGEgcHJveHlcbiAqIEByZXR1cm5zIHtQcm94eX0gUHJveHkgdGhhdCBmb3J3YXJkcyB0byByZWZlcmVuY2VzXG4gKi9cbmNvbnN0IHJlZmVyZW5jZVByb3h5ID0gKHdyYXBwZWRPYmplY3QpID0+IG5ldyBQcm94eSh3cmFwcGVkT2JqZWN0LCBwcm94eU9iamVjdEhhbmRsZXIpXG5cbmV4cG9ydCBkZWZhdWx0IHJlZmVyZW5jZVByb3h5XG4iXX0=
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlLXByb3h5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9yZWZlcmVuY2UtcHJveHkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7Ozs7R0FNRztBQUVIOzs7O0dBSUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQy9DLHVFQUF1RTtJQUN2RSxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUV6RixNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFO1FBQ25DLElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUNyRixVQUFVLEVBQUUsS0FBSztTQUNsQjtRQUNELEtBQUssRUFBRTtZQUNMLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDcEUsVUFBVSxFQUFFLEtBQUs7U0FDbEI7UUFDRCxPQUFPLEVBQUU7WUFDUCxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQzFFLFVBQVUsRUFBRSxLQUFLO1NBQ2xCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gs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QUFDLFNBQVMsQ0FBQyxDQUFBO1lBRTFDLE9BQU8sV0FBVyxDQUFBO1FBQ3BCLENBQUM7UUFFRCxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzFDLENBQUM7UUFFRCxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksU0FBUztZQUFFLE9BQU8sU0FBUyxDQUFBO1FBQzVFLElBQUksSUFBSSxJQUFJLGlCQUFpQixJQUFJLElBQUksSUFBSSxpQkFBaUI7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUU1RSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQTtRQUU5QyxPQUFPLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVE7UUFDMUIsS0FBSyxRQUFRLENBQUE7UUFDYixLQUFLLElBQUksQ0FBQTtRQUNULEtBQUssUUFBUSxDQUFBO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3JELENBQUM7Q0FDRixDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0FBRXRGLGVBQWUsY0FBYyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKlxuICogQHR5cGVkZWYge2FueX0gUHJveHlcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFByb3h5UHJvbWlzZU1ldGhvZHNcbiAqIEBwcm9wZXJ0eSB7KG9uZnVsZmlsbGVkPzogKHZhbHVlOiBhbnkpID0+IGFueSwgb25yZWplY3RlZD86IChyZWFzb246IGFueSkgPT4gYW55KSA9PiBQcm9taXNlPGFueT59IHRoZW4gUHJvbWlzZS1zdHlsZSB0aGVuIGhhbmRsZXJcbiAqIEBwcm9wZXJ0eSB7KG9ucmVqZWN0ZWQ/OiAocmVhc29uOiBhbnkpID0+IGFueSkgPT4gUHJvbWlzZTxhbnk+fSBjYXRjaCBQcm9taXNlLXN0eWxlIGNhdGNoIGhhbmRsZXJcbiAqIEBwcm9wZXJ0eSB7KG9uZmluYWxseT86ICgpID0+IGFueSkgPT4gUHJvbWlzZTxhbnk+fSBmaW5hbGx5IFByb21pc2Utc3R5bGUgZmluYWxseSBoYW5kbGVyXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vcmVmZXJlbmNlLmpzXCIpLmRlZmF1bHR9IHJlZmVyZW5jZSBSZWZlcmVuY2UgdG8gcHJveHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWUgdG8gcmVzb2x2ZVxuICogQHJldHVybnMgeygoLi4uYXJnczogYW55W10pID0+IFByb21pc2U8YW55PikgJiBQcm94eVByb21pc2VNZXRob2RzfSBDYWxsYWJsZSBwcm94eSBmb3IgbWV0aG9kIG9yIGF0dHJpYnV0ZVxuICovXG5jb25zdCBwcm94eVByb3BlcnR5U3Bhd25lciA9IChyZWZlcmVuY2UsIHByb3ApID0+IHtcbiAgLyoqIEB0eXBlIHsoKC4uLmFyZ3M6IGFueVtdKSA9PiBQcm9taXNlPGFueT4pICYgUHJveHlQcm9taXNlTWV0aG9kc30gKi9cbiAgY29uc3QgbWV0aG9kUHJveHkgPSAvKiogQHR5cGUge2FueX0gKi8gKCguLi5hcmdzKSA9PiByZWZlcmVuY2UuY2FsbE1ldGhvZChwcm9wLCAuLi5hcmdzKSlcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhtZXRob2RQcm94eSwge1xuICAgIHRoZW46IHtcbiAgICAgIHZhbHVlOiAocmVzb2x2ZSwgcmVqZWN0KSA9PiByZWZlcmVuY2UucmVhZEF0dHJpYnV0ZVJlc3VsdChwcm9wKS50aGVuKHJlc29sdmUsIHJlamVjdCksXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0sXG4gICAgY2F0Y2g6IHtcbiAgICAgIHZhbHVlOiAocmVqZWN0KSA9PiByZWZlcmVuY2UucmVhZEF0dHJpYnV0ZVJlc3VsdChwcm9wKS5jYXRjaChyZWplY3QpLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9LFxuICAgIGZpbmFsbHk6IHtcbiAgICAgIHZhbHVlOiAoY2FsbGJhY2spID0+IHJlZmVyZW5jZS5yZWFkQXR0cmlidXRlUmVzdWx0KHByb3ApLmZpbmFsbHkoY2FsbGJhY2spLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIG1ldGhvZFByb3h5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlZmVyZW5jZS5qc1wiKS5kZWZhdWx0fSByZWZlcmVuY2UgUmVmZXJlbmNlIHRvIGNoYWluXG4gKiBAcmV0dXJucyB7UHJveHl9IENoYWluYWJsZSBwcm94eSB0aGF0IGV4ZWN1dGVzIG9uIGF3YWl0XG4gKi9cbmNvbnN0IGNyZWF0ZUNoYWluUHJveHkgPSAocmVmZXJlbmNlKSA9PiB7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHJlZmVyZW5jZSxcbiAgICAvKiogQHR5cGUge0FycmF5PHttZXRob2Q6IHN0cmluZywgYXJnczogYW55W119Pn0gKi9cbiAgICBzdGVwczogW11cbiAgfVxuXG4gIGNvbnN0IGV4ZWN1dGVDaGFpbiA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiYXNlUmVmZXJlbmNlID0gc3RhdGUucmVmZXJlbmNlXG5cbiAgICBpZiAoc3RhdGUuc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVmZXJlbmNlUHJveHkoYmFzZVJlZmVyZW5jZSkuX19zZXJpYWxpemUoKVxuICAgIH1cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5zdGVwcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBzdGF0ZS5zdGVwc1tpbmRleF1cbiAgICAgIGNvbnN0IGlzTGFzdCA9IGluZGV4ID09PSBzdGF0ZS5zdGVwcy5sZW5ndGggLSAxXG5cbiAgICAgIGlmIChpc0xhc3QpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJhc2VSZWZlcmVuY2UuY2FsbE1ldGhvZFJlc3VsdChzdGVwLm1ldGhvZCwgLi4uc3RlcC5hcmdzKVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBiYXNlUmVmZXJlbmNlLmNhbGxNZXRob2RSZXN1bHQoc3RlcC5tZXRob2QsIC4uLnN0ZXAuYXJncylcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVyID0ge1xuICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgIHZvaWQgdGFyZ2V0XG5cbiAgICAgIGlmIChwcm9wID09PSBcIl9fZXhlY0NoYWluXCIpIHJldHVybiBleGVjdXRlQ2hhaW5cbiAgICAgIGlmIChwcm9wID09PSBcInRoZW5cIikgcmV0dXJuIChyZXNvbHZlLCByZWplY3QpID0+IGV4ZWN1dGVDaGFpbigpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KVxuICAgICAgaWYgKHByb3AgPT09IFwiY2F0Y2hcIikgcmV0dXJuIChyZWplY3QpID0+IGV4ZWN1dGVDaGFpbigpLmNhdGNoKHJlamVjdClcbiAgICAgIGlmIChwcm9wID09PSBcImZpbmFsbHlcIikgcmV0dXJuIChjYWxsYmFjaykgPT4gZXhlY3V0ZUNoYWluKCkuZmluYWxseShjYWxsYmFjaylcblxuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSBcInN0cmluZ1wiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICBzdGF0ZS5zdGVwcy5wdXNoKHttZXRob2Q6IHByb3AsIGFyZ3N9KVxuICAgICAgICByZXR1cm4gY2hhaW5Qcm94eVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoYWluUHJveHkgPSBuZXcgUHJveHkoe30sIGhhbmRsZXIpXG4gIHJldHVybiAvKiogQHR5cGUge1Byb3h5fSAqLyAoY2hhaW5Qcm94eSlcbn1cblxuY29uc3QgcHJveHlPYmplY3RIYW5kbGVyID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlZmVyZW5jZS5qc1wiKS5kZWZhdWx0fCgoKSA9PiBpbXBvcnQoXCIuL3JlZmVyZW5jZS5qc1wiKS5kZWZhdWx0KX0gcmVmZXJlbmNlIFJlZmVyZW5jZSBpbnN0YW5jZSBvciBmYWN0b3J5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3BlcnR5IG5hbWUgdG8gcmVzb2x2ZVxuICAgKiBAcmV0dXJucyB7YW55fSBQcm94eSB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gICAqL1xuICBnZXQocmVmZXJlbmNlLCBwcm9wKSB7XG4gICAgaWYgKHR5cGVvZiByZWZlcmVuY2UgPT0gXCJmdW5jdGlvblwiKSByZWZlcmVuY2UgPSByZWZlcmVuY2UoKVxuXG4gICAgaWYgKHByb3AgPT0gXCJfX3NlcmlhbGl6ZVwiKSB7XG4gICAgICBjb25zdCBtZXRob2QgPSByZWZlcmVuY2Uuc2VyaWFsaXplXG4gICAgICBjb25zdCBib3VuZE1ldGhvZCA9IG1ldGhvZC5iaW5kKHJlZmVyZW5jZSlcblxuICAgICAgcmV0dXJuIGJvdW5kTWV0aG9kXG4gICAgfVxuXG4gICAgaWYgKHByb3AgPT0gXCJfX2NoYWluXCIpIHtcbiAgICAgIHJldHVybiAoKSA9PiBjcmVhdGVDaGFpblByb3h5KHJlZmVyZW5jZSlcbiAgICB9XG5cbiAgICBpZiAocHJvcCA9PSBcInRoZW5cIiB8fCBwcm9wID09IFwiY2F0Y2hcIiB8fCBwcm9wID09IFwiZmluYWxseVwiKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKHByb3AgPT0gXCJhc3ltbWV0cmljTWF0Y2hcIiB8fCBwcm9wID09IFwiamFzbWluZVRvU3RyaW5nXCIpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgcmV0dXJuIHByb3h5UHJvcGVydHlTcGF3bmVyKHJlZmVyZW5jZSwgcHJvcClcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3JlZmVyZW5jZS5qc1wiKS5kZWZhdWx0fCgoKSA9PiBpbXBvcnQoXCIuL3JlZmVyZW5jZS5qc1wiKS5kZWZhdWx0KX0gcmVjZWl2ZXIgUHJveHkgcmVjZWl2ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgUHJvcGVydHkgbmFtZSBiZWluZyBzZXRcbiAgICogQHBhcmFtIHthbnl9IG5ld1ZhbHVlIE5ldyB2YWx1ZSBmb3IgdGhlIHByb3BlcnR5XG4gICAqL1xuICBzZXQocmVjZWl2ZXIsIHByb3AsIG5ld1ZhbHVlKSB7XG4gICAgdm9pZCByZWNlaXZlclxuICAgIHZvaWQgcHJvcFxuICAgIHZvaWQgbmV3VmFsdWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXQgcHJvcGVydHkgaXNuJ3Qgc3VwcG9ydGVkIHlldFwiKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHdyYXBwZWRPYmplY3QgVGFyZ2V0IHRvIHdyYXAgaW4gYSBwcm94eVxuICogQHJldHVybnMge1Byb3h5fSBQcm94eSB0aGF0IGZvcndhcmRzIHRvIHJlZmVyZW5jZXNcbiAqL1xuY29uc3QgcmVmZXJlbmNlUHJveHkgPSAod3JhcHBlZE9iamVjdCkgPT4gbmV3IFByb3h5KHdyYXBwZWRPYmplY3QsIHByb3h5T2JqZWN0SGFuZGxlcilcblxuZXhwb3J0IGRlZmF1bHQgcmVmZXJlbmNlUHJveHlcbiJdfQ==
|