@kaspernj/api-maker 1.0.2086 → 1.0.2087
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/build/routes-native.d.ts +66 -16
- package/build/routes-native.d.ts.map +1 -1
- package/build/routes-native.js +44 -10
- package/package.json +1 -1
package/build/routes-native.d.ts
CHANGED
|
@@ -1,24 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {{type: "pathPart", name: string} | {type: "variable", count: number}} PathPart
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {{args: Array<unknown>, localizedRoutes?: Record<string, PathPart[]>, pathParts?: PathPart[], url?: boolean}} TranslateRouteArgs
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {{host?: string, port?: number|string, protocol?: string, translatedRoute: string}} HostRouteArgs
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @typedef {{locale?: string, host?: string, port?: number|string, protocol?: string} & Record<string, unknown>} RouteOptions
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Builds paths and URLs from route definitions for native usage.
|
|
15
|
+
*/
|
|
1
16
|
export default class ApiMakerRoutesNative {
|
|
17
|
+
/** @param {{getLocale: () => string}} options */
|
|
2
18
|
constructor({ getLocale }: {
|
|
3
|
-
getLocale:
|
|
19
|
+
getLocale: () => string;
|
|
4
20
|
});
|
|
5
|
-
getLocale:
|
|
21
|
+
getLocale: () => string;
|
|
6
22
|
routeDefinitions: any[];
|
|
7
23
|
routeTranslationParts: {};
|
|
8
|
-
|
|
9
|
-
|
|
24
|
+
/**
|
|
25
|
+
* @param {object} routeDefinitions
|
|
26
|
+
* @param {{localized?: boolean}=} routeDefinitionArgs
|
|
27
|
+
* @returns {void}
|
|
28
|
+
*/
|
|
29
|
+
loadRouteDefinitions(routeDefinitions: object, routeDefinitionArgs?: {
|
|
30
|
+
localized?: boolean;
|
|
31
|
+
} | undefined): void;
|
|
32
|
+
/**
|
|
33
|
+
* @param {object} i18n
|
|
34
|
+
* @returns {void}
|
|
35
|
+
*/
|
|
36
|
+
loadRouteTranslations(i18n: object): void;
|
|
10
37
|
i18n: any;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
translatedRoute: any;
|
|
22
|
-
}): string;
|
|
38
|
+
/**
|
|
39
|
+
* @param {TranslateRouteArgs} options
|
|
40
|
+
* @returns {string}
|
|
41
|
+
*/
|
|
42
|
+
translateRoute({ args, localizedRoutes, pathParts, url }: TranslateRouteArgs): string;
|
|
43
|
+
/**
|
|
44
|
+
* @param {HostRouteArgs} options
|
|
45
|
+
* @returns {string}
|
|
46
|
+
*/
|
|
47
|
+
addHostToRoute({ host, port, protocol, translatedRoute }: HostRouteArgs): string;
|
|
23
48
|
}
|
|
49
|
+
export type PathPart = {
|
|
50
|
+
type: "pathPart";
|
|
51
|
+
name: string;
|
|
52
|
+
} | {
|
|
53
|
+
type: "variable";
|
|
54
|
+
count: number;
|
|
55
|
+
};
|
|
56
|
+
export type TranslateRouteArgs = {
|
|
57
|
+
args: Array<unknown>;
|
|
58
|
+
localizedRoutes?: Record<string, PathPart[]>;
|
|
59
|
+
pathParts?: PathPart[];
|
|
60
|
+
url?: boolean;
|
|
61
|
+
};
|
|
62
|
+
export type HostRouteArgs = {
|
|
63
|
+
host?: string;
|
|
64
|
+
port?: number | string;
|
|
65
|
+
protocol?: string;
|
|
66
|
+
translatedRoute: string;
|
|
67
|
+
};
|
|
68
|
+
export type RouteOptions = {
|
|
69
|
+
locale?: string;
|
|
70
|
+
host?: string;
|
|
71
|
+
port?: number | string;
|
|
72
|
+
protocol?: string;
|
|
73
|
+
} & Record<string, unknown>;
|
|
24
74
|
//# sourceMappingURL=routes-native.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes-native.d.ts","sourceRoot":"/src/","sources":["routes-native.js"],"names":[],"mappings":"AAKA;
|
|
1
|
+
{"version":3,"file":"routes-native.d.ts","sourceRoot":"/src/","sources":["routes-native.js"],"names":[],"mappings":"AAKA;;GAEG;AACH;;GAEG;AACH;;GAEG;AACH;;GAEG;AAEH;;GAEG;AACH;IACE,iDAAiD;IACjD,2BADY;QAAC,SAAS,EAAE,MAAM,MAAM,CAAA;KAAC,EAKpC;IAHC,iBAF4B,MAAM,CAER;IAC1B,wBAA0B;IAC1B,0BAA+B;IAGjC;;;;OAIG;IACH,uCAJW,MAAM,wBACN;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAC,YAAC,GACpB,IAAI,CAwDhB;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,IAAI,CAiBhB;IAdC,UAAgB;IAgBlB;;;OAGG;IACH,0DAHW,kBAAkB,GAChB,MAAM,CAgElB;IAED;;;OAGG;IACH,0DAHW,aAAa,GACX,MAAM,CA8BlB;CACF;uBA9MY;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC;iCAGpE;IAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAC;4BAG3G;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAC,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAC;2BAGjF;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAC,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC"}
|
package/build/routes-native.js
CHANGED
|
@@ -2,12 +2,33 @@ import * as inflection from "inflection";
|
|
|
2
2
|
import { dig, digg, digs } from "diggerize";
|
|
3
3
|
import qs from "qs";
|
|
4
4
|
import urlEncode from "./url-encode.js";
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {{type: "pathPart", name: string} | {type: "variable", count: number}} PathPart
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @typedef {{args: Array<unknown>, localizedRoutes?: Record<string, PathPart[]>, pathParts?: PathPart[], url?: boolean}} TranslateRouteArgs
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {{host?: string, port?: number|string, protocol?: string, translatedRoute: string}} HostRouteArgs
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {{locale?: string, host?: string, port?: number|string, protocol?: string} & Record<string, unknown>} RouteOptions
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* Builds paths and URLs from route definitions for native usage.
|
|
19
|
+
*/
|
|
5
20
|
export default class ApiMakerRoutesNative {
|
|
21
|
+
/** @param {{getLocale: () => string}} options */
|
|
6
22
|
constructor({ getLocale }) {
|
|
7
23
|
this.getLocale = getLocale;
|
|
8
24
|
this.routeDefinitions = [];
|
|
9
25
|
this.routeTranslationParts = {};
|
|
10
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* @param {object} routeDefinitions
|
|
29
|
+
* @param {{localized?: boolean}=} routeDefinitionArgs
|
|
30
|
+
* @returns {void}
|
|
31
|
+
*/
|
|
11
32
|
loadRouteDefinitions(routeDefinitions, routeDefinitionArgs) {
|
|
12
33
|
for (const routeDefinition of digg(routeDefinitions, "routes")) {
|
|
13
34
|
const { name, path } = digs(routeDefinition, "name", "path");
|
|
@@ -15,10 +36,10 @@ export default class ApiMakerRoutesNative {
|
|
|
15
36
|
const pathMethodName = `${inflection.camelize(name, true)}Path`;
|
|
16
37
|
const urlMethodName = `${inflection.camelize(name, true)}Url`;
|
|
17
38
|
if (routeDefinitionArgs && routeDefinitionArgs.localized) {
|
|
18
|
-
const localizedRoutes = {};
|
|
39
|
+
const localizedRoutes = /** @type {Record<string, PathPart[]>} */ {};
|
|
19
40
|
for (const locale in this.routeTranslationParts) {
|
|
20
41
|
let variableCount = 0;
|
|
21
|
-
const localizedPathParts = [
|
|
42
|
+
const localizedPathParts = /** @type {PathPart[]} */ [
|
|
22
43
|
{ type: "pathPart", name: "" },
|
|
23
44
|
{ type: "pathPart", name: locale }
|
|
24
45
|
];
|
|
@@ -41,10 +62,10 @@ export default class ApiMakerRoutesNative {
|
|
|
41
62
|
}
|
|
42
63
|
else {
|
|
43
64
|
let variableCount = 0;
|
|
44
|
-
const pathParts = rawPathParts.map((pathPart) => {
|
|
65
|
+
const pathParts = /** @type {PathPart[]} */ rawPathParts.map((pathPart) => {
|
|
45
66
|
const variableMatch = pathPart.match(/^:([A-z_]+)$/);
|
|
46
67
|
if (variableMatch) {
|
|
47
|
-
return { type: "variable", count: variableCount };
|
|
68
|
+
return { type: "variable", count: variableCount++ };
|
|
48
69
|
}
|
|
49
70
|
else {
|
|
50
71
|
return { type: "pathPart", name: pathPart };
|
|
@@ -55,6 +76,10 @@ export default class ApiMakerRoutesNative {
|
|
|
55
76
|
}
|
|
56
77
|
}
|
|
57
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* @param {object} i18n
|
|
81
|
+
* @returns {void}
|
|
82
|
+
*/
|
|
58
83
|
loadRouteTranslations(i18n) {
|
|
59
84
|
this.i18n = i18n;
|
|
60
85
|
const locales = digg(i18n, "locales");
|
|
@@ -69,12 +94,16 @@ export default class ApiMakerRoutesNative {
|
|
|
69
94
|
}
|
|
70
95
|
}
|
|
71
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* @param {TranslateRouteArgs} options
|
|
99
|
+
* @returns {string}
|
|
100
|
+
*/
|
|
72
101
|
translateRoute({ args, localizedRoutes, pathParts, url }) {
|
|
73
|
-
let options;
|
|
102
|
+
let options = /** @type {RouteOptions} */ {};
|
|
74
103
|
// Extract options from args if any
|
|
75
104
|
const lastArg = args[args.length - 1];
|
|
76
105
|
if (lastArg && typeof lastArg == "object") {
|
|
77
|
-
options = args.pop();
|
|
106
|
+
options = /** @type {RouteOptions} */ args.pop();
|
|
78
107
|
}
|
|
79
108
|
else {
|
|
80
109
|
options = {};
|
|
@@ -83,7 +112,8 @@ export default class ApiMakerRoutesNative {
|
|
|
83
112
|
const { locale, host, port, protocol, ...restOptions } = options;
|
|
84
113
|
if (localizedRoutes) {
|
|
85
114
|
// Put together route with variables and static translated parts (which were translated and cached previously)
|
|
86
|
-
|
|
115
|
+
const translatedPathParts = /** @type {PathPart[]} */ digg(localizedRoutes, locale || this.getLocale());
|
|
116
|
+
let translatedRoute = translatedPathParts
|
|
87
117
|
.map((pathPart) => {
|
|
88
118
|
if (pathPart.type == "pathPart") {
|
|
89
119
|
return pathPart.name;
|
|
@@ -93,7 +123,7 @@ export default class ApiMakerRoutesNative {
|
|
|
93
123
|
return dig(args, digg(pathPart, "count"));
|
|
94
124
|
}
|
|
95
125
|
else {
|
|
96
|
-
throw new Error(
|
|
126
|
+
throw new Error("Unhandled path part type");
|
|
97
127
|
}
|
|
98
128
|
})
|
|
99
129
|
.join("/");
|
|
@@ -115,7 +145,7 @@ export default class ApiMakerRoutesNative {
|
|
|
115
145
|
return digg(args, digg(pathPart, "count"));
|
|
116
146
|
}
|
|
117
147
|
else {
|
|
118
|
-
throw new Error(
|
|
148
|
+
throw new Error("Unhandled path part type");
|
|
119
149
|
}
|
|
120
150
|
})
|
|
121
151
|
.join("/");
|
|
@@ -128,6 +158,10 @@ export default class ApiMakerRoutesNative {
|
|
|
128
158
|
}
|
|
129
159
|
throw new Error("Unhandled state");
|
|
130
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* @param {HostRouteArgs} options
|
|
163
|
+
* @returns {string}
|
|
164
|
+
*/
|
|
131
165
|
addHostToRoute({ host, port, protocol, translatedRoute }) {
|
|
132
166
|
let fullUrl = "";
|
|
133
167
|
const hostToUse = host || (globalThis.location ? globalThis.location.host : undefined);
|
|
@@ -153,4 +187,4 @@ export default class ApiMakerRoutesNative {
|
|
|
153
187
|
return fullUrl;
|
|
154
188
|
}
|
|
155
189
|
}
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLW5hdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsicm91dGVzLW5hdGl2ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDekMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ25CLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBRXZDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sb0JBQW9CO0lBQ3ZDLFlBQWEsRUFBQyxTQUFTLEVBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUE7UUFDMUIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQUMxQixJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxvQkFBb0IsQ0FBRSxnQkFBZ0IsRUFBRSxtQkFBbUI7UUFDekQsS0FBSyxNQUFNLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvRCxNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQzFELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDcEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFBO1lBQy9ELE1BQU0sYUFBYSxHQUFHLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQTtZQUU3RCxJQUFJLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxD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KiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCB7ZGlnLCBkaWdnLCBkaWdzfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBxcyBmcm9tIFwicXNcIlxuaW1wb3J0IHVybEVuY29kZSBmcm9tIFwiLi91cmwtZW5jb2RlLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXBpTWFrZXJSb3V0ZXNOYXRpdmUge1xuICBjb25zdHJ1Y3RvciAoe2dldExvY2FsZX0pIHtcbiAgICB0aGlzLmdldExvY2FsZSA9IGdldExvY2FsZVxuICAgIHRoaXMucm91dGVEZWZpbml0aW9ucyA9IFtdXG4gICAgdGhpcy5yb3V0ZVRyYW5zbGF0aW9uUGFydHMgPSB7fVxuICB9XG5cbiAgbG9hZFJvdXRlRGVmaW5pdGlvbnMgKHJvdXRlRGVmaW5pdGlvbnMsIHJvdXRlRGVmaW5pdGlvbkFyZ3MpIHtcbiAgICBmb3IgKGNvbnN0IHJvdXRlRGVmaW5pdGlvbiBvZiBkaWdnKHJvdXRlRGVmaW5pdGlvbnMsIFwicm91dGVzXCIpKSB7XG4gICAgICBjb25zdCB7bmFtZSwgcGF0aH0gPSBkaWdzKHJvdXRlRGVmaW5pdGlvbiwgXCJuYW1lXCIsIFwicGF0aFwiKVxuICAgICAgY29uc3QgcmF3UGF0aFBhcnRzID0gcGF0aC5zcGxpdChcIi9cIilcbiAgICAgIGNvbnN0IHBhdGhNZXRob2ROYW1lID0gYCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShuYW1lLCB0cnVlKX1QYXRoYFxuICAgICAgY29uc3QgdXJsTWV0aG9kTmFtZSA9IGAke2luZmxlY3Rpb24uY2FtZWxpemUobmFtZSwgdHJ1ZSl9VXJsYFxuXG4gICAgICBpZiAocm91dGVEZWZpbml0aW9uQXJncyAmJiByb3V0ZURlZmluaXRpb25BcmdzLmxvY2FsaXplZCkge1xuICAgICAgICBjb25zdCBsb2NhbGl6ZWRSb3V0ZXMgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3QgbG9jYWxlIGluIHRoaXMucm91dGVUcmFuc2xhdGlvblBhcnRzKSB7XG4gICAgICAgICAgbGV0IHZhcmlhYmxlQ291bnQgPSAwXG5cbiAgICAgICAgICBjb25zdCBsb2NhbGl6ZWRQYXRoUGFydHMgPSBbXG4gICAgICAgICAgICB7dHlwZTogXCJwYXRoUGFydFwiLCBuYW1lOiBcIlwifSxcbiAgICAgICAgICAgIHt0eXBlOiBcInBhdGhQYXJ0XCIsIG5hbWU6IGxvY2FsZX1cbiAgICAgICAgICBdXG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJhd1BhdGhQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGF0aFBhcnQgPSByYXdQYXRoUGFydHNbaV1cbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlTWF0Y2ggPSBwYXRoUGFydC5tYXRjaCgvXjooW0Etel9dKykkLylcblxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1kZXB0aFxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgbG9jYWxpemVkUGF0aFBhcnRzLnB1c2goe3R5cGU6IFwidmFyaWFibGVcIiwgY291bnQ6IHZhcmlhYmxlQ291bnQrK30pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhdGhQYXJ0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmkxOG4udChgcm91dGVzLiR7cGF0aFBhcnR9YCwgbnVsbCwge2RlZmF1bHQ6IHBhdGhQYXJ0LCBsb2NhbGV9KVxuXG4gICAgICAgICAgICAgIGxvY2FsaXplZFBhdGhQYXJ0cy5wdXNoKHt0eXBlOiBcInBhdGhQYXJ0XCIsIG5hbWV9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvY2FsaXplZFJvdXRlc1tsb2NhbGVdID0gbG9jYWxpemVkUGF0aFBhcnRzXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzW3BhdGhNZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB0aGlzLnRyYW5zbGF0ZVJvdXRlKHthcmdzLCBsb2NhbGl6ZWRSb3V0ZXN9KVxuICAgICAgICB0aGlzW3VybE1ldGhvZE5hbWVdID0gKC4uLmFyZ3MpID0+IHRoaXMudHJhbnNsYXRlUm91dGUoe2FyZ3MsIGxvY2FsaXplZFJvdXRlcywgdXJsOiB0cnVlfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB2YXJpYWJsZUNvdW50ID0gMFxuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHJhd1BhdGhQYXJ0cy5tYXAoKHBhdGhQYXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVNYXRjaCA9IHBhdGhQYXJ0Lm1hdGNoKC9eOihbQS16X10rKSQvKVxuXG4gICAgICAgICAgaWYgKHZhcmlhYmxlTWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogXCJ2YXJpYWJsZVwiLCBjb3VudDogdmFyaWFibGVDb3VudH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHt0eXBlOiBcInBhdGhQYXJ0XCIsIG5hbWU6IHBhdGhQYXJ0fVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzW3BhdGhNZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB0aGlzLnRyYW5zbGF0ZVJvdXRlKHthcmdzLCBwYXRoUGFydHN9KVxuICAgICAgICB0aGlzW3VybE1ldGhvZE5hbWVdID0gKC4uLmFyZ3MpID0+IHRoaXMudHJhbnNsYXRlUm91dGUoe2FyZ3MsIHBhdGhQYXJ0cywgdXJsOiB0cnVlfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkUm91dGVUcmFuc2xhdGlvbnMgKGkxOG4pIHtcbiAgICB0aGlzLmkxOG4gPSBpMThuXG4gICAgY29uc3QgbG9jYWxlcyA9IGRpZ2coaTE4biwgXCJsb2NhbGVzXCIpXG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBpbiBsb2NhbGVzKSB7XG4gICAgICBjb25zdCByb3V0ZVRyYW5zbGF0aW9ucyA9IGRpZyhsb2NhbGVzLCBsb2NhbGUsIFwicm91dGVzXCIpXG5cbiAgICAgIGlmIChyb3V0ZVRyYW5zbGF0aW9ucykge1xuICAgICAgICBpZiAoIShsb2NhbGUgaW4gdGhpcy5yb3V0ZVRyYW5zbGF0aW9uUGFydHMpKSB0aGlzLnJvdXRlVHJhbnNsYXRpb25QYXJ0c1tsb2NhbGVdID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByb3V0ZVRyYW5zbGF0aW9ucykge1xuICAgICAgICAgIHRoaXMucm91dGVUcmFuc2xhdGlvblBhcnRzW2xvY2FsZV1ba2V5XSA9IHJvdXRlVHJhbnNsYXRpb25zW2tleV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYW5zbGF0ZVJvdXRlICh7YXJncywgbG9jYWxpemVkUm91dGVzLCBwYXRoUGFydHMsIHVybH0pIHtcbiAgICBsZXQgb3B0aW9uc1xuXG4gICAgLy8gRXh0cmFjdCBvcHRpb25zIGZyb20gYXJncyBpZiBhbnlcbiAgICBjb25zdCBsYXN0QXJnID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdXG5cbiAgICBpZiAobGFzdEFyZyAmJiB0eXBlb2YgbGFzdEFyZyA9PSBcIm9iamVjdFwiKSB7XG4gICAgICBvcHRpb25zID0gYXJncy5wb3AoKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG5cbiAgICAvLyBUYWtlIGxvY2FsZSBmcm9tIG9wdGlvbnMgaWYgZ2l2ZW4gb3IgZmFsbCBiYWNrIHRvIGZhbGxiYWNrXG4gICAgY29uc3Qge2xvY2FsZSwgaG9zdCwgcG9ydCwgcHJvdG9jb2wsIC4uLnJlc3RPcHRpb25zfSA9IG9wdGlvbnNcblxuICAgIGlmIChsb2NhbGl6ZWRSb3V0ZXMpIHtcbiAgICAgIC8vIFB1dCB0b2dldGhlciByb3V0ZSB3aXRoIHZhcmlhYmxlcyBhbmQgc3RhdGljIHRyYW5zbGF0ZWQgcGFydHMgKHdoaWNoIHdlcmUgdHJhbnNsYXRlZCBhbmQgY2FjaGVkIHByZXZpb3VzbHkpXG4gICAgICBsZXQgdHJhbnNsYXRlZFJvdXRlID0gZGlnZyhsb2NhbGl6ZWRSb3V0ZXMsIGxvY2FsZSB8fCB0aGlzLmdldExvY2FsZSgpKVxuICAgICAgICAubWFwKChwYXRoUGFydCkgPT4ge1xuICAgICAgICAgIGlmIChwYXRoUGFydC50eXBlID09IFwicGF0aFBhcnRcIikge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhQYXJ0Lm5hbWVcbiAgICAgICAgICB9IGVsc2UgaWYgKHBhdGhQYXJ0LnR5cGUgPT0gXCJ2YXJpYWJsZVwiKSB7XG4gICAgICAgICAgICAvLyBBcmdzIG1pZ2h0IG5vdCBjb250YWluIHRoZSByaWdodCBhbW91bnQgb2YgdmFyaWFibGVzLCBzbyBkb250IGNoYW5nZSB0aGlzIHRvICdkaWdnJ1xuICAgICAgICAgICAgcmV0dXJuIGRpZyhhcmdzLCBkaWdnKHBhdGhQYXJ0LCBcImNvdW50XCIpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBwYXRoIHBhcnQgdHlwZTogJHtwYXRoUGFydC50eXBlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuam9pbihcIi9cIilcblxuICAgICAgaWYgKHJlc3RPcHRpb25zICYmIE9iamVjdC5rZXlzKHJlc3RPcHRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRyYW5zbGF0ZWRSb3V0ZSArPSBgPyR7cXMuc3RyaW5naWZ5KHJlc3RPcHRpb25zLCB7ZW5jb2RlcjogdXJsRW5jb2RlfSl9YFxuICAgICAgfVxuXG4gICAgICBpZiAodXJsKSByZXR1cm4gdGhpcy5hZGRIb3N0VG9Sb3V0ZSh7aG9zdCwgcG9ydCwgcHJvdG9jb2wsIHRyYW5zbGF0ZWRSb3V0ZX0pXG5cbiAgICAgIHJldHVybiB0cmFuc2xhdGVkUm91dGVcbiAgICB9IGVsc2UgaWYgKHBhdGhQYXJ0cykge1xuICAgICAgLy8gUHV0IHRvZ2V0aGVyIHJvdXRlIHdpdGggdmFyaWFibGVzIGFuZCBzdGF0aWMgdHJhbnNsYXRlZCBwYXJ0cyAod2hpY2ggd2VyZSB0cmFuc2xhdGVkIGFuZCBjYWNoZWQgcHJldmlvdXNseSlcbiAgICAgIGxldCB0cmFuc2xhdGVkUm91dGUgPSBwYXRoUGFydHNcbiAgICAgICAgLm1hcCgocGF0aFBhcnQpID0+IHtcbiAgICAgICAgICBpZiAocGF0aFBhcnQudHlwZSA9PSBcInBhdGhQYXJ0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoUGFydC5uYW1lXG4gICAgICAgICAgfSBlbHNlIGlmIChwYXRoUGFydC50eXBlID09IFwidmFyaWFibGVcIikge1xuICAgICAgICAgICAgcmV0dXJuIGRpZ2coYXJncywgZGlnZyhwYXRoUGFydCwgXCJjb3VudFwiKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgcGF0aCBwYXJ0IHR5cGU6ICR7cGF0aFBhcnQudHlwZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIvXCIpXG5cbiAgICAgIGlmIChyZXN0T3B0aW9ucyAmJiBPYmplY3Qua2V5cyhyZXN0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgICB0cmFuc2xhdGVkUm91dGUgKz0gYD8ke3FzLnN0cmluZ2lmeShyZXN0T3B0aW9ucywge2VuY29kZXI6IHVybEVuY29kZX0pfWBcbiAgICAgIH1cblxuICAgICAgaWYgKHVybCkgcmV0dXJuIHRoaXMuYWRkSG9zdFRvUm91dGUoe2hvc3QsIHBvcnQsIHByb3RvY29sLCB0cmFuc2xhdGVkUm91dGV9KVxuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZFJvdXRlXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIHN0YXRlXCIpXG4gIH1cblxuICBhZGRIb3N0VG9Sb3V0ZSAoe2hvc3QsIHBvcnQsIHByb3RvY29sLCB0cmFuc2xhdGVkUm91dGV9KSB7XG4gICAgbGV0IGZ1bGxVcmwgPSBcIlwiXG5cbiAgICBjb25zdCBob3N0VG9Vc2UgPSBob3N0IHx8IChnbG9iYWxUaGlzLmxvY2F0aW9uID8gZ2xvYmFsVGhpcy5sb2NhdGlvbi5ob3N0IDogdW5kZWZpbmVkKVxuICAgIGNvbnN0IHBvcnRUb1VzZSA9IHBvcnQgfHwgKGdsb2JhbFRoaXMubG9jYXRpb24gPyBnbG9iYWxUaGlzLmxvY2F0aW9uLnBvcnQgOiB1bmRlZmluZWQpXG5cbiAgICBpZiAoIWhvc3RUb1VzZSkgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGRldGVjdCBob3N0XCIpXG5cbiAgICBpZiAocHJvdG9jb2wpIHtcbiAgICAgIGZ1bGxVcmwgKz0gYCR7cHJvdG9jb2x9Oi8vYFxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5sb2NhdGlvbiAmJiBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sKSB7XG4gICAgICBmdWxsVXJsICs9IGAke2dsb2JhbFRoaXMubG9jYXRpb24ucHJvdG9jb2x9Ly9gXG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bGxVcmwgKz0gXCJodHRwczovL1wiXG4gICAgfVxuXG4gICAgZnVsbFVybCArPSBob3N0VG9Vc2VcblxuICAgIGNvbnN0IGlzSHR0cE5vbkRlZmF1bHRQb3J0ID0gcHJvdG9jb2wgPT0gXCJodHRwXCIgJiYgcG9ydFRvVXNlICE9IDgwXG4gICAgY29uc3QgaXNIdHRwc05vbkRlZmF1bHRQb3J0ID0gcHJvdG9jb2wgPT0gXCJodHRwc1wiICYmIHBvcnQgIT0gNDQzXG5cbiAgICBpZiAocG9ydFRvVXNlICYmIChpc0h0dHBOb25EZWZhdWx0UG9ydCB8fCBpc0h0dHBzTm9uRGVmYXVsdFBvcnQpKSB7XG4gICAgICBmdWxsVXJsICs9IGA6JHtwb3J0VG9Vc2V9YFxuICAgIH1cblxuICAgIGZ1bGxVcmwgKz0gdHJhbnNsYXRlZFJvdXRlXG5cbiAgICByZXR1cm4gZnVsbFVybFxuICB9XG59XG4iXX0=
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLW5hdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsicm91dGVzLW5hdGl2ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUN4QyxPQUFPLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDekMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFBO0FBQ25CLE9BQU8sU0FBUyxNQUFNLGlCQUFpQixDQUFBO0FBRXZDOztHQUVHO0FBQ0g7O0dBRUc7QUFDSDs7R0FFRztBQUNIOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLG9CQUFvQjtJQUN2QyxpREFBaUQ7SUFDakQsWUFBYSxFQUFDLFNBQVMsRUFBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQTtRQUMxQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFBO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUE7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0IsQ0FBRSxnQkFBZ0IsRUFBRSxtQkFBbUI7UUFDekQsS0FBSyxNQUFNLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvRCxNQUFNLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQzFELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDcEMsTUFBTSxjQUFjLEdBQUcsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFBO1lBQy9ELE1BQU0sYUFBYSxHQUFHLEdBQUcsVUFBVSxDQUFDLFFBQVEs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QUFBO1FBRWhFLElBQUksU0FBUyxJQUFJLENBQUMsb0JBQW9CLElBQUkscUJBQXFCLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFBO1FBQzVCLENBQUM7UUFFRCxPQUFPLElBQUksZUFBZSxDQUFBO1FBRTFCLE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IHtkaWcsIGRpZ2csIGRpZ3N9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IHFzIGZyb20gXCJxc1wiXG5pbXBvcnQgdXJsRW5jb2RlIGZyb20gXCIuL3VybC1lbmNvZGUuanNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHt7dHlwZTogXCJwYXRoUGFydFwiLCBuYW1lOiBzdHJpbmd9IHwge3R5cGU6IFwidmFyaWFibGVcIiwgY291bnQ6IG51bWJlcn19IFBhdGhQYXJ0XG4gKi9cbi8qKlxuICogQHR5cGVkZWYge3thcmdzOiBBcnJheTx1bmtub3duPiwgbG9jYWxpemVkUm91dGVzPzogUmVjb3JkPHN0cmluZywgUGF0aFBhcnRbXT4sIHBhdGhQYXJ0cz86IFBhdGhQYXJ0W10sIHVybD86IGJvb2xlYW59fSBUcmFuc2xhdGVSb3V0ZUFyZ3NcbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiB7e2hvc3Q/OiBzdHJpbmcsIHBvcnQ/OiBudW1iZXJ8c3RyaW5nLCBwcm90b2NvbD86IHN0cmluZywgdHJhbnNsYXRlZFJvdXRlOiBzdHJpbmd9fSBIb3N0Um91dGVBcmdzXG4gKi9cbi8qKlxuICogQHR5cGVkZWYge3tsb2NhbGU/OiBzdHJpbmcsIGhvc3Q/OiBzdHJpbmcsIHBvcnQ/OiBudW1iZXJ8c3RyaW5nLCBwcm90b2NvbD86IHN0cmluZ30gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gUm91dGVPcHRpb25zXG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgcGF0aHMgYW5kIFVSTHMgZnJvbSByb3V0ZSBkZWZpbml0aW9ucyBmb3IgbmF0aXZlIHVzYWdlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlclJvdXRlc05hdGl2ZSB7XG4gIC8qKiBAcGFyYW0ge3tnZXRMb2NhbGU6ICgpID0+IHN0cmluZ319IG9wdGlvbnMgKi9cbiAgY29uc3RydWN0b3IgKHtnZXRMb2NhbGV9KSB7XG4gICAgdGhpcy5nZXRMb2NhbGUgPSBnZXRMb2NhbGVcbiAgICB0aGlzLnJvdXRlRGVmaW5pdGlvbnMgPSBbXVxuICAgIHRoaXMucm91dGVUcmFuc2xhdGlvblBhcnRzID0ge31cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcm91dGVEZWZpbml0aW9uc1xuICAgKiBAcGFyYW0ge3tsb2NhbGl6ZWQ/OiBib29sZWFufT19IHJvdXRlRGVmaW5pdGlvbkFyZ3NcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBsb2FkUm91dGVEZWZpbml0aW9ucyAocm91dGVEZWZpbml0aW9ucywgcm91dGVEZWZpbml0aW9uQXJncykge1xuICAgIGZvciAoY29uc3Qgcm91dGVEZWZpbml0aW9uIG9mIGRpZ2cocm91dGVEZWZpbml0aW9ucywgXCJyb3V0ZXNcIikpIHtcbiAgICAgIGNvbnN0IHtuYW1lLCBwYXRofSA9IGRpZ3Mocm91dGVEZWZpbml0aW9uLCBcIm5hbWVcIiwgXCJwYXRoXCIpXG4gICAgICBjb25zdCByYXdQYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKVxuICAgICAgY29uc3QgcGF0aE1ldGhvZE5hbWUgPSBgJHtpbmZsZWN0aW9uLmNhbWVsaXplKG5hbWUsIHRydWUpfVBhdGhgXG4gICAgICBjb25zdCB1cmxNZXRob2ROYW1lID0gYCR7aW5mbGVjdGlvbi5jYW1lbGl6ZShuYW1lLCB0cnVlKX1VcmxgXG5cbiAgICAgIGlmIChyb3V0ZURlZmluaXRpb25BcmdzICYmIHJvdXRlRGVmaW5pdGlvbkFyZ3MubG9jYWxpemVkKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsaXplZFJvdXRlcyA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgUGF0aFBhcnRbXT59ICovIHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBsb2NhbGUgaW4gdGhpcy5yb3V0ZVRyYW5zbGF0aW9uUGFydHMpIHtcbiAgICAgICAgICBsZXQgdmFyaWFibGVDb3VudCA9IDBcblxuICAgICAgICAgIGNvbnN0IGxvY2FsaXplZFBhdGhQYXJ0cyA9IC8qKiBAdHlwZSB7UGF0aFBhcnRbXX0gKi8gW1xuICAgICAgICAgICAge3R5cGU6IFwicGF0aFBhcnRcIiwgbmFtZTogXCJcIn0sXG4gICAgICAgICAgICB7dHlwZTogXCJwYXRoUGFydFwiLCBuYW1lOiBsb2NhbGV9XG4gICAgICAgICAgXVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCByYXdQYXRoUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0ID0gcmF3UGF0aFBhcnRzW2ldXG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZU1hdGNoID0gcGF0aFBhcnQubWF0Y2goL146KFtBLXpfXSspJC8pXG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtZGVwdGhcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZU1hdGNoKSB7XG4gICAgICAgICAgICAgIGxvY2FsaXplZFBhdGhQYXJ0cy5wdXNoKHt0eXBlOiBcInZhcmlhYmxlXCIsIGNvdW50OiB2YXJpYWJsZUNvdW50Kyt9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXRoUGFydCkge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5pMThuLnQoYHJvdXRlcy4ke3BhdGhQYXJ0fWAsIG51bGwsIHtkZWZhdWx0OiBwYXRoUGFydCwgbG9jYWxlfSlcblxuICAgICAgICAgICAgICBsb2NhbGl6ZWRQYXRoUGFydHMucHVzaCh7dHlwZTogXCJwYXRoUGFydFwiLCBuYW1lfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsb2NhbGl6ZWRSb3V0ZXNbbG9jYWxlXSA9IGxvY2FsaXplZFBhdGhQYXJ0c1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1twYXRoTWV0aG9kTmFtZV0gPSAoLi4uYXJncykgPT4gdGhpcy50cmFuc2xhdGVSb3V0ZSh7YXJncywgbG9jYWxpemVkUm91dGVzfSlcbiAgICAgICAgdGhpc1t1cmxNZXRob2ROYW1lXSA9ICguLi5hcmdzKSA9PiB0aGlzLnRyYW5zbGF0ZVJvdXRlKHthcmdzLCBsb2NhbGl6ZWRSb3V0ZXMsIHVybDogdHJ1ZX0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdmFyaWFibGVDb3VudCA9IDBcblxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSAvKiogQHR5cGUge1BhdGhQYXJ0W119ICovIHJhd1BhdGhQYXJ0cy5tYXAoKHBhdGhQYXJ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFyaWFibGVNYXRjaCA9IHBhdGhQYXJ0Lm1hdGNoKC9eOihbQS16X10rKSQvKVxuXG4gICAgICAgICAgaWYgKHZhcmlhYmxlTWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiB7dHlwZTogXCJ2YXJpYWJsZVwiLCBjb3VudDogdmFyaWFibGVDb3VudCsrfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge3R5cGU6IFwicGF0aFBhcnRcIiwgbmFtZTogcGF0aFBhcnR9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXNbcGF0aE1ldGhvZE5hbWVdID0gKC4uLmFyZ3MpID0+IHRoaXMudHJhbnNsYXRlUm91dGUoe2FyZ3MsIHBhdGhQYXJ0c30pXG4gICAgICAgIHRoaXNbdXJsTWV0aG9kTmFtZV0gPSAoLi4uYXJncykgPT4gdGhpcy50cmFuc2xhdGVSb3V0ZSh7YXJncywgcGF0aFBhcnRzLCB1cmw6IHRydWV9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaTE4blxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGxvYWRSb3V0ZVRyYW5zbGF0aW9ucyAoaTE4bikge1xuICAgIHRoaXMuaTE4biA9IGkxOG5cbiAgICBjb25zdCBsb2NhbGVzID0gZGlnZyhpMThuLCBcImxvY2FsZXNcIilcblxuICAgIGZvciAoY29uc3QgbG9jYWxlIGluIGxvY2FsZXMpIHtcbiAgICAgIGNvbnN0IHJvdXRlVHJhbnNsYXRpb25zID0gZGlnKGxvY2FsZXMsIGxvY2FsZSwgXCJyb3V0ZXNcIilcblxuICAgICAgaWYgKHJvdXRlVHJhbnNsYXRpb25zKSB7XG4gICAgICAgIGlmICghKGxvY2FsZSBpbiB0aGlzLnJvdXRlVHJhbnNsYXRpb25QYXJ0cykpIHRoaXMucm91dGVUcmFuc2xhdGlvblBhcnRzW2xvY2FsZV0gPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJvdXRlVHJhbnNsYXRpb25zKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZVRyYW5zbGF0aW9uUGFydHNbbG9jYWxlXVtrZXldID0gcm91dGVUcmFuc2xhdGlvbnNba2V5XVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VHJhbnNsYXRlUm91dGVBcmdzfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0cmFuc2xhdGVSb3V0ZSAoe2FyZ3MsIGxvY2FsaXplZFJvdXRlcywgcGF0aFBhcnRzLCB1cmx9KSB7XG4gICAgbGV0IG9wdGlvbnMgPSAvKiogQHR5cGUge1JvdXRlT3B0aW9uc30gKi8ge31cblxuICAgIC8vIEV4dHJhY3Qgb3B0aW9ucyBmcm9tIGFyZ3MgaWYgYW55XG4gICAgY29uc3QgbGFzdEFyZyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXVxuXG4gICAgaWYgKGxhc3RBcmcgJiYgdHlwZW9mIGxhc3RBcmcgPT0gXCJvYmplY3RcIikge1xuICAgICAgb3B0aW9ucyA9IC8qKiBAdHlwZSB7Um91dGVPcHRpb25zfSAqLyBhcmdzLnBvcCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgIH1cblxuICAgIC8vIFRha2UgbG9jYWxlIGZyb20gb3B0aW9ucyBpZiBnaXZlbiBvciBmYWxsIGJhY2sgdG8gZmFsbGJhY2tcbiAgICBjb25zdCB7bG9jYWxlLCBob3N0LCBwb3J0LCBwcm90b2NvbCwgLi4ucmVzdE9wdGlvbnN9ID0gb3B0aW9uc1xuXG4gICAgaWYgKGxvY2FsaXplZFJvdXRlcykge1xuICAgICAgLy8gUHV0IHRvZ2V0aGVyIHJvdXRlIHdpdGggdmFyaWFibGVzIGFuZCBzdGF0aWMgdHJhbnNsYXRlZCBwYXJ0cyAod2hpY2ggd2VyZSB0cmFuc2xhdGVkIGFuZCBjYWNoZWQgcHJldmlvdXNseSlcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQYXRoUGFydHMgPSAvKiogQHR5cGUge1BhdGhQYXJ0W119ICovIGRpZ2cobG9jYWxpemVkUm91dGVzLCBsb2NhbGUgfHwgdGhpcy5nZXRMb2NhbGUoKSlcbiAgICAgIGxldCB0cmFuc2xhdGVkUm91dGUgPSB0cmFuc2xhdGVkUGF0aFBhcnRzXG4gICAgICAgIC5tYXAoKHBhdGhQYXJ0KSA9PiB7XG4gICAgICAgICAgaWYgKHBhdGhQYXJ0LnR5cGUgPT0gXCJwYXRoUGFydFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQubmFtZVxuICAgICAgICAgIH0gZWxzZSBpZiAocGF0aFBhcnQudHlwZSA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICAgICAgICAgIC8vIEFyZ3MgbWlnaHQgbm90IGNvbnRhaW4gdGhlIHJpZ2h0IGFtb3VudCBvZiB2YXJpYWJsZXMsIHNvIGRvbnQgY2hhbmdlIHRoaXMgdG8gJ2RpZ2cnXG4gICAgICAgICAgICByZXR1cm4gZGlnKGFyZ3MsIGRpZ2cocGF0aFBhcnQsIFwiY291bnRcIikpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBwYXRoIHBhcnQgdHlwZVwiKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIvXCIpXG5cbiAgICAgIGlmIChyZXN0T3B0aW9ucyAmJiBPYmplY3Qua2V5cyhyZXN0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgICB0cmFuc2xhdGVkUm91dGUgKz0gYD8ke3FzLnN0cmluZ2lmeShyZXN0T3B0aW9ucywge2VuY29kZXI6IHVybEVuY29kZX0pfWBcbiAgICAgIH1cblxuICAgICAgaWYgKHVybCkgcmV0dXJuIHRoaXMuYWRkSG9zdFRvUm91dGUoe2hvc3QsIHBvcnQsIHByb3RvY29sLCB0cmFuc2xhdGVkUm91dGV9KVxuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZFJvdXRlXG4gICAgfSBlbHNlIGlmIChwYXRoUGFydHMpIHtcbiAgICAgIC8vIFB1dCB0b2dldGhlciByb3V0ZSB3aXRoIHZhcmlhYmxlcyBhbmQgc3RhdGljIHRyYW5zbGF0ZWQgcGFydHMgKHdoaWNoIHdlcmUgdHJhbnNsYXRlZCBhbmQgY2FjaGVkIHByZXZpb3VzbHkpXG4gICAgICBsZXQgdHJhbnNsYXRlZFJvdXRlID0gcGF0aFBhcnRzXG4gICAgICAgIC5tYXAoKHBhdGhQYXJ0KSA9PiB7XG4gICAgICAgICAgaWYgKHBhdGhQYXJ0LnR5cGUgPT0gXCJwYXRoUGFydFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQubmFtZVxuICAgICAgICAgIH0gZWxzZSBpZiAocGF0aFBhcnQudHlwZSA9PSBcInZhcmlhYmxlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkaWdnKGFyZ3MsIGRpZ2cocGF0aFBhcnQsIFwiY291bnRcIikpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBwYXRoIHBhcnQgdHlwZVwiKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIvXCIpXG5cbiAgICAgIGlmIChyZXN0T3B0aW9ucyAmJiBPYmplY3Qua2V5cyhyZXN0T3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgICAgICB0cmFuc2xhdGVkUm91dGUgKz0gYD8ke3FzLnN0cmluZ2lmeShyZXN0T3B0aW9ucywge2VuY29kZXI6IHVybEVuY29kZX0pfWBcbiAgICAgIH1cblxuICAgICAgaWYgKHVybCkgcmV0dXJuIHRoaXMuYWRkSG9zdFRvUm91dGUoe2hvc3QsIHBvcnQsIHByb3RvY29sLCB0cmFuc2xhdGVkUm91dGV9KVxuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZFJvdXRlXG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5oYW5kbGVkIHN0YXRlXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIb3N0Um91dGVBcmdzfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBhZGRIb3N0VG9Sb3V0ZSAoe2hvc3QsIHBvcnQsIHByb3RvY29sLCB0cmFuc2xhdGVkUm91dGV9KSB7XG4gICAgbGV0IGZ1bGxVcmwgPSBcIlwiXG5cbiAgICBjb25zdCBob3N0VG9Vc2UgPSBob3N0IHx8IChnbG9iYWxUaGlzLmxvY2F0aW9uID8gZ2xvYmFsVGhpcy5sb2NhdGlvbi5ob3N0IDogdW5kZWZpbmVkKVxuICAgIGNvbnN0IHBvcnRUb1VzZSA9IHBvcnQgfHwgKGdsb2JhbFRoaXMubG9jYXRpb24gPyBnbG9iYWxUaGlzLmxvY2F0aW9uLnBvcnQgOiB1bmRlZmluZWQpXG5cbiAgICBpZiAoIWhvc3RUb1VzZSkgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGRldGVjdCBob3N0XCIpXG5cbiAgICBpZiAocHJvdG9jb2wpIHtcbiAgICAgIGZ1bGxVcmwgKz0gYCR7cHJvdG9jb2x9Oi8vYFxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5sb2NhdGlvbiAmJiBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sKSB7XG4gICAgICBmdWxsVXJsICs9IGAke2dsb2JhbFRoaXMubG9jYXRpb24ucHJvdG9jb2x9Ly9gXG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bGxVcmwgKz0gXCJodHRwczovL1wiXG4gICAgfVxuXG4gICAgZnVsbFVybCArPSBob3N0VG9Vc2VcblxuICAgIGNvbnN0IGlzSHR0cE5vbkRlZmF1bHRQb3J0ID0gcHJvdG9jb2wgPT0gXCJodHRwXCIgJiYgcG9ydFRvVXNlICE9IDgwXG4gICAgY29uc3QgaXNIdHRwc05vbkRlZmF1bHRQb3J0ID0gcHJvdG9jb2wgPT0gXCJodHRwc1wiICYmIHBvcnQgIT0gNDQzXG5cbiAgICBpZiAocG9ydFRvVXNlICYmIChpc0h0dHBOb25EZWZhdWx0UG9ydCB8fCBpc0h0dHBzTm9uRGVmYXVsdFBvcnQpKSB7XG4gICAgICBmdWxsVXJsICs9IGA6JHtwb3J0VG9Vc2V9YFxuICAgIH1cblxuICAgIGZ1bGxVcmwgKz0gdHJhbnNsYXRlZFJvdXRlXG5cbiAgICByZXR1cm4gZnVsbFVybFxuICB9XG59XG4iXX0=
|