@mnaoumov/typescript-dev-toolkit 4.0.0 → 5.1.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/bundlers/esbuild-impl/svelte-preprocessor/package.json +6 -0
- package/dist/lib/cjs/bulk-concurrency.cjs +49 -0
- package/dist/lib/cjs/bulk-concurrency.d.cts +14 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/index.cjs +4 -1
- package/dist/lib/cjs/bundlers/esbuild-impl/index.d.cts +1 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/preprocess-plugin.cjs +3 -3
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.cjs +152 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-preprocessor.d.cts +95 -0
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.cjs +4 -3
- package/dist/lib/cjs/bundlers/esbuild-impl/svelte-wrapper-plugin.d.cts +1 -1
- package/dist/lib/cjs/docs-site/docs-links.cjs +3 -2
- package/dist/lib/cjs/docs-site/og-images.cjs +3 -2
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/library-build.cjs +8 -8
- package/dist/lib/cjs/linters/eslint-config.cjs +7 -5
- package/dist/lib/cjs/linters/eslint-no-restricted-syntax.cjs +5 -1
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +5 -1
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +7 -1
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +2 -0
- package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.cjs +144 -0
- package/dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.d.cts +11 -0
- package/dist/lib/cjs/linters/eslint-rules/no-unresolved-jsdoc-link.cjs +5 -5
- package/dist/lib/cjs/linters/eslint-rules/prefer-noop-async.cjs +80 -3
- package/dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.cjs +130 -0
- package/dist/lib/cjs/linters/eslint-rules/readonly-member-arrays.d.cts +6 -0
- package/dist/lib/cjs/linters/markdownlint.cjs +8 -2
- package/dist/lib/cjs/linters/over-exposure.cjs +14 -3
- package/dist/lib/cjs/linters/over-exposure.d.cts +3 -1
- package/dist/lib/cjs/nano-staged-config.cjs +24 -3
- package/dist/lib/cjs/nano-staged-config.d.cts +4 -0
- package/dist/lib/cjs/released-issues.cjs +4 -4
- package/dist/lib/cjs/test-runners/auto.cjs +1 -1
- package/dist/lib/cjs/test-runners/auto.d.cts +5 -0
- package/dist/lib/cjs/test-runners/forwarded-arguments.cjs +50 -0
- package/dist/lib/cjs/test-runners/forwarded-arguments.d.cts +49 -0
- package/dist/lib/cjs/test-runners/index.cjs +4 -1
- package/dist/lib/cjs/test-runners/index.d.cts +1 -0
- package/dist/lib/cjs/test-runners/jest.cjs +16 -3
- package/dist/lib/cjs/test-runners/jest.d.cts +5 -0
- package/dist/lib/cjs/test-runners/vitest.cjs +111 -5
- package/dist/lib/cjs/test-runners/vitest.d.cts +5 -0
- package/dist/lib/cjs/upstream-sync.cjs +3 -3
- package/dist/lib/esm/bulk-concurrency.d.mts +14 -0
- package/dist/lib/esm/bulk-concurrency.mjs +15 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.d.mts +1 -0
- package/dist/lib/esm/bundlers/esbuild-impl/index.mjs +3 -1
- package/dist/lib/esm/bundlers/esbuild-impl/preprocess-plugin.mjs +3 -3
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.d.mts +95 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-preprocessor.mjs +126 -0
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.d.mts +1 -1
- package/dist/lib/esm/bundlers/esbuild-impl/svelte-wrapper-plugin.mjs +4 -3
- package/dist/lib/esm/docs-site/docs-links.mjs +3 -2
- package/dist/lib/esm/docs-site/og-images.mjs +3 -2
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/library-build.mjs +8 -8
- package/dist/lib/esm/linters/eslint-config.mjs +7 -5
- package/dist/lib/esm/linters/eslint-no-restricted-syntax.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +2 -0
- package/dist/lib/esm/linters/eslint-rules/index.mjs +5 -1
- package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.d.mts +11 -0
- package/dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.mjs +120 -0
- package/dist/lib/esm/linters/eslint-rules/no-unresolved-jsdoc-link.mjs +5 -5
- package/dist/lib/esm/linters/eslint-rules/prefer-noop-async.mjs +80 -3
- package/dist/lib/esm/linters/eslint-rules/readonly-member-arrays.d.mts +6 -0
- package/dist/lib/esm/linters/eslint-rules/readonly-member-arrays.mjs +106 -0
- package/dist/lib/esm/linters/markdownlint.mjs +8 -2
- package/dist/lib/esm/linters/over-exposure.d.mts +3 -1
- package/dist/lib/esm/linters/over-exposure.mjs +16 -3
- package/dist/lib/esm/nano-staged-config.d.mts +4 -0
- package/dist/lib/esm/nano-staged-config.mjs +24 -3
- package/dist/lib/esm/released-issues.mjs +4 -4
- package/dist/lib/esm/test-runners/auto.d.mts +5 -0
- package/dist/lib/esm/test-runners/auto.mjs +1 -1
- package/dist/lib/esm/test-runners/forwarded-arguments.d.mts +49 -0
- package/dist/lib/esm/test-runners/forwarded-arguments.mjs +26 -0
- package/dist/lib/esm/test-runners/index.d.mts +1 -0
- package/dist/lib/esm/test-runners/index.mjs +3 -1
- package/dist/lib/esm/test-runners/jest.d.mts +5 -0
- package/dist/lib/esm/test-runners/jest.mjs +16 -3
- package/dist/lib/esm/test-runners/vitest.d.mts +5 -0
- package/dist/lib/esm/test-runners/vitest.mjs +105 -6
- package/dist/lib/esm/upstream-sync.mjs +3 -3
- package/linters/eslint-rules/no-keyword-identifiers/package.json +6 -0
- package/linters/eslint-rules/readonly-member-arrays/package.json +6 -0
- package/package.json +5 -2
- package/test-runners/forwarded-arguments/package.json +6 -0
|
@@ -0,0 +1,120 @@
|
|
|
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
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return '/';
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: 'android'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const existingProcess = globalThis.process;
|
|
17
|
+
|
|
18
|
+
if (!existingProcess) {
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (existingProcess.versions?.node) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingProcessRecord = existingProcess;
|
|
28
|
+
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
existingProcessRecord['browser'] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
import { assertNonNullable } from "@mnaoumov/typescript-lib/type-guards";
|
|
40
|
+
const RESTRICTED_NAMES = /* @__PURE__ */ new Set([
|
|
41
|
+
"arguments",
|
|
42
|
+
"bigint",
|
|
43
|
+
"boolean",
|
|
44
|
+
"event",
|
|
45
|
+
"function",
|
|
46
|
+
"module",
|
|
47
|
+
"number",
|
|
48
|
+
"object",
|
|
49
|
+
"string",
|
|
50
|
+
"symbol",
|
|
51
|
+
"undefined"
|
|
52
|
+
]);
|
|
53
|
+
const noKeywordIdentifiers = {
|
|
54
|
+
create(context) {
|
|
55
|
+
const sourceCode = context.sourceCode;
|
|
56
|
+
return {
|
|
57
|
+
"Program:exit"() {
|
|
58
|
+
const scopes = sourceCode.scopeManager.scopes;
|
|
59
|
+
const reported = /* @__PURE__ */ new Set();
|
|
60
|
+
for (const scope of scopes) {
|
|
61
|
+
for (const variable of scope.variables) {
|
|
62
|
+
if (!RESTRICTED_NAMES.has(variable.name)) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const replacement = `$${variable.name}`;
|
|
66
|
+
const nodes = [.../* @__PURE__ */ new Set([...variable.identifiers, ...variable.references.map((reference) => reference.identifier)])];
|
|
67
|
+
const canRename = variable.defs.every((definition) => definition.type !== "ClassName") && scopes.every(
|
|
68
|
+
(candidate) => candidate.variables.every((binding) => binding.name !== replacement) && candidate.through.every((reference) => reference.identifier.name !== replacement)
|
|
69
|
+
) && nodes.every(
|
|
70
|
+
(node) => sourceCode.getAncestors(node).every(
|
|
71
|
+
(ancestor) => ![
|
|
72
|
+
"ExportDefaultDeclaration",
|
|
73
|
+
"ExportNamedDeclaration",
|
|
74
|
+
"ExportSpecifier",
|
|
75
|
+
"ImportSpecifier",
|
|
76
|
+
"Property",
|
|
77
|
+
"TSParameterProperty"
|
|
78
|
+
].includes(ancestor.type)
|
|
79
|
+
)
|
|
80
|
+
);
|
|
81
|
+
for (const identifier of variable.identifiers) {
|
|
82
|
+
if (reported.has(identifier)) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
reported.add(identifier);
|
|
86
|
+
context.report({
|
|
87
|
+
data: { name: variable.name, replacement },
|
|
88
|
+
messageId: "restricted",
|
|
89
|
+
node: identifier,
|
|
90
|
+
suggest: canRename ? [{
|
|
91
|
+
data: { replacement },
|
|
92
|
+
fix: (fixer) => nodes.map((node) => {
|
|
93
|
+
const token = sourceCode.getFirstToken(node);
|
|
94
|
+
assertNonNullable(token, "A binding identifier always has a token");
|
|
95
|
+
return fixer.replaceText(token, replacement);
|
|
96
|
+
}),
|
|
97
|
+
messageId: "rename"
|
|
98
|
+
}] : []
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
},
|
|
106
|
+
meta: {
|
|
107
|
+
docs: { description: "Require a $ prefix on bare keyword and colliding global binding names" },
|
|
108
|
+
hasSuggestions: true,
|
|
109
|
+
messages: {
|
|
110
|
+
rename: 'Rename this binding and its references to "{{ replacement }}".',
|
|
111
|
+
restricted: 'Rename "{{ name }}" to "{{ replacement }}". Preserve any public contract when renaming.'
|
|
112
|
+
},
|
|
113
|
+
schema: [],
|
|
114
|
+
type: "suggestion"
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
export {
|
|
118
|
+
noKeywordIdentifiers
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby1rZXl3b3JkLWlkZW50aWZpZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWplY3QgYmFyZSBrZXl3b3JkIGFuZCBjb2xsaWRpbmcgZ2xvYmFsIG5hbWVzIGluIGRlY2xhcmVkIGJpbmRpbmdzLlxuICovXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmNvbnN0IFJFU1RSSUNURURfTkFNRVMgPSBuZXcgU2V0KFtcbiAgJ2FyZ3VtZW50cycsXG4gICdiaWdpbnQnLFxuICAnYm9vbGVhbicsXG4gICdldmVudCcsXG4gICdmdW5jdGlvbicsXG4gICdtb2R1bGUnLFxuICAnbnVtYmVyJyxcbiAgJ29iamVjdCcsXG4gICdzdHJpbmcnLFxuICAnc3ltYm9sJyxcbiAgJ3VuZGVmaW5lZCdcbl0pO1xuXG4vKipcbiAqIERpc2FsbG93cyBiYXJlIGtleXdvcmQgbmFtZXMsIHdpdGggY29uc2VydmF0aXZlLCBzY29wZS1hd2FyZSByZW5hbWUgc3VnZ2VzdGlvbnMgZm9yIGxvY2FsIGJpbmRpbmdzLlxuICovXG5leHBvcnQgY29uc3Qgbm9LZXl3b3JkSWRlbnRpZmllcnM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5zb3VyY2VDb2RlO1xuICAgIHJldHVybiB7XG4gICAgICAnUHJvZ3JhbTpleGl0JygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gc291cmNlQ29kZS5zY29wZU1hbmFnZXIuc2NvcGVzO1xuICAgICAgICBjb25zdCByZXBvcnRlZCA9IG5ldyBTZXQ8dW5rbm93bj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBzY29wZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHNjb3BlLnZhcmlhYmxlcykge1xuICAgICAgICAgICAgaWYgKCFSRVNUUklDVEVEX05BTUVTLmhhcyh2YXJpYWJsZS5uYW1lKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gYCQke3ZhcmlhYmxlLm5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gWy4uLm5ldyBTZXQoWy4uLnZhcmlhYmxlLmlkZW50aWZpZXJzLCAuLi52YXJpYWJsZS5yZWZlcmVuY2VzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuaWRlbnRpZmllcildKV07XG4gICAgICAgICAgICBjb25zdCBjYW5SZW5hbWUgPSB2YXJpYWJsZS5kZWZzLmV2ZXJ5KChkZWZpbml0aW9uKSA9PiBkZWZpbml0aW9uLnR5cGUgIT09ICdDbGFzc05hbWUnKVxuICAgICAgICAgICAgICAmJiBzY29wZXMuZXZlcnkoKGNhbmRpZGF0ZSkgPT5cbiAgICAgICAgICAgICAgICBjYW5kaWRhdGUudmFyaWFibGVzLmV2ZXJ5KChiaW5kaW5nKSA9PiBiaW5kaW5nLm5hbWUgIT09IHJlcGxhY2VtZW50KVxuICAgICAgICAgICAgICAgICYmIGNhbmRpZGF0ZS50aHJvdWdoLmV2ZXJ5KChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUgIT09IHJlcGxhY2VtZW50KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICYmIG5vZGVzLmV2ZXJ5KChub2RlKSA9PlxuICAgICAgICAgICAgICAgIHNvdXJjZUNvZGUuZ2V0QW5jZXN0b3JzKG5vZGUpLmV2ZXJ5KChhbmNlc3RvcikgPT5cbiAgICAgICAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgICAgICAgICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdFeHBvcnRTcGVjaWZpZXInLFxuICAgICAgICAgICAgICAgICAgICAnSW1wb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ1Byb3BlcnR5JyxcbiAgICAgICAgICAgICAgICAgICAgJ1RTUGFyYW1ldGVyUHJvcGVydHknXG4gICAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGFuY2VzdG9yLnR5cGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIHZhcmlhYmxlLmlkZW50aWZpZXJzKSB7XG4gICAgICAgICAgICAgIGlmIChyZXBvcnRlZC5oYXMoaWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXBvcnRlZC5hZGQoaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IG5hbWU6IHZhcmlhYmxlLm5hbWUsIHJlcGxhY2VtZW50IH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiAncmVzdHJpY3RlZCcsXG4gICAgICAgICAgICAgICAgbm9kZTogaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICBzdWdnZXN0OiBjYW5SZW5hbWVcbiAgICAgICAgICAgICAgICAgID8gW3tcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyByZXBsYWNlbWVudCB9LFxuICAgICAgICAgICAgICAgICAgICBmaXg6IChmaXhlcik6IFJ1bGUuRml4W10gPT5cbiAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0Tm9uTnVsbGFibGUodG9rZW4sICdBIGJpbmRpbmcgaWRlbnRpZmllciBhbHdheXMgaGFzIGEgdG9rZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dCh0b2tlbiwgcmVwbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6ICdyZW5hbWUnXG4gICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogeyBkZXNjcmlwdGlvbjogJ1JlcXVpcmUgYSAkIHByZWZpeCBvbiBiYXJlIGtleXdvcmQgYW5kIGNvbGxpZGluZyBnbG9iYWwgYmluZGluZyBuYW1lcycgfSxcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgcmVuYW1lOiAnUmVuYW1lIHRoaXMgYmluZGluZyBhbmQgaXRzIHJlZmVyZW5jZXMgdG8gXCJ7eyByZXBsYWNlbWVudCB9fVwiLicsXG4gICAgICByZXN0cmljdGVkOiAnUmVuYW1lIFwie3sgbmFtZSB9fVwiIHRvIFwie3sgcmVwbGFjZW1lbnQgfX1cIi4gUHJlc2VydmUgYW55IHB1YmxpYyBjb250cmFjdCB3aGVuIHJlbmFtaW5nLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsU0FBUyx5QkFBeUI7QUFFbEMsTUFBTSxtQkFBbUIsb0JBQUksSUFBSTtBQUFBLEVB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
|
|
@@ -186,9 +186,9 @@ function findModuleByPathSuffix(program, checker, modulePath) {
|
|
|
186
186
|
function flattenName(name) {
|
|
187
187
|
return isIdentifier(name) ? [name.text] : [...flattenName(name.left), name.right.text];
|
|
188
188
|
}
|
|
189
|
-
function getMember(checker, symbol, memberName) {
|
|
189
|
+
function getMember(checker, $symbol, memberName) {
|
|
190
190
|
const escapedName = escapeLeadingUnderscores(memberName);
|
|
191
|
-
const target = resolveAlias(checker, symbol);
|
|
191
|
+
const target = resolveAlias(checker, $symbol);
|
|
192
192
|
const moduleExport = (target.flags & SymbolFlags.Module) === 0 ? void 0 : checker.tryGetMemberInModuleExports(memberName, target);
|
|
193
193
|
return moduleExport ?? target.exports?.get(escapedName) ?? target.members?.get(escapedName) ?? checker.getPropertyOfType(checker.getDeclaredTypeOfSymbol(target), memberName) ?? checker.getPropertyOfType(checker.getTypeOfSymbol(target), memberName);
|
|
194
194
|
}
|
|
@@ -248,8 +248,8 @@ function isResolvedName(params) {
|
|
|
248
248
|
const roots = [...localRoots, ...index.exportsByName.get(rootName) ?? [], findModule(program, checker, rootName, containingFileName)];
|
|
249
249
|
return roots.some((root) => !!resolveMemberPath(checker, root, memberNames));
|
|
250
250
|
}
|
|
251
|
-
function resolveAlias(checker, symbol) {
|
|
252
|
-
return (symbol.flags & SymbolFlags.Alias) === 0 ? symbol : checker.getAliasedSymbol(symbol);
|
|
251
|
+
function resolveAlias(checker, $symbol) {
|
|
252
|
+
return ($symbol.flags & SymbolFlags.Alias) === 0 ? $symbol : checker.getAliasedSymbol($symbol);
|
|
253
253
|
}
|
|
254
254
|
function resolveMemberPath(checker, root, memberNames) {
|
|
255
255
|
let current = root;
|
|
@@ -265,4 +265,4 @@ export {
|
|
|
265
265
|
MESSAGE_ID,
|
|
266
266
|
noUnresolvedJsdocLink
|
|
267
267
|
};
|
|
268
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyDigJQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIOKAlCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIOKAlCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSDigJQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSDigJQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG50eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lbWJlclBhdGgsIG1vZHVsZVBhdGggfSA9IG1vZHVsZU1hdGNoLmdyb3VwcyBhcyBNb2R1bGVQYXRoTWF0Y2hHcm91cHM7XG4gICAgICAgICAgICByZXBvcnRlZE5hbWUgPSBtb2R1bGVNYXRjaFswXTtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGZpbmRNb2R1bGUocHJvZ3JhbSwgY2hlY2tlciwgbW9kdWxlUGF0aCwgdHNTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSAhIXJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXIsIG1vZHVsZVN5bWJvbCwgbWVtYmVyUGF0aC5zcGxpdChNRU1CRVJfU0VQQVJBVE9SX1JFR19FWFApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNSZXNvbHZlZCA9IGlzUmVzb2x2ZWROYW1lKHtcbiAgICAgICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICAgICAgY29udGFpbmluZ0ZpbGVOYW1lOiB0c1NvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICAgICAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgICAgICAgICBwcm9ncmFtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVwb3J0ZWROYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgIGVuZDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0RW5kKCkpLFxuICAgICAgICAgICAgICBzdGFydDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0U3RhcnQoKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0Tm9kZSh0c1NvdXJjZUZpbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICByZXBvcnRJZlVucmVzb2x2ZWQobGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBKU0RvYyBsaW5rIHRhZ3Mgd2hvc2UgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnSlNEb2MgbGluayB0YXJnZXQgYHt7bmFtZX19YCBkb2VzIG5vdCByZXNvbHZlLiBXYXMgaXQgcmVuYW1lZCBvciByZW1vdmVkPydcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZShub2RlOiBOb2RlLCBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWU6IE1hcDxzdHJpbmcsIElkZW50aWZpZXJbXT4pOiB2b2lkIHtcbiAgaWYgKCFpc0xvY2FsRGVjbGFyYXRpb24obm9kZSkgfHwgIW5vZGUubmFtZSB8fCAhaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KG5vZGUubmFtZS50ZXh0KSA/PyBbXTtcbiAgbmFtZXMucHVzaChub2RlLm5hbWUpO1xuICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuc2V0KG5vZGUubmFtZS50ZXh0LCBuYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRNb2R1bGUocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNwZWNpZmllcjogc3RyaW5nLCBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW1iaWVudE1vZHVsZSA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKS5tb2R1bGVzQnlQYXRoLmdldChzcGVjaWZpZXIpO1xuICBpZiAoYW1iaWVudE1vZHVsZSkge1xuICAgIHJldHVybiBhbWJpZW50TW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRGaWxlTmFtZSA9IHJlc29sdmVNb2R1bGVOYW1lKHNwZWNpZmllciwgY29udGFpbmluZ0ZpbGVOYW1lLCBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpLCBzeXMpLnJlc29sdmVkTW9kdWxlPy5yZXNvbHZlZEZpbGVOYW1lO1xuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGUgPSByZXNvbHZlZEZpbGVOYW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRGaWxlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVzb2x2ZWRTb3VyY2VGaWxlICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihyZXNvbHZlZFNvdXJjZUZpbGUpO1xuICByZXR1cm4gcmVzb2x2ZWRNb2R1bGUgPz8gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtLCBjaGVja2VyLCBzcGVjaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlQnlQYXRoU3VmZml4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbW9kdWxlUGF0aC5yZXBsYWNlKFJFTEFUSVZFX1BBVEhfUFJFRklYX1JFR19FWFAsICcnKS5yZXBsYWNlKFNPVVJDRV9GSUxFX0VYVEVOU0lPTl9SRUdfRVhQLCAnJyk7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW2AvJHtub3JtYWxpemVkUGF0aH1gLCBgLyR7bm9ybWFsaXplZFBhdGh9JHtJTkRFWF9TVUZGSVh9YF07XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHNvdXJjZUZpbGUuZmlsZU5hbWUucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICAgIGlmIChzdWZmaXhlcy5ldmVyeSgoc3VmZml4KSA9PiAhcGF0aFdpdGhvdXRFeHRlbnNpb24uZW5kc1dpdGgoc3VmZml4KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgcmV0dXJuIG1vZHVsZVN5bWJvbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk5hbWUobmFtZTogRW50aXR5TmFtZSB8IEpTRG9jTWVtYmVyTmFtZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllcihuYW1lKSA/IFtuYW1lLnRleHRdIDogWy4uLmZsYXR0ZW5OYW1lKG5hbWUubGVmdCksIG5hbWUucmlnaHQudGV4dF07XG59XG5cbmZ1bmN0aW9uIGdldE1lbWJlcihjaGVja2VyOiBUeXBlQ2hlY2tlciwgc3ltYm9sOiBUc1N5bWJvbCwgbWVtYmVyTmFtZTogc3RyaW5nKTogVHNTeW1ib2wgfCB1bmRlZmluZWQge1xuICBjb25zdCBlc2NhcGVkTmFtZSA9IGVzY2FwZUxlYWRpbmdVbmRlcnNjb3JlcyhtZW1iZXJOYW1lKTtcbiAgY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZUFsaWFzKGNoZWNrZXIsIHN5bWJvbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyB0ZXN0IGlzIGlkaW9tYXRpYyBmb3IgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuICBjb25zdCBtb2R1bGVFeHBvcnQgPSAodGFyZ2V0LmZsYWdzICYgU3ltYm9sRmxhZ3MuTW9kdWxlKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGNoZWNrZXIudHJ5R2V0TWVtYmVySW5Nb2R1bGVFeHBvcnRzKG1lbWJlck5hbWUsIHRhcmdldCk7XG4gIHJldHVybiBtb2R1bGVFeHBvcnRcbiAgICA/PyB0YXJnZXQuZXhwb3J0cz8uZ2V0KGVzY2FwZWROYW1lKVxuICAgID8/IHRhcmdldC5tZW1iZXJzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldERlY2xhcmVkVHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldFR5cGVPZlN5bWJvbCh0YXJnZXQpLCBtZW1iZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUluZGV4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyKTogUHJvZ3JhbUluZGV4IHtcbiAgbGV0IGluZGV4ID0gcHJvZ3JhbUluZGV4Q2FjaGUuZ2V0KHByb2dyYW0pO1xuICBpZiAoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBpbmRleCA9IHtcbiAgICBleHBvcnRzQnlOYW1lOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2xbXT4oKSxcbiAgICBtb2R1bGVzQnlQYXRoOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2w+KClcbiAgfTtcblxuICBjb25zdCBtb2R1bGVTeW1ib2xzOiBUc1N5bWJvbFtdID0gW107XG4gIGZvciAoY29uc3QgYW1iaWVudE1vZHVsZSBvZiBjaGVja2VyLmdldEFtYmllbnRNb2R1bGVzKCkpIHtcbiAgICBpbmRleC5tb2R1bGVzQnlQYXRoLnNldChhbWJpZW50TW9kdWxlLm5hbWUucmVwbGFjZUFsbCgnXCInLCAnJyksIGFtYmllbnRNb2R1bGUpO1xuICAgIG1vZHVsZVN5bWJvbHMucHVzaChhbWJpZW50TW9kdWxlKTtcbiAgfVxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgY29uc3QgbW9kdWxlU3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICAgIGlmIChtb2R1bGVTeW1ib2wpIHtcbiAgICAgIG1vZHVsZVN5bWJvbHMucHVzaChtb2R1bGVTeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kdWxlU3ltYm9sIG9mIG1vZHVsZVN5bWJvbHMpIHtcbiAgICBmb3IgKGNvbnN0IGV4cG9ydFN5bWJvbCBvZiBjaGVja2VyLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVTeW1ib2wpKSB7XG4gICAgICBjb25zdCBzeW1ib2xzID0gaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQoZXhwb3J0U3ltYm9sLm5hbWUpID8/IFtdO1xuICAgICAgc3ltYm9scy5wdXNoKGV4cG9ydFN5bWJvbCk7XG4gICAgICBpbmRleC5leHBvcnRzQnlOYW1lLnNldChleHBvcnRTeW1ib2wubmFtZSwgc3ltYm9scyk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3JhbUluZGV4Q2FjaGUuc2V0KHByb2dyYW0sIGluZGV4KTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBpc0pTRG9jTGlua0xpa2Uobm9kZTogTm9kZSk6IG5vZGUgaXMgSlNEb2NMaW5rTGlrZSB7XG4gIHJldHVybiBpc0pTRG9jTGluayhub2RlKSB8fCBpc0pTRG9jTGlua0NvZGUobm9kZSkgfHwgaXNKU0RvY0xpbmtQbGFpbihub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbERlY2xhcmF0aW9uKG5vZGU6IE5vZGUpOiBub2RlIGlzIExvY2FsRGVjbGFyYXRpb24ge1xuICByZXR1cm4gaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNFbnVtRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2REZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzTWV0aG9kU2lnbmF0dXJlKG5vZGUpXG4gICAgfHwgaXNNb2R1bGVEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1Jlc29sdmVkTmFtZShwYXJhbXM6IElzUmVzb2x2ZWROYW1lUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBjaGVja2VyLFxuICAgIGNvbnRhaW5pbmdGaWxlTmFtZSxcbiAgICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUsXG4gICAgbmFtZSxcbiAgICBwcm9ncmFtXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gYEZvbyNiYXJgIGlzIGEgYEpTRG9jTWVtYmVyTmFtZWAsIHdoaWNoIHRoZSBjaGVja2VyIHJlc29sdmVzIG9ubHkgdGhyb3VnaCBpdHMgcmlnaHQtaGFuZCBtZW1iZXIuXG4gIGlmIChpc0pTRG9jTWVtYmVyTmFtZShuYW1lKSAmJiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obmFtZS5yaWdodCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IFtyb290TmFtZSA9ICcnLCAuLi5tZW1iZXJOYW1lc10gPSBmbGF0dGVuTmFtZShuYW1lKTtcbiAgY29uc3QgaW5kZXggPSBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbSwgY2hlY2tlcik7XG4gIGNvbnN0IGxvY2FsUm9vdHMgPSAobG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lLmdldChyb290TmFtZSkgPz8gW10pLm1hcCgoZGVjbGFyYXRpb25OYW1lKSA9PiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oZGVjbGFyYXRpb25OYW1lKSk7XG4gIGNvbnN0IHJvb3RzID0gWy4uLmxvY2FsUm9vdHMsIC4uLmluZGV4LmV4cG9ydHNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSwgZmluZE1vZHVsZShwcm9ncmFtLCBjaGVja2VyLCByb290TmFtZSwgY29udGFpbmluZ0ZpbGVOYW1lKV07XG5cbiAgcmV0dXJuIHJvb3RzLnNvbWUoKHJvb3QpID0+ICEhcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlciwgcm9vdCwgbWVtYmVyTmFtZXMpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgdGVzdCBpcyBpZGlvbWF0aWMgZm9yIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgcmV0dXJuIChzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykgPT09IDAgPyBzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHJvb3Q6IFRzU3ltYm9sIHwgdW5kZWZpbmVkLCBtZW1iZXJOYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCA9IHJvb3Q7XG4gIGZvciAoY29uc3QgbWVtYmVyTmFtZSBvZiBtZW1iZXJOYW1lcykge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IGdldE1lbWJlcihjaGVja2VyLCBjdXJyZW50LCBtZW1iZXJOYW1lKTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnRUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxzQkFBc0I7QUFLeEIsTUFBTSxhQUFhO0FBa0MxQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLCtC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
|
|
268
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyDigJQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIOKAlCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIOKAlCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSDigJQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSDigJQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG50eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lbWJlclBhdGgsIG1vZHVsZVBhdGggfSA9IG1vZHVsZU1hdGNoLmdyb3VwcyBhcyBNb2R1bGVQYXRoTWF0Y2hHcm91cHM7XG4gICAgICAgICAgICByZXBvcnRlZE5hbWUgPSBtb2R1bGVNYXRjaFswXTtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGZpbmRNb2R1bGUocHJvZ3JhbSwgY2hlY2tlciwgbW9kdWxlUGF0aCwgdHNTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSAhIXJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXIsIG1vZHVsZVN5bWJvbCwgbWVtYmVyUGF0aC5zcGxpdChNRU1CRVJfU0VQQVJBVE9SX1JFR19FWFApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNSZXNvbHZlZCA9IGlzUmVzb2x2ZWROYW1lKHtcbiAgICAgICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICAgICAgY29udGFpbmluZ0ZpbGVOYW1lOiB0c1NvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICAgICAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgICAgICAgICBwcm9ncmFtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVwb3J0ZWROYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgIGVuZDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0RW5kKCkpLFxuICAgICAgICAgICAgICBzdGFydDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0U3RhcnQoKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0Tm9kZSh0c1NvdXJjZUZpbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICByZXBvcnRJZlVucmVzb2x2ZWQobGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBKU0RvYyBsaW5rIHRhZ3Mgd2hvc2UgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnSlNEb2MgbGluayB0YXJnZXQgYHt7bmFtZX19YCBkb2VzIG5vdCByZXNvbHZlLiBXYXMgaXQgcmVuYW1lZCBvciByZW1vdmVkPydcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZShub2RlOiBOb2RlLCBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWU6IE1hcDxzdHJpbmcsIElkZW50aWZpZXJbXT4pOiB2b2lkIHtcbiAgaWYgKCFpc0xvY2FsRGVjbGFyYXRpb24obm9kZSkgfHwgIW5vZGUubmFtZSB8fCAhaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KG5vZGUubmFtZS50ZXh0KSA/PyBbXTtcbiAgbmFtZXMucHVzaChub2RlLm5hbWUpO1xuICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuc2V0KG5vZGUubmFtZS50ZXh0LCBuYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRNb2R1bGUocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNwZWNpZmllcjogc3RyaW5nLCBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW1iaWVudE1vZHVsZSA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKS5tb2R1bGVzQnlQYXRoLmdldChzcGVjaWZpZXIpO1xuICBpZiAoYW1iaWVudE1vZHVsZSkge1xuICAgIHJldHVybiBhbWJpZW50TW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRGaWxlTmFtZSA9IHJlc29sdmVNb2R1bGVOYW1lKHNwZWNpZmllciwgY29udGFpbmluZ0ZpbGVOYW1lLCBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpLCBzeXMpLnJlc29sdmVkTW9kdWxlPy5yZXNvbHZlZEZpbGVOYW1lO1xuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGUgPSByZXNvbHZlZEZpbGVOYW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRGaWxlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVzb2x2ZWRTb3VyY2VGaWxlICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihyZXNvbHZlZFNvdXJjZUZpbGUpO1xuICByZXR1cm4gcmVzb2x2ZWRNb2R1bGUgPz8gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtLCBjaGVja2VyLCBzcGVjaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlQnlQYXRoU3VmZml4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbW9kdWxlUGF0aC5yZXBsYWNlKFJFTEFUSVZFX1BBVEhfUFJFRklYX1JFR19FWFAsICcnKS5yZXBsYWNlKFNPVVJDRV9GSUxFX0VYVEVOU0lPTl9SRUdfRVhQLCAnJyk7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW2AvJHtub3JtYWxpemVkUGF0aH1gLCBgLyR7bm9ybWFsaXplZFBhdGh9JHtJTkRFWF9TVUZGSVh9YF07XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHNvdXJjZUZpbGUuZmlsZU5hbWUucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICAgIGlmIChzdWZmaXhlcy5ldmVyeSgoc3VmZml4KSA9PiAhcGF0aFdpdGhvdXRFeHRlbnNpb24uZW5kc1dpdGgoc3VmZml4KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgcmV0dXJuIG1vZHVsZVN5bWJvbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk5hbWUobmFtZTogRW50aXR5TmFtZSB8IEpTRG9jTWVtYmVyTmFtZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllcihuYW1lKSA/IFtuYW1lLnRleHRdIDogWy4uLmZsYXR0ZW5OYW1lKG5hbWUubGVmdCksIG5hbWUucmlnaHQudGV4dF07XG59XG5cbmZ1bmN0aW9uIGdldE1lbWJlcihjaGVja2VyOiBUeXBlQ2hlY2tlciwgJHN5bWJvbDogVHNTeW1ib2wsIG1lbWJlck5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXNjYXBlZE5hbWUgPSBlc2NhcGVMZWFkaW5nVW5kZXJzY29yZXMobWVtYmVyTmFtZSk7XG4gIGNvbnN0IHRhcmdldCA9IHJlc29sdmVBbGlhcyhjaGVja2VyLCAkc3ltYm9sKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UgLS0gQml0d2lzZSBmbGFnIHRlc3QgaXMgaWRpb21hdGljIGZvciB0aGUgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG4gIGNvbnN0IG1vZHVsZUV4cG9ydCA9ICh0YXJnZXQuZmxhZ3MgJiBTeW1ib2xGbGFncy5Nb2R1bGUpID09PSAwID8gdW5kZWZpbmVkIDogY2hlY2tlci50cnlHZXRNZW1iZXJJbk1vZHVsZUV4cG9ydHMobWVtYmVyTmFtZSwgdGFyZ2V0KTtcbiAgcmV0dXJuIG1vZHVsZUV4cG9ydFxuICAgID8/IHRhcmdldC5leHBvcnRzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gdGFyZ2V0Lm1lbWJlcnM/LmdldChlc2NhcGVkTmFtZSlcbiAgICA/PyBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKGNoZWNrZXIuZ2V0RGVjbGFyZWRUeXBlT2ZTeW1ib2wodGFyZ2V0KSwgbWVtYmVyTmFtZSlcbiAgICA/PyBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKGNoZWNrZXIuZ2V0VHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIpOiBQcm9ncmFtSW5kZXgge1xuICBsZXQgaW5kZXggPSBwcm9ncmFtSW5kZXhDYWNoZS5nZXQocHJvZ3JhbSk7XG4gIGlmIChpbmRleCkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGluZGV4ID0ge1xuICAgIGV4cG9ydHNCeU5hbWU6IG5ldyBNYXA8c3RyaW5nLCBUc1N5bWJvbFtdPigpLFxuICAgIG1vZHVsZXNCeVBhdGg6IG5ldyBNYXA8c3RyaW5nLCBUc1N5bWJvbD4oKVxuICB9O1xuXG4gIGNvbnN0IG1vZHVsZVN5bWJvbHM6IFRzU3ltYm9sW10gPSBbXTtcbiAgZm9yIChjb25zdCBhbWJpZW50TW9kdWxlIG9mIGNoZWNrZXIuZ2V0QW1iaWVudE1vZHVsZXMoKSkge1xuICAgIGluZGV4Lm1vZHVsZXNCeVBhdGguc2V0KGFtYmllbnRNb2R1bGUubmFtZS5yZXBsYWNlQWxsKCdcIicsICcnKSwgYW1iaWVudE1vZHVsZSk7XG4gICAgbW9kdWxlU3ltYm9scy5wdXNoKGFtYmllbnRNb2R1bGUpO1xuICB9XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgbW9kdWxlU3ltYm9scy5wdXNoKG1vZHVsZVN5bWJvbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBtb2R1bGVTeW1ib2wgb2YgbW9kdWxlU3ltYm9scykge1xuICAgIGZvciAoY29uc3QgZXhwb3J0U3ltYm9sIG9mIGNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCkpIHtcbiAgICAgIGNvbnN0IHN5bWJvbHMgPSBpbmRleC5leHBvcnRzQnlOYW1lLmdldChleHBvcnRTeW1ib2wubmFtZSkgPz8gW107XG4gICAgICBzeW1ib2xzLnB1c2goZXhwb3J0U3ltYm9sKTtcbiAgICAgIGluZGV4LmV4cG9ydHNCeU5hbWUuc2V0KGV4cG9ydFN5bWJvbC5uYW1lLCBzeW1ib2xzKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmFtSW5kZXhDYWNoZS5zZXQocHJvZ3JhbSwgaW5kZXgpO1xuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGlzSlNEb2NMaW5rTGlrZShub2RlOiBOb2RlKTogbm9kZSBpcyBKU0RvY0xpbmtMaWtlIHtcbiAgcmV0dXJuIGlzSlNEb2NMaW5rKG5vZGUpIHx8IGlzSlNEb2NMaW5rQ29kZShub2RlKSB8fCBpc0pTRG9jTGlua1BsYWluKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc0xvY2FsRGVjbGFyYXRpb24obm9kZTogTm9kZSk6IG5vZGUgaXMgTG9jYWxEZWNsYXJhdGlvbiB7XG4gIHJldHVybiBpc0NsYXNzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0VudW1EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2RTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc01vZHVsZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNQcm9wZXJ0eVNpZ25hdHVyZShub2RlKVxuICAgIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzVHlwZUFsaWFzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVzb2x2ZWROYW1lKHBhcmFtczogSXNSZXNvbHZlZE5hbWVQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrZXIsXG4gICAgY29udGFpbmluZ0ZpbGVOYW1lLFxuICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICBuYW1lLFxuICAgIHByb2dyYW1cbiAgfSA9IHBhcmFtcztcblxuICBpZiAoY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBgRm9vI2JhcmAgaXMgYSBgSlNEb2NNZW1iZXJOYW1lYCwgd2hpY2ggdGhlIGNoZWNrZXIgcmVzb2x2ZXMgb25seSB0aHJvdWdoIGl0cyByaWdodC1oYW5kIG1lbWJlci5cbiAgaWYgKGlzSlNEb2NNZW1iZXJOYW1lKG5hbWUpICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lLnJpZ2h0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgW3Jvb3ROYW1lID0gJycsIC4uLm1lbWJlck5hbWVzXSA9IGZsYXR0ZW5OYW1lKG5hbWUpO1xuICBjb25zdCBpbmRleCA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKTtcbiAgY29uc3QgbG9jYWxSb290cyA9IChsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSkubWFwKChkZWNsYXJhdGlvbk5hbWUpID0+IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihkZWNsYXJhdGlvbk5hbWUpKTtcbiAgY29uc3Qgcm9vdHMgPSBbLi4ubG9jYWxSb290cywgLi4uaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQocm9vdE5hbWUpID8/IFtdLCBmaW5kTW9kdWxlKHByb2dyYW0sIGNoZWNrZXIsIHJvb3ROYW1lLCBjb250YWluaW5nRmlsZU5hbWUpXTtcblxuICByZXR1cm4gcm9vdHMuc29tZSgocm9vdCkgPT4gISFyZXNvbHZlTWVtYmVyUGF0aChjaGVja2VyLCByb290LCBtZW1iZXJOYW1lcykpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQWxpYXMoY2hlY2tlcjogVHlwZUNoZWNrZXIsICRzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgdGVzdCBpcyBpZGlvbWF0aWMgZm9yIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgcmV0dXJuICgkc3ltYm9sLmZsYWdzICYgU3ltYm9sRmxhZ3MuQWxpYXMpID09PSAwID8gJHN5bWJvbCA6IGNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbCgkc3ltYm9sKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHJvb3Q6IFRzU3ltYm9sIHwgdW5kZWZpbmVkLCBtZW1iZXJOYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCA9IHJvb3Q7XG4gIGZvciAoY29uc3QgbWVtYmVyTmFtZSBvZiBtZW1iZXJOYW1lcykge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IGdldE1lbWJlcihjaGVja2VyLCBjdXJyZW50LCBtZW1iZXJOYW1lKTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnRUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxzQkFBc0I7QUFLeEIsTUFBTSxhQUFhO0FBa0MxQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLHNCQUFzQjtBQUM1QixN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
|
|
@@ -2,20 +2,92 @@
|
|
|
2
2
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
3
3
|
if you want to view the source, please visit the github repository of this plugin
|
|
4
4
|
*/
|
|
5
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return '/';
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: 'android'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const existingProcess = globalThis.process;
|
|
17
|
+
|
|
18
|
+
if (!existingProcess) {
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (existingProcess.versions?.node) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingProcessRecord = existingProcess;
|
|
5
28
|
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
existingProcessRecord['browser'] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
import { ensureNonNullable } from "@mnaoumov/typescript-lib/type-guards";
|
|
40
|
+
import { AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
6
41
|
import { toTSESTreeNode } from "./ts-estree-node.mjs";
|
|
42
|
+
const FUNCTION_MODULE = "@mnaoumov/typescript-lib/function";
|
|
7
43
|
const MESSAGE_ID = "preferNoopAsync";
|
|
8
44
|
const preferNoopAsync = {
|
|
9
45
|
create(context) {
|
|
10
46
|
return {
|
|
11
47
|
"CallExpression"(node) {
|
|
12
48
|
const callNode = toTSESTreeNode(node);
|
|
13
|
-
if (!isPromiseResolveWithNoArguments(callNode)) {
|
|
49
|
+
if (!isPromiseResolveWithNoArguments(callNode) || isLocallyBoundPromise(context.sourceCode.getScope(node), callNode)) {
|
|
14
50
|
return;
|
|
15
51
|
}
|
|
16
52
|
context.report({
|
|
17
53
|
fix(fixer) {
|
|
18
|
-
|
|
54
|
+
const sourceCode = context.sourceCode;
|
|
55
|
+
const seen = /* @__PURE__ */ new Set();
|
|
56
|
+
for (let scope = sourceCode.getScope(node); scope; scope = scope.upper) {
|
|
57
|
+
for (const variable of scope.variables) {
|
|
58
|
+
if (seen.has(variable.name)) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
seen.add(variable.name);
|
|
62
|
+
for (const definition of variable.defs) {
|
|
63
|
+
if (definition.type !== "ImportBinding") {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const specifier = toTSESTreeNode(definition.node);
|
|
67
|
+
const declaration = toTSESTreeNode(definition.parent);
|
|
68
|
+
if (specifier.type === AST_NODE_TYPES.ImportSpecifier && specifier.importKind !== "type" && declaration.importKind !== "type" && declaration.source.value === FUNCTION_MODULE && specifier.imported.type === AST_NODE_TYPES.Identifier && specifier.imported.name === "noopAsync") {
|
|
69
|
+
return fixer.replaceText(node, `${variable.name}()`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (sourceCode.ast.sourceType !== "module") {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const names = new Set(sourceCode.getTokens(sourceCode.ast).map((token) => token.value));
|
|
78
|
+
let name = "noopAsync";
|
|
79
|
+
let suffix = 0;
|
|
80
|
+
while (names.has(name)) {
|
|
81
|
+
name = `noopAsync${String(++suffix)}`;
|
|
82
|
+
}
|
|
83
|
+
const binding = name === "noopAsync" ? name : `noopAsync as ${name}`;
|
|
84
|
+
const firstStatement = ensureNonNullable(sourceCode.ast.body.find((statement) => !("directive" in statement && typeof statement.directive === "string")));
|
|
85
|
+
const firstToken = sourceCode.getFirstToken(firstStatement);
|
|
86
|
+
return [
|
|
87
|
+
fixer.insertTextBefore(firstToken, `import { ${binding} } from '${FUNCTION_MODULE}';
|
|
88
|
+
`),
|
|
89
|
+
fixer.replaceText(node, `${name}()`)
|
|
90
|
+
];
|
|
19
91
|
},
|
|
20
92
|
messageId: MESSAGE_ID,
|
|
21
93
|
node
|
|
@@ -35,6 +107,11 @@ const preferNoopAsync = {
|
|
|
35
107
|
type: "suggestion"
|
|
36
108
|
}
|
|
37
109
|
};
|
|
110
|
+
function isLocallyBoundPromise(scope, node) {
|
|
111
|
+
const callee = node.callee;
|
|
112
|
+
const reference = ensureNonNullable(scope.references.find((candidate) => toTSESTreeNode(candidate.identifier) === callee.object));
|
|
113
|
+
return (reference.resolved?.defs.length ?? 0) > 0;
|
|
114
|
+
}
|
|
38
115
|
function isPromiseResolveWithNoArguments(node) {
|
|
39
116
|
const callee = node.callee;
|
|
40
117
|
return node.arguments.length === 0 && callee.type === "MemberExpression" && callee.object.type === "Identifier" && callee.object.name === "Promise" && callee.property.type === "Identifier" && callee.property.name === "resolve";
|
|
@@ -43,4 +120,4 @@ export {
|
|
|
43
120
|
MESSAGE_ID,
|
|
44
121
|
preferNoopAsync
|
|
45
122
|
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL3ByZWZlci1ub29wLWFzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHByZWZlci1ub29wLWFzeW5jXG4gKlxuICogUmVwb3J0cyBgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClgIGFuZCBzdWdnZXN0cyByZXBsYWNpbmcgaXQgd2l0aFxuICogYGF3YWl0IG5vb3BBc3luYygpYCBmb3IgY29uc2lzdGVuY3kgYW5kIHJlYWRhYmlsaXR5LlxuICpcbiAqIGBub29wQXN5bmMoKWAgZnJvbSB0aGUgcHJvamVjdCdzIGBmdW5jdGlvbi50c2AgbW9kdWxlIGlzIHRoZSBjb252ZW50aW9uYWxcbiAqIHdheSB0byBleHByZXNzIGFuIGludGVudGlvbmFsIGFzeW5jIG5vLW9wLlxuICovXG5pbXBvcnQgdHlwZSB7IFRTRVNUcmVlIH0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnLi90cy1lc3RyZWUtbm9kZS50cyc7XG5cbi8qKlxuTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGBQcm9taXNlLnJlc29sdmUoKWAgaXMgdXNlZCBmb3IgYW4gYXN5bmMgbm8tb3AgaW5zdGVhZCBvZiBgbm9vcEFzeW5jKClgLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9JRCA9ICdwcmVmZXJOb29wQXN5bmMnO1xuXG4vKipcbiAqIEVTTGludCBydWxlIHByZWZlcnJpbmcgYG5vb3BBc3luYygpYCBvdmVyIGBQcm9taXNlLnJlc29sdmUoKWAgZm9yIGFuIGFzeW5jIG5vLW9wLlxuICovXG5leHBvcnQgY29uc3QgcHJlZmVyTm9vcEFzeW5jOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDYWxsRXhwcmVzc2lvbicobm9kZTogUnVsZS5Ob2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNhbGxOb2RlID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb247XG5cbiAgICAgICAgaWYgKCFpc1Byb21pc2VSZXNvbHZlV2l0aE5vQXJndW1lbnRzKGNhbGxOb2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dChub2RlLCAnbm9vcEFzeW5jKCknKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICBub2RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ByZWZlciBgbm9vcEFzeW5jKClgIG92ZXIgYFByb21pc2UucmVzb2x2ZSgpYCdcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnVXNlIGBub29wQXN5bmMoKWAgaW5zdGVhZCBvZiBgUHJvbWlzZS5yZXNvbHZlKClgIGZvciBhc3luYyBuby1vcHMuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbidcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIGNhbGwgZXhwcmVzc2lvbiBpcyBgUHJvbWlzZS5yZXNvbHZlKClgIHdpdGggbm8gYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIGNhbGwgZXhwcmVzc2lvbiBub2RlLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGBQcm9taXNlLnJlc29sdmUoKWAgd2l0aCBubyBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvbWlzZVJlc29sdmVXaXRoTm9Bcmd1bWVudHMobm9kZTogVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1lbnVtLWNvbXBhcmlzb24gLS0gQVNUIG5vZGUgdHlwZSBzdHJpbmcgbGl0ZXJhbHMgbWF0Y2ggdGhlIFRTRVNUcmVlIGVudW0gdmFsdWVzLiAqL1xuICByZXR1cm4gbm9kZS5hcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgJiYgY2FsbGVlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJ1xuICAgICYmIGNhbGxlZS5vYmplY3QudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmIGNhbGxlZS5vYmplY3QubmFtZSA9PT0gJ1Byb21pc2UnXG4gICAgJiYgY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiBjYWxsZWUucHJvcGVydHkubmFtZSA9PT0gJ3Jlc29sdmUnO1xuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy4gKi9cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBY0EsU0FBUyxzQkFBc0I7QUFLeEIsTUFBTSxhQUFhO0FBS25CLE1BQU0sa0JBQW1DO0FBQUEsRUFDOUMsT0FBTyxTQUFTO0FBQ2QsV0FBTztBQUFBLE1BQ0wsaUJBQWlCLE1BQXVCO0FBQ3RDLGNBQU0sV0FBVyxlQUFlLElBQUk7QUFFcEMsWUFBSSxDQUFDLGdDQUFnQyxRQUFRLEdBQUc7QUFDOUM7QUFBQSxRQUNGO0FBRUEsZ0JBQVEsT0FBTztBQUFBLFVBQ2IsSUFBSSxPQUFPO0FBQ1QsbUJBQU8sTUFBTSxZQUFZLE1BQU0sYUFBYTtBQUFBLFVBQzlDO0FBQUEsVUFDQSxXQUFXO0FBQUEsVUFDWDtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxNQUNSLENBQUMsVUFBVSxHQUFHO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQVFBLFNBQVMsZ0NBQWdDLE1BQXdDO0FBQy9FLFFBQU0sU0FBUyxLQUFLO0FBR3BCLFNBQU8sS0FBSyxVQUFVLFdBQVcsS0FDNUIsT0FBTyxTQUFTLHNCQUNoQixPQUFPLE9BQU8sU0FBUyxnQkFBZ0IsT0FBTyxPQUFPLFNBQVMsYUFDOUQsT0FBTyxTQUFTLFNBQVMsZ0JBQWdCLE9BQU8sU0FBUyxTQUFTO0FBRXpFOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItbm9vcC1hc3luYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogRVNMaW50IHJ1bGU6IHByZWZlci1ub29wLWFzeW5jXG4gKlxuICogUmVwb3J0cyBgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKClgIGFuZCBzdWdnZXN0cyByZXBsYWNpbmcgaXQgd2l0aFxuICogYGF3YWl0IG5vb3BBc3luYygpYCBmb3IgY29uc2lzdGVuY3kgYW5kIHJlYWRhYmlsaXR5LlxuICpcbiAqIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSB2YWx1ZSBpbXBvcnQgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uYCxcbiAqIG9yIGFkZHMgYSBjb2xsaXNpb24tZnJlZSBpbXBvcnQuIFNjcmlwdHMgd2l0aG91dCBvbmUgcmV0YWluIHRoZSBkaWFnbm9zdGljIG9ubHkuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUge1xuICBSdWxlLFxuICBTY29wZVxufSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQgeyBBU1RfTk9ERV9UWVBFUyB9IGZyb20gJ0B0eXBlc2NyaXB0LWVzbGludC91dGlscyc7XG5cbmltcG9ydCB7IHRvVFNFU1RyZWVOb2RlIH0gZnJvbSAnLi90cy1lc3RyZWUtbm9kZS50cyc7XG5cbmNvbnN0IEZVTkNUSU9OX01PRFVMRSA9ICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZnVuY3Rpb24nO1xuLyoqXG5NZXNzYWdlIElEIHJlcG9ydGVkIHdoZW4gYFByb21pc2UucmVzb2x2ZSgpYCBpcyB1c2VkIGZvciBhbiBhc3luYyBuby1vcCBpbnN0ZWFkIG9mIGBub29wQXN5bmMoKWAuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlck5vb3BBc3luYyc7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBgbm9vcEFzeW5jKClgIG92ZXIgYFByb21pc2UucmVzb2x2ZSgpYCBmb3IgYW4gYXN5bmMgbm8tb3AuXG4gKi9cbmV4cG9ydCBjb25zdCBwcmVmZXJOb29wQXN5bmM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0NhbGxFeHByZXNzaW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FsbE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcblxuICAgICAgICBpZiAoIWlzUHJvbWlzZVJlc29sdmVXaXRoTm9Bcmd1bWVudHMoY2FsbE5vZGUpIHx8IGlzTG9jYWxseUJvdW5kUHJvbWlzZShjb250ZXh0LnNvdXJjZUNvZGUuZ2V0U2NvcGUobm9kZSksIGNhbGxOb2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGU7XG4gICAgICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgICAgICBmb3IgKGxldCBzY29wZTogbnVsbCB8IFNjb3BlLlNjb3BlID0gc291cmNlQ29kZS5nZXRTY29wZShub2RlKTsgc2NvcGU7IHNjb3BlID0gc2NvcGUudXBwZXIpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiBzY29wZS52YXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Vlbi5oYXModmFyaWFibGUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWVuLmFkZCh2YXJpYWJsZS5uYW1lKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgdmFyaWFibGUuZGVmcykge1xuICAgICAgICAgICAgICAgICAgaWYgKGRlZmluaXRpb24udHlwZSAhPT0gJ0ltcG9ydEJpbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlY2lmaWVyID0gdG9UU0VTVHJlZU5vZGUoZGVmaW5pdGlvbi5ub2RlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gdG9UU0VTVHJlZU5vZGUoZGVmaW5pdGlvbi5wYXJlbnQpIGFzIFRTRVNUcmVlLkltcG9ydERlY2xhcmF0aW9uO1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZXIudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSW1wb3J0U3BlY2lmaWVyXG4gICAgICAgICAgICAgICAgICAgICYmIHNwZWNpZmllci5pbXBvcnRLaW5kICE9PSAndHlwZScgJiYgZGVjbGFyYXRpb24uaW1wb3J0S2luZCAhPT0gJ3R5cGUnXG4gICAgICAgICAgICAgICAgICAgICYmIGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSA9PT0gRlVOQ1RJT05fTU9EVUxFXG4gICAgICAgICAgICAgICAgICAgICYmIHNwZWNpZmllci5pbXBvcnRlZC50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5JZGVudGlmaWVyICYmIHNwZWNpZmllci5pbXBvcnRlZC5uYW1lID09PSAnbm9vcEFzeW5jJ1xuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dChub2RlLCBgJHt2YXJpYWJsZS5uYW1lfSgpYCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEEgc2NyaXB0IGNhbm5vdCBhY2NlcHQgYW4gRVNNIGltcG9ydC4gTGVhdmUgaXRzIGRpYWdub3N0aWMgZm9yIGEgbWFudWFsIGVkaXQuXG4gICAgICAgICAgICBpZiAoc291cmNlQ29kZS5hc3Quc291cmNlVHlwZSAhPT0gJ21vZHVsZScpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJbmNsdWRlIHJlZmVyZW5jZXMgYXMgd2VsbCBhcyBkZWNsYXJhdGlvbnMsIHNvIGFuIGltcG9ydCBuZXZlciBjYXB0dXJlcyBhbiBleGlzdGluZyBmcmVlIHJlYWQuXG4gICAgICAgICAgICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoc291cmNlQ29kZS5nZXRUb2tlbnMoc291cmNlQ29kZS5hc3QpLm1hcCgodG9rZW4pID0+IHRva2VuLnZhbHVlKSk7XG4gICAgICAgICAgICBsZXQgbmFtZSA9ICdub29wQXN5bmMnO1xuICAgICAgICAgICAgbGV0IHN1ZmZpeCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgIG5hbWUgPSBgbm9vcEFzeW5jJHtTdHJpbmcoKytzdWZmaXgpfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gbmFtZSA9PT0gJ25vb3BBc3luYycgPyBuYW1lIDogYG5vb3BBc3luYyBhcyAke25hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U3RhdGVtZW50ID0gZW5zdXJlTm9uTnVsbGFibGUoc291cmNlQ29kZS5hc3QuYm9keS5maW5kKChzdGF0ZW1lbnQpID0+ICEoJ2RpcmVjdGl2ZScgaW4gc3RhdGVtZW50ICYmIHR5cGVvZiBzdGF0ZW1lbnQuZGlyZWN0aXZlID09PSAnc3RyaW5nJykpKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0VG9rZW4gPSBzb3VyY2VDb2RlLmdldEZpcnN0VG9rZW4oZmlyc3RTdGF0ZW1lbnQpO1xuICAgICAgICAgICAgLy8gVGhlIHJlcG9ydGVkIGNhbGwgZ3VhcmFudGVlcyBhIG5vbi1lbXB0eSBwcm9ncmFtLCBpbmNsdWRpbmcgd2hlbiBhIGhhc2hiYW5nIHByZWNlZGVzIGl0LlxuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZShmaXJzdFRva2VuLCBgaW1wb3J0IHsgJHtiaW5kaW5nfSB9IGZyb20gJyR7RlVOQ1RJT05fTU9EVUxFfSc7XFxuYCksXG4gICAgICAgICAgICAgIGZpeGVyLnJlcGxhY2VUZXh0KG5vZGUsIGAke25hbWV9KClgKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICBub2RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ByZWZlciBgbm9vcEFzeW5jKClgIG92ZXIgYFByb21pc2UucmVzb2x2ZSgpYCdcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnVXNlIGBub29wQXN5bmMoKWAgaW5zdGVhZCBvZiBgUHJvbWlzZS5yZXNvbHZlKClgIGZvciBhc3luYyBuby1vcHMuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbidcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgYFByb21pc2VgIG9mIGEgYFByb21pc2UucmVzb2x2ZSgpYCBjYWxsIHJlc29sdmVzIHRvIGEgYmluZGluZyB0aGUgY29kZSBkZWNsYXJlcyBpdHNlbGYsXG4gKiBzdWNoIGFzIGEgbG9jYWwgdmFyaWFibGUsIGEgcGFyYW1ldGVyIG9yIGFuIGltcG9ydCwgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgZW5jbG9zaW5nIHRoZSBjYWxsLlxuICogQHBhcmFtIG5vZGUgLSBUaGUgYFByb21pc2UucmVzb2x2ZSgpYCBjYWxsIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYFByb21pc2VgIGlzIGJvdW5kIGJ5IGEgZGVjbGFyYXRpb24gaW4gdGhlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIGlzTG9jYWxseUJvdW5kUHJvbWlzZShzY29wZTogU2NvcGUuU2NvcGUsIG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlIGFzIFRTRVNUcmVlLk1lbWJlckV4cHJlc3Npb247XG4gIGNvbnN0IHJlZmVyZW5jZSA9IGVuc3VyZU5vbk51bGxhYmxlKHNjb3BlLnJlZmVyZW5jZXMuZmluZCgoY2FuZGlkYXRlKSA9PiB0b1RTRVNUcmVlTm9kZShjYW5kaWRhdGUuaWRlbnRpZmllcikgPT09IGNhbGxlZS5vYmplY3QpKTtcbiAgLy8gQSBnbG9iYWwgYFByb21pc2VgIHJlc29sdmVzIHRvIGEgdmFyaWFibGUgd2l0aG91dCBkZWZpbml0aW9ucywgb3IgdG8gbm90aGluZyB3aGVuIG5vIGdsb2JhbHMgYXJlIGNvbmZpZ3VyZWQuXG4gIHJldHVybiAocmVmZXJlbmNlLnJlc29sdmVkPy5kZWZzLmxlbmd0aCA/PyAwKSA+IDA7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjYWxsIGV4cHJlc3Npb24gaXMgYFByb21pc2UucmVzb2x2ZSgpYCB3aXRoIG5vIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gbm9kZSAtIFRoZSBjYWxsIGV4cHJlc3Npb24gbm9kZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBgUHJvbWlzZS5yZXNvbHZlKClgIHdpdGggbm8gYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBpc1Byb21pc2VSZXNvbHZlV2l0aE5vQXJndW1lbnRzKG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZW51bS1jb21wYXJpc29uIC0tIEFTVCBub2RlIHR5cGUgc3RyaW5nIGxpdGVyYWxzIG1hdGNoIHRoZSBUU0VTVHJlZSBlbnVtIHZhbHVlcy4gKi9cbiAgcmV0dXJuIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICYmIGNhbGxlZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbidcbiAgICAmJiBjYWxsZWUub2JqZWN0LnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJiBjYWxsZWUub2JqZWN0Lm5hbWUgPT09ICdQcm9taXNlJ1xuICAgICYmIGNhbGxlZS5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicgJiYgY2FsbGVlLnByb3BlcnR5Lm5hbWUgPT09ICdyZXNvbHZlJztcbiAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWVudW0tY29tcGFyaXNvbiAtLSBBU1Qgbm9kZSB0eXBlIHN0cmluZyBsaXRlcmFscyBtYXRjaCB0aGUgVFNFU1RyZWUgZW51bSB2YWx1ZXMuICovXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsc0JBQXNCO0FBRS9CLFNBQVMsc0JBQXNCO0FBRS9CLE1BQU0sa0JBQWtCO0FBSWpCLE1BQU0sYUFBYTtBQUtuQixNQUFNLGtCQUFtQztBQUFBLEVBQzlDLE9BQU8sU0FBUztBQUNkLFdBQU87QUFBQSxNQUNMLGlC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
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
+
(function () {
|
|
6
|
+
function ensureBrowserProcess() {
|
|
7
|
+
const browserProcess = {
|
|
8
|
+
browser: true,
|
|
9
|
+
cwd() {
|
|
10
|
+
return '/';
|
|
11
|
+
},
|
|
12
|
+
env: {},
|
|
13
|
+
platform: 'android'
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const existingProcess = globalThis.process;
|
|
17
|
+
|
|
18
|
+
if (!existingProcess) {
|
|
19
|
+
globalThis.process = browserProcess;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (existingProcess.versions?.node) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const existingProcessRecord = existingProcess;
|
|
28
|
+
|
|
29
|
+
for (const [key, value] of Object.entries(browserProcess)) {
|
|
30
|
+
existingProcessRecord[key] ??= value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
existingProcessRecord['browser'] = true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
ensureBrowserProcess();
|
|
37
|
+
})();
|
|
38
|
+
|
|
39
|
+
import { AST_NODE_TYPES } from "@typescript-eslint/utils";
|
|
40
|
+
import { toTSESTreeNode } from "./ts-estree-node.mjs";
|
|
41
|
+
const readonlyMemberArrays = {
|
|
42
|
+
create(context) {
|
|
43
|
+
function check(node, property) {
|
|
44
|
+
if (node.type === AST_NODE_TYPES.TSUnionType || node.type === AST_NODE_TYPES.TSIntersectionType) {
|
|
45
|
+
for (const member of node.types) {
|
|
46
|
+
check(member, property);
|
|
47
|
+
}
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (node.type === AST_NODE_TYPES.TSArrayType) {
|
|
51
|
+
context.report({
|
|
52
|
+
messageId: "readonly",
|
|
53
|
+
node,
|
|
54
|
+
suggest: [{ fix: (fixer) => fixer.insertTextBefore(node, "readonly "), messageId: "review" }]
|
|
55
|
+
});
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (node.type !== AST_NODE_TYPES.TSTypeReference || node.typeName.type !== AST_NODE_TYPES.Identifier || node.typeName.name !== "Array" || node.typeArguments?.params.length !== 1) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
let scope = context.sourceCode.getScope(property);
|
|
62
|
+
let canSuggest = true;
|
|
63
|
+
while (scope) {
|
|
64
|
+
if (scope.set.get("Array")?.defs.length) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (scope.set.get("ReadonlyArray")?.defs.length) {
|
|
68
|
+
canSuggest = false;
|
|
69
|
+
}
|
|
70
|
+
scope = scope.upper;
|
|
71
|
+
}
|
|
72
|
+
context.report({
|
|
73
|
+
messageId: "readonly",
|
|
74
|
+
node,
|
|
75
|
+
suggest: canSuggest ? [{
|
|
76
|
+
fix: (fixer) => fixer.replaceTextRange(node.typeName.range, "ReadonlyArray"),
|
|
77
|
+
messageId: "review"
|
|
78
|
+
}] : []
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function visitProperty(node) {
|
|
82
|
+
const property = toTSESTreeNode(node);
|
|
83
|
+
if (property.typeAnnotation) {
|
|
84
|
+
check(property.typeAnnotation.typeAnnotation, node);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
"TSInterfaceDeclaration TSPropertySignature": visitProperty,
|
|
89
|
+
"TSTypeAliasDeclaration TSPropertySignature": visitProperty
|
|
90
|
+
};
|
|
91
|
+
},
|
|
92
|
+
meta: {
|
|
93
|
+
docs: { description: "Require readonly member arrays as an explicit collection immutability policy" },
|
|
94
|
+
hasSuggestions: true,
|
|
95
|
+
messages: {
|
|
96
|
+
readonly: "Use a readonly member array, or disable this rule with a reason for mutation.",
|
|
97
|
+
review: "Make this array readonly after reviewing mutations and assignability."
|
|
98
|
+
},
|
|
99
|
+
schema: [],
|
|
100
|
+
type: "suggestion"
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
export {
|
|
104
|
+
readonlyMemberArrays
|
|
105
|
+
};
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9yZWFkb25seS1tZW1iZXItYXJyYXlzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXF1aXJlcyByZWFkb25seSBhcnJheSB0eXBlcyBvbiBpbnRlcmZhY2UgYW5kIG9iamVjdCB0eXBlIGFsaWFzIHByb3BlcnRpZXMuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE9wdC1pbiBhcnJheSBpbW11dGFiaWxpdHkgcG9saWN5LCBpbmRlcGVuZGVudCBvZiByZWFkb25seSBwcm9wZXJ0eSByZWZlcmVuY2VzLlxuICovXG5leHBvcnQgY29uc3QgcmVhZG9ubHlNZW1iZXJBcnJheXM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVjayhub2RlOiBUU0VTVHJlZS5UeXBlTm9kZSwgcHJvcGVydHk6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNVbmlvblR5cGUgfHwgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU0ludGVyc2VjdGlvblR5cGUpIHtcbiAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2Ygbm9kZS50eXBlcykge1xuICAgICAgICAgIGNoZWNrKG1lbWJlciwgcHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLlRTQXJyYXlUeXBlKSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBtZXNzYWdlSWQ6ICdyZWFkb25seScsXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBzdWdnZXN0OiBbeyBmaXg6IChmaXhlcik6IFJ1bGUuRml4ID0+IGZpeGVyLmluc2VydFRleHRCZWZvcmUobm9kZSwgJ3JlYWRvbmx5ICcpLCBtZXNzYWdlSWQ6ICdyZXZpZXcnIH1dXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuVFNUeXBlUmVmZXJlbmNlXG4gICAgICAgIHx8IG5vZGUudHlwZU5hbWUudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllclxuICAgICAgICB8fCBub2RlLnR5cGVOYW1lLm5hbWUgIT09ICdBcnJheSdcbiAgICAgICAgfHwgbm9kZS50eXBlQXJndW1lbnRzPy5wYXJhbXMubGVuZ3RoICE9PSAxXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHNjb3BlOiBudWxsIHwgUmV0dXJuVHlwZTx0eXBlb2YgY29udGV4dC5zb3VyY2VDb2RlLmdldFNjb3BlPiA9IGNvbnRleHQuc291cmNlQ29kZS5nZXRTY29wZShwcm9wZXJ0eSk7XG4gICAgICBsZXQgY2FuU3VnZ2VzdCA9IHRydWU7XG4gICAgICB3aGlsZSAoc2NvcGUpIHtcbiAgICAgICAgaWYgKHNjb3BlLnNldC5nZXQoJ0FycmF5Jyk/LmRlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzY29wZS5zZXQuZ2V0KCdSZWFkb25seUFycmF5Jyk/LmRlZnMubGVuZ3RoKSB7XG4gICAgICAgICAgY2FuU3VnZ2VzdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHNjb3BlID0gc2NvcGUudXBwZXI7XG4gICAgICB9XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG1lc3NhZ2VJZDogJ3JlYWRvbmx5JyxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgc3VnZ2VzdDogY2FuU3VnZ2VzdFxuICAgICAgICAgID8gW3tcbiAgICAgICAgICAgIGZpeDogKGZpeGVyKTogUnVsZS5GaXggPT4gZml4ZXIucmVwbGFjZVRleHRSYW5nZShub2RlLnR5cGVOYW1lLnJhbmdlLCAnUmVhZG9ubHlBcnJheScpLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiAncmV2aWV3J1xuICAgICAgICAgIH1dXG4gICAgICAgICAgOiBbXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmlzaXRQcm9wZXJ0eShub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gdG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuVFNQcm9wZXJ0eVNpZ25hdHVyZTtcbiAgICAgIGlmIChwcm9wZXJ0eS50eXBlQW5ub3RhdGlvbikge1xuICAgICAgICBjaGVjayhwcm9wZXJ0eS50eXBlQW5ub3RhdGlvbi50eXBlQW5ub3RhdGlvbiwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICdUU0ludGVyZmFjZURlY2xhcmF0aW9uIFRTUHJvcGVydHlTaWduYXR1cmUnOiB2aXNpdFByb3BlcnR5LFxuICAgICAgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24gVFNQcm9wZXJ0eVNpZ25hdHVyZSc6IHZpc2l0UHJvcGVydHlcbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogeyBkZXNjcmlwdGlvbjogJ1JlcXVpcmUgcmVhZG9ubHkgbWVtYmVyIGFycmF5cyBhcyBhbiBleHBsaWNpdCBjb2xsZWN0aW9uIGltbXV0YWJpbGl0eSBwb2xpY3knIH0sXG4gICAgaGFzU3VnZ2VzdGlvbnM6IHRydWUsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIHJlYWRvbmx5OiAnVXNlIGEgcmVhZG9ubHkgbWVtYmVyIGFycmF5LCBvciBkaXNhYmxlIHRoaXMgcnVsZSB3aXRoIGEgcmVhc29uIGZvciBtdXRhdGlvbi4nLFxuICAgICAgcmV2aWV3OiAnTWFrZSB0aGlzIGFycmF5IHJlYWRvbmx5IGFmdGVyIHJldmlld2luZyBtdXRhdGlvbnMgYW5kIGFzc2lnbmFiaWxpdHkuJ1xuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbidcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxTQUFTLHNCQUFzQjtBQUUvQixTQUFTLHNCQUFzQjtBQUt4QixNQUFNLHVCQUF3QztBQUFBLEVBQ25ELE9BQU8sU0FBUztBQUNkLGFBQVMsTUFBTSxNQUF5QixVQUEyQjtBQUNqRSxVQUFJLEtBQUssU0FBUyxlQUFlLGVBQWUsS0FBSyxTQUFTLGVBQWUsb0JBQW9CO0FBQy9GLG1CQUFXLFVBQVUsS0FBSyxPQUFPO0FBQy9CLGdCQUFNLFFBQVEsUUFBUTtBQUFBLFFBQ3hCO0FBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxLQUFLLFNBQVMsZUFBZSxhQUFhO0FBQzVDLGdCQUFRLE9BQU87QUFBQSxVQUNiLFdBQVc7QUFBQSxVQUNYO0FBQUEsVUFDQSxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsVUFBb0IsTUFBTSxpQkFBaUIsTUFBTSxXQUFXLEdBQUcsV0FBVyxTQUFTLENBQUM7QUFBQSxRQUN4RyxDQUFDO0FBQ0Q7QUFBQSxNQUNGO0FBQ0EsVUFDRSxLQUFLLFNBQVMsZUFBZSxtQkFDMUIsS0FBSyxTQUFTLFNBQVMsZUFBZSxjQUN0QyxLQUFLLFNBQVMsU0FBUyxXQUN2QixLQUFLLGVBQWUsT0FBTyxXQUFXLEdBQ3pDO0FBQ0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxRQUErRCxRQUFRLFdBQVcsU0FBUyxRQUFRO0FBQ3ZHLFVBQUksYUFBYTtBQUNqQixhQUFPLE9BQU87QUFDWixZQUFJLE1BQU0sSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7QUFDdkM7QUFBQSxRQUNGO0FBQ0EsWUFBSSxNQUFNLElBQUksSUFBSSxlQUFlLEdBQUcsS0FBSyxRQUFRO0FBQy9DLHVCQUFhO0FBQUEsUUFDZjtBQUNBLGdCQUFRLE1BQU07QUFBQSxNQUNoQjtBQUNBLGNBQVEsT0FBTztBQUFBLFFBQ2IsV0FBVztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVMsYUFDTCxDQUFDO0FBQUEsVUFDRCxLQUFLLENBQUMsVUFBb0IsTUFBTSxpQkFBaUIsS0FBSyxTQUFTLE9BQU8sZUFBZTtBQUFBLFVBQ3JGLFdBQVc7QUFBQSxRQUNiLENBQUMsSUFDQyxDQUFDO0FBQUEsTUFDUCxDQUFDO0FBQUEsSUFDSDtBQUVBLGFBQVMsY0FBYyxNQUF1QjtBQUM1QyxZQUFNLFdBQVcsZUFBZSxJQUFJO0FBQ3BDLFVBQUksU0FBUyxnQkFBZ0I7QUFDM0IsY0FBTSxTQUFTLGVBQWUsZ0JBQWdCLElBQUk7QUFBQSxNQUNwRDtBQUFBLElBQ0Y7QUFFQSxXQUFPO0FBQUEsTUFDTCw4Q0FBOEM7QUFBQSxNQUM5Qyw4Q0FBOEM7QUFBQSxJQUNoRDtBQUFBLEVBQ0Y7QUFBQSxFQUNBLE1BQU07QUFBQSxJQUNKLE1BQU0sRUFBRSxhQUFhLCtFQUErRTtBQUFBLElBQ3BHLGdCQUFnQjtBQUFBLElBQ2hCLFVBQVU7QUFBQSxNQUNSLFVBQVU7QUFBQSxNQUNWLFFBQVE7QUFBQSxJQUNWO0FBQUEsSUFDQSxRQUFRLENBQUM7QUFBQSxJQUNULE1BQU07QUFBQSxFQUNSO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -48,6 +48,7 @@ import {
|
|
|
48
48
|
matchesGlob,
|
|
49
49
|
relative
|
|
50
50
|
} from "node:path";
|
|
51
|
+
import { getBulkConcurrency } from "../bulk-concurrency.mjs";
|
|
51
52
|
import { getNonIgnoredFiles } from "../git.mjs";
|
|
52
53
|
import { resolveToolCommand } from "../package-manager.mjs";
|
|
53
54
|
import { RepoPaths } from "../repo-paths.mjs";
|
|
@@ -92,7 +93,10 @@ async function lint(options) {
|
|
|
92
93
|
}
|
|
93
94
|
await execFromRoot([
|
|
94
95
|
...resolveToolCommand({ tool: "linkinator" }),
|
|
95
|
-
"--
|
|
96
|
+
"--concurrency",
|
|
97
|
+
String(getBulkConcurrency(LINK_CHECK_CONCURRENCY)),
|
|
98
|
+
"--timeout",
|
|
99
|
+
String(LINK_CHECK_TIMEOUT_IN_MILLISECONDS),
|
|
96
100
|
"--retry-errors",
|
|
97
101
|
"--retry-errors-count",
|
|
98
102
|
"3",
|
|
@@ -108,6 +112,8 @@ async function lint(options) {
|
|
|
108
112
|
]);
|
|
109
113
|
}
|
|
110
114
|
const MARKDOWN_PATHSPEC = "*.md";
|
|
115
|
+
const LINK_CHECK_CONCURRENCY = 100;
|
|
116
|
+
const LINK_CHECK_TIMEOUT_IN_MILLISECONDS = 3e4;
|
|
111
117
|
async function getMarkdownFiles() {
|
|
112
118
|
const nonIgnoredFiles = await getNonIgnoredFiles({ patterns: [MARKDOWN_PATHSPEC] });
|
|
113
119
|
return nonIgnoredFiles ? nonIgnoredFiles.filter((path) => !checkIsInNodeModules(path)) : await toArray(glob(["**/*.md"], {
|
|
@@ -121,4 +127,4 @@ async function getMarkdownFiles() {
|
|
|
121
127
|
export {
|
|
122
128
|
lint
|
|
123
129
|
};
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2Jcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgZ2V0Tm9uSWdub3JlZEZpbGVzIH0gZnJvbSAnLi4vZ2l0LnRzJztcbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQgeyBSZXBvUGF0aHMgfSBmcm9tICcuLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQge1xuICBjaGVja0lzSW5Ob2RlTW9kdWxlcyxcbiAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG59IGZyb20gJy4vbWFya2Rvd25saW50LWlnbm9yZXMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3BpZWQgdG8gdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lLiBXaXRob3V0IGl0LFxuICAgKiBgbWFya2Rvd25saW50LWNsaTJgIHJ1bnMgd2l0aCBpdHMgb3duIGRlZmF1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBHbG9icywgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyLCBvZiBtYXJrZG93biBmaWxlcyB0byBsZWF2ZSBvdXQgb2YgdGhlIGBsaW5raW5hdG9yYCBwYXNzIG9ubHk7XG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgc3RpbGwgbGludHMgdGhlbS5cbiAgICpcbiAgICogRm9yIGEgZG9jdW1lbnRhdGlvbiBzaXRlIHdob3NlIHBhZ2VzIGxpbmsgdG8gZWFjaCBvdGhlciBiYXNlLWFic29sdXRlbHkgKGAvPHNpdGUtYmFzZT4vZ3VpZGVzLy4uLmApOiB0aG9zZVxuICAgKiBsaW5rcyByZXNvbHZlIG9ubHkgYWdhaW5zdCB0aGUgQlVJTFQgc2l0ZSwgc28gYGxpbmtpbmF0b3JgIHJlcG9ydHMgZWFjaCBvbmUgYXMgYSA0MDQsIGFuZCB0aGUgc2l0ZSdzIG93blxuICAgKiBidWlsZCBpcyB3aGF0IGNoZWNrcyB0aGVtLlxuICAgKlxuICAgKiBAZXhhbXBsZSBgWydkb2NzLyoqJ11gXG4gICAqL1xuICByZWFkb25seSBsaW5rQ2hlY2tFeGNsdWRlR2xvYnM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBsaW50LiBJZiBvbWl0dGVkLCBsaW50cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExpbnQgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiB1c2luZyBgbWFya2Rvd25saW50LWNsaTJgIGFuZCBgbGlua2luYXRvcmAuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIExpbnRPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnQob3B0aW9ucz86IExpbnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoLCBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMgPSBbXSwgcGF0aHMsIHNob3VsZEZpeCA9IGZhbHNlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCBjb25maWdGaWxlcyA9IFtcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0pzb25jLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0NqcyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb24sXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1lhbWwsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1ltbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdNanNcbiAgXTtcblxuICBjb25zdCBkb2VzQ29uZmlnRmlsZUV4aXN0ID0gY29uZmlnRmlsZXMuc29tZSgoY29uZmlnRmlsZSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBjb25maWdGaWxlIH0pO1xuICAgIHJldHVybiBleGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKTtcbiAgfSk7XG5cbiAgaWYgKCFkb2VzQ29uZmlnRmlsZUV4aXN0ICYmIGRlZmF1bHRDb25maWdGaWxlUGF0aCkge1xuICAgIGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludCcpKCdtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcuLi4nKTtcbiAgICBhd2FpdCBjcChkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogYmFzZW5hbWUoZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB9KSk7XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaGVzIGFyZSBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXJdO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdtYXJrZG93bmxpbnQtY2xpMicgfSksIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XSk7XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcigpID8/IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG1kRmlsZXMgPSBwYXRocz8ubGVuZ3RoXG4gICAgPyBwYXRocy5tYXAoKHApID0+IHJlbGF0aXZlKHJvb3RGb2xkZXIsIHApLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpIHx8IHApXG4gICAgOiBhd2FpdCBnZXRNYXJrZG93bkZpbGVzKCk7XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGNvbnN0IGxpbmtDaGVja0ZpbGVzID0gbWRGaWxlcy5maWx0ZXIoKG1kRmlsZSkgPT4gbGlua0NoZWNrRXhjbHVkZUdsb2JzLmV2ZXJ5KChleGNsdWRlR2xvYikgPT4gIW1hdGNoZXNHbG9iKG1kRmlsZSwgZXhjbHVkZUdsb2IpKSk7XG4gIC8vIGBsaW5raW5hdG9yYCB3aXRoIG5vIExPQ0FUSU9OIHByaW50cyBpdHMgdXNhZ2UgYW5kIGV4aXRzIG5vbi16ZXJvLCBzbyBhIGxpc3QgZW1wdGllZCBieSB0aGUgZXhjbHVzaW9ucyBoYXMgbm90aGluZyB0byBjaGVjay5cbiAgaWYgKGxpbmtDaGVja0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBBIGhvc3QgdGhhdCByYXRlLWxpbWl0cyB0aGUgcnVubmVyIChmb3J1bS5vYnNpZGlhbi5tZCBhbnN3ZXJzIGEgQ0kgYnVyc3Qgd2l0aCA0MjkpIGlzIHJldHJpZWQgd2l0aCBhIGppdHRlciBvZiB1cCB0b1xuICAvLyA1IHMsIHdoaWNoIGBsaW5raW5hdG9yYCByZWFkcyBhcyBNSUxMSVNFQ09ORFMsIHNvIHRoZSByZXRyaWVzIGRvIG5vdCBhbGwgbGFuZCBpbiB0aGUgc2FtZSBpbnN0YW50LiBBIGxpbmsgc3RpbGxcbiAgLy8gYW5zd2VyaW5nIDQyOSBvbmNlIHRoZXkgYXJlIHNwZW50IGlzIGEgd2FybmluZywgbm90IGEgZmFpbHVyZTogYSByYXRlIGxpbWl0IHNheXMgbm90aGluZyBhYm91dCB3aGV0aGVyIHRoZSBsaW5rIGV4aXN0cy5cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnbGlua2luYXRvcicgfSksXG4gICAgJy0tcmV0cnknLFxuICAgICctLXJldHJ5LWVycm9ycycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWNvdW50JyxcbiAgICAnMycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWppdHRlcicsXG4gICAgJzUwMDAnLFxuICAgICctLXN0YXR1cy1jb2RlJyxcbiAgICAnNDI5Ondhcm4nLFxuICAgICctLXVybC1yZXdyaXRlLXNlYXJjaCcsXG4gICAgU3RyaW5nLnJhd2BodHRwczovL3d3d1xcLm5wbWpzXFwuY29tL3BhY2thZ2UvYCxcbiAgICAnLS11cmwtcmV3cml0ZS1yZXBsYWNlJyxcbiAgICAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJyxcbiAgICB7IGJhdGNoZWRBcmd1bWVudHM6IGxpbmtDaGVja0ZpbGVzIH1cbiAgXSk7XG59XG5cbi8qKlxuICogVGhlIGdpdCBwYXRoc3BlYyBtYXRjaGluZyBldmVyeSBtYXJrZG93biBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBhdCBhbnkgZGVwdGguXG4gKi9cbmNvbnN0IE1BUktET1dOX1BBVEhTUEVDID0gJyoubWQnO1xuXG4vKipcbiAqIExpc3RzIHRoZSBtYXJrZG93biBmaWxlcyB0byBoYW5kIHRvIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBgbGlua2luYXRvcmAgdGFrZXMgYSBmaWxlIGxpc3QgcmF0aGVyIHRoYW4gYW4gaWdub3JlIGNvbmZpZ3VyYXRpb24sIHNvIHRoZSBnaXRpZ25vcmVkIGZpbGVzIGhhdmUgdG8gYmVcbiAqIGRyb3BwZWQgYmVmb3JlIGl0IGlzIGludm9rZWQuIEdpdCBpdHNlbGYgYW5zd2VycyB0aGF0IChuZXN0ZWQgaWdub3JlIGZpbGVzLCBgIWAgbmVnYXRpb25zIGFuZCBhbGwpOyB0aGVcbiAqIGhhbmQtbWFpbnRhaW5lZCBnbG9iIGV4Y2x1c2lvbnMgYmVsb3cgYXJlIG9ubHkgdGhlIGZhbGxiYWNrIGZvciBhIGNoZWNrb3V0IHdpdGhvdXQgZ2l0LCBhbmQgdGhleSBhcmUgdGhlXG4gKiB2ZXJ5IGxpc3RzIHRoaXMgaW5kaXJlY3Rpb24gZXhpc3RzIHRvIHN0b3AgZnJvbSBkcmlmdGluZy5cbiAqXG4gKiBUaGUgYG5vZGVfbW9kdWxlc2AgZmlsdGVyIGlzIGFwcGxpZWQgdG8gdGhlIGdpdC1kZXJpdmVkIGxpc3QgdG9vLCBhbmQgZGVsaWJlcmF0ZWx5IHNvOiBnaXQgb25seSBza2lwc1xuICogd2hhdCB0aGUgcmVwb3NpdG9yeSBhc2tlZCBpdCB0byBza2lwLCBhbmQgYSByZXBvc2l0b3J5IGNhbiBkZWxpYmVyYXRlbHkgVFJBQ0sgYSB2ZW5kb3JlZCBgbm9kZV9tb2R1bGVzYFxuICogdHJlZS4gVGhhdCBpcyB0aGUgb25lIGV4Y2x1c2lvbiBgLmdpdGlnbm9yZWAgY2Fubm90IGFuc3dlciDigJQgc2VlIGBtYXJrZG93bmxpbnQtaWdub3Jlcy50c2AuIEFwcGx5aW5nIGl0XG4gKiBoZXJlIGtlZXBzIGBsaW5raW5hdG9yYCBpbiBzdGVwIHdpdGggdGhlIG1hcmtkb3dubGludCBoYWxmLCB3aGljaCBpZ25vcmVzIHRoZSBzYW1lIHBhdGhzIGJ5IGdsb2IuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBtYXJrZG93biBmaWxlIHBhdGhzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE1hcmtkb3duRmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBub25JZ25vcmVkRmlsZXMgPSBhd2FpdCBnZXROb25JZ25vcmVkRmlsZXMoeyBwYXR0ZXJuczogW01BUktET1dOX1BBVEhTUEVDXSB9KTtcbiAgcmV0dXJuIG5vbklnbm9yZWRGaWxlc1xuICAgID8gbm9uSWdub3JlZEZpbGVzLmZpbHRlcigocGF0aCkgPT4gIWNoZWNrSXNJbk5vZGVNb2R1bGVzKHBhdGgpKVxuICAgIDogKGF3YWl0IHRvQXJyYXkoZ2xvYihbJyoqLyoubWQnXSwge1xuICAgICAgZXhjbHVkZTogW1xuICAgICAgICAnLmdpdC8qKicsXG4gICAgICAgICdkaXN0LyoqJyxcbiAgICAgICAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG4gICAgICBdXG4gICAgfSkpKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNQSxTQUFTLGVBQWU7QUFDeEIsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsaUJBQWlCO0FBQzFCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBMENQLGVBQXNCLEtBQUssU0FBc0M7QUFDL0QsUUFBTSxFQUFFLHVCQUF1Qix3QkFBd0IsQ0FBQyxHQUFHLE9BQU8sWUFBWSxNQUFNLElBQUksV0FBVyxDQUFDO0FBQ3BHLFFBQU0sY0FBYztBQUFBLElBQ2xCLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxFQUNaO0FBRUEsUUFBTSxzQkFBc0IsWUFBWSxLQUFLLENBQUMsZUFBZTtBQUMzRCxVQUFNLGlCQUFpQix3QkFBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRSxXQUFPLFdBQVcsY0FBYztBQUFBLEVBQ2xDLENBQUM7QUFFRCxNQUFJLENBQUMsdUJBQXVCLHVCQUF1QjtBQUNqRCxtQkFBZSxtQkFBbUIsRUFBRSx1RUFBdUU7QUFDM0csVUFBTSxHQUFHLHVCQUF1Qix3QkFBd0IsRUFBRSxNQUFNLFNBQVMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFDcEc7QUFHQSxRQUFNLFVBQVUsT0FBTyxTQUFTLFFBQVEsQ0FBQyxVQUFVLGFBQWE7QUFFaEUsUUFBTSxhQUFhLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDLEdBQUcsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUd6SSxRQUFNLGFBQWEsY0FBYyxLQUFLLFFBQVEsSUFBSTtBQUNsRCxRQUFNLFVBQVUsT0FBTyxTQUNuQixNQUFNLElBQUksQ0FBQyxNQUFNLFNBQVMsWUFBWSxDQUFDLEVBQUUsV0FBVyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQ25FLE1BQU0saUJBQWlCO0FBRTNCLFFBQU0saUJBQWlCLFFBQVEsT0FBTyxDQUFDLFdBQVcsc0JBQXNCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLFFBQVEsV0FBVyxDQUFDLENBQUM7QUFFakksTUFBSSxlQUFlLFdBQVcsR0FBRztBQUMvQjtBQUFBLEVBQ0Y7QUFJQSxRQUFNLGFBQWE7QUFBQSxJQUNqQixHQUFHLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQUEsSUFDNUM7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQSxFQUFFLGtCQUFrQixlQUFlO0FBQUEsRUFDckMsQ0FBQztBQUNIO0FBS0EsTUFBTSxvQkFBb0I7QUFpQjFCLGVBQWUsbUJBQXNDO0FBQ25ELFFBQU0sa0JBQWtCLE1BQU0sbUJBQW1CLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDbEYsU0FBTyxrQkFDSCxnQkFBZ0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQzNELE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHO0FBQUEsSUFDakMsU0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUNOOyIsIm5hbWVzIjpbXX0=
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2Jcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgZ2V0QnVsa0NvbmN1cnJlbmN5IH0gZnJvbSAnLi4vYnVsay1jb25jdXJyZW5jeS50cyc7XG5pbXBvcnQgeyBnZXROb25JZ25vcmVkRmlsZXMgfSBmcm9tICcuLi9naXQudHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi4vcGFja2FnZS1tYW5hZ2VyLnRzJztcbmltcG9ydCB7IFJlcG9QYXRocyB9IGZyb20gJy4uL3JlcG8tcGF0aHMudHMnO1xuaW1wb3J0IHtcbiAgZXhlY0Zyb21Sb290LFxuICBnZXRSb290Rm9sZGVyLFxuICByZXNvbHZlUGF0aEZyb21Sb290U2FmZVxufSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7XG4gIGNoZWNrSXNJbk5vZGVNb2R1bGVzLFxuICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0Jcbn0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBsaW50fSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBmaWxlIGNvcGllZCB0byB0aGUgcHJvamVjdCByb290IHdoZW4gdGhlIHByb2plY3QgaGFzIG5vbmUuIFdpdGhvdXQgaXQsXG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgcnVucyB3aXRoIGl0cyBvd24gZGVmYXVsdHMuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Q29uZmlnRmlsZVBhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEdsb2JzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIsIG9mIG1hcmtkb3duIGZpbGVzIHRvIGxlYXZlIG91dCBvZiB0aGUgYGxpbmtpbmF0b3JgIHBhc3Mgb25seTtcbiAgICogYG1hcmtkb3dubGludC1jbGkyYCBzdGlsbCBsaW50cyB0aGVtLlxuICAgKlxuICAgKiBGb3IgYSBkb2N1bWVudGF0aW9uIHNpdGUgd2hvc2UgcGFnZXMgbGluayB0byBlYWNoIG90aGVyIGJhc2UtYWJzb2x1dGVseSAoYC88c2l0ZS1iYXNlPi9ndWlkZXMvLi4uYCk6IHRob3NlXG4gICAqIGxpbmtzIHJlc29sdmUgb25seSBhZ2FpbnN0IHRoZSBCVUlMVCBzaXRlLCBzbyBgbGlua2luYXRvcmAgcmVwb3J0cyBlYWNoIG9uZSBhcyBhIDQwNCwgYW5kIHRoZSBzaXRlJ3Mgb3duXG4gICAqIGJ1aWxkIGlzIHdoYXQgY2hlY2tzIHRoZW0uXG4gICAqXG4gICAqIEBleGFtcGxlIGBbJ2RvY3MvKionXWBcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtDaGVja0V4Y2x1ZGVHbG9icz86IHJlYWRvbmx5IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBmaWxlIHBhdGhzIHRvIGxpbnQuIElmIG9taXR0ZWQsIGxpbnRzIHRoZSBlbnRpcmUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZml4IGxpbnRpbmcgaXNzdWVzIGF1dG9tYXRpY2FsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEZpeD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSB7QGxpbmsgTGludE9wdGlvbnN9LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGludChvcHRpb25zPzogTGludE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIGxpbmtDaGVja0V4Y2x1ZGVHbG9icyA9IFtdLCBwYXRocywgc2hvdWxkRml4ID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG4gIGNvbnN0IGNvbmZpZ0ZpbGVzID0gW1xuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENsaTJDb25maWdZYW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnTWpzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdKc29uYyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbixcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnWW1sLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdDanMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ01qc1xuICBdO1xuXG4gIGNvbnN0IGRvZXNDb25maWdGaWxlRXhpc3QgPSBjb25maWdGaWxlcy5zb21lKChjb25maWdGaWxlKSA9PiB7XG4gICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSByZXNvbHZlUGF0aEZyb21Sb290U2FmZSh7IHBhdGg6IGNvbmZpZ0ZpbGUgfSk7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoY29uZmlnRmlsZVBhdGgpO1xuICB9KTtcblxuICBpZiAoIWRvZXNDb25maWdGaWxlRXhpc3QgJiYgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB7XG4gICAgZ2V0TGliRGVidWdnZXIoJ21hcmtkb3dubGludDpsaW50JykoJ21hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUgbm90IGZvdW5kLiBDcmVhdGluZyBkZWZhdWx0IGNvbmZpZy4uLicpO1xuICAgIGF3YWl0IGNwKGRlZmF1bHRDb25maWdGaWxlUGF0aCwgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBiYXNlbmFtZShkZWZhdWx0Q29uZmlnRmlsZVBhdGgpIH0pKTtcbiAgfVxuXG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBUaGUgcGF0aHMtcHJvdmlkZWQgYnJhbmNoZXMgYXJlIG9ubHkgZXhlcmNpc2VkIGJ5IGNvbnN1bWVyIHByb2plY3RzIHBhc3NpbmcgZmlsZSBsaXN0cy4gKi9cbiAgY29uc3QgdGFyZ2V0cyA9IHBhdGhzPy5sZW5ndGggPyBwYXRocyA6IFtSZXBvUGF0aHMuQ3VycmVudEZvbGRlcl07XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ21hcmtkb3dubGludC1jbGkyJyB9KSwgLi4uKHNob3VsZEZpeCA/IFsnLS1maXgnXSA6IFtdKSwgeyBiYXRjaGVkQXJndW1lbnRzOiB0YXJnZXRzIH1dKTtcblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaCBpcyBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHJvb3RGb2xkZXIgPSBnZXRSb290Rm9sZGVyKCkgPz8gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgbWRGaWxlcyA9IHBhdGhzPy5sZW5ndGhcbiAgICA/IHBhdGhzLm1hcCgocCkgPT4gcmVsYXRpdmUocm9vdEZvbGRlciwgcCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJykgfHwgcClcbiAgICA6IGF3YWl0IGdldE1hcmtkb3duRmlsZXMoKTtcbiAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgY29uc3QgbGlua0NoZWNrRmlsZXMgPSBtZEZpbGVzLmZpbHRlcigobWRGaWxlKSA9PiBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMuZXZlcnkoKGV4Y2x1ZGVHbG9iKSA9PiAhbWF0Y2hlc0dsb2IobWRGaWxlLCBleGNsdWRlR2xvYikpKTtcbiAgLy8gYGxpbmtpbmF0b3JgIHdpdGggbm8gTE9DQVRJT04gcHJpbnRzIGl0cyB1c2FnZSBhbmQgZXhpdHMgbm9uLXplcm8sIHNvIGEgbGlzdCBlbXB0aWVkIGJ5IHRoZSBleGNsdXNpb25zIGhhcyBub3RoaW5nIHRvIGNoZWNrLlxuICBpZiAobGlua0NoZWNrRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEVycm9yIHJldHJpZXMgdXNlIG1pbGxpc2Vjb25kIGppdHRlci4gT21pdCAtLXJldHJ5OiBpdHMgc2VwYXJhdGUgUmV0cnktQWZ0ZXIgbW9kZSBjYW4gc2xlZXAgZm9yIHRob3VzYW5kc1xuICAvLyBvZiBzZWNvbmRzIG9uIGEgNDI5IHdlIGFscmVhZHkgYWNjZXB0IGFzIGEgd2FybmluZy4gUmVxdWVzdCB0aW1lb3V0cyByZW1haW4gZXJyb3JzIGFuZCBrZWVwIHRoZWlyIHJldHJpZXMuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbXG4gICAgLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ2xpbmtpbmF0b3InIH0pLFxuICAgICctLWNvbmN1cnJlbmN5JyxcbiAgICBTdHJpbmcoZ2V0QnVsa0NvbmN1cnJlbmN5KExJTktfQ0hFQ0tfQ09OQ1VSUkVOQ1kpKSxcbiAgICAnLS10aW1lb3V0JyxcbiAgICBTdHJpbmcoTElOS19DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyksXG4gICAgJy0tcmV0cnktZXJyb3JzJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtY291bnQnLFxuICAgICczJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtaml0dGVyJyxcbiAgICAnNTAwMCcsXG4gICAgJy0tc3RhdHVzLWNvZGUnLFxuICAgICc0Mjk6d2FybicsXG4gICAgJy0tdXJsLXJld3JpdGUtc2VhcmNoJyxcbiAgICBTdHJpbmcucmF3YGh0dHBzOi8vd3d3XFwubnBtanNcXC5jb20vcGFja2FnZS9gLFxuICAgICctLXVybC1yZXdyaXRlLXJlcGxhY2UnLFxuICAgICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8nLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogbGlua0NoZWNrRmlsZXMgfVxuICBdKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2l0IHBhdGhzcGVjIG1hdGNoaW5nIGV2ZXJ5IG1hcmtkb3duIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIGF0IGFueSBkZXB0aC5cbiAqL1xuY29uc3QgTUFSS0RPV05fUEFUSFNQRUMgPSAnKi5tZCc7XG5jb25zdCBMSU5LX0NIRUNLX0NPTkNVUlJFTkNZID0gMTAwO1xuY29uc3QgTElOS19DSEVDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDMwXzAwMDtcblxuLyoqXG4gKiBMaXN0cyB0aGUgbWFya2Rvd24gZmlsZXMgdG8gaGFuZCB0byBgbGlua2luYXRvcmAuXG4gKlxuICogYGxpbmtpbmF0b3JgIHRha2VzIGEgZmlsZSBsaXN0IHJhdGhlciB0aGFuIGFuIGlnbm9yZSBjb25maWd1cmF0aW9uLCBzbyB0aGUgZ2l0aWdub3JlZCBmaWxlcyBoYXZlIHRvIGJlXG4gKiBkcm9wcGVkIGJlZm9yZSBpdCBpcyBpbnZva2VkLiBHaXQgaXRzZWxmIGFuc3dlcnMgdGhhdCAobmVzdGVkIGlnbm9yZSBmaWxlcywgYCFgIG5lZ2F0aW9ucyBhbmQgYWxsKTsgdGhlXG4gKiBoYW5kLW1haW50YWluZWQgZ2xvYiBleGNsdXNpb25zIGJlbG93IGFyZSBvbmx5IHRoZSBmYWxsYmFjayBmb3IgYSBjaGVja291dCB3aXRob3V0IGdpdCwgYW5kIHRoZXkgYXJlIHRoZVxuICogdmVyeSBsaXN0cyB0aGlzIGluZGlyZWN0aW9uIGV4aXN0cyB0byBzdG9wIGZyb20gZHJpZnRpbmcuXG4gKlxuICogVGhlIGBub2RlX21vZHVsZXNgIGZpbHRlciBpcyBhcHBsaWVkIHRvIHRoZSBnaXQtZGVyaXZlZCBsaXN0IHRvbywgYW5kIGRlbGliZXJhdGVseSBzbzogZ2l0IG9ubHkgc2tpcHNcbiAqIHdoYXQgdGhlIHJlcG9zaXRvcnkgYXNrZWQgaXQgdG8gc2tpcCwgYW5kIGEgcmVwb3NpdG9yeSBjYW4gZGVsaWJlcmF0ZWx5IFRSQUNLIGEgdmVuZG9yZWQgYG5vZGVfbW9kdWxlc2BcbiAqIHRyZWUuIFRoYXQgaXMgdGhlIG9uZSBleGNsdXNpb24gYC5naXRpZ25vcmVgIGNhbm5vdCBhbnN3ZXIg4oCUIHNlZSBgbWFya2Rvd25saW50LWlnbm9yZXMudHNgLiBBcHBseWluZyBpdFxuICogaGVyZSBrZWVwcyBgbGlua2luYXRvcmAgaW4gc3RlcCB3aXRoIHRoZSBtYXJrZG93bmxpbnQgaGFsZiwgd2hpY2ggaWdub3JlcyB0aGUgc2FtZSBwYXRocyBieSBnbG9iLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbWFya2Rvd24gZmlsZSBwYXRocywgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRNYXJrZG93bkZpbGVzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgbm9uSWdub3JlZEZpbGVzID0gYXdhaXQgZ2V0Tm9uSWdub3JlZEZpbGVzKHsgcGF0dGVybnM6IFtNQVJLRE9XTl9QQVRIU1BFQ10gfSk7XG4gIHJldHVybiBub25JZ25vcmVkRmlsZXNcbiAgICA/IG5vbklnbm9yZWRGaWxlcy5maWx0ZXIoKHBhdGgpID0+ICFjaGVja0lzSW5Ob2RlTW9kdWxlcyhwYXRoKSlcbiAgICA6IChhd2FpdCB0b0FycmF5KGdsb2IoWycqKi8qLm1kJ10sIHtcbiAgICAgIGV4Y2x1ZGU6IFtcbiAgICAgICAgJy5naXQvKionLFxuICAgICAgICAnZGlzdC8qKicsXG4gICAgICAgIE5PREVfTU9EVUxFU19JR05PUkVfR0xPQlxuICAgICAgXVxuICAgIH0pKSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsa0JBQWtCO0FBQzNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLGlCQUFpQjtBQUMxQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQTBDUCxlQUFzQixLQUFLLFNBQXNDO0FBQy9ELFFBQU0sRUFBRSx1QkFBdUIsd0JBQXdCLENBQUMsR0FBRyxPQUFPLFlBQVksTUFBTSxJQUFJLFdBQVcsQ0FBQztBQUNwRyxRQUFNLGNBQWM7QUFBQSxJQUNsQixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsSUFDVixVQUFVO0FBQUEsRUFDWjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxpQkFBaUIsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsV0FBTyxXQUFXLGNBQWM7QUFBQSxFQUNsQyxDQUFDO0FBRUQsTUFBSSxDQUFDLHVCQUF1Qix1QkFBdUI7QUFDakQsbUJBQWUsbUJBQW1CLEVBQUUsdUVBQXVFO0FBQzNHLFVBQU0sR0FBRyx1QkFBdUIsd0JBQXdCLEVBQUUsTUFBTSxTQUFTLHFCQUFxQixFQUFFLENBQUMsQ0FBQztBQUFBLEVBQ3BHO0FBR0EsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsVUFBVSxhQUFhO0FBRWhFLFFBQU0sYUFBYSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyxHQUFHLEdBQUksWUFBWSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUksRUFBRSxrQkFBa0IsUUFBUSxDQUFDLENBQUM7QUFHekksUUFBTSxhQUFhLGNBQWMsS0FBSyxRQUFRLElBQUk7QUFDbEQsUUFBTSxVQUFVLE9BQU8sU0FDbkIsTUFBTSxJQUFJLENBQUMsTUFBTSxTQUFTLFlBQVksQ0FBQyxFQUFFLFdBQVcsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUNuRSxNQUFNLGlCQUFpQjtBQUUzQixRQUFNLGlCQUFpQixRQUFRLE9BQU8sQ0FBQyxXQUFXLHNCQUFzQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxRQUFRLFdBQVcsQ0FBQyxDQUFDO0FBRWpJLE1BQUksZUFBZSxXQUFXLEdBQUc7QUFDL0I7QUFBQSxFQUNGO0FBR0EsUUFBTSxhQUFhO0FBQUEsSUFDakIsR0FBRyxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUFBLElBQzVDO0FBQUEsSUFDQSxPQUFPLG1CQUFtQixzQkFBc0IsQ0FBQztBQUFBLElBQ2pEO0FBQUEsSUFDQSxPQUFPLGtDQUFrQztBQUFBLElBQ3pDO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EsT0FBTztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsSUFDQSxFQUFFLGtCQUFrQixlQUFlO0FBQUEsRUFDckMsQ0FBQztBQUNIO0FBS0EsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSxxQ0FBcUM7QUFpQjNDLGVBQWUsbUJBQXNDO0FBQ25ELFFBQU0sa0JBQWtCLE1BQU0sbUJBQW1CLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDbEYsU0FBTyxrQkFDSCxnQkFBZ0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQzNELE1BQU0sUUFBUSxLQUFLLENBQUMsU0FBUyxHQUFHO0FBQUEsSUFDakMsU0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUNOOyIsIm5hbWVzIjpbXX0=
|