@sdkgen/node-runtime 0.0.0-dev.20230110171718 → 0.0.0-dev.20230120141325

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,11 +1,7 @@
1
- export { BaseApiConfig } from "./api-config.js";
2
- export type { Middleware as SdkgenMiddleware } from "./api-config.js";
3
- export type { Context, ContextReply, ContextRequest } from "./context.js";
4
- export { decode, encode } from "./encode-decode.js";
5
- export { Fatal, SdkgenError, SdkgenErrorWithData } from "./error.js";
6
- export { SdkgenHttpClient } from "./http-client.js";
7
- export { SdkgenHttpServer } from "./http-server.js";
8
- export { apiTestWrapper } from "./test-wrapper.js";
9
- export { startSdkgenServer, createSdkgenEndpoint, createSdkgenType, createSdkgenTestClient, Uuid, Int, UInt, encodeValue, decodeValue, type TypeSpec, type GenerateTyping, type GenerateTypingFromFields, } from "./new-interface.js";
10
- export interface DefaultExtraContext {
11
- }
1
+ export { BaseApiConfig } from "./api-config";
2
+ export { Context, ContextReply, ContextRequest } from "./context";
3
+ export { decode, encode } from "./encode-decode";
4
+ export { Fatal, SdkgenError, SdkgenErrorWithData } from "./error";
5
+ export { SdkgenHttpClient } from "./http-client";
6
+ export { SdkgenHttpServer } from "./http-server";
7
+ export { apiTestWrapper } from "./test-wrapper";
package/dist/src/index.js CHANGED
@@ -1,8 +1,18 @@
1
- export { BaseApiConfig } from "./api-config.js";
2
- export { decode, encode } from "./encode-decode.js";
3
- export { Fatal, SdkgenError, SdkgenErrorWithData } from "./error.js";
4
- export { SdkgenHttpClient } from "./http-client.js";
5
- export { SdkgenHttpServer } from "./http-server.js";
6
- export { apiTestWrapper } from "./test-wrapper.js";
7
- export { startSdkgenServer, createSdkgenEndpoint, createSdkgenType, createSdkgenTestClient, Uuid, Int, UInt, encodeValue, decodeValue, } from "./new-interface.js";
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsSUFBSSxFQUNKLEdBQUcsRUFDSCxJQUFJLEVBQ0osV0FBVyxFQUNYLFdBQVcsR0FJWixNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQmFzZUFwaUNvbmZpZyB9IGZyb20gXCIuL2FwaS1jb25maWcuanNcIjtcbmV4cG9ydCB0eXBlIHsgTWlkZGxld2FyZSBhcyBTZGtnZW5NaWRkbGV3YXJlIH0gZnJvbSBcIi4vYXBpLWNvbmZpZy5qc1wiO1xuZXhwb3J0IHR5cGUgeyBDb250ZXh0LCBDb250ZXh0UmVwbHksIENvbnRleHRSZXF1ZXN0IH0gZnJvbSBcIi4vY29udGV4dC5qc1wiO1xuZXhwb3J0IHsgZGVjb2RlLCBlbmNvZGUgfSBmcm9tIFwiLi9lbmNvZGUtZGVjb2RlLmpzXCI7XG5leHBvcnQgeyBGYXRhbCwgU2RrZ2VuRXJyb3IsIFNka2dlbkVycm9yV2l0aERhdGEgfSBmcm9tIFwiLi9lcnJvci5qc1wiO1xuZXhwb3J0IHsgU2RrZ2VuSHR0cENsaWVudCB9IGZyb20gXCIuL2h0dHAtY2xpZW50LmpzXCI7XG5leHBvcnQgeyBTZGtnZW5IdHRwU2VydmVyIH0gZnJvbSBcIi4vaHR0cC1zZXJ2ZXIuanNcIjtcbmV4cG9ydCB7IGFwaVRlc3RXcmFwcGVyIH0gZnJvbSBcIi4vdGVzdC13cmFwcGVyLmpzXCI7XG5leHBvcnQge1xuICBzdGFydFNka2dlblNlcnZlcixcbiAgY3JlYXRlU2RrZ2VuRW5kcG9pbnQsXG4gIGNyZWF0ZVNka2dlblR5cGUsXG4gIGNyZWF0ZVNka2dlblRlc3RDbGllbnQsXG4gIFV1aWQsXG4gIEludCxcbiAgVUludCxcbiAgZW5jb2RlVmFsdWUsXG4gIGRlY29kZVZhbHVlLFxuICB0eXBlIFR5cGVTcGVjLFxuICB0eXBlIEdlbmVyYXRlVHlwaW5nLFxuICB0eXBlIEdlbmVyYXRlVHlwaW5nRnJvbUZpZWxkcyxcbn0gZnJvbSBcIi4vbmV3LWludGVyZmFjZS5qc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlZmF1bHRFeHRyYUNvbnRleHQge31cbiJdfQ==
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.apiTestWrapper = exports.SdkgenHttpServer = exports.SdkgenHttpClient = exports.SdkgenErrorWithData = exports.SdkgenError = exports.Fatal = exports.encode = exports.decode = exports.BaseApiConfig = void 0;
4
+ var api_config_1 = require("./api-config");
5
+ Object.defineProperty(exports, "BaseApiConfig", { enumerable: true, get: function () { return api_config_1.BaseApiConfig; } });
6
+ var encode_decode_1 = require("./encode-decode");
7
+ Object.defineProperty(exports, "decode", { enumerable: true, get: function () { return encode_decode_1.decode; } });
8
+ Object.defineProperty(exports, "encode", { enumerable: true, get: function () { return encode_decode_1.encode; } });
9
+ var error_1 = require("./error");
10
+ Object.defineProperty(exports, "Fatal", { enumerable: true, get: function () { return error_1.Fatal; } });
11
+ Object.defineProperty(exports, "SdkgenError", { enumerable: true, get: function () { return error_1.SdkgenError; } });
12
+ Object.defineProperty(exports, "SdkgenErrorWithData", { enumerable: true, get: function () { return error_1.SdkgenErrorWithData; } });
13
+ var http_client_1 = require("./http-client");
14
+ Object.defineProperty(exports, "SdkgenHttpClient", { enumerable: true, get: function () { return http_client_1.SdkgenHttpClient; } });
15
+ var http_server_1 = require("./http-server");
16
+ Object.defineProperty(exports, "SdkgenHttpServer", { enumerable: true, get: function () { return http_server_1.SdkgenHttpServer; } });
17
+ var test_wrapper_1 = require("./test-wrapper");
18
+ Object.defineProperty(exports, "apiTestWrapper", { enumerable: true, get: function () { return test_wrapper_1.apiTestWrapper; } });
@@ -1,2 +1,2 @@
1
- import type { SdkgenHttpServer } from "./http-server.js";
1
+ import type { SdkgenHttpServer } from "./http-server";
2
2
  export declare function setupSwagger<ExtraContextT>(server: SdkgenHttpServer<ExtraContextT>): void;
