nextlove 0.2.0 → 0.2.1
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/generate-openapi/index.d.ts +16 -0
- package/dist/generate-openapi/index.js +14134 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +154 -0
- package/dist/types/index.d.ts +41 -0
- package/dist/types/index.js +19 -0
- package/dist/with-route-spec/index.d.ts +12 -0
- package/dist/with-route-spec/index.js +145 -0
- package/dist/with-route-spec/middlewares/with-methods.d.ts +4 -0
- package/dist/with-route-spec/middlewares/with-methods.js +42 -0
- package/dist/with-route-spec/middlewares/with-validation.d.ts +11 -0
- package/dist/with-route-spec/middlewares/with-validation.js +89 -0
- package/package.json +2 -1
- package/.eslintrc.json +0 -3
- package/next-env.d.ts +0 -5
- package/next.config.js +0 -6
- package/src/generate-openapi/index.ts +0 -224
- package/src/index.ts +0 -4
- package/src/types/index.ts +0 -107
- package/src/with-route-spec/index.ts +0 -96
- package/src/with-route-spec/middlewares/with-methods.ts +0 -22
- package/src/with-route-spec/middlewares/with-validation.ts +0 -101
- package/tests/route-spec-types.ts +0 -154
- package/tsconfig.json +0 -21
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from 'nextjs-exception-middleware';
|
|
2
|
+
export { checkRouteSpec, createWithRouteSpec } from './with-route-spec/index.js';
|
|
3
|
+
export { wrappers } from 'nextjs-middleware-wrappers';
|
|
4
|
+
export { AuthMiddlewares, CreateWithRouteSpecFunction, Middleware, MiddlewareChainOutput, RouteFunction, RouteSpec, SetupParams } from './types/index.js';
|
|
5
|
+
import './with-route-spec/middlewares/with-methods.js';
|
|
6
|
+
import 'zod';
|
|
7
|
+
import 'next';
|
|
8
|
+
import 'openapi3-ts';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
22
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
23
|
+
|
|
24
|
+
// src/index.ts
|
|
25
|
+
var src_exports = {};
|
|
26
|
+
__export(src_exports, {
|
|
27
|
+
checkRouteSpec: () => checkRouteSpec,
|
|
28
|
+
createWithRouteSpec: () => createWithRouteSpec,
|
|
29
|
+
wrappers: () => import_nextjs_middleware_wrappers2.wrappers
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(src_exports);
|
|
32
|
+
__reExport(src_exports, require("nextjs-exception-middleware"), module.exports);
|
|
33
|
+
|
|
34
|
+
// src/with-route-spec/index.ts
|
|
35
|
+
var import_nextjs_exception_middleware3 = require("nextjs-exception-middleware");
|
|
36
|
+
var import_nextjs_middleware_wrappers = __toESM(require("nextjs-middleware-wrappers"));
|
|
37
|
+
|
|
38
|
+
// src/with-route-spec/middlewares/with-methods.ts
|
|
39
|
+
var import_nextjs_exception_middleware = require("nextjs-exception-middleware");
|
|
40
|
+
var withMethods = (methods) => (next) => (req, res) => {
|
|
41
|
+
if (!methods.includes(req.method)) {
|
|
42
|
+
throw new import_nextjs_exception_middleware.MethodNotAllowedException({
|
|
43
|
+
type: "method_not_allowed",
|
|
44
|
+
message: `only ${methods.join(",")} accepted`
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
return next(req, res);
|
|
48
|
+
};
|
|
49
|
+
var with_methods_default = withMethods;
|
|
50
|
+
|
|
51
|
+
// src/with-route-spec/middlewares/with-validation.ts
|
|
52
|
+
var import_nextjs_exception_middleware2 = require("nextjs-exception-middleware");
|
|
53
|
+
var import_lodash = require("lodash");
|
|
54
|
+
var parseCommaSeparateArrays = (schema, input) => {
|
|
55
|
+
const parsed_input = Object.assign({}, input);
|
|
56
|
+
return schema.parse(parsed_input);
|
|
57
|
+
};
|
|
58
|
+
var zodIssueToString = (issue) => {
|
|
59
|
+
if (issue.path.join(".") === "") {
|
|
60
|
+
return issue.message;
|
|
61
|
+
}
|
|
62
|
+
if (issue.message === "Required") {
|
|
63
|
+
return `${issue.path.join(".")} is required`;
|
|
64
|
+
}
|
|
65
|
+
return `${issue.message} for "${issue.path.join(".")}"`;
|
|
66
|
+
};
|
|
67
|
+
var withValidation = (input) => (next) => async (req, res) => {
|
|
68
|
+
var _a, _b, _c;
|
|
69
|
+
if ((req.method === "POST" || req.method === "PATCH") && !((_a = req.headers["content-type"]) == null ? void 0 : _a.includes("application/json")) && !(0, import_lodash.isEmpty)(req.body)) {
|
|
70
|
+
throw new import_nextjs_exception_middleware2.BadRequestException({
|
|
71
|
+
type: "invalid_content_type",
|
|
72
|
+
message: `POST requests must have Content-Type header with "application/json"`
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const original_combined_params = { ...req.query, ...req.body };
|
|
77
|
+
req.body = (_b = input.jsonBody) == null ? void 0 : _b.parse(req.body);
|
|
78
|
+
req.query = (_c = input.queryParams) == null ? void 0 : _c.parse(req.query);
|
|
79
|
+
if (input.commonParams) {
|
|
80
|
+
;
|
|
81
|
+
req.commonParams = parseCommaSeparateArrays(input.commonParams, original_combined_params);
|
|
82
|
+
}
|
|
83
|
+
} catch (error) {
|
|
84
|
+
if (error.name === "ZodError") {
|
|
85
|
+
let message;
|
|
86
|
+
if (error.issues.length === 1) {
|
|
87
|
+
const issue = error.issues[0];
|
|
88
|
+
message = zodIssueToString(issue);
|
|
89
|
+
} else {
|
|
90
|
+
const message_components = [];
|
|
91
|
+
for (const issue of error.issues) {
|
|
92
|
+
message_components.push(zodIssueToString(issue));
|
|
93
|
+
}
|
|
94
|
+
message = `${error.issues.length} Input Errors: ` + message_components.join(", ");
|
|
95
|
+
}
|
|
96
|
+
throw new import_nextjs_exception_middleware2.BadRequestException({
|
|
97
|
+
type: "invalid_input",
|
|
98
|
+
message,
|
|
99
|
+
validation_errors: error.format()
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
throw new import_nextjs_exception_middleware2.BadRequestException({
|
|
103
|
+
type: "invalid_input",
|
|
104
|
+
message: "Error while parsing input"
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return next(req, res);
|
|
108
|
+
};
|
|
109
|
+
var with_validation_default = withValidation;
|
|
110
|
+
|
|
111
|
+
// src/with-route-spec/index.ts
|
|
112
|
+
var checkRouteSpec = (spec) => spec;
|
|
113
|
+
var createWithRouteSpec = (setupParams) => {
|
|
114
|
+
const {
|
|
115
|
+
authMiddlewareMap = {},
|
|
116
|
+
globalMiddlewares = [],
|
|
117
|
+
exceptionHandlingMiddleware = (0, import_nextjs_exception_middleware3.withExceptionHandling)({
|
|
118
|
+
addOkStatus: true
|
|
119
|
+
})
|
|
120
|
+
} = setupParams;
|
|
121
|
+
const withRouteSpec = (spec) => {
|
|
122
|
+
const createRouteExport = (userDefinedRouteFn) => {
|
|
123
|
+
const rootRequestHandler = async (req, res) => {
|
|
124
|
+
authMiddlewareMap["none"] = (next) => next;
|
|
125
|
+
const auth_middleware = authMiddlewareMap[spec.auth];
|
|
126
|
+
if (!auth_middleware)
|
|
127
|
+
throw new Error(`Unknown auth type: ${spec.auth}`);
|
|
128
|
+
return (0, import_nextjs_middleware_wrappers.default)(...exceptionHandlingMiddleware ? [exceptionHandlingMiddleware] : [], ...globalMiddlewares || [], auth_middleware, ...spec.middlewares || [], with_methods_default(spec.methods), with_validation_default({
|
|
129
|
+
jsonBody: spec.jsonBody,
|
|
130
|
+
queryParams: spec.queryParams,
|
|
131
|
+
commonParams: spec.commonParams
|
|
132
|
+
}), userDefinedRouteFn)(req, res);
|
|
133
|
+
};
|
|
134
|
+
rootRequestHandler._setupParams = setupParams;
|
|
135
|
+
rootRequestHandler._routeSpec = spec;
|
|
136
|
+
return rootRequestHandler;
|
|
137
|
+
};
|
|
138
|
+
createRouteExport._setupParams = setupParams;
|
|
139
|
+
createRouteExport._routeSpec = spec;
|
|
140
|
+
return createRouteExport;
|
|
141
|
+
};
|
|
142
|
+
withRouteSpec._setupParams = setupParams;
|
|
143
|
+
return withRouteSpec;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
// src/index.ts
|
|
147
|
+
var import_nextjs_middleware_wrappers2 = require("nextjs-middleware-wrappers");
|
|
148
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
149
|
+
0 && (module.exports = {
|
|
150
|
+
checkRouteSpec,
|
|
151
|
+
createWithRouteSpec,
|
|
152
|
+
wrappers
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2luZGV4LnRzIiwgIi4uL3NyYy93aXRoLXJvdXRlLXNwZWMvaW5kZXgudHMiLCAiLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9taWRkbGV3YXJlcy93aXRoLW1ldGhvZHMudHMiLCAiLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCJuZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuZXhwb3J0ICogZnJvbSBcIi4vd2l0aC1yb3V0ZS1zcGVjXCJcbmV4cG9ydCB7IHdyYXBwZXJzIH0gZnJvbSBcIm5leHRqcy1taWRkbGV3YXJlLXdyYXBwZXJzXCJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCJcbiIsICJpbXBvcnQgeyBOZXh0QXBpUmVzcG9uc2UsIE5leHRBcGlSZXF1ZXN0IH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgd2l0aEV4Y2VwdGlvbkhhbmRsaW5nIH0gZnJvbSBcIm5leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5pbXBvcnQgd3JhcHBlcnMsIHsgTWlkZGxld2FyZSB9IGZyb20gXCJuZXh0anMtbWlkZGxld2FyZS13cmFwcGVyc1wiXG5pbXBvcnQgeyBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24sIFJvdXRlU3BlYyB9IGZyb20gXCIuLi90eXBlc1wiXG5pbXBvcnQgd2l0aE1ldGhvZHMsIHsgSFRUUE1ldGhvZHMgfSBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLW1ldGhvZHNcIlxuaW1wb3J0IHdpdGhWYWxpZGF0aW9uIGZyb20gXCIuL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvblwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5cbnR5cGUgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnkgfCB6LlpvZEVmZmVjdHM8ei5ab2RUeXBlQW55PlxuXG5leHBvcnQgY29uc3QgY2hlY2tSb3V0ZVNwZWMgPSA8XG4gIEF1dGhUeXBlIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuICBNZXRob2RzIGV4dGVuZHMgSFRUUE1ldGhvZHNbXSA9IEhUVFBNZXRob2RzW10sXG4gIEpzb25Cb2R5IGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgUGFyYW1EZWYgPSB6LlpvZFR5cGVBbnksXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBNaWRkbGV3YXJlcyBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmU8YW55LCBhbnk+W10gPSByZWFkb25seSBNaWRkbGV3YXJlPFxuICAgIGFueSxcbiAgICBhbnlcbiAgPltdLFxuICBTcGVjIGV4dGVuZHMgUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzXG4gID4gPSBSb3V0ZVNwZWM8XG4gICAgQXV0aFR5cGUsXG4gICAgTWV0aG9kcyxcbiAgICBKc29uQm9keSxcbiAgICBRdWVyeVBhcmFtcyxcbiAgICBDb21tb25QYXJhbXMsXG4gICAgTWlkZGxld2FyZXNcbiAgPlxuPihcbiAgc3BlYzogU3BlY1xuKTogc3RyaW5nIGV4dGVuZHMgU3BlY1tcImF1dGhcIl1cbiAgPyBgeW91ciByb3V0ZSBzcGVjIGlzIHVuZGVyc3BlY2lmaWVkLCBhZGQgXCJhcyBjb25zdFwiYFxuICA6IFNwZWMgPT4gc3BlYyBhcyBhbnlcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVdpdGhSb3V0ZVNwZWM6IENyZWF0ZVdpdGhSb3V0ZVNwZWNGdW5jdGlvbiA9ICgoXG4gIHNldHVwUGFyYW1zXG4pID0+IHtcbiAgY29uc3Qge1xuICAgIGF1dGhNaWRkbGV3YXJlTWFwID0ge30sXG4gICAgZ2xvYmFsTWlkZGxld2FyZXMgPSBbXSxcbiAgICBleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmUgPSB3aXRoRXhjZXB0aW9uSGFuZGxpbmcoe1xuICAgICAgYWRkT2tTdGF0dXM6IHRydWUsXG4gICAgfSkgYXMgYW55LFxuICB9ID0gc2V0dXBQYXJhbXNcblxuICBjb25zdCB3aXRoUm91dGVTcGVjID0gKHNwZWM6IFJvdXRlU3BlYykgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZVJvdXRlRXhwb3J0ID0gKHVzZXJEZWZpbmVkUm91dGVGbikgPT4ge1xuICAgICAgY29uc3Qgcm9vdFJlcXVlc3RIYW5kbGVyID0gYXN5bmMgKFxuICAgICAgICByZXE6IE5leHRBcGlSZXF1ZXN0LFxuICAgICAgICByZXM6IE5leHRBcGlSZXNwb25zZVxuICAgICAgKSA9PiB7XG4gICAgICAgIGF1dGhNaWRkbGV3YXJlTWFwW1wibm9uZVwiXSA9IChuZXh0KSA9PiBuZXh0XG5cbiAgICAgICAgY29uc3QgYXV0aF9taWRkbGV3YXJlID0gYXV0aE1pZGRsZXdhcmVNYXBbc3BlYy5hdXRoXVxuICAgICAgICBpZiAoIWF1dGhfbWlkZGxld2FyZSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGF1dGggdHlwZTogJHtzcGVjLmF1dGh9YClcblxuICAgICAgICByZXR1cm4gd3JhcHBlcnMoXG4gICAgICAgICAgLi4uKChleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVcbiAgICAgICAgICAgID8gW2V4Y2VwdGlvbkhhbmRsaW5nTWlkZGxld2FyZV1cbiAgICAgICAgICAgIDogW10pIGFzIFthbnldKSxcbiAgICAgICAgICAuLi4oKGdsb2JhbE1pZGRsZXdhcmVzIHx8IFtdKSBhcyBbXSksXG4gICAgICAgICAgYXV0aF9taWRkbGV3YXJlLFxuICAgICAgICAgIC4uLigoc3BlYy5taWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIHdpdGhNZXRob2RzKHNwZWMubWV0aG9kcyksXG4gICAgICAgICAgd2l0aFZhbGlkYXRpb24oe1xuICAgICAgICAgICAganNvbkJvZHk6IHNwZWMuanNvbkJvZHksXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogc3BlYy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbW1vblBhcmFtczogc3BlYy5jb21tb25QYXJhbXMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdXNlckRlZmluZWRSb3V0ZUZuXG4gICAgICAgICkocmVxIGFzIGFueSwgcmVzKVxuICAgICAgfVxuXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICAgIHJvb3RSZXF1ZXN0SGFuZGxlci5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgICByZXR1cm4gcm9vdFJlcXVlc3RIYW5kbGVyXG4gICAgfVxuXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3NldHVwUGFyYW1zID0gc2V0dXBQYXJhbXNcbiAgICBjcmVhdGVSb3V0ZUV4cG9ydC5fcm91dGVTcGVjID0gc3BlY1xuXG4gICAgcmV0dXJuIGNyZWF0ZVJvdXRlRXhwb3J0XG4gIH1cblxuICB3aXRoUm91dGVTcGVjLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG5cbiAgcmV0dXJuIHdpdGhSb3V0ZVNwZWNcbn0pIGFzIGFueVxuIiwgImltcG9ydCB7IE1ldGhvZE5vdEFsbG93ZWRFeGNlcHRpb24gfSBmcm9tIFwibmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcblxuZXhwb3J0IHR5cGUgSFRUUE1ldGhvZHMgPVxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiREVMRVRFXCJcbiAgfCBcIlBVVFwiXG4gIHwgXCJQQVRDSFwiXG4gIHwgXCJIRUFEXCJcbiAgfCBcIk9QVElPTlNcIlxuXG5leHBvcnQgY29uc3Qgd2l0aE1ldGhvZHMgPSAobWV0aG9kczogSFRUUE1ldGhvZHNbXSkgPT4gKG5leHQpID0+IChyZXEsIHJlcykgPT4ge1xuICBpZiAoIW1ldGhvZHMuaW5jbHVkZXMocmVxLm1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbih7XG4gICAgICB0eXBlOiBcIm1ldGhvZF9ub3RfYWxsb3dlZFwiLFxuICAgICAgbWVzc2FnZTogYG9ubHkgJHttZXRob2RzLmpvaW4oXCIsXCIpfSBhY2NlcHRlZGAsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gbmV4dChyZXEsIHJlcylcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE1ldGhvZHNcbiIsICJpbXBvcnQgdHlwZSB7IE5leHRBcGlSZXF1ZXN0LCBOZXh0QXBpUmVzcG9uc2UgfSBmcm9tIFwibmV4dFwiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBCYWRSZXF1ZXN0RXhjZXB0aW9uIH0gZnJvbSBcIm5leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcImxvZGFzaFwiXG5cbmNvbnN0IHBhcnNlQ29tbWFTZXBhcmF0ZUFycmF5cyA9IChcbiAgc2NoZW1hOiB6LlpvZFR5cGVBbnksXG4gIGlucHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKSA9PiB7XG4gIGNvbnN0IHBhcnNlZF9pbnB1dCA9IE9iamVjdC5hc3NpZ24oe30sIGlucHV0KVxuXG4gIC8vIHRvZG86IGl0ZXJhdGUgb3ZlciBab2QgdG9wIGxldmVsIGtleXMsIGlmIHRoZXJlJ3MgYW4gYXJyYXksIHBhcnNlIGl0XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZShwYXJzZWRfaW5wdXQpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdElucHV0PFxuICBKc29uQm9keSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgUXVlcnlQYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueVxuPiB7XG4gIGpzb25Cb2R5PzogSnNvbkJvZHlcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc1xuICBjb21tb25QYXJhbXM/OiBDb21tb25QYXJhbXNcbn1cblxuY29uc3Qgem9kSXNzdWVUb1N0cmluZyA9IChpc3N1ZTogei5ab2RJc3N1ZSkgPT4ge1xuICBpZiAoaXNzdWUucGF0aC5qb2luKFwiLlwiKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlXG4gIH1cbiAgaWYgKGlzc3VlLm1lc3NhZ2UgPT09IFwiUmVxdWlyZWRcIikge1xuICAgIHJldHVybiBgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfSBpcyByZXF1aXJlZGBcbiAgfVxuICByZXR1cm4gYCR7aXNzdWUubWVzc2FnZX0gZm9yIFwiJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfVwiYFxufVxuXG5leHBvcnQgY29uc3Qgd2l0aFZhbGlkYXRpb24gPVxuICA8XG4gICAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgUXVlcnlQYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgQ29tbW9uUGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gID4oXG4gICAgaW5wdXQ6IFJlcXVlc3RJbnB1dDxKc29uQm9keSwgUXVlcnlQYXJhbXMsIENvbW1vblBhcmFtcz5cbiAgKSA9PlxuICAobmV4dCkgPT5cbiAgYXN5bmMgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpICYmXG4gICAgICAhaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgUE9TVCByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtcyA9IHsgLi4ucmVxLnF1ZXJ5LCAuLi5yZXEuYm9keSB9XG4gICAgICByZXEuYm9keSA9IGlucHV0Lmpzb25Cb2R5Py5wYXJzZShyZXEuYm9keSlcbiAgICAgIHJlcS5xdWVyeSA9IGlucHV0LnF1ZXJ5UGFyYW1zPy5wYXJzZShyZXEucXVlcnkpXG5cbiAgICAgIGlmIChpbnB1dC5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgOyhyZXEgYXMgYW55KS5jb21tb25QYXJhbXMgPSBwYXJzZUNvbW1hU2VwYXJhdGVBcnJheXMoXG4gICAgICAgICAgaW5wdXQuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIG9yaWdpbmFsX2NvbWJpbmVkX3BhcmFtc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiWm9kRXJyb3JcIikge1xuICAgICAgICBsZXQgbWVzc2FnZVxuICAgICAgICBpZiAoZXJyb3IuaXNzdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGlzc3VlID0gZXJyb3IuaXNzdWVzWzBdXG4gICAgICAgICAgbWVzc2FnZSA9IHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZV9jb21wb25lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICAgICAgICAgZm9yIChjb25zdCBpc3N1ZSBvZiBlcnJvci5pc3N1ZXMpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5wdXNoKHpvZElzc3VlVG9TdHJpbmcoaXNzdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgIGAke2Vycm9yLmlzc3Vlcy5sZW5ndGh9IElucHV0IEVycm9yczogYCArXG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMuam9pbihcIiwgXCIpXG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB2YWxpZGF0aW9uX2Vycm9yczogZXJyb3IuZm9ybWF0KCksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2lucHV0XCIsXG4gICAgICAgIG1lc3NhZ2U6IFwiRXJyb3Igd2hpbGUgcGFyc2luZyBpbnB1dFwiLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChyZXEsIHJlcylcbiAgfVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoVmFsaWRhdGlvblxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx3QkFBYyx3Q0FBZDs7O0FDQ0EsMENBQXNDO0FBQ3RDLHdDQUFxQzs7O0FDRnJDLHlDQUEwQztBQVduQyxJQUFNLGNBQWMsQ0FBQyxZQUEyQixDQUFDLFNBQVMsQ0FBQyxLQUFLLFFBQVE7QUFDN0UsTUFBSSxDQUFDLFFBQVEsU0FBUyxJQUFJLE1BQU0sR0FBRztBQUNqQyxVQUFNLElBQUksNkRBQTBCO0FBQUEsTUFDbEMsTUFBTTtBQUFBLE1BQ04sU0FBUyxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQUEsSUFDbkMsQ0FBQztBQUFBLEVBQ0g7QUFDQSxTQUFPLEtBQUssS0FBSyxHQUFHO0FBQ3RCO0FBRUEsSUFBTyx1QkFBUTs7O0FDbkJmLDBDQUFvQztBQUNwQyxvQkFBd0I7QUFFeEIsSUFBTSwyQkFBMkIsQ0FDL0IsUUFDQSxVQUNHO0FBQ0gsUUFBTSxlQUFlLE9BQU8sT0FBTyxD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
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { NextApiRequest, NextApiResponse } from 'next';
|
|
2
|
+
import { Middleware as Middleware$1 } from 'nextjs-middleware-wrappers';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { HTTPMethods } from '../with-route-spec/middlewares/with-methods.js';
|
|
5
|
+
import { SecuritySchemeObject, SecurityRequirementObject } from 'openapi3-ts';
|
|
6
|
+
|
|
7
|
+
declare type Middleware<T, Dep = {}> = Middleware$1<T, Dep> & {
|
|
8
|
+
securitySchema?: SecuritySchemeObject;
|
|
9
|
+
securityObjects?: SecurityRequirementObject[];
|
|
10
|
+
};
|
|
11
|
+
declare type ParamDef = z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>;
|
|
12
|
+
interface RouteSpec<Auth extends string = string, Methods extends HTTPMethods[] = any, JsonBody extends ParamDef = z.ZodTypeAny, QueryParams extends ParamDef = z.ZodTypeAny, CommonParams extends ParamDef = z.ZodTypeAny, Middlewares extends readonly Middleware<any, any>[] = any[], JsonResponse extends ParamDef = z.ZodTypeAny> {
|
|
13
|
+
methods: Methods;
|
|
14
|
+
auth: Auth;
|
|
15
|
+
jsonBody?: JsonBody;
|
|
16
|
+
queryParams?: QueryParams;
|
|
17
|
+
commonParams?: CommonParams;
|
|
18
|
+
middlewares?: Middlewares;
|
|
19
|
+
jsonResponse?: JsonResponse;
|
|
20
|
+
}
|
|
21
|
+
declare type MiddlewareChainOutput<MWChain extends readonly Middleware<any, any>[]> = MWChain extends readonly [] ? {} : MWChain extends readonly [infer First, ...infer Rest] ? First extends Middleware<infer T, any> ? T & (Rest extends readonly Middleware<any, any>[] ? MiddlewareChainOutput<Rest> : never) : never : never;
|
|
22
|
+
declare type AuthMiddlewares = {
|
|
23
|
+
[auth_type: string]: Middleware<any, any>;
|
|
24
|
+
};
|
|
25
|
+
interface SetupParams<AuthMW extends AuthMiddlewares = AuthMiddlewares, GlobalMW extends Middleware<any, any>[] = any[]> {
|
|
26
|
+
authMiddlewareMap: AuthMW;
|
|
27
|
+
globalMiddlewares: GlobalMW;
|
|
28
|
+
exceptionHandlingMiddleware?: ((next: Function) => Function) | null;
|
|
29
|
+
apiName: string;
|
|
30
|
+
productionServerUrl: string;
|
|
31
|
+
}
|
|
32
|
+
declare const defaultMiddlewareMap: {
|
|
33
|
+
readonly none: (next: any) => any;
|
|
34
|
+
};
|
|
35
|
+
declare type RouteFunction<SP extends SetupParams<AuthMiddlewares>, RS extends RouteSpec> = (req: (SP["authMiddlewareMap"] & typeof defaultMiddlewareMap)[RS["auth"]] extends Middleware<infer AuthMWOut, any> ? Omit<NextApiRequest, "query" | "body"> & AuthMWOut & MiddlewareChainOutput<RS["middlewares"] extends readonly Middleware<any, any>[] ? [...SP["globalMiddlewares"], ...RS["middlewares"]] : SP["globalMiddlewares"]> & {
|
|
36
|
+
body: (RS["jsonBody"] extends z.ZodTypeAny ? z.infer<RS["jsonBody"]> : {}) & (RS["commonParams"] extends z.ZodTypeAny ? z.infer<RS["commonParams"]> : {});
|
|
37
|
+
query: (RS["queryParams"] extends z.ZodTypeAny ? z.infer<RS["queryParams"]> : {}) & (RS["commonParams"] extends z.ZodTypeAny ? z.infer<RS["commonParams"]> : {});
|
|
38
|
+
} : `unknown auth type: ${RS["auth"]}. You should configure this auth type in your auth_middlewares w/ createWithRouteSpec, or maybe you need to add "as const" to your route spec definition.`, res: NextApiResponse<RS["jsonResponse"] extends z.ZodTypeAny ? z.infer<RS["jsonResponse"]> : any>) => Promise<void>;
|
|
39
|
+
declare type CreateWithRouteSpecFunction = <SP extends SetupParams<AuthMiddlewares, any>>(setupParams: SP) => <RS extends RouteSpec<any, any, any, any, any, any, any>>(route_spec: RS) => (next: RouteFunction<SP, RS>) => any;
|
|
40
|
+
|
|
41
|
+
export { AuthMiddlewares, CreateWithRouteSpecFunction, Middleware, MiddlewareChainOutput, RouteFunction, RouteSpec, SetupParams };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
|
|
16
|
+
// src/types/index.ts
|
|
17
|
+
var types_exports = {};
|
|
18
|
+
module.exports = __toCommonJS(types_exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3R5cGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBOZXh0QXBpUmVzcG9uc2UsIE5leHRBcGlSZXF1ZXN0IH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgTWlkZGxld2FyZSBhcyBXcmFwcGVyTWlkZGxld2FyZSB9IGZyb20gXCJuZXh0anMtbWlkZGxld2FyZS13cmFwcGVyc1wiXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiXG5pbXBvcnQgeyBIVFRQTWV0aG9kcyB9IGZyb20gXCIuLi93aXRoLXJvdXRlLXNwZWMvbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzXCJcbmltcG9ydCB7IFNlY3VyaXR5U2NoZW1lT2JqZWN0LCBTZWN1cml0eVJlcXVpcmVtZW50T2JqZWN0IH0gZnJvbSBcIm9wZW5hcGkzLXRzXCJcblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZTxULCBEZXAgPSB7fT4gPSBXcmFwcGVyTWlkZGxld2FyZTxULCBEZXA+ICYge1xuICBzZWN1cml0eVNjaGVtYT86IFNlY3VyaXR5U2NoZW1lT2JqZWN0XG4gIHNlY3VyaXR5T2JqZWN0cz86IFNlY3VyaXR5UmVxdWlyZW1lbnRPYmplY3RbXVxufVxuXG50eXBlIFBhcmFtRGVmID0gei5ab2RUeXBlQW55IHwgei5ab2RFZmZlY3RzPHouWm9kVHlwZUFueT5cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVNwZWM8XG4gIEF1dGggZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4gIE1ldGhvZHMgZXh0ZW5kcyBIVFRQTWV0aG9kc1tdID0gYW55LFxuICBKc29uQm9keSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgTWlkZGxld2FyZXMgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdID0gYW55W10sXG4gIEpzb25SZXNwb25zZSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55XG4+IHtcbiAgbWV0aG9kczogTWV0aG9kc1xuICBhdXRoOiBBdXRoXG4gIGpzb25Cb2R5PzogSnNvbkJvZHlcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc1xuICBjb21tb25QYXJhbXM/OiBDb21tb25QYXJhbXNcbiAgbWlkZGxld2FyZXM/OiBNaWRkbGV3YXJlc1xuICBqc29uUmVzcG9uc2U/OiBKc29uUmVzcG9uc2Vcbn1cblxuZXhwb3J0IHR5cGUgTWlkZGxld2FyZUNoYWluT3V0cHV0PFxuICBNV0NoYWluIGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZTxhbnksIGFueT5bXVxuPiA9IE1XQ2hhaW4gZXh0ZW5kcyByZWFkb25seSBbXVxuICA/IHt9XG4gIDogTVdDaGFpbiBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCwgLi4uaW5mZXIgUmVzdF1cbiAgPyBGaXJzdCBleHRlbmRzIE1pZGRsZXdhcmU8aW5mZXIgVCwgYW55PlxuICAgID8gVCAmXG4gICAgICAgIChSZXN0IGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZTxhbnksIGFueT5bXVxuICAgICAgICAgID8gTWlkZGxld2FyZUNoYWluT3V0cHV0PFJlc3Q+XG4gICAgICAgICAgOiBuZXZlcilcbiAgICA6IG5ldmVyXG4gIDogbmV2ZXJcblxuZXhwb3J0IHR5cGUgQXV0aE1pZGRsZXdhcmVzID0ge1xuICBbYXV0aF90eXBlOiBzdHJpbmddOiBNaWRkbGV3YXJlPGFueSwgYW55PlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldHVwUGFyYW1zPFxuICBBdXRoTVcgZXh0ZW5kcyBBdXRoTWlkZGxld2FyZXMgPSBBdXRoTWlkZGxld2FyZXMsXG4gIEdsb2JhbE1XIGV4dGVuZHMgTWlkZGxld2FyZTxhbnksIGFueT5bXSA9IGFueVtdXG4+IHtcbiAgYXV0aE1pZGRsZXdhcmVNYXA6IEF1dGhNV1xuICBnbG9iYWxNaWRkbGV3YXJlczogR2xvYmFsTVdcbiAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlPzogKChuZXh0OiBGdW5jdGlvbikgPT4gRnVuY3Rpb24pIHwgbnVsbFxuXG4gIC8vIFRoZXNlIGltcHJvdmUgT3BlbkFQSSBnZW5lcmF0aW9uXG4gIGFwaU5hbWU6IHN0cmluZ1xuICBwcm9kdWN0aW9uU2VydmVyVXJsOiBzdHJpbmdcbn1cblxuY29uc3QgZGVmYXVsdE1pZGRsZXdhcmVNYXAgPSB7XG4gIG5vbmU6IChuZXh0KSA9PiBuZXh0LFxufSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBSb3V0ZUZ1bmN0aW9uPFxuICBTUCBleHRlbmRzIFNldHVwUGFyYW1zPEF1dGhNaWRkbGV3YXJlcz4sXG4gIFJTIGV4dGVuZHMgUm91dGVTcGVjXG4+ID0gKFxuICByZXE6IChTUFtcImF1dGhNaWRkbGV3YXJlTWFwXCJdICZcbiAgICB0eXBlb2YgZGVmYXVsdE1pZGRsZXdhcmVNYXApW1JTW1wiYXV0aFwiXV0gZXh0ZW5kcyBNaWRkbGV3YXJlPFxuICAgIGluZmVyIEF1dGhNV091dCxcbiAgICBhbnlcbiAgPlxuICAgID8gT21pdDxOZXh0QXBpUmVxdWVzdCwgXCJxdWVyeVwiIHwgXCJib2R5XCI+ICZcbiAgICAgICAgQXV0aE1XT3V0ICZcbiAgICAgICAgTWlkZGxld2FyZUNoYWluT3V0cHV0PFxuICAgICAgICAgIFJTW1wibWlkZGxld2FyZXNcIl0gZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdXG4gICAgICAgICAgICA/IFsuLi5TUFtcImdsb2JhbE1pZGRsZXdhcmVzXCJdLCAuLi5SU1tcIm1pZGRsZXdhcmVzXCJdXVxuICAgICAgICAgICAgOiBTUFtcImdsb2JhbE1pZGRsZXdhcmVzXCJdXG4gICAgICAgID4gJiB7XG4gICAgICAgICAgYm9keTogKFJTW1wianNvbkJvZHlcIl0gZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgICAgICAgICAgID8gei5pbmZlcjxSU1tcImpzb25Cb2R5XCJdPlxuICAgICAgICAgICAgOiB7fSkgJlxuICAgICAgICAgICAgKFJTW1wiY29tbW9uUGFyYW1zXCJdIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gICAgICAgICAgICAgID8gei5pbmZlcjxSU1tcImNvbW1vblBhcmFtc1wiXT5cbiAgICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgICBxdWVyeTogKFJTW1wicXVlcnlQYXJhbXNcIl0gZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgICAgICAgICAgID8gei5pbmZlcjxSU1tcInF1ZXJ5UGFyYW1zXCJdPlxuICAgICAgICAgICAgOiB7fSkgJlxuICAgICAgICAgICAgKFJTW1wiY29tbW9uUGFyYW1zXCJdIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gICAgICAgICAgICAgID8gei5pbmZlcjxSU1tcImNvbW1vblBhcmFtc1wiXT5cbiAgICAgICAgICAgICAgOiB7fSlcbiAgICAgICAgfVxuICAgIDogYHVua25vd24gYXV0aCB0eXBlOiAke1JTW1wiYXV0aFwiXX0uIFlvdSBzaG91bGQgY29uZmlndXJlIHRoaXMgYXV0aCB0eXBlIGluIHlvdXIgYXV0aF9taWRkbGV3YXJlcyB3LyBjcmVhdGVXaXRoUm91dGVTcGVjLCBvciBtYXliZSB5b3UgbmVlZCB0byBhZGQgXCJhcyBjb25zdFwiIHRvIHlvdXIgcm91dGUgc3BlYyBkZWZpbml0aW9uLmAsXG4gIHJlczogTmV4dEFwaVJlc3BvbnNlPFxuICAgIFJTW1wianNvblJlc3BvbnNlXCJdIGV4dGVuZHMgei5ab2RUeXBlQW55ID8gei5pbmZlcjxSU1tcImpzb25SZXNwb25zZVwiXT4gOiBhbnlcbiAgPlxuKSA9PiBQcm9taXNlPHZvaWQ+XG5cbmV4cG9ydCB0eXBlIENyZWF0ZVdpdGhSb3V0ZVNwZWNGdW5jdGlvbiA9IDxcbiAgU1AgZXh0ZW5kcyBTZXR1cFBhcmFtczxBdXRoTWlkZGxld2FyZXMsIGFueT5cbj4oXG4gIHNldHVwUGFyYW1zOiBTUFxuKSA9PiA8UlMgZXh0ZW5kcyBSb3V0ZVNwZWM8YW55LCBhbnksIGFueSwgYW55LCBhbnksIGFueSwgYW55Pj4oXG4gIHJvdXRlX3NwZWM6IFJTXG4pID0+IChuZXh0OiBSb3V0ZUZ1bmN0aW9uPFNQLCBSUz4pID0+IGFueVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Middleware } from 'nextjs-middleware-wrappers';
|
|
2
|
+
import { RouteSpec, CreateWithRouteSpecFunction } from '../types/index.js';
|
|
3
|
+
import { HTTPMethods } from './middlewares/with-methods.js';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import 'next';
|
|
6
|
+
import 'openapi3-ts';
|
|
7
|
+
|
|
8
|
+
declare type ParamDef = z.ZodTypeAny | z.ZodEffects<z.ZodTypeAny>;
|
|
9
|
+
declare const checkRouteSpec: <AuthType extends string = string, Methods extends HTTPMethods[] = HTTPMethods[], JsonBody extends ParamDef = z.ZodTypeAny, QueryParams extends ParamDef = z.ZodTypeAny, CommonParams extends ParamDef = z.ZodTypeAny, Middlewares extends readonly Middleware<any, any>[] = readonly Middleware<any, any>[], Spec extends RouteSpec<AuthType, Methods, JsonBody, QueryParams, CommonParams, Middlewares, z.ZodTypeAny> = RouteSpec<AuthType, Methods, JsonBody, QueryParams, CommonParams, Middlewares, z.ZodTypeAny>>(spec: Spec) => string extends Spec["auth"] ? "your route spec is underspecified, add \"as const\"" : Spec;
|
|
10
|
+
declare const createWithRouteSpec: CreateWithRouteSpecFunction;
|
|
11
|
+
|
|
12
|
+
export { checkRouteSpec, createWithRouteSpec };
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
21
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
22
|
+
|
|
23
|
+
// src/with-route-spec/index.ts
|
|
24
|
+
var with_route_spec_exports = {};
|
|
25
|
+
__export(with_route_spec_exports, {
|
|
26
|
+
checkRouteSpec: () => checkRouteSpec,
|
|
27
|
+
createWithRouteSpec: () => createWithRouteSpec
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(with_route_spec_exports);
|
|
30
|
+
var import_nextjs_exception_middleware3 = require("nextjs-exception-middleware");
|
|
31
|
+
var import_nextjs_middleware_wrappers = __toESM(require("nextjs-middleware-wrappers"));
|
|
32
|
+
|
|
33
|
+
// src/with-route-spec/middlewares/with-methods.ts
|
|
34
|
+
var import_nextjs_exception_middleware = require("nextjs-exception-middleware");
|
|
35
|
+
var withMethods = (methods) => (next) => (req, res) => {
|
|
36
|
+
if (!methods.includes(req.method)) {
|
|
37
|
+
throw new import_nextjs_exception_middleware.MethodNotAllowedException({
|
|
38
|
+
type: "method_not_allowed",
|
|
39
|
+
message: `only ${methods.join(",")} accepted`
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return next(req, res);
|
|
43
|
+
};
|
|
44
|
+
var with_methods_default = withMethods;
|
|
45
|
+
|
|
46
|
+
// src/with-route-spec/middlewares/with-validation.ts
|
|
47
|
+
var import_nextjs_exception_middleware2 = require("nextjs-exception-middleware");
|
|
48
|
+
var import_lodash = require("lodash");
|
|
49
|
+
var parseCommaSeparateArrays = (schema, input) => {
|
|
50
|
+
const parsed_input = Object.assign({}, input);
|
|
51
|
+
return schema.parse(parsed_input);
|
|
52
|
+
};
|
|
53
|
+
var zodIssueToString = (issue) => {
|
|
54
|
+
if (issue.path.join(".") === "") {
|
|
55
|
+
return issue.message;
|
|
56
|
+
}
|
|
57
|
+
if (issue.message === "Required") {
|
|
58
|
+
return `${issue.path.join(".")} is required`;
|
|
59
|
+
}
|
|
60
|
+
return `${issue.message} for "${issue.path.join(".")}"`;
|
|
61
|
+
};
|
|
62
|
+
var withValidation = (input) => (next) => async (req, res) => {
|
|
63
|
+
var _a, _b, _c;
|
|
64
|
+
if ((req.method === "POST" || req.method === "PATCH") && !((_a = req.headers["content-type"]) == null ? void 0 : _a.includes("application/json")) && !(0, import_lodash.isEmpty)(req.body)) {
|
|
65
|
+
throw new import_nextjs_exception_middleware2.BadRequestException({
|
|
66
|
+
type: "invalid_content_type",
|
|
67
|
+
message: `POST requests must have Content-Type header with "application/json"`
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
const original_combined_params = { ...req.query, ...req.body };
|
|
72
|
+
req.body = (_b = input.jsonBody) == null ? void 0 : _b.parse(req.body);
|
|
73
|
+
req.query = (_c = input.queryParams) == null ? void 0 : _c.parse(req.query);
|
|
74
|
+
if (input.commonParams) {
|
|
75
|
+
;
|
|
76
|
+
req.commonParams = parseCommaSeparateArrays(input.commonParams, original_combined_params);
|
|
77
|
+
}
|
|
78
|
+
} catch (error) {
|
|
79
|
+
if (error.name === "ZodError") {
|
|
80
|
+
let message;
|
|
81
|
+
if (error.issues.length === 1) {
|
|
82
|
+
const issue = error.issues[0];
|
|
83
|
+
message = zodIssueToString(issue);
|
|
84
|
+
} else {
|
|
85
|
+
const message_components = [];
|
|
86
|
+
for (const issue of error.issues) {
|
|
87
|
+
message_components.push(zodIssueToString(issue));
|
|
88
|
+
}
|
|
89
|
+
message = `${error.issues.length} Input Errors: ` + message_components.join(", ");
|
|
90
|
+
}
|
|
91
|
+
throw new import_nextjs_exception_middleware2.BadRequestException({
|
|
92
|
+
type: "invalid_input",
|
|
93
|
+
message,
|
|
94
|
+
validation_errors: error.format()
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
throw new import_nextjs_exception_middleware2.BadRequestException({
|
|
98
|
+
type: "invalid_input",
|
|
99
|
+
message: "Error while parsing input"
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return next(req, res);
|
|
103
|
+
};
|
|
104
|
+
var with_validation_default = withValidation;
|
|
105
|
+
|
|
106
|
+
// src/with-route-spec/index.ts
|
|
107
|
+
var checkRouteSpec = (spec) => spec;
|
|
108
|
+
var createWithRouteSpec = (setupParams) => {
|
|
109
|
+
const {
|
|
110
|
+
authMiddlewareMap = {},
|
|
111
|
+
globalMiddlewares = [],
|
|
112
|
+
exceptionHandlingMiddleware = (0, import_nextjs_exception_middleware3.withExceptionHandling)({
|
|
113
|
+
addOkStatus: true
|
|
114
|
+
})
|
|
115
|
+
} = setupParams;
|
|
116
|
+
const withRouteSpec = (spec) => {
|
|
117
|
+
const createRouteExport = (userDefinedRouteFn) => {
|
|
118
|
+
const rootRequestHandler = async (req, res) => {
|
|
119
|
+
authMiddlewareMap["none"] = (next) => next;
|
|
120
|
+
const auth_middleware = authMiddlewareMap[spec.auth];
|
|
121
|
+
if (!auth_middleware)
|
|
122
|
+
throw new Error(`Unknown auth type: ${spec.auth}`);
|
|
123
|
+
return (0, import_nextjs_middleware_wrappers.default)(...exceptionHandlingMiddleware ? [exceptionHandlingMiddleware] : [], ...globalMiddlewares || [], auth_middleware, ...spec.middlewares || [], with_methods_default(spec.methods), with_validation_default({
|
|
124
|
+
jsonBody: spec.jsonBody,
|
|
125
|
+
queryParams: spec.queryParams,
|
|
126
|
+
commonParams: spec.commonParams
|
|
127
|
+
}), userDefinedRouteFn)(req, res);
|
|
128
|
+
};
|
|
129
|
+
rootRequestHandler._setupParams = setupParams;
|
|
130
|
+
rootRequestHandler._routeSpec = spec;
|
|
131
|
+
return rootRequestHandler;
|
|
132
|
+
};
|
|
133
|
+
createRouteExport._setupParams = setupParams;
|
|
134
|
+
createRouteExport._routeSpec = spec;
|
|
135
|
+
return createRouteExport;
|
|
136
|
+
};
|
|
137
|
+
withRouteSpec._setupParams = setupParams;
|
|
138
|
+
return withRouteSpec;
|
|
139
|
+
};
|
|
140
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
141
|
+
0 && (module.exports = {
|
|
142
|
+
checkRouteSpec,
|
|
143
|
+
createWithRouteSpec
|
|
144
|
+
});
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9pbmRleC50cyIsICIuLi8uLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kcy50cyIsICIuLi8uLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHdpdGhFeGNlcHRpb25IYW5kbGluZyB9IGZyb20gXCJuZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHdyYXBwZXJzLCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwibmV4dGpzLW1pZGRsZXdhcmUtd3JhcHBlcnNcIlxuaW1wb3J0IHsgQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uLCBSb3V0ZVNwZWMgfSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHdpdGhNZXRob2RzLCB7IEhUVFBNZXRob2RzIH0gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzXCJcbmltcG9ydCB3aXRoVmFsaWRhdGlvbiBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb25cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG50eXBlIFBhcmFtRGVmID0gei5ab2RUeXBlQW55IHwgei5ab2RFZmZlY3RzPHouWm9kVHlwZUFueT5cblxuZXhwb3J0IGNvbnN0IGNoZWNrUm91dGVTcGVjID0gPFxuICBBdXRoVHlwZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgTWV0aG9kcyBleHRlbmRzIEhUVFBNZXRob2RzW10gPSBIVFRQTWV0aG9kc1tdLFxuICBKc29uQm9keSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgTWlkZGxld2FyZXMgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdID0gcmVhZG9ubHkgTWlkZGxld2FyZTxcbiAgICBhbnksXG4gICAgYW55XG4gID5bXSxcbiAgU3BlYyBleHRlbmRzIFJvdXRlU3BlYzxcbiAgICBBdXRoVHlwZSxcbiAgICBNZXRob2RzLFxuICAgIEpzb25Cb2R5LFxuICAgIFF1ZXJ5UGFyYW1zLFxuICAgIENvbW1vblBhcmFtcyxcbiAgICBNaWRkbGV3YXJlc1xuICA+ID0gUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzXG4gID5cbj4oXG4gIHNwZWM6IFNwZWNcbik6IHN0cmluZyBleHRlbmRzIFNwZWNbXCJhdXRoXCJdXG4gID8gYHlvdXIgcm91dGUgc3BlYyBpcyB1bmRlcnNwZWNpZmllZCwgYWRkIFwiYXMgY29uc3RcImBcbiAgOiBTcGVjID0+IHNwZWMgYXMgYW55XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVXaXRoUm91dGVTcGVjOiBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24gPSAoKFxuICBzZXR1cFBhcmFtc1xuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhdXRoTWlkZGxld2FyZU1hcCA9IHt9LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzID0gW10sXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlID0gd2l0aEV4Y2VwdGlvbkhhbmRsaW5nKHtcbiAgICAgIGFkZE9rU3RhdHVzOiB0cnVlLFxuICAgIH0pIGFzIGFueSxcbiAgfSA9IHNldHVwUGFyYW1zXG5cbiAgY29uc3Qgd2l0aFJvdXRlU3BlYyA9IChzcGVjOiBSb3V0ZVNwZWMpID0+IHtcbiAgICBjb25zdCBjcmVhdGVSb3V0ZUV4cG9ydCA9ICh1c2VyRGVmaW5lZFJvdXRlRm4pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZXF1ZXN0SGFuZGxlciA9IGFzeW5jIChcbiAgICAgICAgcmVxOiBOZXh0QXBpUmVxdWVzdCxcbiAgICAgICAgcmVzOiBOZXh0QXBpUmVzcG9uc2VcbiAgICAgICkgPT4ge1xuICAgICAgICBhdXRoTWlkZGxld2FyZU1hcFtcIm5vbmVcIl0gPSAobmV4dCkgPT4gbmV4dFxuXG4gICAgICAgIGNvbnN0IGF1dGhfbWlkZGxld2FyZSA9IGF1dGhNaWRkbGV3YXJlTWFwW3NwZWMuYXV0aF1cbiAgICAgICAgaWYgKCFhdXRoX21pZGRsZXdhcmUpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhdXRoIHR5cGU6ICR7c3BlYy5hdXRofWApXG5cbiAgICAgICAgcmV0dXJuIHdyYXBwZXJzKFxuICAgICAgICAgIC4uLigoZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXG4gICAgICAgICAgICA/IFtleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVdXG4gICAgICAgICAgICA6IFtdKSBhcyBbYW55XSksXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIGF1dGhfbWlkZGxld2FyZSxcbiAgICAgICAgICAuLi4oKHNwZWMubWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICB3aXRoTWV0aG9kcyhzcGVjLm1ldGhvZHMpLFxuICAgICAgICAgIHdpdGhWYWxpZGF0aW9uKHtcbiAgICAgICAgICAgIGpzb25Cb2R5OiBzcGVjLmpzb25Cb2R5LFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHNwZWMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBjb21tb25QYXJhbXM6IHNwZWMuY29tbW9uUGFyYW1zLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHVzZXJEZWZpbmVkUm91dGVGblxuICAgICAgICApKHJlcSBhcyBhbnksIHJlcylcbiAgICAgIH1cblxuICAgICAgcm9vdFJlcXVlc3RIYW5kbGVyLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgICAgcmV0dXJuIHJvb3RSZXF1ZXN0SGFuZGxlclxuICAgIH1cblxuICAgIGNyZWF0ZVJvdXRlRXhwb3J0Ll9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgIHJldHVybiBjcmVhdGVSb3V0ZUV4cG9ydFxuICB9XG5cbiAgd2l0aFJvdXRlU3BlYy5fc2V0dXBQYXJhbXMgPSBzZXR1cFBhcmFtc1xuXG4gIHJldHVybiB3aXRoUm91dGVTcGVjXG59KSBhcyBhbnlcbiIsICJpbXBvcnQgeyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uIH0gZnJvbSBcIm5leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5cbmV4cG9ydCB0eXBlIEhUVFBNZXRob2RzID1cbiAgfCBcIkdFVFwiXG4gIHwgXCJQT1NUXCJcbiAgfCBcIkRFTEVURVwiXG4gIHwgXCJQVVRcIlxuICB8IFwiUEFUQ0hcIlxuICB8IFwiSEVBRFwiXG4gIHwgXCJPUFRJT05TXCJcblxuZXhwb3J0IGNvbnN0IHdpdGhNZXRob2RzID0gKG1ldGhvZHM6IEhUVFBNZXRob2RzW10pID0+IChuZXh0KSA9PiAocmVxLCByZXMpID0+IHtcbiAgaWYgKCFtZXRob2RzLmluY2x1ZGVzKHJlcS5tZXRob2QpKSB7XG4gICAgdGhyb3cgbmV3IE1ldGhvZE5vdEFsbG93ZWRFeGNlcHRpb24oe1xuICAgICAgdHlwZTogXCJtZXRob2Rfbm90X2FsbG93ZWRcIixcbiAgICAgIG1lc3NhZ2U6IGBvbmx5ICR7bWV0aG9kcy5qb2luKFwiLFwiKX0gYWNjZXB0ZWRgLFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG5leHQocmVxLCByZXMpXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhNZXRob2RzXG4iLCAiaW1wb3J0IHR5cGUgeyBOZXh0QXBpUmVxdWVzdCwgTmV4dEFwaVJlc3BvbnNlIH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHsgQmFkUmVxdWVzdEV4Y2VwdGlvbiB9IGZyb20gXCJuZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCJsb2Rhc2hcIlxuXG5jb25zdCBwYXJzZUNvbW1hU2VwYXJhdGVBcnJheXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcblxuICAvLyB0b2RvOiBpdGVyYXRlIG92ZXIgWm9kIHRvcCBsZXZlbCBrZXlzLCBpZiB0aGVyZSdzIGFuIGFycmF5LCBwYXJzZSBpdFxuXG4gIHJldHVybiBzY2hlbWEucGFyc2UocGFyc2VkX2lucHV0KVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnB1dDxcbiAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbj4ge1xuICBqc29uQm9keT86IEpzb25Cb2R5XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXNcbiAgY29tbW9uUGFyYW1zPzogQ29tbW9uUGFyYW1zXG59XG5cbmNvbnN0IHpvZElzc3VlVG9TdHJpbmcgPSAoaXNzdWU6IHouWm9kSXNzdWUpID0+IHtcbiAgaWYgKGlzc3VlLnBhdGguam9pbihcIi5cIikgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gaXNzdWUubWVzc2FnZVxuICB9XG4gIGlmIChpc3N1ZS5tZXNzYWdlID09PSBcIlJlcXVpcmVkXCIpIHtcbiAgICByZXR1cm4gYCR7aXNzdWUucGF0aC5qb2luKFwiLlwiKX0gaXMgcmVxdWlyZWRgXG4gIH1cbiAgcmV0dXJuIGAke2lzc3VlLm1lc3NhZ2V9IGZvciBcIiR7aXNzdWUucGF0aC5qb2luKFwiLlwiKX1cImBcbn1cblxuZXhwb3J0IGNvbnN0IHdpdGhWYWxpZGF0aW9uID1cbiAgPFxuICAgIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIFF1ZXJ5UGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueVxuICA+KFxuICAgIGlucHV0OiBSZXF1ZXN0SW5wdXQ8SnNvbkJvZHksIFF1ZXJ5UGFyYW1zLCBDb21tb25QYXJhbXM+XG4gICkgPT5cbiAgKG5leHQpID0+XG4gIGFzeW5jIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIGlmIChcbiAgICAgIChyZXEubWV0aG9kID09PSBcIlBPU1RcIiB8fCByZXEubWV0aG9kID09PSBcIlBBVENIXCIpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIWlzRW1wdHkocmVxLmJvZHkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYFBPU1QgcmVxdWVzdHMgbXVzdCBoYXZlIENvbnRlbnQtVHlwZSBoZWFkZXIgd2l0aCBcImFwcGxpY2F0aW9uL2pzb25cImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuICAgICAgcmVxLmJvZHkgPSBpbnB1dC5qc29uQm9keT8ucGFyc2UocmVxLmJvZHkpXG4gICAgICByZXEucXVlcnkgPSBpbnB1dC5xdWVyeVBhcmFtcz8ucGFyc2UocmVxLnF1ZXJ5KVxuXG4gICAgICBpZiAoaW5wdXQuY29tbW9uUGFyYW1zKSB7XG4gICAgICAgIDsocmVxIGFzIGFueSkuY29tbW9uUGFyYW1zID0gcGFyc2VDb21tYVNlcGFyYXRlQXJyYXlzKFxuICAgICAgICAgIGlucHV0LmNvbW1vblBhcmFtcyxcbiAgICAgICAgICBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIlpvZEVycm9yXCIpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2VcbiAgICAgICAgaWYgKGVycm9yLmlzc3Vlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjb25zdCBpc3N1ZSA9IGVycm9yLmlzc3Vlc1swXVxuICAgICAgICAgIG1lc3NhZ2UgPSB6b2RJc3N1ZVRvU3RyaW5nKGlzc3VlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VfY29tcG9uZW50czogc3RyaW5nW10gPSBbXVxuICAgICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKSB7XG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMucHVzaCh6b2RJc3N1ZVRvU3RyaW5nKGlzc3VlKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICBgJHtlcnJvci5pc3N1ZXMubGVuZ3RofSBJbnB1dCBFcnJvcnM6IGAgK1xuICAgICAgICAgICAgbWVzc2FnZV9jb21wb25lbnRzLmpvaW4oXCIsIFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9pbnB1dFwiLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgdmFsaWRhdGlvbl9lcnJvcnM6IGVycm9yLmZvcm1hdCgpLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9pbnB1dFwiLFxuICAgICAgICBtZXNzYWdlOiBcIkVycm9yIHdoaWxlIHBhcnNpbmcgaW5wdXRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQocmVxLCByZXMpXG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFZhbGlkYXRpb25cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsMENBQXNDO0FBQ3RDLHdDQUFxQzs7O0FDRnJDLHlDQUEwQztBQVduQyxJQUFNLGNBQWMsQ0FBQyxZQUEyQixDQUFDLFNBQVMsQ0FBQyxLQUFLLFFBQVE7QUFDN0UsTUFBSSxDQUFDLFFBQVEsU0FBUyxJQUFJLE1BQU0sR0FBRztBQUNqQyxVQUFNLElBQUksNkRBQTBCO0FBQUEsTUFDbEMsTUFBTTtBQUFBLE1BQ04sU0FBUyxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQUEsSUFDbkMsQ0FBQztBQUFBLEVBQ0g7QUFDQSxTQUFPLEtBQUssS0FBSyxHQUFHO0FBQ3RCO0FBRUEsSUFBTyx1QkFBUTs7O0FDbkJmLDBDQUFvQztBQUNwQyxvQkFBd0I7QUFFeEIsSUFBTSwyQkFBMkIsQ0FDL0IsUUFDQSxVQUNHO0FBQ0gsUUFBTSxlQUFlLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSztBQUk1QyxTQUFPLE9BQU8sTUFBTSxZQUFZO0FBQ2xDO0FBWUEsSUFBTSxtQkFBbUIsQ0FBQyxVQUFzQjtBQUM5QyxNQUFJLE1BQU0sS0FBSyxLQUFLLEdBQUcsTUFBTSxJQUFJO0FBQy9CLFdBQU8sTUFBTTtBQUFBLEVBQ2Y7QUFDQSxNQUFJLE1BQU0sWUFBWSxZQUFZO0FBQ2hDLFdBQU8sR0FBRyxNQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEs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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/with-route-spec/middlewares/with-methods.ts
|
|
21
|
+
var with_methods_exports = {};
|
|
22
|
+
__export(with_methods_exports, {
|
|
23
|
+
default: () => with_methods_default,
|
|
24
|
+
withMethods: () => withMethods
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(with_methods_exports);
|
|
27
|
+
var import_nextjs_exception_middleware = require("nextjs-exception-middleware");
|
|
28
|
+
var withMethods = (methods) => (next) => (req, res) => {
|
|
29
|
+
if (!methods.includes(req.method)) {
|
|
30
|
+
throw new import_nextjs_exception_middleware.MethodNotAllowedException({
|
|
31
|
+
type: "method_not_allowed",
|
|
32
|
+
message: `only ${methods.join(",")} accepted`
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return next(req, res);
|
|
36
|
+
};
|
|
37
|
+
var with_methods_default = withMethods;
|
|
38
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
39
|
+
0 && (module.exports = {
|
|
40
|
+
withMethods
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9taWRkbGV3YXJlcy93aXRoLW1ldGhvZHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IE1ldGhvZE5vdEFsbG93ZWRFeGNlcHRpb24gfSBmcm9tIFwibmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcblxuZXhwb3J0IHR5cGUgSFRUUE1ldGhvZHMgPVxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiREVMRVRFXCJcbiAgfCBcIlBVVFwiXG4gIHwgXCJQQVRDSFwiXG4gIHwgXCJIRUFEXCJcbiAgfCBcIk9QVElPTlNcIlxuXG5leHBvcnQgY29uc3Qgd2l0aE1ldGhvZHMgPSAobWV0aG9kczogSFRUUE1ldGhvZHNbXSkgPT4gKG5leHQpID0+IChyZXEsIHJlcykgPT4ge1xuICBpZiAoIW1ldGhvZHMuaW5jbHVkZXMocmVxLm1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbih7XG4gICAgICB0eXBlOiBcIm1ldGhvZF9ub3RfYWxsb3dlZFwiLFxuICAgICAgbWVzc2FnZTogYG9ubHkgJHttZXRob2RzLmpvaW4oXCIsXCIpfSBhY2NlcHRlZGAsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gbmV4dChyZXEsIHJlcylcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE1ldGhvZHNcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEseUNBQTBDO0FBV25DLElBQU0sY0FBYyxDQUFDLFlBQTJCLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUTtBQUM3RSxNQUFJLENBQUMsUUFBUSxTQUFTLElBQUksTUFBTSxHQUFHO0FBQ2pDLFVBQU0sSUFBSSw2REFBMEI7QUFBQSxNQUNsQyxNQUFNO0FBQUEsTUFDTixTQUFTLFFBQVEsUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUNuQyxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sS0FBSyxLQUFLLEdBQUc7QUFDdEI7QUFFQSxJQUFPLHVCQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NextApiRequest, NextApiResponse } from 'next';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
interface RequestInput<JsonBody extends z.ZodTypeAny, QueryParams extends z.ZodTypeAny, CommonParams extends z.ZodTypeAny> {
|
|
5
|
+
jsonBody?: JsonBody;
|
|
6
|
+
queryParams?: QueryParams;
|
|
7
|
+
commonParams?: CommonParams;
|
|
8
|
+
}
|
|
9
|
+
declare const withValidation: <JsonBody extends z.ZodTypeAny, QueryParams extends z.ZodTypeAny, CommonParams extends z.ZodTypeAny>(input: RequestInput<JsonBody, QueryParams, CommonParams>) => (next: any) => (req: NextApiRequest, res: NextApiResponse) => Promise<any>;
|
|
10
|
+
|
|
11
|
+
export { RequestInput, withValidation as default, withValidation };
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/with-route-spec/middlewares/with-validation.ts
|
|
21
|
+
var with_validation_exports = {};
|
|
22
|
+
__export(with_validation_exports, {
|
|
23
|
+
default: () => with_validation_default,
|
|
24
|
+
withValidation: () => withValidation
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(with_validation_exports);
|
|
27
|
+
var import_nextjs_exception_middleware = require("nextjs-exception-middleware");
|
|
28
|
+
var import_lodash = require("lodash");
|
|
29
|
+
var parseCommaSeparateArrays = (schema, input) => {
|
|
30
|
+
const parsed_input = Object.assign({}, input);
|
|
31
|
+
return schema.parse(parsed_input);
|
|
32
|
+
};
|
|
33
|
+
var zodIssueToString = (issue) => {
|
|
34
|
+
if (issue.path.join(".") === "") {
|
|
35
|
+
return issue.message;
|
|
36
|
+
}
|
|
37
|
+
if (issue.message === "Required") {
|
|
38
|
+
return `${issue.path.join(".")} is required`;
|
|
39
|
+
}
|
|
40
|
+
return `${issue.message} for "${issue.path.join(".")}"`;
|
|
41
|
+
};
|
|
42
|
+
var withValidation = (input) => (next) => async (req, res) => {
|
|
43
|
+
var _a, _b, _c;
|
|
44
|
+
if ((req.method === "POST" || req.method === "PATCH") && !((_a = req.headers["content-type"]) == null ? void 0 : _a.includes("application/json")) && !(0, import_lodash.isEmpty)(req.body)) {
|
|
45
|
+
throw new import_nextjs_exception_middleware.BadRequestException({
|
|
46
|
+
type: "invalid_content_type",
|
|
47
|
+
message: `POST requests must have Content-Type header with "application/json"`
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const original_combined_params = { ...req.query, ...req.body };
|
|
52
|
+
req.body = (_b = input.jsonBody) == null ? void 0 : _b.parse(req.body);
|
|
53
|
+
req.query = (_c = input.queryParams) == null ? void 0 : _c.parse(req.query);
|
|
54
|
+
if (input.commonParams) {
|
|
55
|
+
;
|
|
56
|
+
req.commonParams = parseCommaSeparateArrays(input.commonParams, original_combined_params);
|
|
57
|
+
}
|
|
58
|
+
} catch (error) {
|
|
59
|
+
if (error.name === "ZodError") {
|
|
60
|
+
let message;
|
|
61
|
+
if (error.issues.length === 1) {
|
|
62
|
+
const issue = error.issues[0];
|
|
63
|
+
message = zodIssueToString(issue);
|
|
64
|
+
} else {
|
|
65
|
+
const message_components = [];
|
|
66
|
+
for (const issue of error.issues) {
|
|
67
|
+
message_components.push(zodIssueToString(issue));
|
|
68
|
+
}
|
|
69
|
+
message = `${error.issues.length} Input Errors: ` + message_components.join(", ");
|
|
70
|
+
}
|
|
71
|
+
throw new import_nextjs_exception_middleware.BadRequestException({
|
|
72
|
+
type: "invalid_input",
|
|
73
|
+
message,
|
|
74
|
+
validation_errors: error.format()
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
throw new import_nextjs_exception_middleware.BadRequestException({
|
|
78
|
+
type: "invalid_input",
|
|
79
|
+
message: "Error while parsing input"
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return next(req, res);
|
|
83
|
+
};
|
|
84
|
+
var with_validation_default = withValidation;
|
|
85
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
86
|
+
0 && (module.exports = {
|
|
87
|
+
withValidation
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IEJhZFJlcXVlc3RFeGNlcHRpb24gfSBmcm9tIFwibmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwibG9kYXNoXCJcblxuY29uc3QgcGFyc2VDb21tYVNlcGFyYXRlQXJyYXlzID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pID0+IHtcbiAgY29uc3QgcGFyc2VkX2lucHV0ID0gT2JqZWN0LmFzc2lnbih7fSwgaW5wdXQpXG5cbiAgLy8gdG9kbzogaXRlcmF0ZSBvdmVyIFpvZCB0b3AgbGV2ZWwga2V5cywgaWYgdGhlcmUncyBhbiBhcnJheSwgcGFyc2UgaXRcblxuICByZXR1cm4gc2NoZW1hLnBhcnNlKHBhcnNlZF9pbnB1dClcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SW5wdXQ8XG4gIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgQ29tbW9uUGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55XG4+IHtcbiAganNvbkJvZHk/OiBKc29uQm9keVxuICBxdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zXG4gIGNvbW1vblBhcmFtcz86IENvbW1vblBhcmFtc1xufVxuXG5jb25zdCB6b2RJc3N1ZVRvU3RyaW5nID0gKGlzc3VlOiB6LlpvZElzc3VlKSA9PiB7XG4gIGlmIChpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIGlzc3VlLm1lc3NhZ2VcbiAgfVxuICBpZiAoaXNzdWUubWVzc2FnZSA9PT0gXCJSZXF1aXJlZFwiKSB7XG4gICAgcmV0dXJuIGAke2lzc3VlLnBhdGguam9pbihcIi5cIil9IGlzIHJlcXVpcmVkYFxuICB9XG4gIHJldHVybiBgJHtpc3N1ZS5tZXNzYWdlfSBmb3IgXCIke2lzc3VlLnBhdGguam9pbihcIi5cIil9XCJgXG59XG5cbmV4cG9ydCBjb25zdCB3aXRoVmFsaWRhdGlvbiA9XG4gIDxcbiAgICBKc29uQm9keSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBRdWVyeVBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnlcbiAgPihcbiAgICBpbnB1dDogUmVxdWVzdElucHV0PEpzb25Cb2R5LCBRdWVyeVBhcmFtcywgQ29tbW9uUGFyYW1zPlxuICApID0+XG4gIChuZXh0KSA9PlxuICBhc3luYyAocmVxOiBOZXh0QXBpUmVxdWVzdCwgcmVzOiBOZXh0QXBpUmVzcG9uc2UpID0+IHtcbiAgICBpZiAoXG4gICAgICAocmVxLm1ldGhvZCA9PT0gXCJQT1NUXCIgfHwgcmVxLm1ldGhvZCA9PT0gXCJQQVRDSFwiKSAmJlxuICAgICAgIXJlcS5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdPy5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikgJiZcbiAgICAgICFpc0VtcHR5KHJlcS5ib2R5KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICB0eXBlOiBcImludmFsaWRfY29udGVudF90eXBlXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBQT1NUIHJlcXVlc3RzIG11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi9qc29uXCJgLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxfY29tYmluZWRfcGFyYW1zID0geyAuLi5yZXEucXVlcnksIC4uLnJlcS5ib2R5IH1cbiAgICAgIHJlcS5ib2R5ID0gaW5wdXQuanNvbkJvZHk/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgcmVxLnF1ZXJ5ID0gaW5wdXQucXVlcnlQYXJhbXM/LnBhcnNlKHJlcS5xdWVyeSlcblxuICAgICAgaWYgKGlucHV0LmNvbW1vblBhcmFtcykge1xuICAgICAgICA7KHJlcSBhcyBhbnkpLmNvbW1vblBhcmFtcyA9IHBhcnNlQ29tbWFTZXBhcmF0ZUFycmF5cyhcbiAgICAgICAgICBpbnB1dC5jb21tb25QYXJhbXMsXG4gICAgICAgICAgb3JpZ2luYWxfY29tYmluZWRfcGFyYW1zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJab2RFcnJvclwiKSB7XG4gICAgICAgIGxldCBtZXNzYWdlXG4gICAgICAgIGlmIChlcnJvci5pc3N1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29uc3QgaXNzdWUgPSBlcnJvci5pc3N1ZXNbMF1cbiAgICAgICAgICBtZXNzYWdlID0gem9kSXNzdWVUb1N0cmluZyhpc3N1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlX2NvbXBvbmVudHM6IHN0cmluZ1tdID0gW11cbiAgICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgbWVzc2FnZV9jb21wb25lbnRzLnB1c2goem9kSXNzdWVUb1N0cmluZyhpc3N1ZSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIG1lc3NhZ2UgPVxuICAgICAgICAgICAgYCR7ZXJyb3IuaXNzdWVzLmxlbmd0aH0gSW5wdXQgRXJyb3JzOiBgICtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5qb2luKFwiLCBcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICB0eXBlOiBcImludmFsaWRfaW5wdXRcIixcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHZhbGlkYXRpb25fZXJyb3JzOiBlcnJvci5mb3JtYXQoKSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICB0eXBlOiBcImludmFsaWRfaW5wdXRcIixcbiAgICAgICAgbWVzc2FnZTogXCJFcnJvciB3aGlsZSBwYXJzaW5nIGlucHV0XCIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KHJlcSwgcmVzKVxuICB9XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhWYWxpZGF0aW9uXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBLHlDQUFvQztBQUNwQyxvQkFBd0I7QUFFeEIsSUFBTSwyQkFBMkIsQ0FDL0IsUUFDQSxVQUNHO0FBQ0gsUUFBTSxlQUFlLE9BQU8sT0FBTyxDQUFDLEdBQUcsS0FBSztBQUk1QyxTQUFPLE9BQU8sTUFBTSxZQUFZO0FBQ2xDO0FBWUEsSUFBTSxtQkFBbUIsQ0FBQyxVQUFzQjtBQUM5QyxNQUFJLE1BQU0sS0FBSyxLQUFLLEdBQUcsTUFBTSxJQUFJO0FBQy9CLFdBQU8sTUFBTTtBQUFBLEVBQ2Y7QUFDQSxNQUFJLE1BQU0sWUFBWSxZQUFZO0FBQ2hDLFdBQU8sR0FBRyxNQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsRUFDL0I7QUFDQSxTQUFPLEdBQUcsTUFBTSxnQkFBZ0IsTUFBTSxLQUFLLEtBQUssR0FBRztBQUNyRDtBQUVPLElBQU0saUJBQ1gsQ0FLRSxVQUVGLENBQUMsU0FDRCxPQUFPLEtBQXFCLFFBQXlCO0FBN0N2RDtBQThDSSxNQUNHLEtBQUksV0FBVyxVQUFVLElBQUksV0FBVyxZQUN6QyxDQUFDLFdBQUksUUFBUSxvQkFBWixtQkFBNkIsU0FBUyx3QkFDdkMsQ0FBQywyQkFBUSxJQUFJLElBQUksR0FDakI7QUFDQSxVQUFNLElBQUksdURBQW9CO0FBQUEsTUFDNUIsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLElBQ1gsQ0FBQztBQUFBLEVBQ0g7QUFFQSxNQUFJO0FBQ0YsVUFBTSwyQkFBMkIsRUFBRSxHQUFHLElBQUksT0FBTyxHQUFHLElBQUksS0FBSztBQUM3RCxRQUFJLE9BQU8sWUFBTSxhQUFOLG1CQUFnQixNQUFNLElBQUk7QUFDckMsUUFBSSxRQUFRLFlBQU0sZ0JBQU4sbUJBQW1CLE1BQU0sSUFBSTtBQUV6QyxRQUFJLE1BQU0sY0FBYztBQUN0QjtBQUFDLE1BQUMsSUFBWSxlQUFlLHlCQUMzQixNQUFNLGNBQ04sd0JBQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixTQUFTLE9BQVA7QUFDQSxRQUFJLE1BQU0sU0FBUyxZQUFZO0FBQzdCLFVBQUk7QUFDSixVQUFJLE1BQU0sT0FBTyxXQUFXLEdBQUc7QUFDN0IsY0FBTSxRQUFRLE1BQU0sT0FBTztBQUMzQixrQkFBVSxpQkFBaUIsS0FBSztBQUFBLE1BQ2xDLE9BQU87QUFDTCxjQUFNLHFCQUErQixDQUFDO0FBQ3RDLG1CQUFXLFNBQVMsTUFBTSxRQUFRO0FBQ2hDLDZCQUFtQixLQUFLLGlCQUFpQixLQUFLLENBQUM7QUFBQSxRQUNqRDtBQUNBLGtCQUNFLEdBQUcsTUFBTSxPQUFPLDBCQUNoQixtQkFBbUIsS0FBSyxJQUFJO0FBQUEsTUFDaEM7QUFFQSxZQUFNLElBQUksdURBQW9CO0FBQUEsUUFDNUIsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBLG1CQUFtQixNQUFNLE9BQU87QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sSUFBSSx1REFBb0I7QUFBQSxNQUM1QixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDWCxDQUFDO0FBQUEsRUFDSDtBQUVBLFNBQU8sS0FBSyxLQUFLLEdBQUc7QUFDdEI7QUFFRixJQUFPLDBCQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
|
package/package.json
CHANGED
package/.eslintrc.json
DELETED
package/next-env.d.ts
DELETED