@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.
@@ -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: any;
19
+ getLocale: () => string;
4
20
  });
5
- getLocale: any;
21
+ getLocale: () => string;
6
22
  routeDefinitions: any[];
7
23
  routeTranslationParts: {};
8
- loadRouteDefinitions(routeDefinitions: any, routeDefinitionArgs: any): void;
9
- loadRouteTranslations(i18n: any): void;
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
- translateRoute({ args, localizedRoutes, pathParts, url }: {
12
- args: any;
13
- localizedRoutes: any;
14
- pathParts: any;
15
- url: any;
16
- }): any;
17
- addHostToRoute({ host, port, protocol, translatedRoute }: {
18
- host: any;
19
- port: any;
20
- protocol: any;
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;IACE;;OAIC;IAHC,eAA0B;IAC1B,wBAA0B;IAC1B,0BAA+B;IAGjC,4EAsDC;IAED,uCAeC;IAdC,UAAgB;IAgBlB;;;;;YA6DC;IAED;;;;;eA4BC;CACF"}
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"}
@@ -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
- let translatedRoute = digg(localizedRoutes, locale || this.getLocale())
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(`Unhandled path part type: ${pathPart.type}`);
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(`Unhandled path part type: ${pathPart.type}`);
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=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kaspernj/api-maker",
3
3
  "type": "module",
4
- "version": "1.0.2086",
4
+ "version": "1.0.2087",
5
5
  "description": "My new module",
6
6
  "files": [
7
7
  "build/**"