nextlove 2.1.9 → 2.3.0
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/dist/chunk-7JYJ5SIL.mjs +144 -0
- package/dist/generators/index.js +937 -549
- package/dist/generators/index.mjs +945 -557
- package/dist/index.d.ts +21 -11
- package/dist/index.js +155 -16
- package/dist/index.mjs +28 -10
- package/dist/nextjs-exception-middleware/index.d.ts +83 -0
- package/dist/nextjs-exception-middleware/index.js +164 -0
- package/dist/nextjs-exception-middleware/index.mjs +20 -0
- package/exception-middleware.d.ts +1 -0
- package/package.json +23 -13
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import {
|
|
2
|
+
init_esm_shims
|
|
3
|
+
} from "./chunk-2HL2TLDY.mjs";
|
|
4
|
+
|
|
5
|
+
// src/nextjs-exception-middleware/index.ts
|
|
6
|
+
init_esm_shims();
|
|
7
|
+
|
|
8
|
+
// src/nextjs-exception-middleware/with-exception-handling.ts
|
|
9
|
+
init_esm_shims();
|
|
10
|
+
|
|
11
|
+
// src/nextjs-exception-middleware/http-exceptions.ts
|
|
12
|
+
init_esm_shims();
|
|
13
|
+
var HttpException = class extends Error {
|
|
14
|
+
constructor(status, metadata, options) {
|
|
15
|
+
super(metadata.message);
|
|
16
|
+
this.status = status;
|
|
17
|
+
this.metadata = metadata;
|
|
18
|
+
if (Error.captureStackTrace) {
|
|
19
|
+
Error.captureStackTrace(this, this.constructor);
|
|
20
|
+
}
|
|
21
|
+
this.options = options != null ? options : { json: true };
|
|
22
|
+
}
|
|
23
|
+
toString() {
|
|
24
|
+
return `HttpException: ${this.status}, ${this.metadata.message} (${this.metadata.type})`;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
var BadRequestException = class extends HttpException {
|
|
28
|
+
constructor(metadata, options) {
|
|
29
|
+
super(400, metadata, options);
|
|
30
|
+
this.metadata = metadata;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
var UnauthorizedException = class extends HttpException {
|
|
34
|
+
constructor(metadata, options) {
|
|
35
|
+
super(401, metadata, options);
|
|
36
|
+
this.metadata = metadata;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var NotFoundException = class extends HttpException {
|
|
40
|
+
constructor(metadata, options) {
|
|
41
|
+
super(404, metadata, options);
|
|
42
|
+
this.metadata = metadata;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
var MethodNotAllowedException = class extends HttpException {
|
|
46
|
+
constructor(metadata, options) {
|
|
47
|
+
super(405, metadata, options);
|
|
48
|
+
this.metadata = metadata;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var InternalServerErrorException = class extends HttpException {
|
|
52
|
+
constructor(metadata, options) {
|
|
53
|
+
super(500, metadata, options);
|
|
54
|
+
this.metadata = metadata;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// src/nextjs-exception-middleware/with-exception-handling.ts
|
|
59
|
+
var withExceptionHandling = (options = {}) => (next) => async (req, res) => {
|
|
60
|
+
try {
|
|
61
|
+
await next(req, res);
|
|
62
|
+
} catch (error) {
|
|
63
|
+
let errorContext = {};
|
|
64
|
+
if (error instanceof Error) {
|
|
65
|
+
errorContext.stack = error.stack;
|
|
66
|
+
}
|
|
67
|
+
errorContext = options.getErrorContext ? options.getErrorContext(req, errorContext) : errorContext;
|
|
68
|
+
if (error instanceof HttpException) {
|
|
69
|
+
if (error.options.json) {
|
|
70
|
+
res.status(error.status).json({
|
|
71
|
+
error: {
|
|
72
|
+
...error.metadata,
|
|
73
|
+
...errorContext
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
} else {
|
|
78
|
+
res.status(error.status).end(error.metadata.message);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
const formattedError = new HttpException(500, {
|
|
83
|
+
type: "internal_server_error",
|
|
84
|
+
message: error instanceof Error ? error.message : "Unknown error"
|
|
85
|
+
});
|
|
86
|
+
res.status(500).json({
|
|
87
|
+
error: {
|
|
88
|
+
...formattedError.metadata,
|
|
89
|
+
...errorContext
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
var with_exception_handling_default = withExceptionHandling;
|
|
97
|
+
|
|
98
|
+
// src/nextjs-exception-middleware/with-ok-status.ts
|
|
99
|
+
init_esm_shims();
|
|
100
|
+
var withOkStatus = (options = {}) => (next) => async (req, res) => {
|
|
101
|
+
const originalJson = res.json;
|
|
102
|
+
res.json = function(data) {
|
|
103
|
+
const ok = res.statusCode >= 200 && res.statusCode < 300;
|
|
104
|
+
const shouldIncludeStatus = options.addIf ? options.addIf(req) : true;
|
|
105
|
+
if (shouldIncludeStatus) {
|
|
106
|
+
originalJson.call(this, {
|
|
107
|
+
...data,
|
|
108
|
+
ok
|
|
109
|
+
});
|
|
110
|
+
} else {
|
|
111
|
+
originalJson.call(this, data);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
await next(req, res);
|
|
115
|
+
};
|
|
116
|
+
var with_ok_status_default = withOkStatus;
|
|
117
|
+
|
|
118
|
+
// src/nextjs-exception-middleware/index.ts
|
|
119
|
+
var withExceptionHandling2 = ({
|
|
120
|
+
addOkStatus = false,
|
|
121
|
+
okStatusOptions,
|
|
122
|
+
exceptionHandlingOptions
|
|
123
|
+
} = {}) => (next) => (req, res) => {
|
|
124
|
+
if (addOkStatus) {
|
|
125
|
+
return with_ok_status_default(okStatusOptions)(
|
|
126
|
+
with_exception_handling_default(exceptionHandlingOptions)(next)
|
|
127
|
+
)(req, res);
|
|
128
|
+
}
|
|
129
|
+
return with_exception_handling_default(exceptionHandlingOptions)(next)(
|
|
130
|
+
req,
|
|
131
|
+
res
|
|
132
|
+
);
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
export {
|
|
136
|
+
HttpException,
|
|
137
|
+
BadRequestException,
|
|
138
|
+
UnauthorizedException,
|
|
139
|
+
NotFoundException,
|
|
140
|
+
MethodNotAllowedException,
|
|
141
|
+
InternalServerErrorException,
|
|
142
|
+
withExceptionHandling2 as withExceptionHandling
|
|
143
|
+
};
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL25leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZS9pbmRleC50cyIsICIuLi9zcmMvbmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlL3dpdGgtZXhjZXB0aW9uLWhhbmRsaW5nLnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvaHR0cC1leGNlcHRpb25zLnRzIiwgIi4uL3NyYy9uZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmUvd2l0aC1vay1zdGF0dXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5pbXBvcnQgdW53cmFwcGVkV2l0aEV4Y2VwdGlvbkhhbmRsaW5nLCB7XG4gIFdpdGhFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMsXG59IGZyb20gXCIuL3dpdGgtZXhjZXB0aW9uLWhhbmRsaW5nXCJcbmltcG9ydCB3aXRoT2tTdGF0dXMsIHsgV2l0aE9rU3RhdHVzT3B0aW9ucyB9IGZyb20gXCIuL3dpdGgtb2stc3RhdHVzXCJcblxuZXhwb3J0IGludGVyZmFjZSBFeGNlcHRpb25IYW5kbGluZ09wdGlvbnMge1xuICBhZGRPa1N0YXR1cz86IGJvb2xlYW5cbiAgb2tTdGF0dXNPcHRpb25zPzogV2l0aE9rU3RhdHVzT3B0aW9uc1xuICBleGNlcHRpb25IYW5kbGluZ09wdGlvbnM/OiBXaXRoRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zXG59XG5cbmV4cG9ydCBjb25zdCB3aXRoRXhjZXB0aW9uSGFuZGxpbmcgPVxuICAoe1xuICAgIGFkZE9rU3RhdHVzID0gZmFsc2UsXG4gICAgb2tTdGF0dXNPcHRpb25zLFxuICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyxcbiAgfTogRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zID0ge30pID0+XG4gIChuZXh0OiAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD4pID0+XG4gIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIGlmIChhZGRPa1N0YXR1cykge1xuICAgICAgcmV0dXJuIHdpdGhPa1N0YXR1cyhva1N0YXR1c09wdGlvbnMpKFxuICAgICAgICB1bndyYXBwZWRXaXRoRXhjZXB0aW9uSGFuZGxpbmcoZXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zKShuZXh0KVxuICAgICAgKShyZXEsIHJlcylcbiAgICB9XG5cbiAgICByZXR1cm4gdW53cmFwcGVkV2l0aEV4Y2VwdGlvbkhhbmRsaW5nKGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucykobmV4dCkoXG4gICAgICByZXEsXG4gICAgICByZXNcbiAgICApXG4gIH1cblxuZXhwb3J0ICogZnJvbSBcIi4vaHR0cC1leGNlcHRpb25zXCJcbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVxdWVzdCwgTmV4dEFwaVJlc3BvbnNlIH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgSHR0cEV4Y2VwdGlvbiB9IGZyb20gXCIuL2h0dHAtZXhjZXB0aW9uc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aEV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9ucyB7XG4gIGdldEVycm9yQ29udGV4dD86IChcbiAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgIGVycm9yOiBFcnJvclxuICApID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG59XG5cbmNvbnN0IHdpdGhFeGNlcHRpb25IYW5kbGluZyA9XG4gIChvcHRpb25zOiBXaXRoRXhjZXB0aW9uSGFuZGxpbmdPcHRpb25zID0ge30pID0+XG4gIChuZXh0OiAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IFByb21pc2U8dm9pZD4pID0+XG4gIGFzeW5jIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXh0KHJlcSwgcmVzKVxuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsZXQgZXJyb3JDb250ZXh0OiBhbnkgPSB7fVxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBlcnJvckNvbnRleHQuc3RhY2sgPSBlcnJvci5zdGFja1xuICAgICAgfVxuXG4gICAgICBlcnJvckNvbnRleHQgPSBvcHRpb25zLmdldEVycm9yQ29udGV4dFxuICAgICAgICA/IG9wdGlvbnMuZ2V0RXJyb3JDb250ZXh0KHJlcSwgZXJyb3JDb250ZXh0KVxuICAgICAgICA6IGVycm9yQ29udGV4dFxuXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXhjZXB0aW9uKSB7XG4gICAgICAgIGlmIChlcnJvci5vcHRpb25zLmpzb24pIHtcbiAgICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cykuanNvbih7XG4gICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAuLi5lcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgLi4uZXJyb3JDb250ZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKS5lbmQoZXJyb3IubWV0YWRhdGEubWVzc2FnZSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRXJyb3IgPSBuZXcgSHR0cEV4Y2VwdGlvbig1MDAsIHtcbiAgICAgICAgICB0eXBlOiBcImludGVybmFsX3NlcnZlcl9lcnJvclwiLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJVbmtub3duIGVycm9yXCIsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAuLi5mb3JtYXR0ZWRFcnJvci5tZXRhZGF0YSxcbiAgICAgICAgICAgIC4uLmVycm9yQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nXG4iLCAiZXhwb3J0IHR5cGUgSHR0cEV4Y2VwdGlvbk1ldGFkYXRhID0ge1xuICB0eXBlOiBzdHJpbmdcbiAgbWVzc2FnZTogc3RyaW5nXG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGhyb3dpbmdPcHRpb25zIHtcbiAganNvbj86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBUaHJvdyBIdHRwRXhjZXB0aW9ucyBpbnNpZGUgQVBJIGVuZHBvaW50cyB0byBnZW5lcmF0ZSBuaWNlIGVycm9yIG1lc3NhZ2VzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogaWYgKGJhZF9zb3Vwcy5pbmNsdWRlcyhzb3VwX3BhcmFtKSkge1xuICogICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbig0MDAsIHtcbiAqICAgICAgdHlwZTogXCJjYW50X21ha2Vfc291cFwiLFxuICogICAgICBtZXNzYWdlOiBcIlNvdXAgd2FzIHRvbyBkaWZmaWN1bHQsIHBsZWFzZSBzcGVjaWZ5IGEgZGlmZmVyZW50IHNvdXBcIlxuICogICAgfSlcbiAqIH1cbiAqIGBgYFxuICpcbiAqKi9cbmV4cG9ydCBjbGFzcyBIdHRwRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICBvcHRpb25zOiBUaHJvd2luZ09wdGlvbnNcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhdHVzOiBudW1iZXIsXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihtZXRhZGF0YS5tZXNzYWdlKVxuXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKVxuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPz8geyBqc29uOiB0cnVlIH1cbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgSHR0cEV4Y2VwdGlvbjogJHt0aGlzLnN0YXR1c30sICR7dGhpcy5tZXRhZGF0YS5tZXNzYWdlfSAoJHt0aGlzLm1ldGFkYXRhLnR5cGV9KWBcbiAgfVxufVxuXG4vKipcbiAqIFRocm93IEJhZFJlcXVlc3RFeGNlcHRpb24gaW5zaWRlIEFQSSBlbmRwb2ludHMgdGhhdCB3ZXJlIHByb3ZpZGVkIGluY29ycmVjdFxuICogcGFyYW1ldGVycyBvciBib2R5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogaWYgKGJhZF9zb3Vwcy5pbmNsdWRlcyhzb3VwX3BhcmFtKSkge1xuICogICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gKiAgICAgdHlwZTogXCJjYW50X21ha2Vfc291cFwiLFxuICogICAgIG1lc3NhZ2U6IFwiU291cCB3YXMgdG9vIGRpZmZpY3VsdCwgcGxlYXNlIHNwZWNpZnkgYSBkaWZmZXJlbnQgc291cFwiLFxuICogICB9KVxuICogfVxuICogYGBgXG4gKlxuICoqL1xuZXhwb3J0IGNsYXNzIEJhZFJlcXVlc3RFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig0MDAsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmF1dGhvcml6ZWRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig0MDEsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEV4Y2VwdGlvbiBleHRlbmRzIEh0dHBFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbWV0YWRhdGE6IEh0dHBFeGNlcHRpb25NZXRhZGF0YSxcbiAgICBvcHRpb25zPzogVGhyb3dpbmdPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKDQwNCwgbWV0YWRhdGEsIG9wdGlvbnMpXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1ldGhvZE5vdEFsbG93ZWRFeGNlcHRpb24gZXh0ZW5kcyBIdHRwRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG1ldGFkYXRhOiBIdHRwRXhjZXB0aW9uTWV0YWRhdGEsXG4gICAgb3B0aW9ucz86IFRocm93aW5nT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcig0MDUsIG1ldGFkYXRhLCBvcHRpb25zKVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uIGV4dGVuZHMgSHR0cEV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtZXRhZGF0YTogSHR0cEV4Y2VwdGlvbk1ldGFkYXRhLFxuICAgIG9wdGlvbnM/OiBUaHJvd2luZ09wdGlvbnNcbiAgKSB7XG4gICAgc3VwZXIoNTAwLCBtZXRhZGF0YSwgb3B0aW9ucylcbiAgfVxufVxuIiwgImltcG9ydCB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aE9rU3RhdHVzT3B0aW9ucyB7XG4gIGFkZElmPzogKHJlcTogTmV4dEFwaVJlcXVlc3QpID0+IGJvb2xlYW5cbn1cblxuY29uc3Qgd2l0aE9rU3RhdHVzID1cbiAgKG9wdGlvbnM6IFdpdGhPa1N0YXR1c09wdGlvbnMgPSB7fSkgPT5cbiAgKG5leHQ6IChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPikgPT5cbiAgYXN5bmMgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgLy8gUGF0Y2ggLmpzb24oKVxuICAgIGNvbnN0IG9yaWdpbmFsSnNvbiA9IHJlcy5qc29uXG5cbiAgICByZXMuanNvbiA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBjb25zdCBvayA9IHJlcy5zdGF0dXNDb2RlID49IDIwMCAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMFxuICAgICAgY29uc3Qgc2hvdWxkSW5jbHVkZVN0YXR1cyA9IG9wdGlvbnMuYWRkSWYgPyBvcHRpb25zLmFkZElmKHJlcSkgOiB0cnVlXG5cbiAgICAgIGlmIChzaG91bGRJbmNsdWRlU3RhdHVzKSB7XG4gICAgICAgIG9yaWdpbmFsSnNvbi5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIG9rLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3JpZ2luYWxKc29uLmNhbGwodGhpcywgZGF0YSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhPa1N0YXR1c1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFBQTs7O0FDQUE7OztBQ0FBO0FBd0JPLElBQU0sZ0JBQU4sY0FBNEIsTUFBTTtBQUFBLEVBR3ZDLFlBQ1MsUUFDQSxVQUNQLFNBQ0E7QUFDQSxVQUFNLFNBQVMsT0FBTztBQUpmO0FBQ0E7QUFLUCxRQUFJLE1BQU0sbUJBQW1CO0FBQzNCLFlBQU0sa0JBQWtCLE1BQU0sS0FBSyxXQUFXO0FBQUEsSUFDaEQ7QUFFQSxTQUFLLFVBQVUsNEJBQVcsRUFBRSxNQUFNLEtBQUs7QUFBQSxFQUN6QztBQUFBLEVBRUEsV0FBVztBQUNULFdBQU8sa0JBQWtCLEtBQUssV0FBVyxLQUFLLFNBQVMsWUFBWSxLQUFLLFNBQVM7QUFBQSxFQUNuRjtBQUNGO0FBaUJPLElBQU0sc0JBQU4sY0FBa0MsY0FBYztBQUFBLEVBQ3JELFlBQ1MsVUFDUCxTQUNBO0FBQ0EsVUFBTSxLQUFLLFVBQVUsT0FBTztBQUhyQjtBQUFBLEVBSVQ7QUFDRjtBQUVPLElBQU0sd0JBQU4sY0FBb0MsY0FBYztBQUFBLEVBQ3ZELFlBQ1MsVUFDUCxTQUNBO0FBQ0EsVUFBTSxLQUFLLFVBQVUsT0FBTztBQUhyQjtBQUFBLEVBSVQ7QUFDRjtBQUVPLElBQU0sb0JBQU4sY0FBZ0MsY0FBYztBQUFBLEVBQ25ELFlBQ1MsVUFDUCxTQUNBO0FBQ0EsVUFBTSxLQUFLLFVBQVUsT0FBTztBQUhyQjtBQUFBLEVBSVQ7QUFDRjtBQUVPLElBQU0sNEJBQU4sY0FBd0MsY0FBYztBQUFBLEVBQzNELFlBQ1MsVUFDUCxTQUNBO0FBQ0EsVUFBTSxLQUFLLFVBQVUsT0FBTztBQUhyQjtBQUFBLEVBSVQ7QUFDRjtBQUVPLElBQU0sK0JBQU4sY0FBMkMsY0FBYztBQUFBLEVBQzlELFlBQ1MsVUFDUCxTQUNBO0FBQ0EsVUFBTSxLQUFLLFVBQVUsT0FBTztBQUhyQjtBQUFBLEVBSVQ7QUFDRjs7O0FEOUZBLElBQU0sd0JBQ0osQ0FBQyxVQUF3QyxDQUFDLE1BQzFDLENBQUMsU0FDRCxPQUFPLEtBQXFCLFFBQXlCO0FBQ25ELE1BQUk7QUFDRixVQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsRUFDckIsU0FBUyxPQUFQO0FBQ0EsUUFBSSxlQUFvQixDQUFDO0FBRXpCLFFBQUksaUJBQWlCLE9BQU87QUFDMUIsbUJBQWEsUUFBUSxNQUFNO0FBQUEsSUFDN0I7QUFFQSxtQkFBZSxRQUFRLGtCQUNuQixRQUFRLGdCQUFnQixLQUFLLFlBQVksSUFDekM7QUFFSixRQUFJLGlCQUFpQixlQUFlO0FBQ2xDLFVBQUksTUFBTSxRQUFRLE1BQU07QUFDdEIsWUFBSSxPQUFPLE1BQU0sTUFBTSxFQUFFLEtBQUs7QUFBQSxVQUM1QixPQUFPO0FBQUEsWUFDTCxHQUFHLE1BQU07QUFBQSxZQUNULEdBQUc7QUFBQSxVQUNMO0FBQUEsUUFDRixDQUFDO0FBQ0Q7QUFBQSxNQUNGLE9BQU87QUFDTCxZQUFJLE9BQU8sTUFBTSxNQUFNLEVBQUUsSUFBSSxNQUFNLFNBQVMsT0FBTztBQUNuRDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLE9BQU87QUFDTCxZQUFNLGlCQUFpQixJQUFJLGNBQWMsS0FBSztBQUFBLFFBQzVDLE1BQU07QUFBQSxRQUNOLFNBQVMsaUJBQWlCLFFBQVEsTUFBTSxVQUFVO0FBQUEsTUFDcEQsQ0FBQztBQUVELFVBQUksT0FBTyxHQUFHLEVBQUUsS0FBSztBQUFBLFFBQ25CLE9BQU87QUFBQSxVQUNMLEdBQUcsZUFBZTtBQUFBLFVBQ2xCLEdBQUc7QUFBQSxRQUNMO0FBQUEsTUFDRixDQUFDO0FBQ0Q7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGO0FBRUYsSUFBTyxrQ0FBUTs7O0FFekRmO0FBTUEsSUFBTSxlQUNKLENBQUMsVUFBK0IsQ0FBQyxNQUNqQyxDQUFDLFNBQ0QsT0FBTyxLQUFxQixRQUF5QjtBQUVuRCxRQUFNLGVBQWUsSUFBSTtBQUV6QixNQUFJLE9BQU8sU0FBVSxNQUFNO0FBQ3pCLFVBQU0sS0FBSyxJQUFJLGNBQWMsT0FBTyxJQUFJLGFBQWE7QUFDckQsVUFBTSxzQkFBc0IsUUFBUSxRQUFRLFFBQVEsTUFBTSxHQUFHLElBQUk7QUFFakUsUUFBSSxxQkFBcUI7QUFDdkIsbUJBQWEsS0FBSyxNQUFNO0FBQUEsUUFDdEIsR0FBRztBQUFBLFFBQ0g7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILE9BQU87QUFDTCxtQkFBYSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQzlCO0FBQUEsRUFDRjtBQUVBLFFBQU0sS0FBSyxLQUFLLEdBQUc7QUFDckI7QUFFRixJQUFPLHlCQUFROzs7QUhsQlIsSUFBTUEseUJBQ1gsQ0FBQztBQUFBLEVBQ0MsY0FBYztBQUFBLEVBQ2Q7QUFBQSxFQUNBO0FBQ0YsSUFBOEIsQ0FBQyxNQUMvQixDQUFDLFNBQ0QsQ0FBQyxLQUFxQixRQUF5QjtBQUM3QyxNQUFJLGFBQWE7QUFDZixXQUFPLHVCQUFhLGVBQWU7QUFBQSxNQUNqQyxnQ0FBK0Isd0JBQXdCLEVBQUUsSUFBSTtBQUFBLElBQy9ELEVBQUUsS0FBSyxHQUFHO0FBQUEsRUFDWjtBQUVBLFNBQU8sZ0NBQStCLHdCQUF3QixFQUFFLElBQUk7QUFBQSxJQUNsRTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbIndpdGhFeGNlcHRpb25IYW5kbGluZyJdCn0K
|