1 | import ts from 'typescript';
|
2 | import { body, syntaxKind } from './base';
|
3 | import * as node_ from './node';
|
4 | import * as utils from './utils';
|
5 | import * as variable from './variable';
|
6 | export function getStatements(node) {
|
7 | if (ts.isSourceFile(node) || ts.isCaseClause(node) || ts.isDefaultClause(node)) {
|
8 | return node.statements;
|
9 | }
|
10 | if (ts.isBlock(node)) {
|
11 | return node.statements;
|
12 | }
|
13 | let moduleBody = body.getBody(node);
|
14 | while (moduleBody !== undefined && moduleBody.statements == undefined) {
|
15 | moduleBody = body.getBody(moduleBody);
|
16 | }
|
17 | if (moduleBody === undefined) {
|
18 | throw new Error(`Could not find statements for ${syntaxKind.getSyntaxKindName(node.kind)}`);
|
19 | }
|
20 | return moduleBody.statements;
|
21 | }
|
22 | export function getClasses(node) {
|
23 | return getStatements(node).filter(ts.isClassDeclaration);
|
24 | }
|
25 | export function getClass(node, name) {
|
26 | return getClasses(node).find((value) => node_.getName(value) === name);
|
27 | }
|
28 | export function getClassOrThrow(node, name) {
|
29 | return utils.throwIfNullOrUndefined(getClass(node, name), 'class');
|
30 | }
|
31 | export function getInterfaces(node) {
|
32 | return getStatements(node).filter(ts.isInterfaceDeclaration);
|
33 | }
|
34 | export function getInterface(node, name) {
|
35 | return getInterfaces(node).find((value) => node_.getName(value) === name);
|
36 | }
|
37 | export function getInterfaceOrThrow(node, name) {
|
38 | return utils.throwIfNullOrUndefined(getInterface(node, name), 'interface');
|
39 | }
|
40 | export function getNamespaces(node) {
|
41 | return getStatements(node).filter(ts.isModuleDeclaration);
|
42 | }
|
43 | export function getNamespace(node, name) {
|
44 | return getNamespaces(node).find((value) => node_.getName(value) === name);
|
45 | }
|
46 | export function getNamespaceOrThrow(node, name) {
|
47 | return utils.throwIfNullOrUndefined(getNamespace(node, name), 'namespace');
|
48 | }
|
49 | export function getVariableStatements(node) {
|
50 | return getStatements(node).filter(ts.isVariableStatement);
|
51 | }
|
52 | export function getVariableDeclarations(node) {
|
53 | return getVariableStatements(node).reduce((acc, value) => acc.concat(variable.getDeclarations(variable.getDeclarationList(value))), []);
|
54 | }
|
55 | export function getVariableDeclaration(node, name) {
|
56 | return getVariableDeclarations(node).find((value) => node_.getName(value) === name);
|
57 | }
|
58 | export function getVariableDeclarationOrThrow(node, name) {
|
59 | return utils.throwIfNullOrUndefined(getVariableDeclaration(node, name), 'variable declaration');
|
60 | }
|
61 | export function getTypeAliases(node) {
|
62 | return getStatements(node).filter(ts.isTypeAliasDeclaration);
|
63 | }
|
64 | export function getTypeAlias(node, name) {
|
65 | return getTypeAliases(node).find((value) => node_.getName(value) === name);
|
66 | }
|
67 | export function getTypeAliasOrThrow(node, name) {
|
68 | return utils.throwIfNullOrUndefined(getTypeAlias(node, name), 'type alias');
|
69 | }
|
70 | export function getFunctions(node) {
|
71 | return getStatements(node).filter(ts.isFunctionDeclaration);
|
72 | }
|
73 | export function getFunction(node, name) {
|
74 | return getFunctions(node).find((value) => node_.getName(value) === name);
|
75 | }
|
76 | export function getFunctionOrThrow(node, name) {
|
77 | return utils.throwIfNullOrUndefined(getFunction(node, name), 'function');
|
78 | }
|
79 | export function getEnums(node) {
|
80 | return getStatements(node).filter(ts.isEnumDeclaration);
|
81 | }
|
82 | export function getEnum(node, name) {
|
83 | return getEnums(node).find((value) => node_.getName(value) === name);
|
84 | }
|
85 | export function getEnumOrThrow(node, name) {
|
86 | return utils.throwIfNullOrUndefined(getEnum(node, name), 'enum');
|
87 | }
|
88 | export function getLabel(node) {
|
89 | return utils.getValueOrUndefined(node.label);
|
90 | }
|
91 | export function getClauses(node) {
|
92 | return node.clauses;
|
93 | }
|
94 | export function getOnlyVariableDeclaration(node) {
|
95 | return utils.getValueOrUndefined(node.variableDeclaration);
|
96 | }
|
97 | export function getBlock(node) {
|
98 | return node.block;
|
99 | }
|
100 | export function getStatement(node) {
|
101 | return node.statement;
|
102 | }
|
103 | export function getInitializer(node) {
|
104 | return utils.getValueOrUndefined(node.initializer);
|
105 | }
|
106 | export function getCondition(node) {
|
107 | return utils.getValueOrUndefined(node.condition);
|
108 | }
|
109 | export function getIncrementor(node) {
|
110 | return utils.getValueOrUndefined(node.incrementor);
|
111 | }
|
112 | export function getThenStatement(node) {
|
113 | return node.thenStatement;
|
114 | }
|
115 | export function getElseStatement(node) {
|
116 | return utils.getValueOrUndefined(node.elseStatement);
|
117 | }
|
118 | export function getCaseBlock(node) {
|
119 | return node.caseBlock;
|
120 | }
|
121 | export function getCatchClause(node) {
|
122 | return utils.getValueOrUndefined(node.catchClause);
|
123 | }
|
124 | export function getTryBlock(node) {
|
125 | return node.tryBlock;
|
126 | }
|
127 | export function getFinallyBlock(node) {
|
128 | return utils.getValueOrUndefined(node.finallyBlock);
|
129 | }
|
130 |
|
131 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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RCxNQUFNLFVBQVUsY0FBYyxDQUM1QixJQUE2QztJQUU3QyxPQUFPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBcUI7SUFDaEQsT0FBTyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQXFCO0lBQ2xELE9BQU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQW9CO0lBQ25ELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQW9CO0lBQ25ELE9BQU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUF3QjtJQUNuRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsSUFBcUI7SUFDbEQsT0FBTyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQXFCO0lBQy9DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN2QixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFxQjtJQUNuRCxPQUFPLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsImZpbGUiOiJuZW8tb25lLXRzLXV0aWxzL3NyYy9zdGF0ZW1lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBib2R5LCBzeW50YXhLaW5kIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCAqIGFzIG5vZGVfIGZyb20gJy4vbm9kZSc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCAqIGFzIHZhcmlhYmxlIGZyb20gJy4vdmFyaWFibGUnO1xuXG5leHBvcnQgdHlwZSBTdGF0ZW1lbnRlZE5vZGUgPVxuICB8IHRzLkJsb2NrXG4gIHwgdHMuU291cmNlRmlsZVxuICB8IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb25cbiAgfCB0cy5Nb2R1bGVEZWNsYXJhdGlvblxuICB8IHRzLkZ1bmN0aW9uTGlrZURlY2xhcmF0aW9uXG4gIHwgdHMuQ2FzZUNsYXVzZVxuICB8IHRzLkRlZmF1bHRDbGF1c2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZW1lbnRzKG5vZGU6IFN0YXRlbWVudGVkTm9kZSk6IHJlYWRvbmx5IHRzLlN0YXRlbWVudFtdIHtcbiAgaWYgKHRzLmlzU291cmNlRmlsZShub2RlKSB8fCB0cy5pc0Nhc2VDbGF1c2Uobm9kZSkgfHwgdHMuaXNEZWZhdWx0Q2xhdXNlKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUuc3RhdGVtZW50cztcbiAgfVxuXG4gIGlmICh0cy5pc0Jsb2NrKG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUuc3RhdGVtZW50cztcbiAgfVxuXG4gIGxldCBtb2R1bGVCb2R5ID0gYm9keS5nZXRCb2R5KG5vZGUpO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1zdGF0ZW1lbnQgbm8tYW55XG4gIHdoaWxlIChtb2R1bGVCb2R5ICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZUJvZHkgYXMgYW55KS5zdGF0ZW1lbnRzID09IHVuZGVmaW5lZCkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgICBtb2R1bGVCb2R5ID0gYm9keS5nZXRCb2R5KG1vZHVsZUJvZHkgYXMgYW55KTtcbiAgfVxuXG4gIGlmIChtb2R1bGVCb2R5ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHN0YXRlbWVudHMgZm9yICR7c3ludGF4S2luZC5nZXRTeW50YXhLaW5kTmFtZShub2RlLmtpbmQpfWApO1xuICB9XG5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuICByZXR1cm4gKG1vZHVsZUJvZHkgYXMgYW55KS5zdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3Nlcyhub2RlOiBTdGF0ZW1lbnRlZE5vZGUpOiByZWFkb25seSB0cy5DbGFzc0RlY2xhcmF0aW9uW10ge1xuICByZXR1cm4gZ2V0U3RhdGVtZW50cyhub2RlKS5maWx0ZXIodHMuaXNDbGFzc0RlY2xhcmF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXNzKG5vZGU6IFN0YXRlbWVudGVkTm9kZSwgbmFtZTogc3RyaW5nKTogdHMuQ2xhc3NEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRDbGFzc2VzKG5vZGUpLmZpbmQoKHZhbHVlKSA9PiBub2RlXy5nZXROYW1lKHZhbHVlKSA9PT0gbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGFzc09yVGhyb3cobm9kZTogU3RhdGVtZW50ZWROb2RlLCBuYW1lOiBzdHJpbmcpOiB0cy5DbGFzc0RlY2xhcmF0aW9uIHtcbiAgcmV0dXJuIHV0aWxzLnRocm93SWZOdWxsT3JVbmRlZmluZWQoZ2V0Q2xhc3Mobm9kZSwgbmFtZSksICdjbGFzcycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJmYWNlcyhub2RlOiBTdGF0ZW1lbnRlZE5vZGUpOiByZWFkb25seSB0cy5JbnRlcmZhY2VEZWNsYXJhdGlvbltdIHtcbiAgcmV0dXJuIGdldFN0YXRlbWVudHMobm9kZSkuZmlsdGVyKHRzLmlzSW50ZXJmYWNlRGVjbGFyYXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJmYWNlKG5vZGU6IFN0YXRlbWVudGVkTm9kZSwgbmFtZTogc3RyaW5nKTogdHMuSW50ZXJmYWNlRGVjbGFyYXRpb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2V0SW50ZXJmYWNlcyhub2RlKS5maW5kKCh2YWx1ZSkgPT4gbm9kZV8uZ2V0TmFtZSh2YWx1ZSkgPT09IG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW50ZXJmYWNlT3JUaHJvdyhub2RlOiBTdGF0ZW1lbnRlZE5vZGUsIG5hbWU6IHN0cmluZyk6IHRzLkludGVyZmFjZURlY2xhcmF0aW9uIHtcbiAgcmV0dXJuIHV0aWxzLnRocm93SWZOdWxsT3JVbmRlZmluZWQoZ2V0SW50ZXJmYWNlKG5vZGUsIG5hbWUpLCAnaW50ZXJmYWNlJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2VzKG5vZGU6IFN0YXRlbWVudGVkTm9kZSk6IHJlYWRvbmx5IHRzLk1vZHVsZURlY2xhcmF0aW9uW10ge1xuICByZXR1cm4gZ2V0U3RhdGVtZW50cyhub2RlKS5maWx0ZXIodHMuaXNNb2R1bGVEZWNsYXJhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2Uobm9kZTogU3RhdGVtZW50ZWROb2RlLCBuYW1lOiBzdHJpbmcpOiB0cy5Nb2R1bGVEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXROYW1lc3BhY2VzKG5vZGUpLmZpbmQoKHZhbHVlKSA9PiBub2RlXy5nZXROYW1lKHZhbHVlKSA9PT0gbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lc3BhY2VPclRocm93KG5vZGU6IFN0YXRlbWVudGVkTm9kZSwgbmFtZTogc3RyaW5nKTogdHMuTW9kdWxlRGVjbGFyYXRpb24ge1xuICByZXR1cm4gdXRpbHMudGhyb3dJZk51bGxPclVuZGVmaW5lZChnZXROYW1lc3BhY2Uobm9kZSwgbmFtZSksICduYW1lc3BhY2UnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhcmlhYmxlU3RhdGVtZW50cyhub2RlOiBTdGF0ZW1lbnRlZE5vZGUpOiByZWFkb25seSB0cy5WYXJpYWJsZVN0YXRlbWVudFtdIHtcbiAgcmV0dXJuIGdldFN0YXRlbWVudHMobm9kZSkuZmlsdGVyKHRzLmlzVmFyaWFibGVTdGF0ZW1lbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFyaWFibGVEZWNsYXJhdGlvbnMobm9kZTogU3RhdGVtZW50ZWROb2RlKTogcmVhZG9ubHkgdHMuVmFyaWFibGVEZWNsYXJhdGlvbltdIHtcbiAgcmV0dXJuIGdldFZhcmlhYmxlU3RhdGVtZW50cyhub2RlKS5yZWR1Y2U8cmVhZG9ubHkgdHMuVmFyaWFibGVEZWNsYXJhdGlvbltdPihcbiAgICAoYWNjLCB2YWx1ZSkgPT4gYWNjLmNvbmNhdCh2YXJpYWJsZS5nZXREZWNsYXJhdGlvbnModmFyaWFibGUuZ2V0RGVjbGFyYXRpb25MaXN0KHZhbHVlKSkpLFxuICAgIFtdLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFyaWFibGVEZWNsYXJhdGlvbihub2RlOiBTdGF0ZW1lbnRlZE5vZGUsIG5hbWU6IHN0cmluZyk6IHRzLlZhcmlhYmxlRGVjbGFyYXRpb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2V0VmFyaWFibGVEZWNsYXJhdGlvbnMobm9kZSkuZmluZCgodmFsdWUpID0+IG5vZGVfLmdldE5hbWUodmFsdWUpID09PSBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhcmlhYmxlRGVjbGFyYXRpb25PclRocm93KG5vZGU6IFN0YXRlbWVudGVkTm9kZSwgbmFtZTogc3RyaW5nKTogdHMuVmFyaWFibGVEZWNsYXJhdGlvbiB7XG4gIHJldHVybiB1dGlscy50aHJvd0lmTnVsbE9yVW5kZWZpbmVkKGdldFZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSwgbmFtZSksICd2YXJpYWJsZSBkZWNsYXJhdGlvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZUFsaWFzZXMobm9kZTogU3RhdGVtZW50ZWROb2RlKTogcmVhZG9ubHkgdHMuVHlwZUFsaWFzRGVjbGFyYXRpb25bXSB7XG4gIHJldHVybiBnZXRTdGF0ZW1lbnRzKG5vZGUpLmZpbHRlcih0cy5pc1R5cGVBbGlhc0RlY2xhcmF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVBbGlhcyhub2RlOiBTdGF0ZW1lbnRlZE5vZGUsIG5hbWU6IHN0cmluZyk6IHRzLlR5cGVBbGlhc0RlY2xhcmF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFR5cGVBbGlhc2VzKG5vZGUpLmZpbmQoKHZhbHVlKSA9PiBub2RlXy5nZXROYW1lKHZhbHVlKSA9PT0gbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQWxpYXNPclRocm93KG5vZGU6IFN0YXRlbWVudGVkTm9kZSwgbmFtZTogc3RyaW5nKTogdHMuVHlwZUFsaWFzRGVjbGFyYXRpb24ge1xuICByZXR1cm4gdXRpbHMudGhyb3dJZk51bGxPclVuZGVmaW5lZChnZXRUeXBlQWxpYXMobm9kZSwgbmFtZSksICd0eXBlIGFsaWFzJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvbnMobm9kZTogU3RhdGVtZW50ZWROb2RlKTogcmVhZG9ubHkgdHMuRnVuY3Rpb25EZWNsYXJhdGlvbltdIHtcbiAgcmV0dXJuIGdldFN0YXRlbWVudHMobm9kZSkuZmlsdGVyKHRzLmlzRnVuY3Rpb25EZWNsYXJhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvbihub2RlOiBTdGF0ZW1lbnRlZE5vZGUsIG5hbWU6IHN0cmluZyk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2V0RnVuY3Rpb25zKG5vZGUpLmZpbmQoKHZhbHVlKSA9PiBub2RlXy5nZXROYW1lKHZhbHVlKSA9PT0gbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jdGlvbk9yVGhyb3cobm9kZTogU3RhdGVtZW50ZWROb2RlLCBuYW1lOiBzdHJpbmcpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgcmV0dXJuIHV0aWxzLnRocm93SWZOdWxsT3JVbmRlZmluZWQoZ2V0RnVuY3Rpb24obm9kZSwgbmFtZSksICdmdW5jdGlvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bXMobm9kZTogU3RhdGVtZW50ZWROb2RlKTogcmVhZG9ubHkgdHMuRW51bURlY2xhcmF0aW9uW10ge1xuICByZXR1cm4gZ2V0U3RhdGVtZW50cyhub2RlKS5maWx0ZXIodHMuaXNFbnVtRGVjbGFyYXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bShub2RlOiBTdGF0ZW1lbnRlZE5vZGUsIG5hbWU6IHN0cmluZyk6IHRzLkVudW1EZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRFbnVtcyhub2RlKS5maW5kKCh2YWx1ZSkgPT4gbm9kZV8uZ2V0TmFtZSh2YWx1ZSkgPT09IG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bU9yVGhyb3cobm9kZTogU3RhdGVtZW50ZWROb2RlLCBuYW1lOiBzdHJpbmcpOiB0cy5FbnVtRGVjbGFyYXRpb24ge1xuICByZXR1cm4gdXRpbHMudGhyb3dJZk51bGxPclVuZGVmaW5lZChnZXRFbnVtKG5vZGUsIG5hbWUpLCAnZW51bScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWwobm9kZTogdHMuQnJlYWtTdGF0ZW1lbnQgfCB0cy5Db250aW51ZVN0YXRlbWVudCk6IHRzLklkZW50aWZpZXIgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdXRpbHMuZ2V0VmFsdWVPclVuZGVmaW5lZChub2RlLmxhYmVsKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXVzZXMobm9kZTogdHMuQ2FzZUJsb2NrKTogcmVhZG9ubHkgdHMuQ2FzZU9yRGVmYXVsdENsYXVzZVtdIHtcbiAgcmV0dXJuIG5vZGUuY2xhdXNlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9ubHlWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGU6IHRzLkNhdGNoQ2xhdXNlKTogdHMuVmFyaWFibGVEZWNsYXJhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB1dGlscy5nZXRWYWx1ZU9yVW5kZWZpbmVkKG5vZGUudmFyaWFibGVEZWNsYXJhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCbG9jayhub2RlOiB0cy5DYXRjaENsYXVzZSk6IHRzLkJsb2NrIHtcbiAgcmV0dXJuIG5vZGUuYmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0ZW1lbnQoXG4gIG5vZGU6IHRzLkRvU3RhdGVtZW50IHwgdHMuRm9yU3RhdGVtZW50IHwgdHMuV2hpbGVTdGF0ZW1lbnQgfCB0cy5Gb3JJbk9yT2ZTdGF0ZW1lbnQsXG4pOiB0cy5TdGF0ZW1lbnQge1xuICByZXR1cm4gbm9kZS5zdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsaXplcihub2RlOiB0cy5Gb3JJbk9yT2ZTdGF0ZW1lbnQpOiB0cy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCB8IHRzLkV4cHJlc3Npb247XG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbGl6ZXIobm9kZTogdHMuRm9yU3RhdGVtZW50KTogdHMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgfCB0cy5FeHByZXNzaW9uIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxpemVyKFxuICBub2RlOiB0cy5Gb3JTdGF0ZW1lbnQgfCB0cy5Gb3JJbk9yT2ZTdGF0ZW1lbnQsXG4pOiB0cy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCB8IHRzLkV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdXRpbHMuZ2V0VmFsdWVPclVuZGVmaW5lZChub2RlLmluaXRpYWxpemVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmRpdGlvbihub2RlOiB0cy5Gb3JTdGF0ZW1lbnQpOiB0cy5FeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHV0aWxzLmdldFZhbHVlT3JVbmRlZmluZWQobm9kZS5jb25kaXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5jcmVtZW50b3Iobm9kZTogdHMuRm9yU3RhdGVtZW50KTogdHMuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB1dGlscy5nZXRWYWx1ZU9yVW5kZWZpbmVkKG5vZGUuaW5jcmVtZW50b3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGhlblN0YXRlbWVudChub2RlOiB0cy5JZlN0YXRlbWVudCk6IHRzLlN0YXRlbWVudCB7XG4gIHJldHVybiBub2RlLnRoZW5TdGF0ZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbHNlU3RhdGVtZW50KG5vZGU6IHRzLklmU3RhdGVtZW50KTogdHMuU3RhdGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHV0aWxzLmdldFZhbHVlT3JVbmRlZmluZWQobm9kZS5lbHNlU3RhdGVtZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhc2VCbG9jayhub2RlOiB0cy5Td2l0Y2hTdGF0ZW1lbnQpOiB0cy5DYXNlQmxvY2sge1xuICByZXR1cm4gbm9kZS5jYXNlQmxvY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYXRjaENsYXVzZShub2RlOiB0cy5UcnlTdGF0ZW1lbnQpOiB0cy5DYXRjaENsYXVzZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB1dGlscy5nZXRWYWx1ZU9yVW5kZWZpbmVkKG5vZGUuY2F0Y2hDbGF1c2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJ5QmxvY2sobm9kZTogdHMuVHJ5U3RhdGVtZW50KTogdHMuQmxvY2sge1xuICByZXR1cm4gbm9kZS50cnlCbG9jaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbmFsbHlCbG9jayhub2RlOiB0cy5UcnlTdGF0ZW1lbnQpOiB0cy5CbG9jayB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB1dGlscy5nZXRWYWx1ZU9yVW5kZWZpbmVkKG5vZGUuZmluYWxseUJsb2NrKTtcbn1cbiJdfQ==
|