1 | import ts from 'typescript';
|
2 | import * as utils from '../utils';
|
3 | export function getModifiers(node) {
|
4 | const modifiers = utils.getValueOrUndefined(node.modifiers);
|
5 | return modifiers === undefined ? [] : modifiers;
|
6 | }
|
7 | export function getFirstModifierByKind(node, kind) {
|
8 | const modifier = getModifiers(node).find((mod) => mod.kind === kind);
|
9 | if (modifier !== undefined) {
|
10 | return modifier;
|
11 | }
|
12 | return node.getChildren().find((mod) => mod.kind === kind);
|
13 | }
|
14 | export function getAbstractKeyword(node) {
|
15 | return getFirstModifierByKind(node, ts.SyntaxKind.AbstractKeyword);
|
16 | }
|
17 | export function isAbstract(node) {
|
18 | return getAbstractKeyword(node) !== undefined;
|
19 | }
|
20 | export function getConstKeyword(node) {
|
21 | return getFirstModifierByKind(node, ts.SyntaxKind.ConstKeyword);
|
22 | }
|
23 | export function isConst(node) {
|
24 | return getConstKeyword(node) !== undefined;
|
25 | }
|
26 | export function getPublicKeyword(node) {
|
27 | return getFirstModifierByKind(node, ts.SyntaxKind.PublicKeyword);
|
28 | }
|
29 | export function isPublic(node) {
|
30 | return getPublicKeyword(node) !== undefined;
|
31 | }
|
32 | export function getProtectedKeyword(node) {
|
33 | return getFirstModifierByKind(node, ts.SyntaxKind.ProtectedKeyword);
|
34 | }
|
35 | export function isProtected(node) {
|
36 | return getProtectedKeyword(node) !== undefined;
|
37 | }
|
38 | export function getPrivateKeyword(node) {
|
39 | return getFirstModifierByKind(node, ts.SyntaxKind.PrivateKeyword);
|
40 | }
|
41 | export function isPrivate(node) {
|
42 | return getPrivateKeyword(node) !== undefined;
|
43 | }
|
44 | export function getReadonlyKeyword(node) {
|
45 | return getFirstModifierByKind(node, ts.SyntaxKind.ReadonlyKeyword);
|
46 | }
|
47 | export function isReadonly(node) {
|
48 | return getReadonlyKeyword(node) !== undefined;
|
49 | }
|
50 | export function getStaticKeyword(node) {
|
51 | return getFirstModifierByKind(node, ts.SyntaxKind.StaticKeyword);
|
52 | }
|
53 | export function isStatic(node) {
|
54 | return getStaticKeyword(node) !== undefined;
|
55 | }
|
56 | export function getExportKeyword(node) {
|
57 | return getFirstModifierByKind(node, ts.SyntaxKind.ExportKeyword);
|
58 | }
|
59 | export function hasExportKeyword(node) {
|
60 | return getExportKeyword(node) !== undefined;
|
61 | }
|
62 | export function getDefaultKeyword(node) {
|
63 | return getFirstModifierByKind(node, ts.SyntaxKind.DefaultKeyword);
|
64 | }
|
65 | export function hasDefaultKeyword(node) {
|
66 | return getDefaultKeyword(node) !== undefined;
|
67 | }
|
68 | export function isNamedExport(node) {
|
69 | const parent = utils.getValueOrUndefined(node.parent);
|
70 | return parent !== undefined && ts.isSourceFile(parent) && hasExportKeyword(node) && !hasDefaultKeyword(node);
|
71 | }
|
72 | export function isDefaultExport(node) {
|
73 | return hasExportKeyword(node) && hasDefaultKeyword(node);
|
74 | }
|
75 | export function getDeclareKeyword(node) {
|
76 | return getFirstModifierByKind(node, ts.SyntaxKind.DeclareKeyword);
|
77 | }
|
78 | export function hasDeclareKeyword(node) {
|
79 | return getDeclareKeyword(node) !== undefined;
|
80 | }
|
81 |
|
82 | //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vZGlmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QixPQUFPLEtBQUssS0FBSyxNQUFNLFVBQVUsQ0FBQztBQUVsQyxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQWE7SUFDeEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU1RCxPQUFPLFNBQVMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2xELENBQUM7QUFHRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLElBQWEsRUFDYixJQUF5RDtJQUV6RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNuRixJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7UUFDMUIsT0FBTyxRQUFRLENBQUM7S0FDakI7SUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBYTtJQUM5QyxPQUFPLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVSxDQUFDLElBQWE7SUFDdEMsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDaEQsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBYTtJQUMzQyxPQUFPLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQWE7SUFDbkMsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBYTtJQUM1QyxPQUFPLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLElBQWE7SUFDcEMsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDOUMsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxJQUFhO0lBQy9DLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFhO0lBQ3ZDLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYTtJQUM3QyxPQUFPLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQWE7SUFDckMsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFhO0lBQzlDLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsSUFBYTtJQUN0QyxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQWE7SUFDNUMsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFhO0lBQ3BDLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQzlDLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBYTtJQUM1QyxPQUFPLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsSUFBYTtJQUM1QyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQWE7SUFDN0MsT0FBTyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQWE7SUFDN0MsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLENBQUM7QUFDL0MsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBYTtJQUN6QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXRELE9BQU8sTUFBTSxLQUFLLFNBQVMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0csQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBYTtJQUMzQyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYTtJQUM3QyxPQUFPLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYTtJQUM3QyxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUMvQyxDQUFDIiwiZmlsZSI6Im5lby1vbmUtdHMtdXRpbHMvc3JjL2Jhc2UvbW9kaWZpZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZSBuby1iaXR3aXNlXG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RpZmllcnMobm9kZTogdHMuTm9kZSk6IHJlYWRvbmx5IHRzLk1vZGlmaWVyW10ge1xuICBjb25zdCBtb2RpZmllcnMgPSB1dGlscy5nZXRWYWx1ZU9yVW5kZWZpbmVkKG5vZGUubW9kaWZpZXJzKTtcblxuICByZXR1cm4gbW9kaWZpZXJzID09PSB1bmRlZmluZWQgPyBbXSA6IG1vZGlmaWVycztcbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpcnN0TW9kaWZpZXJCeUtpbmQ8VG9rZW4gZXh0ZW5kcyB0cy5Nb2RpZmllcj4oXG4gIG5vZGU6IHRzLk5vZGUsXG4gIGtpbmQ6IFRva2VuIGV4dGVuZHMgdHMuVG9rZW48aW5mZXIgVEtpbmQ+ID8gVEtpbmQgOiBuZXZlcixcbik6IFRva2VuIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbW9kaWZpZXIgPSBnZXRNb2RpZmllcnMobm9kZSkuZmluZCgobW9kKTogbW9kIGlzIFRva2VuID0+IG1vZC5raW5kID09PSBraW5kKTtcbiAgaWYgKG1vZGlmaWVyICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbW9kaWZpZXI7XG4gIH1cblxuICByZXR1cm4gbm9kZS5nZXRDaGlsZHJlbigpLmZpbmQoKG1vZCk6IG1vZCBpcyBUb2tlbiA9PiBtb2Qua2luZCA9PT0ga2luZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBYnN0cmFjdEtleXdvcmQobm9kZTogdHMuTm9kZSk6IHRzLlRva2VuPHRzLlN5bnRheEtpbmQuQWJzdHJhY3RLZXl3b3JkPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRGaXJzdE1vZGlmaWVyQnlLaW5kKG5vZGUsIHRzLlN5bnRheEtpbmQuQWJzdHJhY3RLZXl3b3JkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzdHJhY3Qobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0QWJzdHJhY3RLZXl3b3JkKG5vZGUpICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25zdEtleXdvcmQobm9kZTogdHMuTm9kZSk6IHRzLlRva2VuPHRzLlN5bnRheEtpbmQuQ29uc3RLZXl3b3JkPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRGaXJzdE1vZGlmaWVyQnlLaW5kKG5vZGUsIHRzLlN5bnRheEtpbmQuQ29uc3RLZXl3b3JkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3Qobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0Q29uc3RLZXl3b3JkKG5vZGUpICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQdWJsaWNLZXl3b3JkKG5vZGU6IHRzLk5vZGUpOiB0cy5Ub2tlbjx0cy5TeW50YXhLaW5kLlB1YmxpY0tleXdvcmQ+IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldEZpcnN0TW9kaWZpZXJCeUtpbmQobm9kZSwgdHMuU3ludGF4S2luZC5QdWJsaWNLZXl3b3JkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHVibGljKG5vZGU6IHRzLk5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFB1YmxpY0tleXdvcmQobm9kZSkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3RlY3RlZEtleXdvcmQobm9kZTogdHMuTm9kZSk6IHRzLlRva2VuPHRzLlN5bnRheEtpbmQuUHJvdGVjdGVkS2V5d29yZD4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2V0Rmlyc3RNb2RpZmllckJ5S2luZChub2RlLCB0cy5TeW50YXhLaW5kLlByb3RlY3RlZEtleXdvcmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm90ZWN0ZWQobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0UHJvdGVjdGVkS2V5d29yZChub2RlKSAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJpdmF0ZUtleXdvcmQobm9kZTogdHMuTm9kZSk6IHRzLlRva2VuPHRzLlN5bnRheEtpbmQuUHJpdmF0ZUtleXdvcmQ+IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldEZpcnN0TW9kaWZpZXJCeUtpbmQobm9kZSwgdHMuU3ludGF4S2luZC5Qcml2YXRlS2V5d29yZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ByaXZhdGUobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0UHJpdmF0ZUtleXdvcmQobm9kZSkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWRvbmx5S2V5d29yZChub2RlOiB0cy5Ob2RlKTogdHMuVG9rZW48dHMuU3ludGF4S2luZC5SZWFkb25seUtleXdvcmQ+IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldEZpcnN0TW9kaWZpZXJCeUtpbmQobm9kZSwgdHMuU3ludGF4S2luZC5SZWFkb25seUtleXdvcmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkb25seShub2RlOiB0cy5Ob2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRSZWFkb25seUtleXdvcmQobm9kZSkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRpY0tleXdvcmQobm9kZTogdHMuTm9kZSk6IHRzLlRva2VuPHRzLlN5bnRheEtpbmQuU3RhdGljS2V5d29yZD4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gZ2V0Rmlyc3RNb2RpZmllckJ5S2luZChub2RlLCB0cy5TeW50YXhLaW5kLlN0YXRpY0tleXdvcmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdGF0aWMobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0U3RhdGljS2V5d29yZChub2RlKSAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwb3J0S2V5d29yZChub2RlOiB0cy5Ob2RlKTogdHMuVG9rZW48dHMuU3ludGF4S2luZC5FeHBvcnRLZXl3b3JkPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRGaXJzdE1vZGlmaWVyQnlLaW5kKG5vZGUsIHRzLlN5bnRheEtpbmQuRXhwb3J0S2V5d29yZCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNFeHBvcnRLZXl3b3JkKG5vZGU6IHRzLk5vZGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldEV4cG9ydEtleXdvcmQobm9kZSkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRLZXl3b3JkKG5vZGU6IHRzLk5vZGUpOiB0cy5Ub2tlbjx0cy5TeW50YXhLaW5kLkRlZmF1bHRLZXl3b3JkPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRGaXJzdE1vZGlmaWVyQnlLaW5kKG5vZGUsIHRzLlN5bnRheEtpbmQuRGVmYXVsdEtleXdvcmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRGVmYXVsdEtleXdvcmQobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0RGVmYXVsdEtleXdvcmQobm9kZSkgIT09IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmFtZWRFeHBvcnQobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICBjb25zdCBwYXJlbnQgPSB1dGlscy5nZXRWYWx1ZU9yVW5kZWZpbmVkKG5vZGUucGFyZW50KTtcblxuICByZXR1cm4gcGFyZW50ICE9PSB1bmRlZmluZWQgJiYgdHMuaXNTb3VyY2VGaWxlKHBhcmVudCkgJiYgaGFzRXhwb3J0S2V5d29yZChub2RlKSAmJiAhaGFzRGVmYXVsdEtleXdvcmQobm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmF1bHRFeHBvcnQobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaGFzRXhwb3J0S2V5d29yZChub2RlKSAmJiBoYXNEZWZhdWx0S2V5d29yZChub2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlY2xhcmVLZXl3b3JkKG5vZGU6IHRzLk5vZGUpOiB0cy5Ub2tlbjx0cy5TeW50YXhLaW5kLkRlY2xhcmVLZXl3b3JkPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBnZXRGaXJzdE1vZGlmaWVyQnlLaW5kKG5vZGUsIHRzLlN5bnRheEtpbmQuRGVjbGFyZUtleXdvcmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRGVjbGFyZUtleXdvcmQobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0RGVjbGFyZUtleXdvcmQobm9kZSkgIT09IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|