UNPKG

21.6 kBJavaScriptView Raw
1import ts from 'typescript';
2import { body, syntaxKind } from './base';
3import * as node_ from './node';
4import * as utils from './utils';
5import * as variable from './variable';
6export 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}
22export function getClasses(node) {
23 return getStatements(node).filter(ts.isClassDeclaration);
24}
25export function getClass(node, name) {
26 return getClasses(node).find((value) => node_.getName(value) === name);
27}
28export function getClassOrThrow(node, name) {
29 return utils.throwIfNullOrUndefined(getClass(node, name), 'class');
30}
31export function getInterfaces(node) {
32 return getStatements(node).filter(ts.isInterfaceDeclaration);
33}
34export function getInterface(node, name) {
35 return getInterfaces(node).find((value) => node_.getName(value) === name);
36}
37export function getInterfaceOrThrow(node, name) {
38 return utils.throwIfNullOrUndefined(getInterface(node, name), 'interface');
39}
40export function getNamespaces(node) {
41 return getStatements(node).filter(ts.isModuleDeclaration);
42}
43export function getNamespace(node, name) {
44 return getNamespaces(node).find((value) => node_.getName(value) === name);
45}
46export function getNamespaceOrThrow(node, name) {
47 return utils.throwIfNullOrUndefined(getNamespace(node, name), 'namespace');
48}
49export function getVariableStatements(node) {
50 return getStatements(node).filter(ts.isVariableStatement);
51}
52export function getVariableDeclarations(node) {
53 return getVariableStatements(node).reduce((acc, value) => acc.concat(variable.getDeclarations(variable.getDeclarationList(value))), []);
54}
55export function getVariableDeclaration(node, name) {
56 return getVariableDeclarations(node).find((value) => node_.getName(value) === name);
57}
58export function getVariableDeclarationOrThrow(node, name) {
59 return utils.throwIfNullOrUndefined(getVariableDeclaration(node, name), 'variable declaration');
60}
61export function getTypeAliases(node) {
62 return getStatements(node).filter(ts.isTypeAliasDeclaration);
63}
64export function getTypeAlias(node, name) {
65 return getTypeAliases(node).find((value) => node_.getName(value) === name);
66}
67export function getTypeAliasOrThrow(node, name) {
68 return utils.throwIfNullOrUndefined(getTypeAlias(node, name), 'type alias');
69}
70export function getFunctions(node) {
71 return getStatements(node).filter(ts.isFunctionDeclaration);
72}
73export function getFunction(node, name) {
74 return getFunctions(node).find((value) => node_.getName(value) === name);
75}
76export function getFunctionOrThrow(node, name) {
77 return utils.throwIfNullOrUndefined(getFunction(node, name), 'function');
78}
79export function getEnums(node) {
80 return getStatements(node).filter(ts.isEnumDeclaration);
81}
82export function getEnum(node, name) {
83 return getEnums(node).find((value) => node_.getName(value) === name);
84}
85export function getEnumOrThrow(node, name) {
86 return utils.throwIfNullOrUndefined(getEnum(node, name), 'enum');
87}
88export function getLabel(node) {
89 return utils.getValueOrUndefined(node.label);
90}
91export function getClauses(node) {
92 return node.clauses;
93}
94export function getOnlyVariableDeclaration(node) {
95 return utils.getValueOrUndefined(node.variableDeclaration);
96}
97export function getBlock(node) {
98 return node.block;
99}
100export function getStatement(node) {
101 return node.statement;
102}
103export function getInitializer(node) {
104 return utils.getValueOrUndefined(node.initializer);
105}
106export function getCondition(node) {
107 return utils.getValueOrUndefined(node.condition);
108}
109export function getIncrementor(node) {
110 return utils.getValueOrUndefined(node.incrementor);
111}
112export function getThenStatement(node) {
113 return node.thenStatement;
114}
115export function getElseStatement(node) {
116 return utils.getValueOrUndefined(node.elseStatement);
117}
118export function getCaseBlock(node) {
119 return node.caseBlock;
120}
121export function getCatchClause(node) {
122 return utils.getValueOrUndefined(node.catchClause);
123}
124export function getTryBlock(node) {
125 return node.tryBlock;
126}
127export 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==