@@ -1,143 +1,148 @@
1
- import { DecimalPrimitiveType, JsonPrimitiveType, ArrayType, Base64PrimitiveType, BigIntPrimitiveType, BoolPrimitiveType, BytesPrimitiveType, CnpjPrimitiveType, CpfPrimitiveType, DatePrimitiveType, DateTimePrimitiveType, DescriptionAnnotation, EmailPrimitiveType, EnumType, FloatPrimitiveType, HexPrimitiveType, HtmlPrimitiveType, IntPrimitiveType, MoneyPrimitiveType, OptionalType, RestAnnotation, StringPrimitiveType, StructType, TypeReference, UIntPrimitiveType, UrlPrimitiveType, UuidPrimitiveType, VoidPrimitiveType, } from "@sdkgen/parser";
2
- import staticFilesHandler from "serve-handler";
3
- import { getAbsoluteFSPath as getSwaggerUiAssetPath } from "swagger-ui-dist";
4
- const swaggerUiAssetPath = getSwaggerUiAssetPath();
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.setupSwagger = void 0;
7
+ const parser_1 = require("@sdkgen/parser");
8
+ const serve_handler_1 = __importDefault(require("serve-handler"));
9
+ const swagger_ui_dist_1 = require("swagger-ui-dist");
10
+ const error_1 = require("./error");
11
+ const swaggerUiAssetPath = (0, swagger_ui_dist_1.getAbsoluteFSPath)();
5
12
  function objectFromEntries(entries) {
6
13
  return Object.assign({}, ...Array.from(entries, ([k, v]) => ({ [k]: v })));
7
14
  }
