@visulima/crud 1.0.1 → 1.0.3

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +46 -16
  3. package/dist/chunk-SH6A4KBC.mjs +28 -0
  4. package/dist/{chunk-UBXIGP5H.mjs.map → chunk-SH6A4KBC.mjs.map} +1 -1
  5. package/dist/chunk-ZY3WOLEP.js +28 -0
  6. package/dist/chunk-ZY3WOLEP.js.map +1 -0
  7. package/dist/index.d.ts +9 -15
  8. package/dist/index.js +57 -37
  9. package/dist/index.js.map +1 -1
  10. package/dist/index.mjs +54 -34
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/next/index.js +10 -281
  13. package/dist/next/index.js.map +1 -1
  14. package/dist/next/index.mjs +9 -280
  15. package/dist/next/index.mjs.map +1 -1
  16. package/next/package.json +18 -0
  17. package/package.json +16 -14
  18. package/dist/chunk-FJWRITBO.js +0 -52
  19. package/dist/chunk-FJWRITBO.js.map +0 -1
  20. package/dist/chunk-UBXIGP5H.mjs +0 -52
  21. package/src/adapter/prisma/index.ts +0 -241
  22. package/src/adapter/prisma/types.d.ts +0 -46
  23. package/src/adapter/prisma/utils/models-to-route-names.ts +0 -12
  24. package/src/adapter/prisma/utils/parse-cursor.ts +0 -26
  25. package/src/adapter/prisma/utils/parse-order-by.ts +0 -21
  26. package/src/adapter/prisma/utils/parse-recursive.ts +0 -26
  27. package/src/adapter/prisma/utils/parse-where.ts +0 -197
  28. package/src/base-crud-handler.ts +0 -181
  29. package/src/handler/create.ts +0 -21
  30. package/src/handler/delete.ts +0 -27
  31. package/src/handler/list.ts +0 -62
  32. package/src/handler/read.ts +0 -27
  33. package/src/handler/update.ts +0 -29
  34. package/src/index.ts +0 -27
  35. package/src/next/api/edge/index.ts +0 -23
  36. package/src/next/api/node/index.ts +0 -27
  37. package/src/next/index.ts +0 -2
  38. package/src/query-parser.ts +0 -94
  39. package/src/swagger/adapter/prisma/index.ts +0 -95
  40. package/src/swagger/json-schema-parser.ts +0 -456
  41. package/src/swagger/parameters.ts +0 -83
  42. package/src/swagger/types.d.ts +0 -53
  43. package/src/swagger/utils/format-example-ref.ts +0 -4
  44. package/src/swagger/utils/format-schema-ref.ts +0 -4
  45. package/src/swagger/utils/get-models-accessible-routes.ts +0 -23
  46. package/src/swagger/utils/get-swagger-paths.ts +0 -244
  47. package/src/swagger/utils/get-swagger-tags.ts +0 -13
  48. package/src/types.d.ts +0 -124
  49. package/src/utils/format-resource-id.ts +0 -3
  50. package/src/utils/get-accessible-routes.ts +0 -18
  51. package/src/utils/get-resource-name-from-url.ts +0 -23
  52. package/src/utils/get-route-type.ts +0 -99
  53. package/src/utils/is-primitive.ts +0 -5
  54. package/src/utils/validate-adapter-methods.ts +0 -15
