obsidian-dev-utils 55.0.0 → 55.2.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.
- package/CHANGELOG.md +15 -1
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/obsidian/file-change.cjs +1 -1
- package/dist/lib/cjs/obsidian/frontmatter.cjs +1 -1
- package/dist/lib/cjs/obsidian/frontmatter.d.cts +1 -1
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/preprocess-plugin.cjs +1 -1
- package/dist/lib/cjs/script-utils/linters/eslint-config.cjs +18 -5
- package/dist/lib/cjs/script-utils/linters/eslint-rules/no-used-underscore-variables.cjs +2 -2
- package/dist/lib/cjs/script-utils/version.cjs +1 -1
- package/dist/lib/cjs/strict-proxy.cjs +178 -0
- package/dist/lib/cjs/strict-proxy.d.cts +23 -0
- package/dist/lib/cjs/type-guards.cjs +1 -1
- package/dist/lib/cjs/type-guards.d.cts +3 -3
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/obsidian/file-change.mjs +1 -1
- package/dist/lib/esm/obsidian/frontmatter.d.mts +1 -1
- package/dist/lib/esm/obsidian/frontmatter.mjs +1 -1
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/preprocess-plugin.mjs +1 -1
- package/dist/lib/esm/script-utils/linters/eslint-config.mjs +18 -5
- package/dist/lib/esm/script-utils/linters/eslint-rules/no-used-underscore-variables.mjs +2 -2
- package/dist/lib/esm/script-utils/version.mjs +1 -1
- package/dist/lib/esm/strict-proxy.d.mts +23 -0
- package/dist/lib/esm/strict-proxy.mjs +72 -0
- package/dist/lib/esm/type-guards.d.mts +3 -3
- package/dist/lib/esm/type-guards.mjs +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
|
+
if you want to view the source, please visit the github repository of this plugin
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
(function initEsm() {
|
|
7
|
+
if (globalThis.process) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const browserProcess = {
|
|
12
|
+
browser: true,
|
|
13
|
+
cwd() {
|
|
14
|
+
return '/';
|
|
15
|
+
},
|
|
16
|
+
env: {},
|
|
17
|
+
platform: 'android'
|
|
18
|
+
};
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
})();
|
|
21
|
+
|
|
22
|
+
const STRICT_PROXY_MARKER = /* @__PURE__ */ Symbol("strictProxy");
|
|
23
|
+
const PASSTHROUGH_PROPS = /* @__PURE__ */ new Set([
|
|
24
|
+
Symbol.iterator,
|
|
25
|
+
Symbol.toPrimitive,
|
|
26
|
+
Symbol.toStringTag,
|
|
27
|
+
"then",
|
|
28
|
+
"toJSON"
|
|
29
|
+
]);
|
|
30
|
+
function strictProxy(partial) {
|
|
31
|
+
return wrapProxy(partial);
|
|
32
|
+
}
|
|
33
|
+
function isObjectLike(value) {
|
|
34
|
+
return value !== null && typeof value === "object";
|
|
35
|
+
}
|
|
36
|
+
function isPlainObject(value) {
|
|
37
|
+
return isObjectLike(value) && Object.getPrototypeOf(value) === Object.prototype;
|
|
38
|
+
}
|
|
39
|
+
function wrapProxy(value) {
|
|
40
|
+
if (!isObjectLike(value)) {
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
if (STRICT_PROXY_MARKER in value) {
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
Object.defineProperty(value, STRICT_PROXY_MARKER, { value: true });
|
|
47
|
+
const proxiedChildren = /* @__PURE__ */ new Map();
|
|
48
|
+
return new Proxy(value, {
|
|
49
|
+
get(target, prop, receiver) {
|
|
50
|
+
if (prop in target) {
|
|
51
|
+
if (proxiedChildren.has(prop)) {
|
|
52
|
+
return proxiedChildren.get(prop);
|
|
53
|
+
}
|
|
54
|
+
const val = Reflect.get(target, prop, receiver);
|
|
55
|
+
if (isPlainObject(val)) {
|
|
56
|
+
const result = wrapProxy(val);
|
|
57
|
+
proxiedChildren.set(prop, result);
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
return val;
|
|
61
|
+
}
|
|
62
|
+
if (typeof prop === "symbol" || PASSTHROUGH_PROPS.has(prop)) {
|
|
63
|
+
return Reflect.get(target, prop, receiver);
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`Unmocked property "${prop}" was accessed on mock object`);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
export {
|
|
70
|
+
strictProxy
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3N0cmljdC1wcm94eS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0cmljdGx5LXR5cGVkIG1vY2sgb2JqZWN0IGZhY3RvcnkgdmlhIGBQcm94eWAuIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yXG4gKiB3aGVuIGFueSB1bm1vY2tlZCBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgcHJldmVudGluZyBzaWxlbnQgYHVuZGVmaW5lZGAgcmV0dXJucy5cbiAqXG4gKiBUaGUgcHJveHkgaW1wbGVtZW50YXRpb24gbWlycm9ycyB0aGUgZGVzaWduIG9mXG4gKiBgb2JzaWRpYW4tdGVzdC1tb2Nrcy9zcmMvaW50ZXJuYWwvc3RyaWN0LXByb3h5LnRzYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFBhcnRpYWxEZWVwIH0gZnJvbSAndHlwZS1mZXN0JztcblxuY29uc3QgU1RSSUNUX1BST1hZX01BUktFUiA9IFN5bWJvbCgnc3RyaWN0UHJveHknKTtcblxuY29uc3QgUEFTU1RIUk9VR0hfUFJPUFMgPSBuZXcgU2V0PHN0cmluZyB8IHN5bWJvbD4oW1xuICBTeW1ib2wuaXRlcmF0b3IsXG4gIFN5bWJvbC50b1ByaW1pdGl2ZSxcbiAgU3ltYm9sLnRvU3RyaW5nVGFnLFxuICAndGhlbicsXG4gICd0b0pTT04nXG5dKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaWN0bHktdHlwZWQgbW9jayBvYmplY3QgZnJvbSBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24uXG4gKiBVc2VzIGEgYFByb3h5YCB0aGF0IHRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIHdoZW4gYW55IHVubW9ja2VkXG4gKiBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCwgcHJldmVudGluZyBzaWxlbnQgYHVuZGVmaW5lZGAgcmV0dXJucy5cbiAqXG4gKiAtIElkZW1wb3RlbnQ6IGRvdWJsZS13cmFwcGluZyBpcyBhIG5vLW9wLlxuICogLSBQYXNzdGhyb3VnaCBmb3Igd2VsbC1rbm93biBwcm9wcyAoYHRoZW5gLCBgdG9KU09OYCwgYFN5bWJvbC5pdGVyYXRvcmAsIGV0Yy4pLlxuICogLSBSZWN1cnNpdmUgcHJveHlpbmcgb2YgbmVzdGVkIHBsYWluIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIHBhcnRpYWwgLSBBIHBhcnRpYWwgb2JqZWN0IGNvbnRhaW5pbmcgb25seSB0aGUgbW9ja2VkIG1lbWJlcnMuXG4gKiBAcmV0dXJucyBBIHByb3h5IHR5cGVkIGFzIGBUYCB0aGF0IHRocm93cyBvbiB1bm1vY2tlZCBwcm9wZXJ0eSBhY2Nlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpY3RQcm94eTxUPihwYXJ0aWFsOiBQYXJ0aWFsRGVlcDxUPik6IFQge1xuICByZXR1cm4gd3JhcFByb3h5PFQ+KHBhcnRpYWwpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGFuIG9iamVjdC1saWtlIHZhbHVlIChub3QgbnVsbCkuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaXMgb2JqZWN0LWxpa2UuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0IChub3QgYSBjbGFzcyBpbnN0YW5jZSwgYXJyYXksIG51bGwsIGV0Yy4pLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgdmFsdWUgaW4gYSBzdHJpY3QgcHJveHkuIElkZW1wb3RlbnQgXHUyMDE0IGRvdWJsZS13cmFwcGluZyBpcyBhIG5vLW9wLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cmFwLlxuICogQHJldHVybnMgVGhlIHByb3hpZWQgdmFsdWUgdHlwZWQgYXMgYFRgLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtcGFyYW1ldGVycyAtLSBUIHByb3ZpZGVzIHJldHVybiB0eXBlIGluZmVyZW5jZSBhdCBjYWxsIHNpdGVzLlxuZnVuY3Rpb24gd3JhcFByb3h5PFQ+KHZhbHVlOiB1bmtub3duKTogVCB7XG4gIGlmICghaXNPYmplY3RMaWtlKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSBhcyBUO1xuICB9XG5cbiAgaWYgKFNUUklDVF9QUk9YWV9NQVJLRVIgaW4gdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgVDtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsdWUsIFNUUklDVF9QUk9YWV9NQVJLRVIsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgY29uc3QgcHJveGllZENoaWxkcmVuID0gbmV3IE1hcDxzdHJpbmcgfCBzeW1ib2w+KCk7XG5cbiAgcmV0dXJuIG5ldyBQcm94eSh2YWx1ZSwge1xuICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTogdW5rbm93biB7XG4gICAgICBpZiAocHJvcCBpbiB0YXJnZXQpIHtcbiAgICAgICAgaWYgKHByb3hpZWRDaGlsZHJlbi5oYXMocHJvcCkpIHtcbiAgICAgICAgICByZXR1cm4gcHJveGllZENoaWxkcmVuLmdldChwcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbDogdW5rbm93biA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gd3JhcFByb3h5PHVua25vd24+KHZhbCk7XG4gICAgICAgICAgcHJveGllZENoaWxkcmVuLnNldChwcm9wLCByZXN1bHQpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJyB8fCBQQVNTVEhST1VHSF9QUk9QUy5oYXMocHJvcCkpIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVubW9ja2VkIHByb3BlcnR5IFwiJHtwcm9wfVwiIHdhcyBhY2Nlc3NlZCBvbiBtb2NrIG9iamVjdGApO1xuICAgIH1cbiAgfSkgYXMgVDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLE1BQU0sc0JBQXNCLHVCQUFPLGFBQWE7QUFFaEQsTUFBTSxvQkFBb0Isb0JBQUksSUFBcUI7QUFBQSxFQUNqRCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUCxPQUFPO0FBQUEsRUFDUDtBQUFBLEVBQ0E7QUFDRixDQUFDO0FBY00sU0FBUyxZQUFlLFNBQTRCO0FBQ3pELFNBQU8sVUFBYSxPQUFPO0FBQzdCO0FBUUEsU0FBUyxhQUFhLE9BQWlDO0FBQ3JELFNBQU8sVUFBVSxRQUFRLE9BQU8sVUFBVTtBQUM1QztBQVFBLFNBQVMsY0FBYyxPQUFrRDtBQUN2RSxTQUFPLGFBQWEsS0FBSyxLQUFLLE9BQU8sZUFBZSxLQUFLLE1BQU0sT0FBTztBQUN4RTtBQVNBLFNBQVMsVUFBYSxPQUFtQjtBQUN2QyxNQUFJLENBQUMsYUFBYSxLQUFLLEdBQUc7QUFDeEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLHVCQUF1QixPQUFPO0FBQ2hDLFdBQU87QUFBQSxFQUNUO0FBQ0EsU0FBTyxlQUFlLE9BQU8scUJBQXFCLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFFakUsUUFBTSxrQkFBa0Isb0JBQUksSUFBcUI7QUFFakQsU0FBTyxJQUFJLE1BQU0sT0FBTztBQUFBLElBQ3RCLElBQUksUUFBUSxNQUFNLFVBQW1CO0FBQ25DLFVBQUksUUFBUSxRQUFRO0FBQ2xCLFlBQUksZ0JBQWdCLElBQUksSUFBSSxHQUFHO0FBQzdCLGlCQUFPLGdCQUFnQixJQUFJLElBQUk7QUFBQSxRQUNqQztBQUVBLGNBQU0sTUFBZSxRQUFRLElBQUksUUFBUSxNQUFNLFFBQVE7QUFDdkQsWUFBSSxjQUFjLEdBQUcsR0FBRztBQUN0QixnQkFBTSxTQUFTLFVBQW1CLEdBQUc7QUFDckMsMEJBQWdCLElBQUksTUFBTSxNQUFNO0FBQ2hDLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU87QUFBQSxNQUNUO0FBRUEsVUFBSSxPQUFPLFNBQVMsWUFBWSxrQkFBa0IsSUFBSSxJQUFJLEdBQUc7QUFDM0QsZUFBTyxRQUFRLElBQUksUUFBUSxNQUFNLFFBQVE7QUFBQSxNQUMzQztBQUVBLFlBQU0sSUFBSSxNQUFNLHNCQUFzQixJQUFJLCtCQUErQjtBQUFBLElBQzNFO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
/**
|
|
7
7
|
* A type that represents a generic object.
|
|
8
8
|
*/
|
|
9
|
-
export type GenericObject = Record<string, unknown
|
|
9
|
+
export type GenericObject<T = unknown> = Record<string | symbol, unknown> & T;
|
|
10
10
|
type NullableConstraint<T> = null extends T ? unknown : undefined extends T ? unknown : never;
|
|
11
11
|
/**
|
|
12
12
|
* Asserts that a condition is `true`. Throws if it is not.
|
|
@@ -23,7 +23,7 @@ export declare function assert(condition: boolean, errorOrMessage: Error | strin
|
|
|
23
23
|
*
|
|
24
24
|
* @param _obj - The value to assert.
|
|
25
25
|
*/
|
|
26
|
-
export declare function assertGenericObject(_obj:
|
|
26
|
+
export declare function assertGenericObject<T>(_obj: T): asserts _obj is GenericObject<T>;
|
|
27
27
|
/**
|
|
28
28
|
* Asserts that a value is not `null` or `undefined`, narrowing its type in place.
|
|
29
29
|
*
|
|
@@ -41,7 +41,7 @@ export declare function assertNonNullable<T extends NullableConstraint<T>>(value
|
|
|
41
41
|
* @param obj - The value to ensure.
|
|
42
42
|
* @returns The value as a generic object.
|
|
43
43
|
*/
|
|
44
|
-
export declare function ensureGenericObject<T>(obj: T): GenericObject
|
|
44
|
+
export declare function ensureGenericObject<T>(obj: T): GenericObject<T>;
|
|
45
45
|
/**
|
|
46
46
|
* Ensures that a value is not `null` or `undefined` and returns it with narrowed type.
|
|
47
47
|
*
|
|
@@ -50,4 +50,4 @@ export {
|
|
|
50
50
|
ensureGenericObject,
|
|
51
51
|
ensureNonNullable
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3R5cGUtZ3VhcmRzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHR5cGUgZ3VhcmRzLlxuICovXG5cbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcblxuLyoqXG4gKiBBIHR5cGUgdGhhdCByZXByZXNlbnRzIGEgZ2VuZXJpYyBvYmplY3QuXG4gKi9cbmV4cG9ydCB0eXBlIEdlbmVyaWNPYmplY3Q8VCA9IHVua25vd24+ID0gUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4gJiBUO1xuXG50eXBlIE51bGxhYmxlQ29uc3RyYWludDxUPiA9IG51bGwgZXh0ZW5kcyBUID8gdW5rbm93biA6IHVuZGVmaW5lZCBleHRlbmRzIFQgPyB1bmtub3duIDogbmV2ZXI7XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IGEgY29uZGl0aW9uIGlzIGB0cnVlYC4gVGhyb3dzIGlmIGl0IGlzIG5vdC5cbiAqXG4gKiBVc2UgaW4gcGxhY2Ugb2YgYC8qIHY4IGlnbm9yZSAqXFwvYCBmb3IgZGVmZW5zaXZlIGd1YXJkcyB0aGF0IHNob3VsZFxuICogbmV2ZXIgdHJpZ2dlciBhdCBydW50aW1lIGJ1dCB3b3VsZCBvdGhlcndpc2UgY3JlYXRlIHVuY292ZXJlZCBicmFuY2hlcy5cbiAqXG4gKiBAcGFyYW0gY29uZGl0aW9uIC0gVGhlIGNvbmRpdGlvbiB0byBhc3NlcnQuXG4gKiBAcGFyYW0gZXJyb3JPck1lc3NhZ2UgLSBUaGUgZXJyb3Igb3IgbWVzc2FnZSB0byB0aHJvdyBpZiB0aGUgY29uZGl0aW9uIGlzIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uOiBib29sZWFuLCBlcnJvck9yTWVzc2FnZTogRXJyb3IgfCBzdHJpbmcpOiBhc3NlcnRzIGNvbmRpdGlvbiB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgdHlwZW9mIGVycm9yT3JNZXNzYWdlID09PSAnc3RyaW5nJyA/IG5ldyBFcnJvcihlcnJvck9yTWVzc2FnZSkgOiBlcnJvck9yTWVzc2FnZTtcbiAgfVxufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCBhIHZhbHVlIGlzIGEgZ2VuZXJpYyBvYmplY3QsIG5hcnJvd2luZyBpdHMgdHlwZSBpbiBwbGFjZS5cbiAqXG4gKiBAcGFyYW0gX29iaiAtIFRoZSB2YWx1ZSB0byBhc3NlcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRHZW5lcmljT2JqZWN0PFQ+KF9vYmo6IFQpOiBhc3NlcnRzIF9vYmogaXMgR2VuZXJpY09iamVjdDxUPiB7XG4gIG5vb3AoKTtcbn1cblxuLyoqXG4gKiBBc3NlcnRzIHRoYXQgYSB2YWx1ZSBpcyBub3QgYG51bGxgIG9yIGB1bmRlZmluZWRgLCBuYXJyb3dpbmcgaXRzIHR5cGUgaW4gcGxhY2UuXG4gKlxuICogT25seSBjYWxsYWJsZSB3aGVuIGBUYCBpbmNsdWRlcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuIFBhc3NpbmcgYW4gYWxyZWFkeSBub24tbnVsbGFibGUgdHlwZSBpcyBhIGNvbXBpbGUgZXJyb3IuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIGVycm9yT3JNZXNzYWdlIC0gT3B0aW9uYWwge0BsaW5rIEVycm9yfSBvciBlcnJvciBtZXNzYWdlIHN0cmluZy5cbiAqIEB0aHJvd3MgSWYgdGhlIHZhbHVlIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5vbk51bGxhYmxlPFQgZXh0ZW5kcyBOdWxsYWJsZUNvbnN0cmFpbnQ8VD4+KHZhbHVlOiBULCBlcnJvck9yTWVzc2FnZT86IEVycm9yIHwgc3RyaW5nKTogYXNzZXJ0cyB2YWx1ZSBpcyBOb25OdWxsYWJsZTxUPiB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXJyb3JPck1lc3NhZ2UgPz89IHZhbHVlID09PSBudWxsID8gJ1ZhbHVlIGlzIG51bGwnIDogJ1ZhbHVlIGlzIHVuZGVmaW5lZCc7XG4gIGNvbnN0IGVycm9yID0gdHlwZW9mIGVycm9yT3JNZXNzYWdlID09PSAnc3RyaW5nJyA/IG5ldyBFcnJvcihlcnJvck9yTWVzc2FnZSkgOiBlcnJvck9yTWVzc2FnZTtcbiAgdGhyb3cgZXJyb3I7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgdmFsdWUgaXMgYSBnZW5lcmljIG9iamVjdCwgcmV0dXJuaW5nIGl0IHdpdGggbmFycm93ZWQgdHlwZS5cbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIHZhbHVlIHRvIGVuc3VyZS5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhcyBhIGdlbmVyaWMgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlR2VuZXJpY09iamVjdDxUPihvYmo6IFQpOiBHZW5lcmljT2JqZWN0PFQ+IHtcbiAgcmV0dXJuIG9iaiBhcyBHZW5lcmljT2JqZWN0PFQ+O1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIHZhbHVlIGlzIG5vdCBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgYW5kIHJldHVybnMgaXQgd2l0aCBuYXJyb3dlZCB0eXBlLlxuICpcbiAqIE9ubHkgY2FsbGFibGUgd2hlbiBgVGAgaW5jbHVkZXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLiBQYXNzaW5nIGFuIGFscmVhZHkgbm9uLW51bGxhYmxlIHR5cGUgaXMgYSBjb21waWxlIGVycm9yLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSBlcnJvck9yTWVzc2FnZSAtIE9wdGlvbmFsIHtAbGluayBFcnJvcn0gb3IgZXJyb3IgbWVzc2FnZSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgd2l0aCBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGV4Y2x1ZGVkIGZyb20gaXRzIHR5cGUuXG4gKiBAdGhyb3dzIElmIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVOb25OdWxsYWJsZTxUIGV4dGVuZHMgTnVsbGFibGVDb25zdHJhaW50PFQ+Pih2YWx1ZTogVCwgZXJyb3JPck1lc3NhZ2U/OiBFcnJvciB8IHN0cmluZyk6IE5vbk51bGxhYmxlPFQ+IHtcbiAgYXNzZXJ0Tm9uTnVsbGFibGUodmFsdWUsIGVycm9yT3JNZXNzYWdlKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxZQUFZO0FBa0JkLFNBQVMsT0FBTyxXQUFvQixnQkFBbUQ7QUFDNUYsTUFBSSxDQUFDLFdBQVc7QUFDZCxVQUFNLE9BQU8sbUJBQW1CLFdBQVcsSUFBSSxNQUFNLGNBQWMsSUFBSTtBQUFBLEVBQ3pFO0FBQ0Y7QUFPTyxTQUFTLG9CQUF1QixNQUEyQztBQUNoRixPQUFLO0FBQ1A7QUFZTyxTQUFTLGtCQUFtRCxPQUFVLGdCQUFrRTtBQUM3SSxNQUFJLFVBQVUsUUFBUSxVQUFVLFFBQVc7QUFDekM7QUFBQSxFQUNGO0FBRUEscUJBQW1CLFVBQVUsT0FBTyxrQkFBa0I7QUFDdEQsUUFBTSxRQUFRLE9BQU8sbUJBQW1CLFdBQVcsSUFBSSxNQUFNLGNBQWMsSUFBSTtBQUMvRSxRQUFNO0FBQ1I7QUFRTyxTQUFTLG9CQUF1QixLQUEwQjtBQUMvRCxTQUFPO0FBQ1Q7QUFhTyxTQUFTLGtCQUFtRCxPQUFVLGdCQUFpRDtBQUM1SCxvQkFBa0IsT0FBTyxjQUFjO0FBQ3ZDLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|