8
15
  function typeToSchema(definitions, type) {
9
- if (type instanceof EnumType) {
16
+ if (type instanceof parser_1.EnumType) {
10
17
  return {
11
18
  enum: type.values.map(x => x.value),
12
19
  type: "string",
13
20
  };
14
21
  }
15
- else if (type instanceof StructType) {
22
+ else if (type instanceof parser_1.StructType) {
16
23
  return {
17
24
  properties: objectFromEntries(type.fields.map(field => [
18
25
  field.name,
19
- {
20
- description: field.annotations
21
- .filter(x => x instanceof DescriptionAnnotation)
26
+ Object.assign({ description: field.annotations
27
+ .filter(x => x instanceof parser_1.DescriptionAnnotation)
22
28
  .map(x => x.text)
23
- .join(" ") || undefined,
24
- ...typeToSchema(definitions, field.type),
25
- },
29
+ .join(" ") || undefined }, typeToSchema(definitions, field.type)),
26
30
  ])),
27
- required: type.fields.filter(f => !(f.type instanceof OptionalType)).map(f => f.name),
31
+ required: type.fields.filter(f => !(f.type instanceof parser_1.OptionalType)).map(f => f.name),
28
32
  type: "object",
33
+ additionalProperties: false,
29
34
  };
30
35
  }
31
- else if (type instanceof StringPrimitiveType ||
32
- type instanceof UuidPrimitiveType ||
33
- type instanceof HexPrimitiveType ||
34
- type instanceof HtmlPrimitiveType ||
35
- type instanceof Base64PrimitiveType) {
36
+ else if (type instanceof parser_1.StringPrimitiveType ||
37
+ type instanceof parser_1.UuidPrimitiveType ||
38
+ type instanceof parser_1.HexPrimitiveType ||
39
+ type instanceof parser_1.HtmlPrimitiveType ||
40
+ type instanceof parser_1.Base64PrimitiveType) {
36
41
  return {
37
42
  type: "string",
38
43
  };
39
44
  }
40
- else if (type instanceof UrlPrimitiveType) {
45
+ else if (type instanceof parser_1.UrlPrimitiveType) {
41
46
  return {
42
47
  format: "uri",
43
48
  type: "string",
44
49
  };
45
50
  }
46
- else if (type instanceof DatePrimitiveType) {
51
+ else if (type instanceof parser_1.DatePrimitiveType) {
47
52
  return {
48
53
  format: "date",
49
54
  type: "string",
50
55
  };
51
56
  }
52
- else if (type instanceof DateTimePrimitiveType) {
57
+ else if (type instanceof parser_1.DateTimePrimitiveType) {
53
58
  return {
54
59
  format: "date-time",
55
60
  type: "string",
56
61
  };
57
62
  }
58
- else if (type instanceof CpfPrimitiveType) {
63
+ else if (type instanceof parser_1.CpfPrimitiveType) {
59
64
  return {
60
65
  type: "string",
61
66
  };
62
67
  }
63
- else if (type instanceof CnpjPrimitiveType) {
68
+ else if (type instanceof parser_1.CnpjPrimitiveType) {
64
69
  return {
65
70
  type: "string",
66
71
  };
67
72
  }
68
- else if (type instanceof BoolPrimitiveType) {
73
+ else if (type instanceof parser_1.BoolPrimitiveType) {
69
74
  return {
70
75
  type: "boolean",
71
76
  };
72
77
  }
73
- else if (type instanceof BytesPrimitiveType) {
78
+ else if (type instanceof parser_1.BytesPrimitiveType) {
74
79
  return {
75
80
  format: "byte",
76
81
  type: "string",
77
82
  };
78
83
  }
79
- else if (type instanceof IntPrimitiveType) {
84
+ else if (type instanceof parser_1.IntPrimitiveType) {
80
85
  return {
81
86
  format: "int32",
82
87
  type: "integer",
83
88
  };
84
89
  }
85
- else if (type instanceof UIntPrimitiveType) {
90
+ else if (type instanceof parser_1.UIntPrimitiveType) {
86
91
  return {
87
92
  format: "int32",
88
93
  minimum: 0,
89
94
  type: "integer",
90
95
  };
91
96
  }
92
- else if (type instanceof MoneyPrimitiveType) {
97
+ else if (type instanceof parser_1.MoneyPrimitiveType) {
93
98
  return {
94
99
  format: "int64",
95
100
  type: "integer",
96
101
  };
97
102
  }
98
- else if (type instanceof FloatPrimitiveType) {
103
+ else if (type instanceof parser_1.FloatPrimitiveType) {
99
104
  return {
100
105
  type: "number",
101
106
  };
102
107
  }
103
- else if (type instanceof EmailPrimitiveType) {
108
+ else if (type instanceof parser_1.EmailPrimitiveType) {
104
109
  return {
105
110
  type: "string",
106
111
  };
107
112
  }
108
- else if (type instanceof BigIntPrimitiveType) {
113
+ else if (type instanceof parser_1.BigIntPrimitiveType) {
109
114
  return {
110
115
  type: "string",
111
116
  };
112
117
  }
113
- else if (type instanceof DecimalPrimitiveType) {
118
+ else if (type instanceof parser_1.DecimalPrimitiveType) {
114
119
  return {
115
120
  type: "string",
116
121
  };
117
122
  }
118
- else if (type instanceof JsonPrimitiveType) {
123
+ else if (type instanceof parser_1.JsonPrimitiveType) {
119
124
  return {};
120
125
  }
121
- else if (type instanceof OptionalType) {
126
+ else if (type instanceof parser_1.OptionalType) {
122
127
  return {
123
128
  oneOf: [typeToSchema(definitions, type.base), { type: "null" }],
124
129
  };
125
130
  }
126
- else if (type instanceof ArrayType) {
131
+ else if (type instanceof parser_1.ArrayType) {
127
132
  return {
128
133
  items: typeToSchema(definitions, type.base),
129
134
  type: "array",
130
135
  };
131
136
  }
132
- else if (type instanceof TypeReference) {
137
+ else if (type instanceof parser_1.TypeReference) {
133
138
  if (!definitions[type.name]) {
134
139
  definitions[type.name] = typeToSchema(definitions, type.type);
135
140
  }
136
- return { $ref: `#/definitions/${type.name}` };
141
+ return { $ref: `#/$defs/${type.name}` };
137
142
  }
138
143
  throw new Error(`Unhandled type ${type.constructor.name}`);
139
144
  }
140
- export function setupSwagger(server) {
145
+ function setupSwagger(server) {
141
146
  server.addHttpHandler("GET", "/swagger", (req, res) => {
142
147
  if (!server.introspection) {
143
148
  res.statusCode = 404;
@@ -211,7 +216,7 @@ export function setupSwagger(server) {
211
216
  req.url = req.url.replace(/\/swagger/u, "");
212
217
  }
213
218
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
214
- staticFilesHandler(req, res, {
219
+ (0, serve_handler_1.default)(req, res, {
215
220
  cleanUrls: false,
216
221
  directoryListing: false,
217
222
  etag: true,
@@ -224,6 +229,7 @@ export function setupSwagger(server) {
224
229
  });
225
230
  });
226
231
  server.addHttpHandler("GET", "/swagger.json", (req, res) => {
232
+ var _a;
227
233
  if (!server.introspection) {
228
234
  res.statusCode = 404;
229
235
  res.end();
@@ -234,8 +240,51 @@ export function setupSwagger(server) {
234
240
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
235
241
  const paths = {};
236
242
  for (const op of server.apiConfig.ast.operations) {
243
+ const throwAnnotations = op.annotations.filter(ann => ann instanceof parser_1.ThrowsAnnotation);
244
+ let possibleErrors = throwAnnotations
245
+ .map(ann => server.apiConfig.ast.errors.find(err => err.name === ann.error))
246
+ .filter(x => x);
247
+ if (possibleErrors.length === 0) {
248
+ possibleErrors = server.apiConfig.ast.errors;
249
+ }
250
+ const errorsByStatus = new Map();
251
+ for (const error of possibleErrors) {
252
+ const statusAnnotation = error.annotations.find(ann => ann instanceof parser_1.StatusCodeAnnotation);
253
+ const statusCode = statusAnnotation ? statusAnnotation.statusCode : error instanceof error_1.Fatal ? 500 : 400;
254
+ const errorList = (_a = errorsByStatus.get(statusCode)) !== null && _a !== void 0 ? _a : [];
255
+ errorList.push(error);
256
+ errorsByStatus.set(statusCode, errorList);
257
+ }
258
+ const errorResponses = Object.fromEntries([...errorsByStatus.entries()].map(([status, errors]) => [
259
+ status,
260
+ {
261
+ content: {
262
+ "application/json": {
263
+ schema: {
264
+ anyOf: [
265
+ errors.map(error => ({
266
+ properties: Object.assign({ message: {
267
+ type: "string",
268
+ }, type: {
269
+ enum: [error.name],
270
+ type: "string",
271
+ } }, (error.dataType instanceof parser_1.VoidPrimitiveType
272
+ ? {}
273
+ : {
274
+ data: typeToSchema(definitions, error.dataType),
275
+ })),
276
+ required: ["type", "message", ...(error.dataType instanceof parser_1.VoidPrimitiveType ? [] : ["data"])],
277
+ type: "object",
278
+ additionalProperties: false,
279
+ })),
280
+ ],
281
+ },
282
+ },
283
+ },
284
+ },
285
+ ]));
237
286
  for (const ann of op.annotations) {
238
- if (ann instanceof RestAnnotation) {
287
+ if (ann instanceof parser_1.RestAnnotation) {
239
288
  if (!paths[ann.path]) {
240
289
  paths[ann.path] = {};
241
290
  }
@@ -263,121 +312,84 @@ export function setupSwagger(server) {
263
312
  })),
264
313
  ].map(({ name, location, arg }) => ({
265
314
  description: arg.annotations
266
- .filter(x => x instanceof DescriptionAnnotation)
315
+ .filter(x => x instanceof parser_1.DescriptionAnnotation)
267
316
  .map(x => x.text)
268
317
  .join(" ") || undefined,
269
318
  in: location,
270
319
  name,
271
- required: !(arg.type instanceof OptionalType),
320
+ required: !(arg.type instanceof parser_1.OptionalType),
272
321
  schema: typeToSchema(definitions, arg.type),
273
322
  })),
274
323
  requestBody: ann.bodyVariable
275
324
  ? {
276
- content: {
277
- ...(() => {
278
- const bodyType = op.args.find(arg => arg.name === ann.bodyVariable)?.type;
279
- return bodyType instanceof BoolPrimitiveType ||
280
- bodyType instanceof IntPrimitiveType ||
281
- bodyType instanceof UIntPrimitiveType ||
282
- bodyType instanceof FloatPrimitiveType ||
283
- bodyType instanceof StringPrimitiveType ||
284
- bodyType instanceof DatePrimitiveType ||
285
- bodyType instanceof DateTimePrimitiveType ||
286
- bodyType instanceof MoneyPrimitiveType ||
287
- bodyType instanceof CpfPrimitiveType ||
288
- bodyType instanceof CnpjPrimitiveType ||
289
- bodyType instanceof EmailPrimitiveType ||
290
- bodyType instanceof HtmlPrimitiveType ||
291
- bodyType instanceof UuidPrimitiveType ||
292
- bodyType instanceof HexPrimitiveType ||
293
- bodyType instanceof BytesPrimitiveType ||
294
- bodyType instanceof Base64PrimitiveType
295
- ? {
296
- [bodyType instanceof HtmlPrimitiveType ? "text/html" : "text/plain"]: {
297
- schema: typeToSchema(definitions, bodyType),
298
- },
299
- }
300
- : {};
301
- })(),
302
- "application/json": {
325
+ content: Object.assign(Object.assign({}, (() => {
326
+ var _a;
327
+ const bodyType = (_a = op.args.find(arg => arg.name === ann.bodyVariable)) === null || _a === void 0 ? void 0 : _a.type;
328
+ return bodyType instanceof parser_1.BoolPrimitiveType ||
329
+ bodyType instanceof parser_1.IntPrimitiveType ||
330
+ bodyType instanceof parser_1.UIntPrimitiveType ||
331
+ bodyType instanceof parser_1.FloatPrimitiveType ||
332
+ bodyType instanceof parser_1.StringPrimitiveType ||
333
+ bodyType instanceof parser_1.DatePrimitiveType ||
334
+ bodyType instanceof parser_1.DateTimePrimitiveType ||
335
+ bodyType instanceof parser_1.MoneyPrimitiveType ||
336
+ bodyType instanceof parser_1.CpfPrimitiveType ||
337
+ bodyType instanceof parser_1.CnpjPrimitiveType ||
338
+ bodyType instanceof parser_1.EmailPrimitiveType ||
339
+ bodyType instanceof parser_1.HtmlPrimitiveType ||
340
+ bodyType instanceof parser_1.UuidPrimitiveType ||
341
+ bodyType instanceof parser_1.HexPrimitiveType ||
342
+ bodyType instanceof parser_1.BytesPrimitiveType ||
343
+ bodyType instanceof parser_1.Base64PrimitiveType
344
+ ? {
345
+ [bodyType instanceof parser_1.HtmlPrimitiveType ? "text/html" : "text/plain"]: {
346
+ schema: typeToSchema(definitions, bodyType),
347
+ },
348
+ }
349
+ : {};
350
+ })()), { "application/json": {
303
351
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
304
352
  schema: typeToSchema(definitions, op.args.find(arg => arg.name === ann.bodyVariable).type),
305
- },
306
- },
353
+ } }),
307
354
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
308
- required: !(op.args.find(arg => arg.name === ann.bodyVariable).type instanceof OptionalType),
355
+ required: !(op.args.find(arg => arg.name === ann.bodyVariable).type instanceof parser_1.OptionalType),
309
356
  }
310
357
  : undefined,
311
- responses: {
312
- ...(op.returnType instanceof OptionalType || op.returnType instanceof VoidPrimitiveType
313
- ? { [ann.method === "GET" ? "404" : "204"]: {} }
314
- : {}),
315
- ...(op.returnType instanceof VoidPrimitiveType
316
- ? {}
317
- : {
318
- 200: {
319
- content: {
320
- ...(() => {
321
- return op.returnType instanceof BoolPrimitiveType ||
322
- op.returnType instanceof IntPrimitiveType ||
323
- op.returnType instanceof UIntPrimitiveType ||
324
- op.returnType instanceof FloatPrimitiveType ||
325
- op.returnType instanceof StringPrimitiveType ||
326
- op.returnType instanceof DatePrimitiveType ||
327
- op.returnType instanceof DateTimePrimitiveType ||
328
- op.returnType instanceof MoneyPrimitiveType ||
329
- op.returnType instanceof CpfPrimitiveType ||
330
- op.returnType instanceof CnpjPrimitiveType ||
331
- op.returnType instanceof EmailPrimitiveType ||
332
- op.returnType instanceof UuidPrimitiveType ||
333
- op.returnType instanceof HexPrimitiveType ||
334
- op.returnType instanceof BytesPrimitiveType ||
335
- op.returnType instanceof Base64PrimitiveType
336
- ? {
337
- "text/plain": {
338
- schema: typeToSchema(definitions, op.returnType),
339
- },
340
- }
341
- : {};
342
- })(),
343
- "application/json": {
344
- schema: typeToSchema(definitions, op.returnType),
345
- },
346
- },
347
- },
348
- }),
349
- 400: {
350
- content: {
351
- "application/json": {
352
- schema: {
353
- anyOf: [
354
- server.apiConfig.ast.errors.map(error => ({
355
- properties: {
356
- message: {
357
- type: "string",
358
- },
359
- type: {
360
- enum: [error.name],
361
- type: "string",
362
- },
363
- ...(error.dataType instanceof VoidPrimitiveType
364
- ? {}
365
- : {
366
- data: typeToSchema(definitions, error.dataType),
367
- }),
368
- },
369
- required: ["type", "message"],
370
- type: "object",
371
- })),
372
- ],
373
- },
374
- },
358
+ responses: Object.assign(Object.assign(Object.assign({}, (op.returnType instanceof parser_1.OptionalType || op.returnType instanceof parser_1.VoidPrimitiveType
359
+ ? { [ann.method === "GET" ? "404" : "204"]: {} }
360
+ : {})), (op.returnType instanceof parser_1.VoidPrimitiveType
361
+ ? {}
362
+ : {
363
+ 200: {
364
+ content: Object.assign(Object.assign({}, (() => {
365
+ return op.returnType instanceof parser_1.BoolPrimitiveType ||
366
+ op.returnType instanceof parser_1.IntPrimitiveType ||
367
+ op.returnType instanceof parser_1.UIntPrimitiveType ||
368
+ op.returnType instanceof parser_1.FloatPrimitiveType ||
369
+ op.returnType instanceof parser_1.StringPrimitiveType ||
370
+ op.returnType instanceof parser_1.DatePrimitiveType ||
371
+ op.returnType instanceof parser_1.DateTimePrimitiveType ||
372
+ op.returnType instanceof parser_1.MoneyPrimitiveType ||
373
+ op.returnType instanceof parser_1.CpfPrimitiveType ||
374
+ op.returnType instanceof parser_1.CnpjPrimitiveType ||
375
+ op.returnType instanceof parser_1.EmailPrimitiveType ||
376
+ op.returnType instanceof parser_1.UuidPrimitiveType ||
377
+ op.returnType instanceof parser_1.HexPrimitiveType ||
378
+ op.returnType instanceof parser_1.BytesPrimitiveType ||
379
+ op.returnType instanceof parser_1.Base64PrimitiveType
380
+ ? {
381
+ "text/plain": {
382
+ schema: typeToSchema(definitions, op.returnType),
383
+ },
384
+ }
385
+ : {};
386
+ })()), { "application/json": {
387
+ schema: typeToSchema(definitions, op.returnType),
388
+ } }),
375
389
  },
376
- },
377
- 500: {},
378
- },
390
+ })), errorResponses),
379
391
  summary: op.annotations
380
- .filter(x => x instanceof DescriptionAnnotation)
392
+ .filter(x => x instanceof parser_1.DescriptionAnnotation)
381
393
  .map(x => x.text)
382
394
  .join(" ") || undefined,
383
395
  tags: ["REST Endpoints"],
@@ -386,13 +398,14 @@ export function setupSwagger(server) {
386
398
  }
387
399
  }
388
400
  res.write(JSON.stringify({
389
- consumes: ["application/json"],
390
- definitions,
401
+ $schema: "https://spec.openapis.org/oas/3.1/dialect/base",
402
+ openapi: "3.1.0",
391
403
  info: {},
392
- openapi: "3.0.3",
393
- paths,
394
- produces: ["application/json"],
395
404
  schemes: ["https"],
405
+ consumes: ["application/json"],
406
+ produces: ["application/json"],
407
+ paths,
408
+ $defs: definitions,
396
409
  }));
397
410
  }
398
411
  catch (error) {
@@ -402,4 +415,4 @@ export function setupSwagger(server) {
402
415
  res.end();
403
416
  });
404
417
  }
405
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dhZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zd2FnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEIsUUFBUSxFQUNSLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsVUFBVSxFQUNWLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixpQkFBaUIsR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLGtCQUFrQixNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLElBQUkscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUk3RSxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixFQUFFLENBQUM7QUFFbkQsU0FBUyxpQkFBaUIsQ0FBSSxPQUEyQjtJQUN2RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUF5QixDQUFDO0FBQ3JHLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxXQUFtRCxFQUFFLElBQVU7SUFDbkYsSUFBSSxJQUFJLFlBQVksUUFBUSxF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Z0JBQ1gsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLEtBQUs7Z0JBQ0wsUUFBUSxFQUFFLENBQUMsa0JBQWtCLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUNuQixDQUFDLENBQ0gsQ0FBQztTQUNIO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1NBQ3RCO1FBRUQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSBcIkBzZGtnZW4vcGFyc2VyXCI7XG5pbXBvcnQge1xuICBEZWNpbWFsUHJpbWl0aXZlVHlwZSxcbiAgSnNvblByaW1pdGl2ZVR5cGUsXG4gIEFycmF5VHlwZSxcbiAgQmFzZTY0UHJpbWl0aXZlVHlwZSxcbiAgQmlnSW50UHJpbWl0aXZlVHlwZSxcbiAgQm9vbFByaW1pdGl2ZVR5cGUsXG4gIEJ5dGVzUHJpbWl0aXZlVHlwZSxcbiAgQ25walByaW1pdGl2ZVR5cGUsXG4gIENwZlByaW1pdGl2ZVR5cGUsXG4gIERhdGVQcmltaXRpdmVUeXBlLFxuICBEYXRlVGltZVByaW1pdGl2ZVR5cGUsXG4gIERlc2NyaXB0aW9uQW5ub3RhdGlvbixcbiAgRW1haWxQcmltaXRpdmVUeXBlLFxuICBFbnVtVHlwZSxcbiAgRmxvYXRQcmltaXRpdmVUeXBlLFxuICBIZXhQcmltaXRpdmVUeXBlLFxuICBIdG1sUHJpbWl0aXZlVHlwZSxcbiAgSW50UHJpbWl0aXZlVHlwZSxcbiAgTW9uZXlQcmltaXRpdmVUeXBlLFxuICBPcHRpb25hbFR5cGUsXG4gIFJlc3RBbm5vdGF0aW9uLFxuICBTdHJpbmdQcmltaXRpdmVUeXBlLFxuICBTdHJ1Y3RUeXBlLFxuICBUeXBlUmVmZXJlbmNlLFxuICBVSW50UHJpbWl0aXZlVHlwZSxcbiAgVXJsUHJpbWl0aXZlVHlwZSxcbiAgVXVpZFByaW1pdGl2ZVR5cGUsXG4gIFZvaWRQcmltaXRpdmVUeXBlLFxufSBmcm9tIFwiQHNka2dlbi9wYXJzZXJcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYSB9IGZyb20gXCJqc29uLXNjaGVtYS10eXBlZFwiO1xuaW1wb3J0IHN0YXRpY0ZpbGVzSGFuZGxlciBmcm9tIFwic2VydmUtaGFuZGxlclwiO1xuaW1wb3J0IHsgZ2V0QWJzb2x1dGVGU1BhdGggYXMgZ2V0U3dhZ2dlclVpQXNzZXRQYXRoIH0gZnJvbSBcInN3YWdnZXItdWktZGlzdFwiO1xuXG5pbXBvcnQgdHlwZSB7IFNka2dlbkh0dHBTZXJ2ZXIgfSBmcm9tIFwiLi9odHRwLXNlcnZlci5qc1wiO1xuXG5jb25zdCBzd2FnZ2VyVWlBc3NldFBhdGggPSBnZXRTd2FnZ2VyVWlBc3NldFBhdGgoKTtcblxuZnVuY3Rpb24gb2JqZWN0RnJvbUVudHJpZXM8VD4oZW50cmllczogQXJyYXk8W3N0cmluZywgVF0+KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCAuLi5BcnJheS5mcm9tKGVudHJpZXMsIChbaywgdl0pID0+ICh7IFtrXTogdiB9KSkpIGFzIHsgW2tleTogc3RyaW5nXTogVCB9O1xufVxuXG5mdW5jdGlvbiB0eXBlVG9TY2hlbWEoZGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIEpTT05TY2hlbWEgfCB1bmRlZmluZWQ+LCB0eXBlOiBUeXBlKTogSlNPTlNjaGVtYSAmIG9iamVjdCB7XG4gIGlmICh0eXBlIGluc3RhbmNlb2YgRW51bVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW51bTogdHlwZS52YWx1ZXMubWFwKHggPT4geC52YWx1ZSksXG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcGVydGllczogb2JqZWN0RnJvbUVudHJpZXMoXG4gICAgICAgIHR5cGUuZmllbGRzLm1hcChmaWVsZCA9PiBbXG4gICAgICAgICAgZmllbGQubmFtZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgZmllbGQuYW5ub3RhdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4geCBpbnN0YW5jZW9mIERlc2NyaXB0aW9uQW5ub3RhdGlvbilcbiAgICAgICAgICAgICAgICAubWFwKHggPT4gKHggYXMgRGVzY3JpcHRpb25Bbm5vdGF0aW9uKS50ZXh0KVxuICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAuLi50eXBlVG9TY2hlbWEoZGVmaW5pdGlvbnMsIGZpZWxkLnR5cGUpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pLFxuICAgICAgKSxcbiAgICAgIHJlcXVpcmVkOiB0eXBlLmZpZWxkcy5maWx0ZXIoZiA9PiAhKGYudHlwZSBpbnN0YW5jZW9mIE9wdGlvbmFsVHlwZSkpLm1hcChmID0+IGYubmFtZSksXG4gICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoXG4gICAgdHlwZSBpbnN0YW5jZW9mIFN0cmluZ1ByaW1pdGl2ZVR5cGUgfHxcbiAgICB0eXBlIGluc3RhbmNlb2YgVXVpZFByaW1pdGl2ZVR5cGUgfHxcbiAgICB0eXBlIGluc3RhbmNlb2YgSGV4UHJpbWl0aXZlVHlwZSB8fFxuICAgIHR5cGUgaW5zdGFuY2VvZiBIdG1sUHJpbWl0aXZlVHlwZSB8fFxuICAgIHR5cGUgaW5zdGFuY2VvZiBCYXNlNjRQcmltaXRpdmVUeXBlXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFVybFByaW1pdGl2ZVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBcInVyaVwiLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBEYXRlUHJpbWl0aXZlVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXQ6IFwiZGF0ZVwiLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBEYXRlVGltZVByaW1pdGl2ZVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBcImRhdGUtdGltZVwiLFxuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBDcGZQcmltaXRpdmVUeXBlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgQ25walByaW1pdGl2ZVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBCb29sUHJpbWl0aXZlVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBCeXRlc1ByaW1pdGl2ZVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBcImJ5dGVcIiBhcyBuZXZlcixcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgSW50UHJpbWl0aXZlVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXQ6IFwiaW50MzJcIiBhcyBuZXZlcixcbiAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFVJbnRQcmltaXRpdmVUeXBlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdDogXCJpbnQzMlwiIGFzIG5ldmVyLFxuICAgICAgbWluaW11bTogMCxcbiAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIE1vbmV5UHJpbWl0aXZlVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXQ6IFwiaW50NjRcIiBhcyBuZXZlcixcbiAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIEZsb2F0UHJpbWl0aXZlVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIEVtYWlsUHJpbWl0aXZlVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIEJpZ0ludFByaW1pdGl2ZVR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICB9O1xuICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBEZWNpbWFsUHJpbWl0aXZlVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIEpzb25QcmltaXRpdmVUeXBlKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBPcHRpb25hbFR5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb25lT2Y6IFt0eXBlVG9TY2hlbWEoZGVmaW5pdGlvbnMsIHR5cGUuYmFzZSksIHsgdHlwZTogXCJudWxsXCIgfV0sXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgQXJyYXlUeXBlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiB0eXBlVG9TY2hlbWEoZGVmaW5pdGlvbnMsIHR5cGUuYmFzZSksXG4gICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgfTtcbiAgfSBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgVHlwZVJlZmVyZW5jZSkge1xuICAgIGlmICghZGVmaW5pdGlvbnNbdHlwZS5uYW1lXSkge1xuICAgICAgZGVmaW5pdGlvbnNbdHlwZS5uYW1lXSA9IHR5cGVUb1NjaGVtYShkZWZpbml0aW9ucywgdHlwZS50eXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyAkcmVmOiBgIy9kZWZpbml0aW9ucy8ke3R5cGUubmFtZX1gIH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCB0eXBlICR7dHlwZS5jb25zdHJ1Y3Rvci5uYW1lfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBTd2FnZ2VyPEV4dHJhQ29udGV4dFQ+KHNlcnZlcjogU2RrZ2VuSHR0cFNlcnZlcjxFeHRyYUNvbnRleHRUPik6IHZvaWQge1xuICBzZXJ2ZXIuYWRkSHR0cEhhbmRsZXIoXCJHRVRcIiwgXCIvc3dhZ2dlclwiLCAocmVxLCByZXMpID0+IHtcbiAgICBpZiAoIXNlcnZlci5pbnRyb3NwZWN0aW9uKSB7XG4gICAgICByZXMuc3RhdHVzQ29kZSA9IDQwNDtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXMud3JpdGUoYFxuICAgICAgICAgICAgPCFET0NUWVBFIGh0bWw+XG4gICAgICAgICAgICA8aHRtbCBsYW5nPVwiZW5cIj5cbiAgICAgICAgICAgIDxoZWFkPlxuICAgICAgICAgICAgICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICAgICAgICAgICAgICAgIDx0aXRsZT5Td2FnZ2VyIFVJPC90aXRsZT5cbiAgICAgICAgICAgICAgICA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIi9zd2FnZ2VyL3N3YWdnZXItdWkuY3NzXCIgPlxuICAgICAgICAgICAgICAgIDxsaW5rIHJlbD1cImljb25cIiB0eXBlPVwiaW1hZ2UvcG5nXCIgaHJlZj1cIi9zd2FnZ2VyL2Zhdmljb24tMzJ4MzIucG5nXCIgc2l6ZXM9XCIzMngzMlwiIC8+XG4gICAgICAgICAgICAgICAgPGxpbmsgcmVsPVwiaWNvblwiIHR5cGU9XCJpbWFnZS9wbmdcIiBocmVmPVwiL3N3YWdnZXIvZmF2aWNvbi0xNngxNi5wbmdcIiBzaXplcz1cIjE2eDE2XCIgLz5cbiAgICAgICAgICAgICAgICA8c3R5bGU+XG4gICAgICAgICAgICAgICAgICAgIGh0bWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAtbW96LXNjcm9sbGJhcnMtdmVydGljYWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAqLCAqOmJlZm9yZSwgKjphZnRlciB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3gtc2l6aW5nOiBpbmhlcml0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYm9keSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLnN3YWdnZXItdWkgLnNjaGVtZS1jb250YWluZXIsIC5zd2FnZ2VyLXVpIC50b3BiYXIge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zdHlsZT5cbiAgICAgICAgICAgIDwvaGVhZD5cblxuICAgICAgICAgICAgPGJvZHk+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInN3YWdnZXItdWlcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8c2NyaXB0IHNyYz1cIi9zd2FnZ2VyL3N3YWdnZXItdWktYnVuZGxlLmpzXCI+IDwvc2NyaXB0PlxuICAgICAgICAgICAgICAgIDxzY3JpcHQgc3JjPVwiL3N3YWdnZXIvc3dhZ2dlci11aS1zdGFuZGFsb25lLXByZXNldC5qc1wiPiA8L3NjcmlwdD5cbiAgICAgICAgICAgICAgICA8c2NyaXB0PlxuICAgICAgICAgICAgICAgIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnVpID0gU3dhZ2dlclVJQnVuZGxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbG9jYXRpb24ub3JpZ2luICsgXCIvc3dhZ2dlci5qc29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21faWQ6ICcjc3dhZ2dlci11aScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWVwTGlua2luZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXNldHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTd2FnZ2VyVUlCdW5kbGUucHJlc2V0cy5hcGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3YWdnZXJVSVN0YW5kYWxvbmVQcmVzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN3YWdnZXJVSUJ1bmRsZS5wbHVnaW5zLkRvd25sb2FkVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dDogXCJTdGFuZGFsb25lTGF5b3V0XCJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICAgICA8L2JvZHk+XG4gICAgICAgICAgICA8L2h0bWw+XG4gICAgICAgIGApO1xuICAgIHJlcy5lbmQoKTtcbiAgfSk7XG5cbiAgc2VydmVyLmFkZEh0dHBIYW5kbGVyKFwiR0VUXCIsIC9eXFwvc3dhZ2dlci4qL3UsIChyZXEsIHJlcykgPT4ge1xuICAgIGlmICghc2VydmVyLmludHJvc3BlY3Rpb24pIHtcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNDA0O1xuICAgICAgcmVzLmVuZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChyZXEudXJsKSB7XG4gICAgICByZXEudXJsID0gcmVxLnVybC5yZXBsYWNlKC9cXC9zd2FnZ2VyL3UsIFwiXCIpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgIHN0YXRpY0ZpbGVzSGFuZGxlcihyZXEsIHJlcywge1xuICAgICAgY2xlYW5VcmxzOiBmYWxzZSxcbiAgICAgIGRpcmVjdG9yeUxpc3Rpbmc6IGZhbHNlLFxuICAgICAgZXRhZzogdHJ1ZSxcbiAgICAgIHB1YmxpYzogc3dhZ2dlclVpQXNzZXRQYXRoLFxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgcmVzLndyaXRlKGAke2V9YCk7XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHNlcnZlci5hZGRIdHRwSGFuZGxlcihcIkdFVFwiLCBcIi9zd2FnZ2VyLmpzb25cIiwgKHJlcSwgcmVzKSA9PiB7XG4gICAgaWYgKCFzZXJ2ZXIuaW50cm9zcGVjdGlvbikge1xuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgICByZXMuZW5kKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBKU09OU2NoZW1hIHwgdW5kZWZpbmVkPiA9IHt9O1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IHBhdGhzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICAgIGZvciAoY29uc3Qgb3Agb2Ygc2VydmVyLmFwaUNvbmZpZy5hc3Qub3BlcmF0aW9ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGFubiBvZiBvcC5hbm5vdGF0aW9ucykge1xuICAgICAgICAgIGlmIChhbm4gaW5zdGFuY2VvZiBSZXN0QW5ub3RhdGlvbikge1xuICAgICAgICAgICAgaWYgKCFwYXRoc1thbm4ucGF0aF0pIHtcbiAgICAgICAgICAgICAgcGF0aHNbYW5uLnBhdGhdID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgICAgIHBhdGhzW2Fubi5wYXRoXVthbm4ubWV0aG9kLnRvTG93ZXJDYXNlKCldID0ge1xuICAgICAgICAgICAgICBvcGVyYXRpb25JZDogb3AubmFtZSxcbiAgICAgICAgICAgICAgcGFyYW1ldGVyczogW1xuICAgICAgICAgICAgICAgIC4uLmFubi5wYXRoVmFyaWFibGVzLm1hcChuYW1lID0+ICh7XG4gICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgYXJnOiBvcC5hcmdzLmZpbmQoYXJnID0+IGFyZy5uYW1lID09PSBuYW1lKSEsXG4gICAgICAgICAgICAgICAgICBsb2NhdGlvbjogXCJwYXRoXCIsXG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAuLi5hbm4ucXVlcnlWYXJpYWJsZXMubWFwKG5hbWUgPT4gKHtcbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgICAgICAgICAgICBhcmc6IG9wLmFyZ3MuZmluZChhcmcgPT4gYXJnLm5hbWUgPT09IG5hbWUpISxcbiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiBcInF1ZXJ5XCIsXG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAuLi5bLi4uYW5uLmhlYWRlcnMuZW50cmllcygpXS5tYXAoKFtoZWFkZXIsIG5hbWVdKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgIGFyZzogb3AuYXJncy5maW5kKGFyZyA9PiBhcmcubmFtZSA9PT0gbmFtZSkhLFxuICAgICAgICAgICAgICAgICAgbG9jYXRpb246IFwiaGVhZGVyXCIsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBoZWFkZXIsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICBdLm1hcCgoeyBuYW1lLCBsb2NhdGlvbiwgYXJnIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgICAgICBhcmcuYW5ub3RhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggaW5zdGFuY2VvZiBEZXNjcmlwdGlvbkFubm90YXRpb24pXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoeCA9PiAoeCBhcyBEZXNjcmlwdGlvbkFubm90YXRpb24pLnRleHQpXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgaW46IGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICEoYXJnLnR5cGUgaW5zdGFuY2VvZiBPcHRpb25hbFR5cGUpLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogdHlwZVRvU2NoZW1hKGRlZmluaXRpb25zLCBhcmcudHlwZSksXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgcmVxdWVzdEJvZHk6IGFubi5ib2R5VmFyaWFibGVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5VHlwZSA9IG9wLmFyZ3MuZmluZChhcmcgPT4gYXJnLm5hbWUgPT09IGFubi5ib2R5VmFyaWFibGUpPy50eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9keVR5cGUgaW5zdGFuY2VvZiBCb29sUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VHlwZSBpbnN0YW5jZW9mIEludFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keVR5cGUgaW5zdGFuY2VvZiBVSW50UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VHlwZSBpbnN0YW5jZW9mIEZsb2F0UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VHlwZSBpbnN0YW5jZW9mIFN0cmluZ1ByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keVR5cGUgaW5zdGFuY2VvZiBEYXRlUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VHlwZSBpbnN0YW5jZW9mIERhdGVUaW1lUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VHlwZSBpbnN0YW5jZW9mIE1vbmV5UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VHlwZSBpbnN0YW5jZW9mIENwZlByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keVR5cGUgaW5zdGFuY2VvZiBDbnBqUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VHlwZSBpbnN0YW5jZW9mIEVtYWlsUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5VHlwZSBpbnN0YW5jZW9mIEh0bWxQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlUeXBlIGluc3RhbmNlb2YgVXVpZFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keVR5cGUgaW5zdGFuY2VvZiBIZXhQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlUeXBlIGluc3RhbmNlb2YgQnl0ZXNQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlUeXBlIGluc3RhbmNlb2YgQmFzZTY0UHJpbWl0aXZlVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtib2R5VHlwZSBpbnN0YW5jZW9mIEh0bWxQcmltaXRpdmVUeXBlID8gXCJ0ZXh0L2h0bWxcIiA6IFwidGV4dC9wbGFpblwiXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHR5cGVUb1NjaGVtYShkZWZpbml0aW9ucywgYm9keVR5cGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgICAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYTogdHlwZVRvU2NoZW1hKGRlZmluaXRpb25zLCBvcC5hcmdzLmZpbmQoYXJnID0+IGFyZy5uYW1lID09PSBhbm4uYm9keVZhcmlhYmxlKSEudHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICEob3AuYXJncy5maW5kKGFyZyA9PiBhcmcubmFtZSA9PT0gYW5uLmJvZHlWYXJpYWJsZSkhLnR5cGUgaW5zdGFuY2VvZiBPcHRpb25hbFR5cGUpLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICByZXNwb25zZXM6IHtcbiAgICAgICAgICAgICAgICAuLi4ob3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIE9wdGlvbmFsVHlwZSB8fCBvcC5yZXR1cm5UeXBlIGluc3RhbmNlb2YgVm9pZFByaW1pdGl2ZVR5cGVcbiAgICAgICAgICAgICAgICAgID8geyBbYW5uLm1ldGhvZCA9PT0gXCJHRVRcIiA/IFwiNDA0XCIgOiBcIjIwNFwiXToge30gfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgLi4uKG9wLnJldHVyblR5cGUgaW5zdGFuY2VvZiBWb2lkUHJpbWl0aXZlVHlwZVxuICAgICAgICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgMjAwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wLnJldHVyblR5cGUgaW5zdGFuY2VvZiBCb29sUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIEludFByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnJldHVyblR5cGUgaW5zdGFuY2VvZiBVSW50UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIEZsb2F0UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIFN0cmluZ1ByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnJldHVyblR5cGUgaW5zdGFuY2VvZiBEYXRlUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIERhdGVUaW1lUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIE1vbmV5UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIENwZlByaW1pdGl2ZVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wLnJldHVyblR5cGUgaW5zdGFuY2VvZiBDbnBqUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIEVtYWlsUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIFV1aWRQcmltaXRpdmVUeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcC5yZXR1cm5UeXBlIGluc3RhbmNlb2YgSGV4UHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIEJ5dGVzUHJpbWl0aXZlVHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AucmV0dXJuVHlwZSBpbnN0YW5jZW9mIEJhc2U2NFByaW1pdGl2ZVR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGV4dC9wbGFpblwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHR5cGVUb1NjaGVtYShkZWZpbml0aW9ucywgb3AucmV0dXJuVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWE6IHR5cGVUb1NjaGVtYShkZWZpbml0aW9ucywgb3AucmV0dXJuVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIDQwMDoge1xuICAgICAgICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW55T2Y6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLmFwaUNvbmZpZy5hc3QuZXJyb3JzLm1hcChlcnJvciA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW06IFtlcnJvci5uYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oZXJyb3IuZGF0YVR5cGUgaW5zdGFuY2VvZiBWb2lkUHJpbWl0aXZlVHlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdHlwZVRvU2NoZW1hKGRlZmluaXRpb25zLCBlcnJvci5kYXRhVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZDogW1widHlwZVwiLCBcIm1lc3NhZ2VcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIDUwMDoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHN1bW1hcnk6XG4gICAgICAgICAgICAgICAgb3AuYW5ub3RhdGlvbnNcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4IGluc3RhbmNlb2YgRGVzY3JpcHRpb25Bbm5vdGF0aW9uKVxuICAgICAgICAgICAgICAgICAgLm1hcCh4ID0+ICh4IGFzIERlc2NyaXB0aW9uQW5ub3RhdGlvbikudGV4dClcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiIFwiKSB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHRhZ3M6IFtcIlJFU1QgRW5kcG9pbnRzXCJdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzLndyaXRlKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgY29uc3VtZXM6IFtcImFwcGxpY2F0aW9uL2pzb25cIl0sXG4gICAgICAgICAgZGVmaW5pdGlvbnMsXG4gICAgICAgICAgaW5mbzoge30sXG4gICAgICAgICAgb3BlbmFwaTogXCIzLjAuM1wiLFxuICAgICAgICAgIHBhdGhzLFxuICAgICAgICAgIHByb2R1Y2VzOiBbXCJhcHBsaWNhdGlvbi9qc29uXCJdLFxuICAgICAgICAgIHNjaGVtZXM6IFtcImh0dHBzXCJdLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgfVxuXG4gICAgcmVzLmVuZCgpO1xuICB9KTtcbn1cbiJdfQ==
418
+ exports.setupSwagger = setupSwagger;
@@ -1,2 +1,2 @@
1
- import { BaseApiConfig } from "./api-config.js";
2
- export declare function apiTestWrapper<ExtraContextT, ApiT extends BaseApiConfig<ExtraContextT>>(api: ApiT, extraContext: Partial<ExtraContextT>): ApiT;
1
+ import type { BaseApiConfig } from "./api-config";
2
+ export declare function apiTestWrapper<ExtraContextT, ApiT extends BaseApiConfig<ExtraContextT>>(api: ApiT, extraContext?: Partial<ExtraContextT>): ApiT;