@@ -1,275 +1,10 @@
1
1
  import {
2
- __commonJS,
3
- __toESM,
4
2
  get_accessible_routes_default
5
- } from "../chunk-UBXIGP5H.mjs";
6
-
7
- // ../../node_modules/.pnpm/next@12.3.1/node_modules/next/dist/compiled/cookie/index.js
8
- var require_cookie = __commonJS({
9
- "../../node_modules/.pnpm/next@12.3.1/node_modules/next/dist/compiled/cookie/index.js"(exports, module) {
10
- (() => {
11
- "use strict";
12
- if (typeof __nccwpck_require__ !== "undefined")
13
- __nccwpck_require__.ab = __dirname + "/";
14
- var e = {};
15
- (() => {
16
- var r = e;
17
- r.parse = parse2;
18
- r.serialize = serialize;
19
- var i = decodeURIComponent;
20
- var t = encodeURIComponent;
21
- var a = /; */;
22
- var n = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
23
- function parse2(e2, r2) {
24
- if (typeof e2 !== "string") {
25
- throw new TypeError("argument str must be a string");
26
- }
27
- var t2 = {};
28
- var n2 = r2 || {};
29
- var o = e2.split(a);
30
- var s = n2.decode || i;
31
- for (var p = 0; p < o.length; p++) {
32
- var f = o[p];
33
- var u = f.indexOf("=");
34
- if (u < 0) {
35
- continue;
36
- }
37
- var v = f.substr(0, u).trim();
38
- var c = f.substr(++u, f.length).trim();
39
- if ('"' == c[0]) {
40
- c = c.slice(1, -1);
41
- }
42
- if (void 0 == t2[v]) {
43
- t2[v] = tryDecode(c, s);
44
- }
45
- }
46
- return t2;
47
- }
48
- function serialize(e2, r2, i2) {
49
- var a2 = i2 || {};
50
- var o = a2.encode || t;
51
- if (typeof o !== "function") {
52
- throw new TypeError("option encode is invalid");
53
- }
54
- if (!n.test(e2)) {
55
- throw new TypeError("argument name is invalid");
56
- }
57
- var s = o(r2);
58
- if (s && !n.test(s)) {
59
- throw new TypeError("argument val is invalid");
60
- }
61
- var p = e2 + "=" + s;
62
- if (null != a2.maxAge) {
63
- var f = a2.maxAge - 0;
64
- if (isNaN(f) || !isFinite(f)) {
65
- throw new TypeError("option maxAge is invalid");
66
- }
67
- p += "; Max-Age=" + Math.floor(f);
68
- }
69
- if (a2.domain) {
70
- if (!n.test(a2.domain)) {
71
- throw new TypeError("option domain is invalid");
72
- }
73
- p += "; Domain=" + a2.domain;
74
- }
75
- if (a2.path) {
76
- if (!n.test(a2.path)) {
77
- throw new TypeError("option path is invalid");
78
- }
79
- p += "; Path=" + a2.path;
80
- }
81
- if (a2.expires) {
82
- if (typeof a2.expires.toUTCString !== "function") {
83
- throw new TypeError("option expires is invalid");
84
- }
85
- p += "; Expires=" + a2.expires.toUTCString();
86
- }
87
- if (a2.httpOnly) {
88
- p += "; HttpOnly";
89
- }
90
- if (a2.secure) {
91
- p += "; Secure";
92
- }
93
- if (a2.sameSite) {
94
- var u = typeof a2.sameSite === "string" ? a2.sameSite.toLowerCase() : a2.sameSite;
95
- switch (u) {
96
- case true:
97
- p += "; SameSite=Strict";
98
- break;
99
- case "lax":
100
- p += "; SameSite=Lax";
101
- break;
102
- case "strict":
103
- p += "; SameSite=Strict";
104
- break;
105
- case "none":
106
- p += "; SameSite=None";
107
- break;
108
- default:
109
- throw new TypeError("option sameSite is invalid");
110
- }
111
- }
112
- return p;
113
- }
114
- function tryDecode(e2, r2) {
115
- try {
116
- return r2(e2);
117
- } catch (r3) {
118
- return e2;
119
- }
120
- }
121
- })();
122
- module.exports = e;
123
- })();
124
- }
125
- });
126
-
127
- // ../../node_modules/.pnpm/next@12.3.1/node_modules/next/dist/server/api-utils/index.js
128
- var require_api_utils = __commonJS({
129
- "../../node_modules/.pnpm/next@12.3.1/node_modules/next/dist/server/api-utils/index.js"(exports) {
130
- "use strict";
131
- Object.defineProperty(exports, "__esModule", {
132
- value: true
133
- });
134
- exports.getCookieParser = getCookieParser;
135
- exports.sendStatusCode = sendStatusCode;
136
- exports.redirect = redirect;
137
- exports.checkIsManualRevalidate = checkIsManualRevalidate;
138
- exports.clearPreviewData = clearPreviewData;
139
- exports.sendError = sendError;
140
- exports.setLazyProp = setLazyProp;
141
- exports.SYMBOL_CLEARED_COOKIES = exports.SYMBOL_PREVIEW_DATA = exports.RESPONSE_LIMIT_DEFAULT = exports.COOKIE_NAME_PRERENDER_DATA = exports.COOKIE_NAME_PRERENDER_BYPASS = exports.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = exports.PRERENDER_REVALIDATE_HEADER = void 0;
142
- function getCookieParser(headers) {
143
- return function parseCookie() {
144
- const header = headers.cookie;
145
- if (!header) {
146
- return {};
147
- }
148
- const { parse: parseCookieFn } = require_cookie();
149
- return parseCookieFn(Array.isArray(header) ? header.join(";") : header);
150
- };
151
- }
152
- function sendStatusCode(res, statusCode) {
153
- res.statusCode = statusCode;
154
- return res;
155
- }
156
- function redirect(res, statusOrUrl, url) {
157
- if (typeof statusOrUrl === "string") {
158
- url = statusOrUrl;
159
- statusOrUrl = 307;
160
- }
161
- if (typeof statusOrUrl !== "number" || typeof url !== "string") {
162
- throw new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`);
163
- }
164
- res.writeHead(statusOrUrl, {
165
- Location: url
166
- });
167
- res.write(url);
168
- res.end();
169
- return res;
170
- }
171
- var PRERENDER_REVALIDATE_HEADER = "x-prerender-revalidate";
172
- exports.PRERENDER_REVALIDATE_HEADER = PRERENDER_REVALIDATE_HEADER;
173
- var PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = "x-prerender-revalidate-if-generated";
174
- exports.PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER;
175
- function checkIsManualRevalidate(req, previewProps) {
176
- return {
177
- isManualRevalidate: req.headers[PRERENDER_REVALIDATE_HEADER] === previewProps.previewModeId,
178
- revalidateOnlyGenerated: !!req.headers[PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]
179
- };
180
- }
181
- var COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`;
182
- exports.COOKIE_NAME_PRERENDER_BYPASS = COOKIE_NAME_PRERENDER_BYPASS;
183
- var COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`;
184
- exports.COOKIE_NAME_PRERENDER_DATA = COOKIE_NAME_PRERENDER_DATA;
185
- var RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024;
186
- exports.RESPONSE_LIMIT_DEFAULT = RESPONSE_LIMIT_DEFAULT;
187
- var SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA);
188
- exports.SYMBOL_PREVIEW_DATA = SYMBOL_PREVIEW_DATA;
189
- var SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS);
190
- exports.SYMBOL_CLEARED_COOKIES = SYMBOL_CLEARED_COOKIES;
191
- function clearPreviewData(res, options = {}) {
192
- if (SYMBOL_CLEARED_COOKIES in res) {
193
- return res;
194
- }
195
- const { serialize } = require_cookie();
196
- const previous = res.getHeader("Set-Cookie");
197
- res.setHeader(`Set-Cookie`, [
198
- ...typeof previous === "string" ? [
199
- previous
200
- ] : Array.isArray(previous) ? previous : [],
201
- serialize(COOKIE_NAME_PRERENDER_BYPASS, "", {
202
- expires: new Date(0),
203
- httpOnly: true,
204
- sameSite: false ? "none" : "lax",
205
- secure: false,
206
- path: "/",
207
- ...options.path !== void 0 ? {
208
- path: options.path
209
- } : void 0
210
- }),
211
- serialize(COOKIE_NAME_PRERENDER_DATA, "", {
212
- expires: new Date(0),
213
- httpOnly: true,
214
- sameSite: false ? "none" : "lax",
215
- secure: false,
216
- path: "/",
217
- ...options.path !== void 0 ? {
218
- path: options.path
219
- } : void 0
220
- })
221
- ]);
222
- Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {
223
- value: true,
224
- enumerable: false
225
- });
226
- return res;
227
- }
228
- var ApiError2 = class extends Error {
229
- constructor(statusCode, message) {
230
- super(message);
231
- this.statusCode = statusCode;
232
- }
233
- };
234
- exports.ApiError = ApiError2;
235
- function sendError(res, statusCode, message) {
236
- res.statusCode = statusCode;
237
- res.statusMessage = message;
238
- res.end(message);
239
- }
240
- function setLazyProp({ req }, prop, getter) {
241
- const opts = {
242
- configurable: true,
243
- enumerable: true
244
- };
245
- const optsReset = {
246
- ...opts,
247
- writable: true
248
- };
249
- Object.defineProperty(req, prop, {
250
- ...opts,
251
- get: () => {
252
- const value = getter();
253
- Object.defineProperty(req, prop, {
254
- ...optsReset,
255
- value
256
- });
257
- return value;
258
- },
259
- set: (value) => {
260
- Object.defineProperty(req, prop, {
261
- ...optsReset,
262
- value
263
- });
264
- }
265
- });
266
- }
267
- }
268
- });
3
+ } from "../chunk-SH6A4KBC.mjs";
269
4
 
270
5
  // src/base-crud-handler.ts
271
- var import_api_utils = __toESM(require_api_utils());
272
6
  import createHttpError5 from "http-errors";
7
+ import { ApiError } from "next/dist/server/api-utils";
273
8
 
274
9
  // src/handler/create.ts
275
10
  var createHandler = async ({
@@ -316,7 +51,7 @@ var listHandler = async ({
316
51
  }) => {
317
52
  let isPaginated = false;
318
53
  let paginationOptions;
319
- if (typeof (query == null ? void 0 : query.page) !== "undefined") {
54
+ if ((query == null ? void 0 : query.page) !== void 0) {
320
55
  if ((query == null ? void 0 : query.page) <= 0) {
321
56
  throw new Error("page query must be a strictly positive number");
322
57
  }
@@ -438,10 +173,10 @@ var parseQuery = (queryString) => {
438
173
  if (query.orderBy) {
439
174
  parsedQuery.orderBy = parseOrderBy(query.orderBy);
440
175
  }
441
- if (typeof query.limit !== "undefined") {
176
+ if (query.limit !== void 0) {
442
177
  parsedQuery.limit = Number.isFinite(+query.limit) ? +query.limit : void 0;
443
178
  }
444
- if (typeof query.skip !== "undefined") {
179
+ if (query.skip !== void 0) {
445
180
  parsedQuery.skip = Number.isFinite(+query.skip) ? +query.skip : void 0;
446
181
  }
447
182
  if (query.distinct) {
@@ -467,7 +202,7 @@ var format_resource_id_default = formatResourceId;
467
202
  var ensureCamelCase = (string_) => `${string_.charAt(0).toLowerCase()}${string_.slice(1)}`;
468
203
  var getResourceNameFromUrl = (url, models) => {
469
204
  const realPath = url.split("?")[0];
470
- if (typeof realPath === "undefined") {
205
+ if (realPath === void 0) {
471
206
  throw new TypeError("Path is undefined");
472
207
  }
473
208
  const modelName = Object.keys(models).find((name) => {
@@ -485,7 +220,7 @@ var getResourceNameFromUrl = (url, models) => {
485
220
  import { match } from "path-to-regexp";
486
221
  var getRouteType = (method, url, resourceName) => {
487
222
  const realPath = url.split("?")[0];
488
- if (typeof realPath === "undefined") {
223
+ if (realPath === void 0) {
489
224
  throw new TypeError("Path is undefined");
490
225
  }
491
226
  if (!realPath.includes(`/${resourceName}`)) {
@@ -572,7 +307,7 @@ async function baseHandler(responseExecutor, finalExecutor, adapter, options) {
572
307
  validate_adapter_methods_default(adapter);
573
308
  } catch (error_) {
574
309
  const error = error_;
575
- throw new import_api_utils.ApiError(error.statusCode, error.message);
310
+ throw new ApiError(error.statusCode, error.message);
576
311
  }
577
312
  await ((_a = adapter.init) == null ? void 0 : _a.call(adapter));
578
313
  const config = {
@@ -671,7 +406,7 @@ async function baseHandler(responseExecutor, finalExecutor, adapter, options) {
671
406
  }
672
407
  await responseExecutor(responseOrContext, responseConfig);
673
408
  } catch (error) {
674
- if (adapter.handleError && !(error instanceof import_api_utils.ApiError)) {
409
+ if (adapter.handleError && !(error instanceof ApiError)) {
675
410
  adapter.handleError(error);
676
411
  } else {
677
412
  throw error;
@@ -720,10 +455,4 @@ export {
720
455
  edge_default as edgeHandler,
721
456
  node_default as nodeHandler
722
457
  };
723
- /*!
724
- * cookie
725
- * Copyright(c) 2012-2014 Roman Shtylman
726
- * Copyright(c) 2015 Douglas Christopher Wilson
727
- * MIT Licensed
728
- */
729
458
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/.pnpm/next@12.3.1/node_modules/next/dist/compiled/cookie/index.js","../../../../node_modules/.pnpm/next@12.3.1/node_modules/next/server/api-utils/index.ts","../../src/base-crud-handler.ts","../../src/handler/create.ts","../../src/handler/delete.ts","../../src/handler/list.ts","../../src/handler/read.ts","../../src/handler/update.ts","../../src/query-parser.ts","../../src/utils/format-resource-id.ts","../../src/utils/get-resource-name-from-url.ts","../../src/utils/get-route-type.ts","../../src/utils/validate-adapter-methods.ts","../../src/next/api/edge/index.ts","../../src/next/api/node/index.ts"],"sourcesContent":["(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();",null,"import type { HttpError } from \"http-errors\";\nimport createHttpError from \"http-errors\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { ApiError } from \"next/dist/server/api-utils\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport createHandler from \"./handler/create\";\nimport deleteHandler from \"./handler/delete\";\nimport listHandler from \"./handler/list\";\nimport readHandler from \"./handler/read\";\nimport updateHandler from \"./handler/update\";\nimport parseQuery from \"./query-parser\";\nimport type {\n Adapter, ExecuteHandler, HandlerOptions, HandlerParameters, ParsedQueryParameters,\n} from \"./types.d\";\nimport { RouteType } from \"./types.d\";\nimport formatResourceId from \"./utils/format-resource-id\";\nimport getAccessibleRoutes from \"./utils/get-accessible-routes\";\nimport { getResourceNameFromUrl } from \"./utils/get-resource-name-from-url\";\nimport getRouteType from \"./utils/get-route-type\";\nimport validateAdapterMethods from \"./utils/validate-adapter-methods\";\n\ntype ResponseConfig = { status: number; data: any };\n\nasync function baseHandler<R extends Request, Context extends unknown, T, Q extends ParsedQueryParameters = any, M extends string = string>(\n responseExecutor: (responseOrContext: Context, responseConfig: ResponseConfig) => Promise<Response>,\n finalExecutor: (responseOrContext: Context) => Promise<void>,\n adapter: Adapter<T, Q>,\n options?: HandlerOptions<M>,\n): Promise<ExecuteHandler<R, Context>>;\n\nasync function baseHandler<R extends IncomingMessage, RResponse extends ServerResponse, T, Q extends ParsedQueryParameters = any, M extends string = string>(\n responseExecutor: (responseOrContext: RResponse, responseConfig: ResponseConfig) => Promise<void>,\n finalExecutor: (responseOrContext: RResponse) => Promise<void>,\n adapter: Adapter<T, Q>,\n options?: HandlerOptions<M>,\n): Promise<ExecuteHandler<R, RResponse>>;\n\n// eslint-disable-next-line radar/cognitive-complexity,max-len\nasync function baseHandler<R extends { url: string; method: string }, RResponse, T, Q extends ParsedQueryParameters = any, M extends string = string>(\n responseExecutor: (responseOrContext: RResponse, responseConfig: ResponseConfig) => Promise<RResponse>,\n finalExecutor: (responseOrContext: RResponse) => Promise<void>,\n adapter: Adapter<T, Q>,\n options?: HandlerOptions<M>,\n): Promise<ExecuteHandler<R, RResponse>> {\n try {\n validateAdapterMethods(adapter);\n } catch (error_: any) {\n const error = error_ as HttpError;\n\n throw new ApiError(error.statusCode, error.message);\n }\n\n await adapter.init?.();\n\n const config = {\n formatResourceId,\n pagination: {\n perPage: 20,\n },\n ...options,\n };\n\n const routeNames = await adapter.mapModelsToRouteNames?.();\n const modelRoutes: { [key in M]?: string } = {};\n\n adapter.getModels().forEach((modelName) => {\n modelRoutes[modelName as M] = config?.models?.[modelName as M]?.name || routeNames?.[modelName] || modelName;\n });\n\n return async (request, responseOrContext) => {\n const { resourceName, modelName } = getResourceNameFromUrl(request.url as string, modelRoutes);\n\n if (!resourceName) {\n if (process.env.NODE_ENV === \"development\") {\n const mappedModels = await adapter.mapModelsToRouteNames?.();\n\n if (typeof mappedModels === \"object\") {\n throw createHttpError(404, `Resource not found, possible models: ${Object.values(mappedModels).join(\", \")}`);\n }\n }\n\n throw createHttpError(404, `Resource not found: ${request.url}`);\n }\n\n const { routeType, resourceId } = getRouteType(request.method as string, request.url as string, resourceName);\n\n if (routeType === null) {\n throw createHttpError(404, `Route not found: ${request.url}`);\n }\n\n const modelConfig = options?.models?.[modelName as M];\n\n const accessibleRoutes = getAccessibleRoutes(modelConfig?.only, modelConfig?.exclude, options?.exposeStrategy || \"all\");\n\n if (!accessibleRoutes.includes(routeType)) {\n throw createHttpError(404, `Route not found: ${request.url}`);\n }\n\n try {\n const resourceIdFormatted = modelConfig?.formatResourceId?.(resourceId as string) ?? config.formatResourceId(resourceId as string);\n\n await adapter.connect?.();\n\n const parsedQuery = parseQuery((request.url as string).split(\"?\")[1]);\n const parameters: HandlerParameters<T, Q> = {\n adapter,\n query: adapter.parseQuery(modelName as M, parsedQuery),\n resourceName: modelName as string,\n };\n\n try {\n let responseConfig: ResponseConfig;\n\n switch (routeType) {\n case RouteType.READ_ONE: {\n responseConfig = await (config?.handlers?.get || readHandler)<T, Q>({\n ...parameters,\n resourceId: resourceIdFormatted,\n });\n break;\n }\n case RouteType.READ_ALL: {\n responseConfig = await (config?.handlers?.list || listHandler)<T, Q>({\n ...parameters,\n query: {\n ...parameters.query,\n page: parsedQuery.page ? Number(parsedQuery.page) : undefined,\n limit: parsedQuery.limit ? Number(parsedQuery.limit) : undefined,\n },\n pagination: config.pagination,\n });\n break;\n }\n case RouteType.CREATE: {\n responseConfig = await (config?.handlers?.create || createHandler)<T, Q, R>({\n ...parameters,\n request: request as R & { body: Record<string, any> },\n });\n break;\n }\n case RouteType.UPDATE: {\n responseConfig = await (config?.handlers?.update || updateHandler)<T, Q, R>({\n ...parameters,\n resourceId: resourceIdFormatted,\n request: request as R & { body: Partial<T> },\n });\n break;\n }\n case RouteType.DELETE: {\n responseConfig = await (config?.handlers?.delete || deleteHandler)<T, Q>({\n ...parameters,\n resourceId: resourceIdFormatted,\n });\n break;\n }\n default: {\n responseConfig = {\n status: 404,\n data: \"Method not found\",\n };\n }\n }\n\n await responseExecutor(responseOrContext, responseConfig);\n } catch (error: any) {\n if (adapter.handleError && !(error instanceof ApiError)) {\n adapter.handleError(error);\n } else {\n throw error;\n }\n }\n } finally {\n await adapter.disconnect?.();\n\n await finalExecutor(responseOrContext);\n }\n };\n}\n\nexport default baseHandler;\n","import type { HandlerParameters } from \"../types.d\";\n\nconst createHandler: Handler = async ({\n adapter, query, resourceName, request,\n}) => {\n const resources = await adapter.create(resourceName, request.body, query);\n\n return {\n data: resources,\n status: 201,\n };\n};\n\nexport type Handler = <T, Q, Request>(\n parameters: HandlerParameters<T, Q> & { request: Request & { body: Record<string, any> } },\n) => Promise<{\n data: any;\n status: number;\n}>;\n\nexport default createHandler;\n","import createHttpError from \"http-errors\";\n\nimport type { UniqueResourceHandlerParameters } from \"../types.d\";\n\nconst deleteHandler: Handler = async ({\n adapter, query, resourceName, resourceId,\n}) => {\n const resource = await adapter.getOne(resourceName, resourceId, query);\n\n if (resource) {\n const deletedResource = await adapter.delete(resourceName, resourceId, query);\n\n return {\n data: deletedResource,\n status: 200,\n };\n }\n throw createHttpError(404, `${resourceName} ${resourceId} not found`);\n};\n\nexport type Handler = <T, Q>(\n parameters: UniqueResourceHandlerParameters<T, Q>,\n) => Promise<{\n data: any;\n status: number;\n}>;\nexport default deleteHandler;\n","import { paginate } from \"@visulima/pagination\";\n\nimport type { HandlerParameters, PaginationConfig, ParsedQueryParameters } from \"../types.d\";\n\ntype PaginationOptions = {\n page: number;\n perPage: number;\n};\n\nconst listHandler: Handler = async ({\n adapter, query, resourceName, pagination,\n}) => {\n let isPaginated = false;\n let paginationOptions: PaginationOptions | undefined;\n\n if (typeof query?.page !== \"undefined\") {\n if (query?.page <= 0) {\n throw new Error(\"page query must be a strictly positive number\");\n }\n\n paginationOptions = {\n page: query?.page,\n perPage: query?.limit || pagination.perPage,\n };\n }\n\n if (paginationOptions) {\n isPaginated = true;\n\n // eslint-disable-next-line no-param-reassign\n query.skip = (paginationOptions.page - 1) * paginationOptions.perPage;\n // eslint-disable-next-line no-param-reassign\n query.limit = paginationOptions.perPage;\n }\n\n const resources = await adapter.getAll(resourceName, query);\n\n if (isPaginated) {\n const { page, total } = await adapter.getPaginationData(resourceName, query);\n\n const paginator = paginate(page, (paginationOptions as PaginationOptions).perPage as number, total, resources);\n\n return {\n data: paginator.toJSON(),\n status: 200,\n };\n }\n\n return {\n data: resources,\n status: 200,\n };\n};\n\nexport type Handler = <T, Q extends ParsedQueryParameters>(\n parameters: HandlerParameters<T, Q> & { pagination: PaginationConfig },\n) => Promise<{\n data: any;\n status: number;\n}>;\n\nexport default listHandler;\n","import createHttpError from \"http-errors\";\n\nimport type { UniqueResourceHandlerParameters } from \"../types.d\";\n\nconst readHandler: Handler = async ({\n adapter, query, resourceName, resourceId,\n}) => {\n const resource = await adapter.getOne(resourceName, resourceId, query);\n\n if (!resource) {\n throw createHttpError(404, `${resourceName} ${resourceId} not found`);\n }\n\n return {\n data: resource,\n status: 200,\n };\n};\n\nexport type Handler = <T, Q>(\n parameters: UniqueResourceHandlerParameters<T, Q>,\n) => Promise<{\n data: any;\n status: number;\n}>;\n\nexport default readHandler;\n","import createHttpError from \"http-errors\";\n\nimport type { UniqueResourceHandlerParameters } from \"../types.d\";\n\nconst updateHandler: Handler = async ({\n adapter, query, resourceName, resourceId, request,\n}) => {\n const resource = await adapter.getOne(resourceName, resourceId, query);\n\n if (resource) {\n const updatedResource = await adapter.update(resourceName, resourceId, request.body, query);\n\n return {\n status: 201,\n data: updatedResource,\n };\n }\n\n throw createHttpError(404, `${resourceName} ${resourceId} not found`);\n};\n\nexport type Handler = <T, Q, Request>(\n parameters: UniqueResourceHandlerParameters<T, Q> & { request: Request & { body: Partial<T> } },\n) => Promise<{\n data: any;\n status: number;\n}>;\n\nexport default updateHandler;\n","import set from \"lodash.set\";\nimport { parse } from \"qs\";\n\nimport type {\n OrderByField, ParsedQueryParameters, RecursiveField, WhereField,\n} from \"./types.d\";\n\nconst parseRecursive = (select: string): RecursiveField => {\n if (typeof select === \"string\") {\n const selectFields: RecursiveField = {};\n\n const fields = select.split(\",\");\n\n fields.forEach((field) => {\n set(selectFields, field, true);\n });\n\n return selectFields;\n }\n\n throw new Error(\"select query param must be a string\");\n};\n\nconst parseWhere = (where: string): WhereField => {\n const whereObject = JSON.parse(where);\n const parsed: WhereField = {};\n\n Object.keys(whereObject).forEach((key) => {\n set(parsed, key, whereObject[key]);\n });\n\n return parsed;\n};\n\nconst parseOrderBy = (orderBy: string): OrderByField => {\n const parsed: OrderByField = {};\n const orderByObject = JSON.parse(orderBy);\n\n if (Object.keys(orderByObject).length > 0) {\n const key = Object.keys(orderByObject)[0];\n\n if (orderByObject[key as keyof typeof orderByObject] === \"$asc\" || orderByObject[key as keyof typeof orderByObject] === \"$desc\") {\n parsed[key as string] = orderByObject[key as keyof typeof orderByObject];\n }\n }\n\n if (Object.keys(parsed).length !== 1) {\n throw new Error(\"orderBy needs to be an object with exactly 1 property with either $asc or $desc value\");\n }\n\n return parsed;\n};\n\n// eslint-disable-next-line radar/cognitive-complexity\nconst parseQuery = (queryString?: string): ParsedQueryParameters => {\n if (queryString) {\n const query = parse(queryString);\n const parsedQuery: ParsedQueryParameters = {};\n\n if (query.select) {\n parsedQuery.select = parseRecursive(query.select as string);\n }\n if (query.include) {\n parsedQuery.include = parseRecursive(query.include as string);\n }\n if (query.where) {\n parsedQuery.where = parseWhere(query.where as string);\n }\n if (query.orderBy) {\n parsedQuery.orderBy = parseOrderBy(query.orderBy as string);\n }\n if (typeof query.limit !== \"undefined\") {\n parsedQuery.limit = Number.isFinite(+query.limit) ? +query.limit : undefined;\n }\n if (typeof query.skip !== \"undefined\") {\n parsedQuery.skip = Number.isFinite(+query.skip) ? +query.skip : undefined;\n }\n if (query.distinct) {\n parsedQuery.distinct = query.distinct as string;\n }\n if (query.page) {\n parsedQuery.page = Number.isFinite(+query.page) ? +query.page : undefined;\n }\n\n return {\n originalQuery: query,\n ...parsedQuery,\n };\n }\n\n return {};\n};\n\nexport default parseQuery;\n","const formatResourceId = (resourceId: string): string | number => (Number.isSafeInteger(+resourceId) ? +resourceId : resourceId);\n\nexport default formatResourceId;\n","export const ensureCamelCase = (string_: string) => `${string_.charAt(0).toLowerCase()}${string_.slice(1)}`;\n\nexport const getResourceNameFromUrl = <M extends string = string>(url: string, models: { [key in M]?: string }) => {\n // Exclude the query params from the path\n const realPath = url.split(\"?\")[0];\n\n if (typeof realPath === \"undefined\") {\n throw new TypeError(\"Path is undefined\");\n }\n\n const modelName = (Object.keys(models) as M[]).find((name) => {\n const routeName = models[name] as string;\n const camelCaseModel = ensureCamelCase(routeName);\n\n // eslint-disable-next-line @rushstack/security/no-unsafe-regexp\n return new RegExp(`(${routeName}|${camelCaseModel}$)|(${routeName}|${camelCaseModel}/)`, \"g\").test(realPath);\n });\n\n return {\n modelName,\n resourceName: models[modelName] as string,\n };\n};\n","import { match } from \"path-to-regexp\";\n\nimport { RouteType } from \"../types.d\";\n\ntype PathMatch = { id: string };\n\nconst getRouteType: (\n method: string,\n url: string,\n resourceName: string,\n) => GetRouteType = (method, url, resourceName) => {\n // Exclude the query params from the path\n const realPath = url.split(\"?\")[0];\n\n if (typeof realPath === \"undefined\") {\n throw new TypeError(\"Path is undefined\");\n }\n\n if (!realPath.includes(`/${resourceName}`)) {\n throw new Error(`invalid resource name '${resourceName}' for route '${realPath}'`);\n }\n\n const entityMatcher = match<PathMatch>([`/(.*)/${resourceName}`, `/(.*)/${resourceName}/:id`], { decode: decodeURIComponent });\n const simpleMatcher = match(`/(.*)/${resourceName}`, {\n decode: decodeURIComponent,\n });\n\n switch (method) {\n case \"GET\": {\n const pathMatch = entityMatcher(realPath);\n\n // If we got a /something after the resource name, we are reading 1 entity\n if (pathMatch && pathMatch.params.id) {\n return {\n routeType: RouteType.READ_ONE,\n resourceId: pathMatch.params.id,\n };\n }\n\n return {\n routeType: RouteType.READ_ALL,\n };\n }\n case \"POST\": {\n const pathMatch = simpleMatcher(realPath);\n\n if (pathMatch) {\n return {\n routeType: RouteType.CREATE,\n };\n }\n\n return {\n routeType: null,\n };\n }\n case \"PUT\":\n case \"PATCH\": {\n const pathMatch = entityMatcher(realPath);\n\n if (pathMatch && pathMatch.params.id) {\n return {\n routeType: RouteType.UPDATE,\n resourceId: pathMatch.params.id,\n };\n }\n\n return {\n routeType: null,\n };\n }\n case \"DELETE\": {\n const pathMatch = entityMatcher(realPath);\n\n if (pathMatch && pathMatch.params.id) {\n return {\n routeType: RouteType.DELETE,\n resourceId: pathMatch.params.id,\n };\n }\n\n return {\n routeType: null,\n };\n }\n default: {\n return {\n routeType: null,\n };\n }\n }\n};\n\nexport type GetRouteType = {\n routeType: RouteType | null;\n resourceId?: string;\n};\n\nexport default getRouteType;\n","import createHttpError from \"http-errors\";\n\nimport type { Adapter } from \"../types.d\";\n\nconst adapterMethods = [\"create\" || \"delete\" || \"getAll\" || \"getOne\" || \"parseQuery\" || \"update\" || \"getPaginationData\" || \"getModels\"];\n\nconst validateAdapterMethods = <T, Q>(adapter: Adapter<T, Q>) => {\n adapterMethods.forEach((method) => {\n if (!adapter[method as keyof Adapter<T, Q>]) {\n throw createHttpError(500, `Adapter must implement the \"${method}\" method.`);\n }\n });\n};\n\nexport default validateAdapterMethods;\n","import baseHandler from \"../../../base-crud-handler\";\nimport type {\n Adapter, ExecuteHandler, HandlerOptions, ParsedQueryParameters,\n} from \"../../../types.d\";\n\nasync function handler<T, R extends Request, Context, Q extends ParsedQueryParameters = any, M extends string = string>(\n adapter: Adapter<T, Q>,\n options?: HandlerOptions<M>,\n): Promise<ExecuteHandler<R, Context>> {\n return baseHandler<R, Context, T, Q, M>(\n async (_, responseConfig) => new Response(JSON.stringify(responseConfig.data), {\n status: responseConfig.status,\n headers: {\n \"content-type\": \"application/json; charset=utf-8\",\n },\n }),\n async () => {},\n adapter,\n options,\n );\n}\n\nexport default handler;\n","import type { NextApiRequest, NextApiResponse } from \"next\";\n\nimport baseHandler from \"../../../base-crud-handler\";\nimport type {\n Adapter, ExecuteHandler, HandlerOptions, ParsedQueryParameters,\n} from \"../../../types.d\";\n\nasync function handler<\n T,\n Q extends ParsedQueryParameters = any,\n R extends NextApiRequest = NextApiRequest,\n Response extends NextApiResponse = NextApiResponse,\n M extends string = string,\n>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>): Promise<ExecuteHandler<R, Response>> {\n return baseHandler<R, Response, T, Q, M>(\n async (response, responseConfig) => {\n response.status(responseConfig.status).send(responseConfig.data);\n },\n async (response) => {\n (response as Response).end();\n },\n adapter,\n options,\n );\n}\n\nexport default handler;\n"],"mappings":"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","names":["parse","e","r","t","n","i","a","getCookieParser","sendStatusCode","redirect","checkIsManualRevalidate","clearPreviewData","sendError","setLazyProp","headers","parseCookie","header","cookie","parse","parseCookieFn","require","Array","isArray","join","res","statusCode","statusOrUrl","url","Error","writeHead","Location","write","end","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","req","previewProps","isManualRevalidate","previewModeId","revalidateOnlyGenerated","COOKIE_NAME_PRERENDER_BYPASS","COOKIE_NAME_PRERENDER_DATA","RESPONSE_LIMIT_DEFAULT","SYMBOL_PREVIEW_DATA","Symbol","SYMBOL_CLEARED_COOKIES","options","serialize","previous","getHeader","setHeader","expires","Date","httpOnly","sameSite","process","secure","path","undefined","Object","defineProperty","value","enumerable","ApiError","constructor","message","statusMessage","prop","getter","opts","configurable","optsReset","writable","get","set","createHttpError","createHttpError","createHttpError","createHttpError","_a","_b","createHttpError","handler"]}
1
+ {"version":3,"sources":["../../src/base-crud-handler.ts","../../src/handler/create.ts","../../src/handler/delete.ts","../../src/handler/list.ts","../../src/handler/read.ts","../../src/handler/update.ts","../../src/query-parser.ts","../../src/utils/format-resource-id.ts","../../src/utils/get-resource-name-from-url.ts","../../src/utils/get-route-type.ts","../../src/utils/validate-adapter-methods.ts","../../src/next/api/edge/index.ts","../../src/next/api/node/index.ts"],"sourcesContent":["import type { HttpError } from \"http-errors\";\nimport createHttpError from \"http-errors\";\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { ApiError } from \"next/dist/server/api-utils\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\n\nimport createHandler from \"./handler/create\";\nimport deleteHandler from \"./handler/delete\";\nimport listHandler from \"./handler/list\";\nimport readHandler from \"./handler/read\";\nimport updateHandler from \"./handler/update\";\nimport parseQuery from \"./query-parser\";\nimport type {\n Adapter, ExecuteHandler, HandlerOptions, HandlerParameters, ParsedQueryParameters,\n} from \"./types.d\";\nimport { RouteType } from \"./types.d\";\nimport formatResourceId from \"./utils/format-resource-id\";\nimport getAccessibleRoutes from \"./utils/get-accessible-routes\";\nimport { getResourceNameFromUrl } from \"./utils/get-resource-name-from-url\";\nimport getRouteType from \"./utils/get-route-type\";\nimport validateAdapterMethods from \"./utils/validate-adapter-methods\";\n\ntype ResponseConfig = { status: number; data: any };\n\nasync function baseHandler<R extends Request, Context extends unknown, T, Q extends ParsedQueryParameters = any, M extends string = string>(\n responseExecutor: (responseOrContext: Context, responseConfig: ResponseConfig) => Promise<Response>,\n finalExecutor: (responseOrContext: Context) => Promise<void>,\n adapter: Adapter<T, Q>,\n options?: HandlerOptions<M>,\n): Promise<ExecuteHandler<R, Context>>;\n\nasync function baseHandler<R extends IncomingMessage, RResponse extends ServerResponse, T, Q extends ParsedQueryParameters = any, M extends string = string>(\n responseExecutor: (responseOrContext: RResponse, responseConfig: ResponseConfig) => Promise<void>,\n finalExecutor: (responseOrContext: RResponse) => Promise<void>,\n adapter: Adapter<T, Q>,\n options?: HandlerOptions<M>,\n): Promise<ExecuteHandler<R, RResponse>>;\n\n// eslint-disable-next-line radar/cognitive-complexity,max-len\nasync function baseHandler<R extends { url: string; method: string }, RResponse, T, Q extends ParsedQueryParameters = any, M extends string = string>(\n responseExecutor: (responseOrContext: RResponse, responseConfig: ResponseConfig) => Promise<RResponse>,\n finalExecutor: (responseOrContext: RResponse) => Promise<void>,\n adapter: Adapter<T, Q>,\n options?: HandlerOptions<M>,\n): Promise<ExecuteHandler<R, RResponse>> {\n try {\n validateAdapterMethods(adapter);\n } catch (error_: any) {\n const error = error_ as HttpError;\n\n throw new ApiError(error.statusCode, error.message);\n }\n\n await adapter.init?.();\n\n const config = {\n formatResourceId,\n pagination: {\n perPage: 20,\n },\n ...options,\n };\n\n const routeNames = await adapter.mapModelsToRouteNames?.();\n const modelRoutes: { [key in M]?: string } = {};\n\n adapter.getModels().forEach((modelName) => {\n modelRoutes[modelName as M] = config?.models?.[modelName as M]?.name || routeNames?.[modelName] || modelName;\n });\n\n return async (request, responseOrContext) => {\n const { resourceName, modelName } = getResourceNameFromUrl(request.url as string, modelRoutes);\n\n if (!resourceName) {\n if (process.env.NODE_ENV === \"development\") {\n const mappedModels = await adapter.mapModelsToRouteNames?.();\n\n if (typeof mappedModels === \"object\") {\n throw createHttpError(404, `Resource not found, possible models: ${Object.values(mappedModels).join(\", \")}`);\n }\n }\n\n throw createHttpError(404, `Resource not found: ${request.url}`);\n }\n\n const { routeType, resourceId } = getRouteType(request.method as string, request.url as string, resourceName);\n\n if (routeType === null) {\n throw createHttpError(404, `Route not found: ${request.url}`);\n }\n\n const modelConfig = options?.models?.[modelName as M];\n\n const accessibleRoutes = getAccessibleRoutes(modelConfig?.only, modelConfig?.exclude, options?.exposeStrategy || \"all\");\n\n if (!accessibleRoutes.includes(routeType)) {\n throw createHttpError(404, `Route not found: ${request.url}`);\n }\n\n try {\n const resourceIdFormatted = modelConfig?.formatResourceId?.(resourceId as string) ?? config.formatResourceId(resourceId as string);\n\n await adapter.connect?.();\n\n const parsedQuery = parseQuery((request.url as string).split(\"?\")[1]);\n const parameters: HandlerParameters<T, Q> = {\n adapter,\n query: adapter.parseQuery(modelName as M, parsedQuery),\n resourceName: modelName as string,\n };\n\n try {\n let responseConfig: ResponseConfig;\n\n switch (routeType) {\n case RouteType.READ_ONE: {\n responseConfig = await (config?.handlers?.get || readHandler)<T, Q>({\n ...parameters,\n resourceId: resourceIdFormatted,\n });\n break;\n }\n case RouteType.READ_ALL: {\n responseConfig = await (config?.handlers?.list || listHandler)<T, Q>({\n ...parameters,\n query: {\n ...parameters.query,\n page: parsedQuery.page ? Number(parsedQuery.page) : undefined,\n limit: parsedQuery.limit ? Number(parsedQuery.limit) : undefined,\n },\n pagination: config.pagination,\n });\n break;\n }\n case RouteType.CREATE: {\n responseConfig = await (config?.handlers?.create || createHandler)<T, Q, R>({\n ...parameters,\n request: request as R & { body: Record<string, any> },\n });\n break;\n }\n case RouteType.UPDATE: {\n responseConfig = await (config?.handlers?.update || updateHandler)<T, Q, R>({\n ...parameters,\n resourceId: resourceIdFormatted,\n request: request as R & { body: Partial<T> },\n });\n break;\n }\n case RouteType.DELETE: {\n responseConfig = await (config?.handlers?.delete || deleteHandler)<T, Q>({\n ...parameters,\n resourceId: resourceIdFormatted,\n });\n break;\n }\n default: {\n responseConfig = {\n status: 404,\n data: \"Method not found\",\n };\n }\n }\n\n await responseExecutor(responseOrContext, responseConfig);\n } catch (error: any) {\n if (adapter.handleError && !(error instanceof ApiError)) {\n adapter.handleError(error);\n } else {\n throw error;\n }\n }\n } finally {\n await adapter.disconnect?.();\n\n await finalExecutor(responseOrContext);\n }\n };\n}\n\nexport default baseHandler;\n","import type { HandlerParameters } from \"../types.d\";\n\nconst createHandler: Handler = async ({\n adapter, query, resourceName, request,\n}) => {\n const resources = await adapter.create(resourceName, request.body, query);\n\n return {\n data: resources,\n status: 201,\n };\n};\n\nexport type Handler = <T, Q, Request>(\n parameters: HandlerParameters<T, Q> & { request: Request & { body: Record<string, any> } },\n) => Promise<{\n data: any;\n status: number;\n}>;\n\nexport default createHandler;\n","import createHttpError from \"http-errors\";\n\nimport type { UniqueResourceHandlerParameters } from \"../types.d\";\n\nconst deleteHandler: Handler = async ({\n adapter, query, resourceName, resourceId,\n}) => {\n const resource = await adapter.getOne(resourceName, resourceId, query);\n\n if (resource) {\n const deletedResource = await adapter.delete(resourceName, resourceId, query);\n\n return {\n data: deletedResource,\n status: 200,\n };\n }\n throw createHttpError(404, `${resourceName} ${resourceId} not found`);\n};\n\nexport type Handler = <T, Q>(\n parameters: UniqueResourceHandlerParameters<T, Q>,\n) => Promise<{\n data: any;\n status: number;\n}>;\nexport default deleteHandler;\n","import { paginate } from \"@visulima/pagination\";\n\nimport type { HandlerParameters, PaginationConfig, ParsedQueryParameters } from \"../types.d\";\n\ntype PaginationOptions = {\n page: number;\n perPage: number;\n};\n\nconst listHandler: Handler = async ({\n adapter, query, resourceName, pagination,\n}) => {\n let isPaginated = false;\n let paginationOptions: PaginationOptions | undefined;\n\n if (query?.page !== undefined) {\n if (query?.page <= 0) {\n throw new Error(\"page query must be a strictly positive number\");\n }\n\n paginationOptions = {\n page: query?.page,\n perPage: query?.limit || pagination.perPage,\n };\n }\n\n if (paginationOptions) {\n isPaginated = true;\n\n // eslint-disable-next-line no-param-reassign\n query.skip = (paginationOptions.page - 1) * paginationOptions.perPage;\n // eslint-disable-next-line no-param-reassign\n query.limit = paginationOptions.perPage;\n }\n\n const resources = await adapter.getAll(resourceName, query);\n\n if (isPaginated) {\n const { page, total } = await adapter.getPaginationData(resourceName, query);\n\n const paginator = paginate(page, (paginationOptions as PaginationOptions).perPage as number, total, resources);\n\n return {\n data: paginator.toJSON(),\n status: 200,\n };\n }\n\n return {\n data: resources,\n status: 200,\n };\n};\n\nexport type Handler = <T, Q extends ParsedQueryParameters>(\n parameters: HandlerParameters<T, Q> & { pagination: PaginationConfig },\n) => Promise<{\n data: any;\n status: number;\n}>;\n\nexport default listHandler;\n","import createHttpError from \"http-errors\";\n\nimport type { UniqueResourceHandlerParameters } from \"../types.d\";\n\nconst readHandler: Handler = async ({\n adapter, query, resourceName, resourceId,\n}) => {\n const resource = await adapter.getOne(resourceName, resourceId, query);\n\n if (!resource) {\n throw createHttpError(404, `${resourceName} ${resourceId} not found`);\n }\n\n return {\n data: resource,\n status: 200,\n };\n};\n\nexport type Handler = <T, Q>(\n parameters: UniqueResourceHandlerParameters<T, Q>,\n) => Promise<{\n data: any;\n status: number;\n}>;\n\nexport default readHandler;\n","import createHttpError from \"http-errors\";\n\nimport type { UniqueResourceHandlerParameters } from \"../types.d\";\n\nconst updateHandler: Handler = async ({\n adapter, query, resourceName, resourceId, request,\n}) => {\n const resource = await adapter.getOne(resourceName, resourceId, query);\n\n if (resource) {\n const updatedResource = await adapter.update(resourceName, resourceId, request.body, query);\n\n return {\n status: 201,\n data: updatedResource,\n };\n }\n\n throw createHttpError(404, `${resourceName} ${resourceId} not found`);\n};\n\nexport type Handler = <T, Q, Request>(\n parameters: UniqueResourceHandlerParameters<T, Q> & { request: Request & { body: Partial<T> } },\n) => Promise<{\n data: any;\n status: number;\n}>;\n\nexport default updateHandler;\n","import set from \"lodash.set\";\nimport { parse } from \"qs\";\n\nimport type {\n OrderByField, ParsedQueryParameters, RecursiveField, WhereField,\n} from \"./types.d\";\n\nconst parseRecursive = (select: string): RecursiveField => {\n if (typeof select === \"string\") {\n const selectFields: RecursiveField = {};\n\n const fields = select.split(\",\");\n\n fields.forEach((field) => {\n set(selectFields, field, true);\n });\n\n return selectFields;\n }\n\n throw new Error(\"select query param must be a string\");\n};\n\nconst parseWhere = (where: string): WhereField => {\n const whereObject = JSON.parse(where);\n const parsed: WhereField = {};\n\n Object.keys(whereObject).forEach((key) => {\n set(parsed, key, whereObject[key]);\n });\n\n return parsed;\n};\n\nconst parseOrderBy = (orderBy: string): OrderByField => {\n const parsed: OrderByField = {};\n const orderByObject = JSON.parse(orderBy);\n\n if (Object.keys(orderByObject).length > 0) {\n const key = Object.keys(orderByObject)[0];\n\n if (orderByObject[key as keyof typeof orderByObject] === \"$asc\" || orderByObject[key as keyof typeof orderByObject] === \"$desc\") {\n parsed[key as string] = orderByObject[key as keyof typeof orderByObject];\n }\n }\n\n if (Object.keys(parsed).length !== 1) {\n throw new Error(\"orderBy needs to be an object with exactly 1 property with either $asc or $desc value\");\n }\n\n return parsed;\n};\n\n// eslint-disable-next-line radar/cognitive-complexity\nconst parseQuery = (queryString?: string): ParsedQueryParameters => {\n if (queryString) {\n const query = parse(queryString);\n const parsedQuery: ParsedQueryParameters = {};\n\n if (query.select) {\n parsedQuery.select = parseRecursive(query.select as string);\n }\n if (query.include) {\n parsedQuery.include = parseRecursive(query.include as string);\n }\n if (query.where) {\n parsedQuery.where = parseWhere(query.where as string);\n }\n if (query.orderBy) {\n parsedQuery.orderBy = parseOrderBy(query.orderBy as string);\n }\n if (query.limit !== undefined) {\n parsedQuery.limit = Number.isFinite(+query.limit) ? +query.limit : undefined;\n }\n if (query.skip !== undefined) {\n parsedQuery.skip = Number.isFinite(+query.skip) ? +query.skip : undefined;\n }\n if (query.distinct) {\n parsedQuery.distinct = query.distinct as string;\n }\n if (query.page) {\n parsedQuery.page = Number.isFinite(+query.page) ? +query.page : undefined;\n }\n\n return {\n originalQuery: query,\n ...parsedQuery,\n };\n }\n\n return {};\n};\n\nexport default parseQuery;\n","const formatResourceId = (resourceId: string): string | number => (Number.isSafeInteger(+resourceId) ? +resourceId : resourceId);\n\nexport default formatResourceId;\n","export const ensureCamelCase = (string_: string) => `${string_.charAt(0).toLowerCase()}${string_.slice(1)}`;\n\nexport const getResourceNameFromUrl = <M extends string = string>(url: string, models: { [key in M]?: string }) => {\n // Exclude the query params from the path\n const realPath = url.split(\"?\")[0];\n\n if (realPath === undefined) {\n throw new TypeError(\"Path is undefined\");\n }\n\n const modelName = (Object.keys(models) as M[]).find((name) => {\n const routeName = models[name] as string;\n const camelCaseModel = ensureCamelCase(routeName);\n\n // eslint-disable-next-line @rushstack/security/no-unsafe-regexp\n return new RegExp(`(${routeName}|${camelCaseModel}$)|(${routeName}|${camelCaseModel}/)`, \"g\").test(realPath);\n });\n\n return {\n modelName,\n resourceName: models[modelName] as string,\n };\n};\n","import { match } from \"path-to-regexp\";\n\nimport { RouteType } from \"../types.d\";\n\ntype PathMatch = { id: string };\n\nconst getRouteType: (\n method: string,\n url: string,\n resourceName: string,\n) => GetRouteType = (method, url, resourceName) => {\n // Exclude the query params from the path\n const realPath = url.split(\"?\")[0];\n\n if (realPath === undefined) {\n throw new TypeError(\"Path is undefined\");\n }\n\n if (!realPath.includes(`/${resourceName}`)) {\n throw new Error(`invalid resource name '${resourceName}' for route '${realPath}'`);\n }\n\n const entityMatcher = match<PathMatch>([`/(.*)/${resourceName}`, `/(.*)/${resourceName}/:id`], { decode: decodeURIComponent });\n const simpleMatcher = match(`/(.*)/${resourceName}`, {\n decode: decodeURIComponent,\n });\n\n switch (method) {\n case \"GET\": {\n const pathMatch = entityMatcher(realPath);\n\n // If we got a /something after the resource name, we are reading 1 entity\n if (pathMatch && pathMatch.params.id) {\n return {\n routeType: RouteType.READ_ONE,\n resourceId: pathMatch.params.id,\n };\n }\n\n return {\n routeType: RouteType.READ_ALL,\n };\n }\n case \"POST\": {\n const pathMatch = simpleMatcher(realPath);\n\n if (pathMatch) {\n return {\n routeType: RouteType.CREATE,\n };\n }\n\n return {\n routeType: null,\n };\n }\n case \"PUT\":\n case \"PATCH\": {\n const pathMatch = entityMatcher(realPath);\n\n if (pathMatch && pathMatch.params.id) {\n return {\n routeType: RouteType.UPDATE,\n resourceId: pathMatch.params.id,\n };\n }\n\n return {\n routeType: null,\n };\n }\n case \"DELETE\": {\n const pathMatch = entityMatcher(realPath);\n\n if (pathMatch && pathMatch.params.id) {\n return {\n routeType: RouteType.DELETE,\n resourceId: pathMatch.params.id,\n };\n }\n\n return {\n routeType: null,\n };\n }\n default: {\n return {\n routeType: null,\n };\n }\n }\n};\n\nexport type GetRouteType = {\n routeType: RouteType | null;\n resourceId?: string;\n};\n\nexport default getRouteType;\n","import createHttpError from \"http-errors\";\n\nimport type { Adapter } from \"../types.d\";\n\nconst adapterMethods = [\"create\" || \"delete\" || \"getAll\" || \"getOne\" || \"parseQuery\" || \"update\" || \"getPaginationData\" || \"getModels\"];\n\nconst validateAdapterMethods = <T, Q>(adapter: Adapter<T, Q>) => {\n adapterMethods.forEach((method) => {\n if (!adapter[method as keyof Adapter<T, Q>]) {\n throw createHttpError(500, `Adapter must implement the \"${method}\" method.`);\n }\n });\n};\n\nexport default validateAdapterMethods;\n","import baseHandler from \"../../../base-crud-handler\";\nimport type {\n Adapter, ExecuteHandler, HandlerOptions, ParsedQueryParameters,\n} from \"../../../types.d\";\n\nasync function handler<T, R extends Request, Context, Q extends ParsedQueryParameters = any, M extends string = string>(\n adapter: Adapter<T, Q>,\n options?: HandlerOptions<M>,\n): Promise<ExecuteHandler<R, Context>> {\n return baseHandler<R, Context, T, Q, M>(\n async (_, responseConfig) => new Response(JSON.stringify(responseConfig.data), {\n status: responseConfig.status,\n headers: {\n \"content-type\": \"application/json; charset=utf-8\",\n },\n }),\n async () => {},\n adapter,\n options,\n );\n}\n\nexport default handler;\n","import type { NextApiRequest, NextApiResponse } from \"next\";\n\nimport baseHandler from \"../../../base-crud-handler\";\nimport type {\n Adapter, ExecuteHandler, HandlerOptions, ParsedQueryParameters,\n} from \"../../../types.d\";\n\nasync function handler<\n T,\n Q extends ParsedQueryParameters = any,\n R extends NextApiRequest = NextApiRequest,\n Response extends NextApiResponse = NextApiResponse,\n M extends string = string,\n>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>): Promise<ExecuteHandler<R, Response>> {\n return baseHandler<R, Response, T, Q, M>(\n async (response, responseConfig) => {\n response.status(responseConfig.status).send(responseConfig.data);\n },\n async (response) => {\n (response as Response).end();\n },\n adapter,\n options,\n );\n}\n\nexport default handler;\n"],"mappings":"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","names":["createHttpError","createHttpError","createHttpError","createHttpError","_a","_b","createHttpError","handler"]}
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "@visulima/crud-next",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "description": "visulima crud next",
6
+ "license": "MIT",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./../dist/next/index.d.ts",
10
+ "require": "./../dist/next/index.js",
11
+ "import": "./../dist/next/index.mjs"
12
+ },
13
+ "./package.json": "./package.json"
14
+ },
15
+ "main": "../dist/next/index.js",
16
+ "module": "../dist/next/index.mjs",
17
+ "types": "../dist/next/index.d.ts"
18
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/crud",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "visulima crud",
5
5
  "keywords": [
6
6
  "anolilab",
@@ -49,25 +49,25 @@
49
49
  "module": "dist/index.mjs",
50
50
  "types": "dist/index.d.ts",
51
51
  "files": [
52
- "src",
53
- "dist",
52
+ "next/**",
53
+ "dist/**",
54
54
  "README.md",
55
55
  "CHANGELOG.md",
56
56
  "LICENSE.md"
57
57
  ],
58
58
  "scripts": {
59
- "build": "cross-env NODE_ENV=development tsup",
60
- "build:prod": "cross-env NODE_ENV=production tsup",
59
+ "build": "rimraf dist && cross-env NODE_ENV=development tsup",
60
+ "build:prod": "rimraf dist && cross-env NODE_ENV=production tsup",
61
61
  "clean": "rimraf node_modules dist",
62
62
  "coverage": "vitest run --coverage",
63
63
  "dev": "pnpm predev && pnpm run build --watch",
64
- "lint:eslint": "cross-env NO_LOGS=true eslint --ext js,jsx,ts,tsx --max-warnings=0 --config .eslintrc.cjs",
64
+ "lint:eslint": "cross-env NO_LOGS=true eslint . --ext js,jsx,ts,tsx --max-warnings=0 --config .eslintrc.cjs --cache --cache-strategy content .",
65
65
  "lint:eslint:fix": "pnpm run lint:eslint --fix",
66
66
  "test": "vitest"
67
67
  },
68
68
  "dependencies": {
69
- "@visulima/pagination": "1.0.0",
70
- "@visulima/prisma-dmmf-transformer": "1.0.0",
69
+ "@visulima/pagination": "1.0.2",
70
+ "@visulima/prisma-dmmf-transformer": "1.0.2",
71
71
  "http-errors": "^2.0.0",
72
72
  "lodash.set": "^4.3.2",
73
73
  "path-to-regexp": "^6.2.1",
@@ -87,7 +87,6 @@
87
87
  "@types/qs": "^6.9.7",
88
88
  "@typescript-eslint/eslint-plugin": "^5.40.0",
89
89
  "@typescript-eslint/parser": "^5.40.0",
90
- "@visulima/connect": "1.3.0",
91
90
  "cross-env": "^7.0.3",
92
91
  "eslint": "^8.25.0",
93
92
  "eslint-plugin-compat": "^4.0.2",
@@ -102,15 +101,15 @@
102
101
  "eslint-plugin-optimize-regex": "^1.2.1",
103
102
  "eslint-plugin-promise": "^6.0.1",
104
103
  "eslint-plugin-radar": "^0.2.1",
105
- "eslint-plugin-react": "7.31.10",
104
+ "eslint-plugin-react": "7.31.11",
106
105
  "eslint-plugin-react-hooks": "4.6.0",
107
106
  "eslint-plugin-simple-import-sort": "^8.0.0",
108
107
  "eslint-plugin-sort-keys-fix": "^1.1.2",
109
108
  "eslint-plugin-testing-library": "^5.7.2",
110
- "eslint-plugin-unicorn": "^44.0.2",
109
+ "eslint-plugin-unicorn": "^45.0.0",
111
110
  "eslint-plugin-you-dont-need-lodash-underscore": "^6.12.0",
112
111
  "eslint-plugin-you-dont-need-momentjs": "^1.6.0",
113
- "next": "^12.3.1",
112
+ "next": "^12.0.0 || ^13.0.0",
114
113
  "next-test-api-route-handler": "^4.0.0-canary.1",
115
114
  "node-mocks-http": "^1.11.0",
116
115
  "openapi-types": "^12.0.2",
@@ -120,15 +119,18 @@
120
119
  "semantic-release": "^19.0.5",
121
120
  "tsup": "^6.2.3",
122
121
  "typescript": "^4.8.4",
123
- "vitest": "^0.24.1"
122
+ "vitest": "^0.25.0"
124
123
  },
125
- "peerDependencies": {},
126
124
  "engines": {
127
125
  "node": ">=16"
128
126
  },
129
127
  "publishConfig": {
130
128
  "access": "public"
131
129
  },
130
+ "optionalDependenciest": {
131
+ "next": "^12.0.0 || ^13.0.0",
132
+ "@prisma/client": "^3.0.0 || ^4.0.0"
133
+ },
132
134
  "sources": [
133
135
  "src/index.ts",
134
136
  "src/next/index.ts"