@visulima/crud 3.0.0-alpha.16 → 3.0.0-alpha.18
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/CHANGELOG.md +38 -0
- package/README.md +127 -5
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +64 -3
- package/dist/index.d.mts +64 -3
- package/dist/index.d.ts +64 -3
- package/dist/index.mjs +1 -1
- package/dist/next/index.cjs +1 -1
- package/dist/next/index.d.cts +21 -13
- package/dist/next/index.d.mts +21 -13
- package/dist/next/index.d.ts +21 -13
- package/dist/next/index.mjs +1 -1
- package/dist/packem_shared/CrudApiError-BH1byAwV.mjs +1 -0
- package/dist/packem_shared/CrudApiError-DkRqkpib.cjs +1 -0
- package/dist/packem_shared/PrismaAdapter-Bhocjq94.mjs +1 -0
- package/dist/packem_shared/PrismaAdapter-DDoEjhQy.cjs +1 -0
- package/dist/packem_shared/baseHandler-BGTzX4YA.mjs +1 -0
- package/dist/packem_shared/baseHandler-DnuGeT2-.cjs +1 -0
- package/dist/packem_shared/edgeHandler-CjCFAdvT.mjs +1 -0
- package/dist/packem_shared/edgeHandler-DQ2KLGlC.cjs +1 -0
- package/dist/packem_shared/get-accessible-routes-BCUs20dV.cjs +1 -0
- package/dist/packem_shared/get-accessible-routes-CGvT_kuy.mjs +1 -0
- package/dist/packem_shared/models-to-route-names-BFpwjyxy.mjs +1 -0
- package/dist/packem_shared/models-to-route-names-CWnxPVCQ.cjs +1 -0
- package/dist/packem_shared/modelsToOpenApi-QqR_HHsz.cjs +1 -0
- package/dist/packem_shared/modelsToOpenApi-pOMrwJIY.mjs +1 -0
- package/dist/packem_shared/nodeHandler-atOpJB2d.mjs +1 -0
- package/dist/packem_shared/nodeHandler-tp623oY3.cjs +1 -0
- package/dist/packem_shared/types.d-CQwyFrf3.d.cts +207 -0
- package/dist/packem_shared/types.d-CQwyFrf3.d.mts +207 -0
- package/dist/packem_shared/types.d-CQwyFrf3.d.ts +207 -0
- package/package.json +4 -4
- package/dist/packem_shared/PrismaAdapter-D0WRtRlB.cjs +0 -1
- package/dist/packem_shared/PrismaAdapter-EuQr18sT.mjs +0 -1
- package/dist/packem_shared/base-crud-handler-B6xOUGDj.cjs +0 -1
- package/dist/packem_shared/base-crud-handler-DNKq7uog.mjs +0 -1
- package/dist/packem_shared/edgeHandler-CaIWVXt-.cjs +0 -1
- package/dist/packem_shared/edgeHandler-Deds33h_.mjs +0 -1
- package/dist/packem_shared/get-accessible-routes-DLLL11KB.cjs +0 -1
- package/dist/packem_shared/get-accessible-routes-xHYBQ_6q.mjs +0 -1
- package/dist/packem_shared/models-to-route-names-Dh2b_kIL.cjs +0 -1
- package/dist/packem_shared/models-to-route-names-UU1lZmbK.mjs +0 -1
- package/dist/packem_shared/modelsToOpenApi-CsQL5VTy.cjs +0 -1
- package/dist/packem_shared/modelsToOpenApi-ocNrUF5p.mjs +0 -1
- package/dist/packem_shared/nodeHandler-CeBCrxYT.mjs +0 -1
- package/dist/packem_shared/nodeHandler-D7AuOmUo.cjs +0 -1
- package/dist/packem_shared/types.d-C_XaTdLA.d.cts +0 -126
- package/dist/packem_shared/types.d-C_XaTdLA.d.mts +0 -126
- package/dist/packem_shared/types.d-C_XaTdLA.d.ts +0 -126
package/dist/next/index.d.cts
CHANGED
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
/// <reference types="react/experimental" preserve="true" />
|
|
4
4
|
/// <reference types="react-dom" preserve="true" />
|
|
5
5
|
/// <reference types="react-dom/experimental" preserve="true" />
|
|
6
|
-
import { a as ParsedQueryParameters, A as Adapter, H as HandlerOptions, E as ExecuteHandler } from "../packem_shared/types.d-
|
|
6
|
+
import { a as ParsedQueryParameters, A as Adapter, H as HandlerOptions, E as ExecuteHandler } from "../packem_shared/types.d-CQwyFrf3.cjs";
|
|
7
7
|
import { IncomingMessage, ServerResponse, Agent } from 'http';
|
|
8
8
|
import { Agent as Agent$1 } from 'https';
|
|
9
9
|
import { ParsedUrlQuery } from 'querystring';
|
|
10
10
|
import 'react';
|
|
11
11
|
import 'url';
|
|
12
12
|
import 'stream';
|
|
13
|
-
import 'react/jsx-runtime';
|
|
14
13
|
import 'node:http';
|
|
15
14
|
import 'fs';
|
|
16
15
|
import 'async_hooks';
|
|
@@ -18,11 +17,12 @@ import 'node:querystring';
|
|
|
18
17
|
import 'node:url';
|
|
19
18
|
import 'crypto';
|
|
20
19
|
import 'react/jsx-dev-runtime';
|
|
20
|
+
import 'react/jsx-runtime';
|
|
21
21
|
import 'react/compiler-runtime';
|
|
22
22
|
import { webpack } from 'next/dist/compiled/webpack/webpack';
|
|
23
23
|
import { Env } from '@next/env';
|
|
24
24
|
import 'node:stream';
|
|
25
|
-
declare const handler$1: <T, R extends Request, Context, Q extends ParsedQueryParameters = ParsedQueryParameters, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Context>>;
|
|
25
|
+
declare const handler$1: <T, R extends Request, Context, Q extends ParsedQueryParameters = ParsedQueryParameters, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Context, Response>>;
|
|
26
26
|
declare const COMPILER_NAMES: {
|
|
27
27
|
readonly client: "client";
|
|
28
28
|
readonly server: "server";
|
|
@@ -274,7 +274,7 @@ interface NodeJsPartialHmrUpdate extends BaseUpdate {
|
|
|
274
274
|
}>;
|
|
275
275
|
};
|
|
276
276
|
}
|
|
277
|
-
declare global {
|
|
277
|
+
declare global$6 {
|
|
278
278
|
interface Window {
|
|
279
279
|
__BUILD_MANIFEST?: Record<string, string[]>;
|
|
280
280
|
__BUILD_MANIFEST_CB?: Function;
|
|
@@ -290,7 +290,7 @@ declare global {
|
|
|
290
290
|
__INTERCEPTION_ROUTE_REWRITE_MANIFEST?: string;
|
|
291
291
|
}
|
|
292
292
|
}
|
|
293
|
-
declare global {
|
|
293
|
+
declare global$5 {
|
|
294
294
|
interface Window {
|
|
295
295
|
__DEV_MIDDLEWARE_MATCHERS?: ProxyMatcher[];
|
|
296
296
|
__DEV_PAGES_MANIFEST?: {
|
|
@@ -300,17 +300,17 @@ declare global {
|
|
|
300
300
|
__SSG_MANIFEST?: Set<string>;
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
-
declare global {
|
|
303
|
+
declare global$4 {
|
|
304
304
|
interface Window {
|
|
305
305
|
__NEXT_DATA__: NEXT_DATA;
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
|
-
declare global {
|
|
308
|
+
declare global$3 {
|
|
309
309
|
interface Window {
|
|
310
310
|
__NEXT_PRELOADREADY?: (ids?: (string | number)[]) => Promise<void>;
|
|
311
311
|
}
|
|
312
312
|
}
|
|
313
|
-
declare global {
|
|
313
|
+
declare global$2 {
|
|
314
314
|
var __next_log_error__: undefined | ((err: unknown) => void);
|
|
315
315
|
}
|
|
316
316
|
interface RequiredServerFilesManifest {
|
|
@@ -321,7 +321,7 @@ interface RequiredServerFilesManifest {
|
|
|
321
321
|
files: string[];
|
|
322
322
|
ignore: string[];
|
|
323
323
|
}
|
|
324
|
-
declare global {
|
|
324
|
+
declare global$1 {
|
|
325
325
|
var __next__clear_chunk_cache__: (() => void) | null | undefined;
|
|
326
326
|
var __turbopack_clear_chunk_cache__: () => void | null | undefined;
|
|
327
327
|
var __turbopack_server_hmr_apply__: ((update: NodeJsPartialHmrUpdate) => boolean) | undefined;
|
|
@@ -856,6 +856,14 @@ interface ExperimentalConfig {
|
|
|
856
856
|
* configuration is enabled by default.
|
|
857
857
|
*/
|
|
858
858
|
turbopackUseBuiltinSass?: boolean;
|
|
859
|
+
/**
|
|
860
|
+
* Enable per-directory PostCSS config resolution for Turbopack. When enabled,
|
|
861
|
+
* Turbopack searches for `postcss.config.js` starting from the CSS file's
|
|
862
|
+
* parent directory first, then falls back to the project root. When disabled
|
|
863
|
+
* (default), the project root is checked first, with the CSS file's directory
|
|
864
|
+
* as a fallback.
|
|
865
|
+
*/
|
|
866
|
+
turbopackLocalPostcssConfig?: boolean;
|
|
859
867
|
/**
|
|
860
868
|
* The module ID strategy to use for Turbopack.
|
|
861
869
|
* If not set, the default is `'named'` for development and `'deterministic'`
|
|
@@ -1727,7 +1735,10 @@ declare module 'react' {
|
|
|
1727
1735
|
fetchPriority?: 'high' | 'low' | 'auto' | undefined;
|
|
1728
1736
|
}
|
|
1729
1737
|
}
|
|
1730
|
-
|
|
1738
|
+
type FileSizeSuffix = `${'k' | 'K' | 'm' | 'M' | 'g' | 'G' | 't' | 'T' | 'p' | 'P'}${'b' | 'B'}`;
|
|
1739
|
+
type SizeLimit = number | `${number}${FileSizeSuffix}`;
|
|
1740
|
+
type PreviewData = string | false | object | undefined;
|
|
1741
|
+
declare global {
|
|
1731
1742
|
interface Crypto {
|
|
1732
1743
|
readonly subtle: SubtleCrypto;
|
|
1733
1744
|
getRandomValues<T extends Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | null>(array: T): T;
|
|
@@ -1740,8 +1751,5 @@ declare _0 {
|
|
|
1740
1751
|
var __NEXT_HTTP_AGENT: Agent;
|
|
1741
1752
|
var __NEXT_HTTPS_AGENT: Agent$1;
|
|
1742
1753
|
}
|
|
1743
|
-
type FileSizeSuffix = `${'k' | 'K' | 'm' | 'M' | 'g' | 'G' | 't' | 'T' | 'p' | 'P'}${'b' | 'B'}`;
|
|
1744
|
-
type SizeLimit = number | `${number}${FileSizeSuffix}`;
|
|
1745
|
-
type PreviewData = string | false | object | undefined;
|
|
1746
1754
|
declare const handler: <T, Q extends ParsedQueryParameters = ParsedQueryParameters, R extends NextApiRequest = NextApiRequest, Response extends NextApiResponse = NextApiResponse, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Response>>;
|
|
1747
1755
|
export { handler$1 as edgeHandler, handler as nodeHandler };
|
package/dist/next/index.d.mts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { a as ParsedQueryParameters, A as Adapter, H as HandlerOptions, E as ExecuteHandler } from "../packem_shared/types.d-
|
|
1
|
+
import { a as ParsedQueryParameters, A as Adapter, H as HandlerOptions, E as ExecuteHandler } from "../packem_shared/types.d-CQwyFrf3.mjs";
|
|
2
2
|
import { IncomingMessage, ServerResponse, Agent } from 'http';
|
|
3
3
|
import { Agent as Agent$1 } from 'https';
|
|
4
4
|
import { ParsedUrlQuery } from 'querystring';
|
|
5
5
|
import 'react';
|
|
6
6
|
import 'url';
|
|
7
7
|
import 'stream';
|
|
8
|
-
import 'react/jsx-runtime';
|
|
9
8
|
import 'node:http';
|
|
10
9
|
import 'fs';
|
|
11
10
|
import 'async_hooks';
|
|
@@ -13,11 +12,12 @@ import 'node:querystring';
|
|
|
13
12
|
import 'node:url';
|
|
14
13
|
import 'crypto';
|
|
15
14
|
import 'react/jsx-dev-runtime';
|
|
15
|
+
import 'react/jsx-runtime';
|
|
16
16
|
import 'react/compiler-runtime';
|
|
17
17
|
import { webpack } from 'next/dist/compiled/webpack/webpack';
|
|
18
18
|
import { Env } from '@next/env';
|
|
19
19
|
import 'node:stream';
|
|
20
|
-
declare const handler$1: <T, R extends Request, Context, Q extends ParsedQueryParameters = ParsedQueryParameters, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Context>>;
|
|
20
|
+
declare const handler$1: <T, R extends Request, Context, Q extends ParsedQueryParameters = ParsedQueryParameters, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Context, Response>>;
|
|
21
21
|
declare const COMPILER_NAMES: {
|
|
22
22
|
readonly client: "client";
|
|
23
23
|
readonly server: "server";
|
|
@@ -269,7 +269,7 @@ interface NodeJsPartialHmrUpdate extends BaseUpdate {
|
|
|
269
269
|
}>;
|
|
270
270
|
};
|
|
271
271
|
}
|
|
272
|
-
declare global {
|
|
272
|
+
declare global$6 {
|
|
273
273
|
interface Window {
|
|
274
274
|
__BUILD_MANIFEST?: Record<string, string[]>;
|
|
275
275
|
__BUILD_MANIFEST_CB?: Function;
|
|
@@ -285,7 +285,7 @@ declare global {
|
|
|
285
285
|
__INTERCEPTION_ROUTE_REWRITE_MANIFEST?: string;
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
-
declare global {
|
|
288
|
+
declare global$5 {
|
|
289
289
|
interface Window {
|
|
290
290
|
__DEV_MIDDLEWARE_MATCHERS?: ProxyMatcher[];
|
|
291
291
|
__DEV_PAGES_MANIFEST?: {
|
|
@@ -295,17 +295,17 @@ declare global {
|
|
|
295
295
|
__SSG_MANIFEST?: Set<string>;
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
|
-
declare global {
|
|
298
|
+
declare global$4 {
|
|
299
299
|
interface Window {
|
|
300
300
|
__NEXT_DATA__: NEXT_DATA;
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
-
declare global {
|
|
303
|
+
declare global$3 {
|
|
304
304
|
interface Window {
|
|
305
305
|
__NEXT_PRELOADREADY?: (ids?: (string | number)[]) => Promise<void>;
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
|
-
declare global {
|
|
308
|
+
declare global$2 {
|
|
309
309
|
var __next_log_error__: undefined | ((err: unknown) => void);
|
|
310
310
|
}
|
|
311
311
|
interface RequiredServerFilesManifest {
|
|
@@ -316,7 +316,7 @@ interface RequiredServerFilesManifest {
|
|
|
316
316
|
files: string[];
|
|
317
317
|
ignore: string[];
|
|
318
318
|
}
|
|
319
|
-
declare global {
|
|
319
|
+
declare global$1 {
|
|
320
320
|
var __next__clear_chunk_cache__: (() => void) | null | undefined;
|
|
321
321
|
var __turbopack_clear_chunk_cache__: () => void | null | undefined;
|
|
322
322
|
var __turbopack_server_hmr_apply__: ((update: NodeJsPartialHmrUpdate) => boolean) | undefined;
|
|
@@ -851,6 +851,14 @@ interface ExperimentalConfig {
|
|
|
851
851
|
* configuration is enabled by default.
|
|
852
852
|
*/
|
|
853
853
|
turbopackUseBuiltinSass?: boolean;
|
|
854
|
+
/**
|
|
855
|
+
* Enable per-directory PostCSS config resolution for Turbopack. When enabled,
|
|
856
|
+
* Turbopack searches for `postcss.config.js` starting from the CSS file's
|
|
857
|
+
* parent directory first, then falls back to the project root. When disabled
|
|
858
|
+
* (default), the project root is checked first, with the CSS file's directory
|
|
859
|
+
* as a fallback.
|
|
860
|
+
*/
|
|
861
|
+
turbopackLocalPostcssConfig?: boolean;
|
|
854
862
|
/**
|
|
855
863
|
* The module ID strategy to use for Turbopack.
|
|
856
864
|
* If not set, the default is `'named'` for development and `'deterministic'`
|
|
@@ -1722,7 +1730,10 @@ declare module 'react' {
|
|
|
1722
1730
|
fetchPriority?: 'high' | 'low' | 'auto' | undefined;
|
|
1723
1731
|
}
|
|
1724
1732
|
}
|
|
1725
|
-
|
|
1733
|
+
type FileSizeSuffix = `${'k' | 'K' | 'm' | 'M' | 'g' | 'G' | 't' | 'T' | 'p' | 'P'}${'b' | 'B'}`;
|
|
1734
|
+
type SizeLimit = number | `${number}${FileSizeSuffix}`;
|
|
1735
|
+
type PreviewData = string | false | object | undefined;
|
|
1736
|
+
declare global {
|
|
1726
1737
|
interface Crypto {
|
|
1727
1738
|
readonly subtle: SubtleCrypto;
|
|
1728
1739
|
getRandomValues<T extends Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | null>(array: T): T;
|
|
@@ -1735,8 +1746,5 @@ declare _0 {
|
|
|
1735
1746
|
var __NEXT_HTTP_AGENT: Agent;
|
|
1736
1747
|
var __NEXT_HTTPS_AGENT: Agent$1;
|
|
1737
1748
|
}
|
|
1738
|
-
type FileSizeSuffix = `${'k' | 'K' | 'm' | 'M' | 'g' | 'G' | 't' | 'T' | 'p' | 'P'}${'b' | 'B'}`;
|
|
1739
|
-
type SizeLimit = number | `${number}${FileSizeSuffix}`;
|
|
1740
|
-
type PreviewData = string | false | object | undefined;
|
|
1741
1749
|
declare const handler: <T, Q extends ParsedQueryParameters = ParsedQueryParameters, R extends NextApiRequest = NextApiRequest, Response extends NextApiResponse = NextApiResponse, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Response>>;
|
|
1742
1750
|
export { handler$1 as edgeHandler, handler as nodeHandler };
|
package/dist/next/index.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { a as ParsedQueryParameters, A as Adapter, H as HandlerOptions, E as ExecuteHandler } from "../packem_shared/types.d-
|
|
1
|
+
import { a as ParsedQueryParameters, A as Adapter, H as HandlerOptions, E as ExecuteHandler } from "../packem_shared/types.d-CQwyFrf3.js";
|
|
2
2
|
import { IncomingMessage, ServerResponse, Agent } from 'http';
|
|
3
3
|
import { Agent as Agent$1 } from 'https';
|
|
4
4
|
import { ParsedUrlQuery } from 'querystring';
|
|
5
5
|
import 'react';
|
|
6
6
|
import 'url';
|
|
7
7
|
import 'stream';
|
|
8
|
-
import 'react/jsx-runtime';
|
|
9
8
|
import 'node:http';
|
|
10
9
|
import 'fs';
|
|
11
10
|
import 'async_hooks';
|
|
@@ -13,11 +12,12 @@ import 'node:querystring';
|
|
|
13
12
|
import 'node:url';
|
|
14
13
|
import 'crypto';
|
|
15
14
|
import 'react/jsx-dev-runtime';
|
|
15
|
+
import 'react/jsx-runtime';
|
|
16
16
|
import 'react/compiler-runtime';
|
|
17
17
|
import { webpack } from 'next/dist/compiled/webpack/webpack';
|
|
18
18
|
import { Env } from '@next/env';
|
|
19
19
|
import 'node:stream';
|
|
20
|
-
declare const handler$1: <T, R extends Request, Context, Q extends ParsedQueryParameters = ParsedQueryParameters, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Context>>;
|
|
20
|
+
declare const handler$1: <T, R extends Request, Context, Q extends ParsedQueryParameters = ParsedQueryParameters, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Context, Response>>;
|
|
21
21
|
declare const COMPILER_NAMES: {
|
|
22
22
|
readonly client: "client";
|
|
23
23
|
readonly server: "server";
|
|
@@ -269,7 +269,7 @@ interface NodeJsPartialHmrUpdate extends BaseUpdate {
|
|
|
269
269
|
}>;
|
|
270
270
|
};
|
|
271
271
|
}
|
|
272
|
-
declare global {
|
|
272
|
+
declare global$6 {
|
|
273
273
|
interface Window {
|
|
274
274
|
__BUILD_MANIFEST?: Record<string, string[]>;
|
|
275
275
|
__BUILD_MANIFEST_CB?: Function;
|
|
@@ -285,7 +285,7 @@ declare global {
|
|
|
285
285
|
__INTERCEPTION_ROUTE_REWRITE_MANIFEST?: string;
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
-
declare global {
|
|
288
|
+
declare global$5 {
|
|
289
289
|
interface Window {
|
|
290
290
|
__DEV_MIDDLEWARE_MATCHERS?: ProxyMatcher[];
|
|
291
291
|
__DEV_PAGES_MANIFEST?: {
|
|
@@ -295,17 +295,17 @@ declare global {
|
|
|
295
295
|
__SSG_MANIFEST?: Set<string>;
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
|
-
declare global {
|
|
298
|
+
declare global$4 {
|
|
299
299
|
interface Window {
|
|
300
300
|
__NEXT_DATA__: NEXT_DATA;
|
|
301
301
|
}
|
|
302
302
|
}
|
|
303
|
-
declare global {
|
|
303
|
+
declare global$3 {
|
|
304
304
|
interface Window {
|
|
305
305
|
__NEXT_PRELOADREADY?: (ids?: (string | number)[]) => Promise<void>;
|
|
306
306
|
}
|
|
307
307
|
}
|
|
308
|
-
declare global {
|
|
308
|
+
declare global$2 {
|
|
309
309
|
var __next_log_error__: undefined | ((err: unknown) => void);
|
|
310
310
|
}
|
|
311
311
|
interface RequiredServerFilesManifest {
|
|
@@ -316,7 +316,7 @@ interface RequiredServerFilesManifest {
|
|
|
316
316
|
files: string[];
|
|
317
317
|
ignore: string[];
|
|
318
318
|
}
|
|
319
|
-
declare global {
|
|
319
|
+
declare global$1 {
|
|
320
320
|
var __next__clear_chunk_cache__: (() => void) | null | undefined;
|
|
321
321
|
var __turbopack_clear_chunk_cache__: () => void | null | undefined;
|
|
322
322
|
var __turbopack_server_hmr_apply__: ((update: NodeJsPartialHmrUpdate) => boolean) | undefined;
|
|
@@ -851,6 +851,14 @@ interface ExperimentalConfig {
|
|
|
851
851
|
* configuration is enabled by default.
|
|
852
852
|
*/
|
|
853
853
|
turbopackUseBuiltinSass?: boolean;
|
|
854
|
+
/**
|
|
855
|
+
* Enable per-directory PostCSS config resolution for Turbopack. When enabled,
|
|
856
|
+
* Turbopack searches for `postcss.config.js` starting from the CSS file's
|
|
857
|
+
* parent directory first, then falls back to the project root. When disabled
|
|
858
|
+
* (default), the project root is checked first, with the CSS file's directory
|
|
859
|
+
* as a fallback.
|
|
860
|
+
*/
|
|
861
|
+
turbopackLocalPostcssConfig?: boolean;
|
|
854
862
|
/**
|
|
855
863
|
* The module ID strategy to use for Turbopack.
|
|
856
864
|
* If not set, the default is `'named'` for development and `'deterministic'`
|
|
@@ -1722,7 +1730,10 @@ declare module 'react' {
|
|
|
1722
1730
|
fetchPriority?: 'high' | 'low' | 'auto' | undefined;
|
|
1723
1731
|
}
|
|
1724
1732
|
}
|
|
1725
|
-
|
|
1733
|
+
type FileSizeSuffix = `${'k' | 'K' | 'm' | 'M' | 'g' | 'G' | 't' | 'T' | 'p' | 'P'}${'b' | 'B'}`;
|
|
1734
|
+
type SizeLimit = number | `${number}${FileSizeSuffix}`;
|
|
1735
|
+
type PreviewData = string | false | object | undefined;
|
|
1736
|
+
declare global {
|
|
1726
1737
|
interface Crypto {
|
|
1727
1738
|
readonly subtle: SubtleCrypto;
|
|
1728
1739
|
getRandomValues<T extends Int8Array | Int16Array | Int32Array | Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Float32Array | Float64Array | DataView | null>(array: T): T;
|
|
@@ -1735,8 +1746,5 @@ declare _0 {
|
|
|
1735
1746
|
var __NEXT_HTTP_AGENT: Agent;
|
|
1736
1747
|
var __NEXT_HTTPS_AGENT: Agent$1;
|
|
1737
1748
|
}
|
|
1738
|
-
type FileSizeSuffix = `${'k' | 'K' | 'm' | 'M' | 'g' | 'G' | 't' | 'T' | 'p' | 'P'}${'b' | 'B'}`;
|
|
1739
|
-
type SizeLimit = number | `${number}${FileSizeSuffix}`;
|
|
1740
|
-
type PreviewData = string | false | object | undefined;
|
|
1741
1749
|
declare const handler: <T, Q extends ParsedQueryParameters = ParsedQueryParameters, R extends NextApiRequest = NextApiRequest, Response extends NextApiResponse = NextApiResponse, M extends string = string>(adapter: Adapter<T, Q>, options?: HandlerOptions<M>) => Promise<ExecuteHandler<R, Response>>;
|
|
1742
1750
|
export { handler$1 as edgeHandler, handler as nodeHandler };
|
package/dist/next/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{default as d}from"../packem_shared/edgeHandler-
|
|
1
|
+
import{default as d}from"../packem_shared/edgeHandler-CjCFAdvT.mjs";import{default as o}from"../packem_shared/nodeHandler-atOpJB2d.mjs";export{d as edgeHandler,o as nodeHandler};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
class t extends Error{statusCode;constructor(s,r){super(r),this.name="CrudApiError",this.statusCode=s,Object.setPrototypeOf(this,t.prototype)}}export{t as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";class t extends Error{statusCode;constructor(s,r){super(r),this.name="CrudApiError",this.statusCode=s,Object.setPrototypeOf(this,t.prototype)}}module.exports=t;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import u from"http-errors";import{n as $}from"./models-to-route-names-BFpwjyxy.mjs";const b=new Set(["boolean","number","string"]),d=r=>b.has(typeof r),C=r=>{const t={};if(Object.keys(r).forEach(e=>{const s=r[e];d(s)&&(t[e]=s)}),Object.keys(t).length!==1)throw new Error("cursor needs to be an object with exactly 1 property with a primitive value");return t},D={$asc:"asc",$desc:"desc"},O=r=>{const t={};return Object.keys(r).forEach(e=>{const s=r[e];t[e]=D[s]}),t},m=(r,t)=>{const e={};return Object.keys(r).forEach(s=>{e[s]=r[s]===!0?!0:{[t]:m(r[s],t)}}),e},o=r=>r instanceof Object,P={$cont:"contains",$ends:"endsWith",$eq:"equals",$gt:"gt",$gte:"gte",$in:"in",$lt:"lt",$lte:"lte",$neq:"not",$notin:"notIn",$starts:"startsWith"},E=r=>/^\d{4}-[01]\d-[0-3]\d(?:T[0-2](?:\d:[0-5]){2}\d(?:\.\d+)?(?:Z|[+-][0-2]\d(?::?[0-5]\d)?)?)?$/g.test(r),M=(r,t)=>t&&typeof r=="string"&&E(r)?new Date(r):typeof r=="string"&&r==="$isnull"?null:r,p=(r,t)=>{const e=r.split(".");return e.splice(-1,1),t.includes(e.join("."))},y=r=>{const t=Object.keys(r)[0],e=P[t];if(e)return{[e]:r[t]}},f=(r,t,e,s,i)=>{const n=t.split(".").toReversed();let a={};n.forEach((h,k)=>{k===0?g(r,h,a,s,i):a={[h]:{some:a}}});const c=n.toReversed()[0],w=e[c];e[c]={some:{...w?.some,...a[c]?.some}}},l=(r,t,e)=>{const s={};return Object.keys(r).forEach(i=>{const n=r[i];if(p(i,t))f(n,i,s,t,e);else if(d(n))s[i]=n;else if(o(n)){const a=y(n);a&&(s[i]=a)}}),s},g=(r,t,e,s,i)=>{if(d(r))e[t]=M(r,i);else switch(t){case"$and":{o(r)&&(e.AND=l(r,s,i));break}case"$not":{o(r)&&(e.NOT=l(r,s,i));break}case"$or":{o(r)&&(e.OR=l(r,s,i));break}default:{e[t]=y(r);break}}},j=(r,t,e=!0)=>{const s={};return Object.keys(r).forEach(i=>{const n=r[i];p(i,t)?f(n,i,s,t,e):g(n,i,s,t,e)}),s};class K{models;ctorModels;dmmf;manyRelations;primaryKey;prismaClient;coerceWhereDates;ctorDmmf;constructor({coerceWhereDates:t=!0,dmmf:e,manyRelations:s={},models:i,primaryKey:n="id",prismaClient:a}){this.prismaClient=a,this.primaryKey=n,this.manyRelations=s,this.ctorModels=i,this.coerceWhereDates=t,this.ctorDmmf=e}async connect(){await this.prismaClient.$connect()}async create(t,e,s){return await this.getPrismaDelegate(t).create({data:e,include:s.include,select:s.select})}async delete(t,e,s){return await this.getPrismaDelegate(t).delete({include:s.include,select:s.select,where:{[this.primaryKey]:e}})}async disconnect(){await this.prismaClient.$disconnect()}async getAll(t,e){return await this.getPrismaDelegate(t).findMany({cursor:e.cursor,distinct:e.distinct,include:e.include,orderBy:e.orderBy,select:e.select,skip:e.skip,take:e.take,where:e.where})}getModels(){return this.models??[]}async getOne(t,e,s){const i=this.getPrismaDelegate(t);return await(i.findUnique??i.findOne)({include:s.include,select:s.select,where:{[this.primaryKey]:e}})}async getPaginationData(t,e){const s=await this.getPrismaDelegate(t).count({distinct:e.distinct,where:e.where}),i=e.take??0;return{page:i>0?Math.ceil((e.skip??0)/i)+1:1,pageCount:i>0?Math.ceil(s/i):0,total:s}}handleError(t){throw console.error(t),t instanceof Error&&t.stack&&console.error(t.stack),t.constructor.name==="PrismaClientKnownRequestError"||t.constructor.name==="PrismaClientValidationError"?u(400,"invalid request, check your server logs for more info"):u(500,"an unknown error occured, check your server logs for more info")}async init(){const t=this.ctorModels,e=await this.getPrismaClientModels();t!==void 0&&t.forEach(s=>{if(!Object.keys(e).includes(s))throw new Error(`Model name ${s} is invalid.`)}),this.models=t??Object.keys(e)}async mapModelsToRouteNames(){return $(await this.getPrismaClientModels(),this.getModels())}parseQuery(t,e){const s={};return e.select&&(s.select=m(e.select,"select")),e.include&&(s.include=m(e.include,"include")),e.where&&(s.where=j(e.where,this.manyRelations[t]??[],this.coerceWhereDates)),e.orderBy&&(s.orderBy=O(e.orderBy)),e.limit!==void 0&&(s.take=e.limit),e.skip!==void 0&&(s.skip=e.skip),e.originalQuery?.cursor&&(s.cursor=C(JSON.parse(e.originalQuery.cursor))),e.distinct&&(s.distinct=e.distinct),s}async update(t,e,s,i){return await this.getPrismaDelegate(t).update({data:s,include:i.include,select:i.select,where:{[this.primaryKey]:e}})}get client(){return this.prismaClient}getPrismaClientModels=async()=>{const t=this.ctorDmmf?.datamodel?.models;if(t!==void 0)return Object.fromEntries(t.map(s=>[s.name,{}]));const e=this.prismaClient._runtimeDataModel?.models;if(e!==void 0)return Object.fromEntries(Object.keys(e).map(s=>[s,{}]));if(this.prismaClient._dmmf!==void 0)return this.dmmf=this.prismaClient._dmmf,this.dmmf.mappingsMap;if(this.prismaClient._getDmmf!==void 0)return this.dmmf=await this.prismaClient._getDmmf(),this.dmmf.mappingsMap;throw new Error("Couldn't get prisma client models. For Prisma 5/6 pass `dmmf: Prisma.dmmf` to the PrismaAdapter constructor.")};getPrismaDelegate(t){return this.prismaClient[`${t.charAt(0).toLowerCase()}${t.slice(1)}`]}}export{K as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const $=require("http-errors"),b=require("./models-to-route-names-CWnxPVCQ.cjs"),C=r=>r&&typeof r=="object"&&"default"in r?r.default:r,h=C($),D=new Set(["boolean","number","string"]),m=r=>D.has(typeof r),O=r=>{const t={};if(Object.keys(r).forEach(e=>{const s=r[e];m(s)&&(t[e]=s)}),Object.keys(t).length!==1)throw new Error("cursor needs to be an object with exactly 1 property with a primitive value");return t},P={$asc:"asc",$desc:"desc"},j=r=>{const t={};return Object.keys(r).forEach(e=>{const s=r[e];t[e]=P[s]}),t},d=(r,t)=>{const e={};return Object.keys(r).forEach(s=>{e[s]=r[s]===!0?!0:{[t]:d(r[s],t)}}),e},o=r=>r instanceof Object,E={$cont:"contains",$ends:"endsWith",$eq:"equals",$gt:"gt",$gte:"gte",$in:"in",$lt:"lt",$lte:"lte",$neq:"not",$notin:"notIn",$starts:"startsWith"},M=r=>/^\d{4}-[01]\d-[0-3]\d(?:T[0-2](?:\d:[0-5]){2}\d(?:\.\d+)?(?:Z|[+-][0-2]\d(?::?[0-5]\d)?)?)?$/g.test(r),v=(r,t)=>t&&typeof r=="string"&&M(r)?new Date(r):typeof r=="string"&&r==="$isnull"?null:r,p=(r,t)=>{const e=r.split(".");return e.splice(-1,1),t.includes(e.join("."))},y=r=>{const t=Object.keys(r)[0],e=E[t];if(e)return{[e]:r[t]}},f=(r,t,e,s,i)=>{const n=t.split(".").toReversed();let a={};n.forEach((u,k)=>{k===0?g(r,u,a,s,i):a={[u]:{some:a}}});const c=n.toReversed()[0],w=e[c];e[c]={some:{...w?.some,...a[c]?.some}}},l=(r,t,e)=>{const s={};return Object.keys(r).forEach(i=>{const n=r[i];if(p(i,t))f(n,i,s,t,e);else if(m(n))s[i]=n;else if(o(n)){const a=y(n);a&&(s[i]=a)}}),s},g=(r,t,e,s,i)=>{if(m(r))e[t]=v(r,i);else switch(t){case"$and":{o(r)&&(e.AND=l(r,s,i));break}case"$not":{o(r)&&(e.NOT=l(r,s,i));break}case"$or":{o(r)&&(e.OR=l(r,s,i));break}default:{e[t]=y(r);break}}},R=(r,t,e=!0)=>{const s={};return Object.keys(r).forEach(i=>{const n=r[i];p(i,t)?f(n,i,s,t,e):g(n,i,s,t,e)}),s};class q{models;ctorModels;dmmf;manyRelations;primaryKey;prismaClient;coerceWhereDates;ctorDmmf;constructor({coerceWhereDates:t=!0,dmmf:e,manyRelations:s={},models:i,primaryKey:n="id",prismaClient:a}){this.prismaClient=a,this.primaryKey=n,this.manyRelations=s,this.ctorModels=i,this.coerceWhereDates=t,this.ctorDmmf=e}async connect(){await this.prismaClient.$connect()}async create(t,e,s){return await this.getPrismaDelegate(t).create({data:e,include:s.include,select:s.select})}async delete(t,e,s){return await this.getPrismaDelegate(t).delete({include:s.include,select:s.select,where:{[this.primaryKey]:e}})}async disconnect(){await this.prismaClient.$disconnect()}async getAll(t,e){return await this.getPrismaDelegate(t).findMany({cursor:e.cursor,distinct:e.distinct,include:e.include,orderBy:e.orderBy,select:e.select,skip:e.skip,take:e.take,where:e.where})}getModels(){return this.models??[]}async getOne(t,e,s){const i=this.getPrismaDelegate(t);return await(i.findUnique??i.findOne)({include:s.include,select:s.select,where:{[this.primaryKey]:e}})}async getPaginationData(t,e){const s=await this.getPrismaDelegate(t).count({distinct:e.distinct,where:e.where}),i=e.take??0;return{page:i>0?Math.ceil((e.skip??0)/i)+1:1,pageCount:i>0?Math.ceil(s/i):0,total:s}}handleError(t){throw console.error(t),t instanceof Error&&t.stack&&console.error(t.stack),t.constructor.name==="PrismaClientKnownRequestError"||t.constructor.name==="PrismaClientValidationError"?h(400,"invalid request, check your server logs for more info"):h(500,"an unknown error occured, check your server logs for more info")}async init(){const t=this.ctorModels,e=await this.getPrismaClientModels();t!==void 0&&t.forEach(s=>{if(!Object.keys(e).includes(s))throw new Error(`Model name ${s} is invalid.`)}),this.models=t??Object.keys(e)}async mapModelsToRouteNames(){return b.n(await this.getPrismaClientModels(),this.getModels())}parseQuery(t,e){const s={};return e.select&&(s.select=d(e.select,"select")),e.include&&(s.include=d(e.include,"include")),e.where&&(s.where=R(e.where,this.manyRelations[t]??[],this.coerceWhereDates)),e.orderBy&&(s.orderBy=j(e.orderBy)),e.limit!==void 0&&(s.take=e.limit),e.skip!==void 0&&(s.skip=e.skip),e.originalQuery?.cursor&&(s.cursor=O(JSON.parse(e.originalQuery.cursor))),e.distinct&&(s.distinct=e.distinct),s}async update(t,e,s,i){return await this.getPrismaDelegate(t).update({data:s,include:i.include,select:i.select,where:{[this.primaryKey]:e}})}get client(){return this.prismaClient}getPrismaClientModels=async()=>{const t=this.ctorDmmf?.datamodel?.models;if(t!==void 0)return Object.fromEntries(t.map(s=>[s.name,{}]));const e=this.prismaClient._runtimeDataModel?.models;if(e!==void 0)return Object.fromEntries(Object.keys(e).map(s=>[s,{}]));if(this.prismaClient._dmmf!==void 0)return this.dmmf=this.prismaClient._dmmf,this.dmmf.mappingsMap;if(this.prismaClient._getDmmf!==void 0)return this.dmmf=await this.prismaClient._getDmmf(),this.dmmf.mappingsMap;throw new Error("Couldn't get prisma client models. For Prisma 5/6 pass `dmmf: Prisma.dmmf` to the PrismaAdapter constructor.")};getPrismaDelegate(t){return this.prismaClient[`${t.charAt(0).toLowerCase()}${t.slice(1)}`]}}module.exports=q;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createRequire as q}from"node:module";import c from"http-errors";import T from"./CrudApiError-BH1byAwV.mjs";import{paginate as D}from"@visulima/pagination";import{RouteType as u}from"./RouteType-BQ2RxFPE.mjs";import{s as L}from"./get-accessible-routes-CGvT_kuy.mjs";import{match as I}from"path-to-regexp";const F=q(import.meta.url),m=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,C=t=>{if(typeof m<"u"&&m.versions&&m.versions.node){const[e,n]=m.versions.node.split(".").map(Number);if(e>22||e===22&&n>=3||e===20&&n>=16)return m.getBuiltinModule(t)}return F(t)},{URL:M}=C("node:url"),B=async({adapter:t,query:e,request:n,resourceName:r})=>({data:await t.create(r,n.body,e),status:201}),U=async({adapter:t,query:e,resourceId:n,resourceName:r})=>{if(await t.getOne(r,n,e))return{data:await t.delete(r,n,e),status:200};throw c(404,`${r} ${String(n)} not found`)},Q=async({adapter:t,pagination:e,query:n,resourceName:r})=>{let o=!1,i;if(n.page!==void 0){if(n.page<=0)throw new Error("page query must be a strictly positive number");i={page:n.page,perPage:n.limit??e.perPage}}i&&(o=!0,n.skip=(i.page-1)*i.perPage,n.take=i.perPage);const a=await t.getAll(r,n);if(o){const{page:s,total:d}=await t.getPaginationData(r,n);return{data:D(s,i.perPage,d,a).toJSON(),status:200}}return{data:a,status:200}},J=async({adapter:t,query:e,resourceId:n,resourceName:r})=>{const o=await t.getOne(r,n,e);if(!o)throw c(404,`${r} ${String(n)} not found`);return{data:o,status:200}},G=async({adapter:t,query:e,request:n,resourceId:r,resourceName:o})=>{if(await t.getOne(o,r,e))return{data:await t.update(o,r,n.body,e),status:200};throw c(404,`${o} ${String(r)} not found`)},x=t=>{const e=typeof t;return t!==null&&(e==="object"||e==="function")},O=new Set(["__proto__","prototype","constructor"]),_=1e6,X=t=>t>="0"&&t<="9";function P(t){if(t==="0")return!0;if(/^[1-9]\d*$/.test(t)){const e=Number.parseInt(t,10);return e<=Number.MAX_SAFE_INTEGER&&e<=_}return!1}function w(t,e){return O.has(t)?!1:(t&&P(t)?e.push(Number.parseInt(t,10)):e.push(t),!0)}function H(t){if(typeof t!="string")throw new TypeError(`Expected a string, got ${typeof t}`);const e=[];let n="",r="start",o=!1,i=0;for(const a of t){if(i++,o){n+=a,o=!1;continue}if(a==="\\"){if(r==="index")throw new Error(`Invalid character '${a}' in an index at position ${i}`);if(r==="indexEnd")throw new Error(`Invalid character '${a}' after an index at position ${i}`);o=!0,r=r==="start"?"property":r;continue}switch(a){case".":{if(r==="index")throw new Error(`Invalid character '${a}' in an index at position ${i}`);if(r==="indexEnd"){r="property";break}if(!w(n,e))return[];n="",r="property";break}case"[":{if(r==="index")throw new Error(`Invalid character '${a}' in an index at position ${i}`);if(r==="indexEnd"){r="index";break}if(r==="property"||r==="start"){if((n||r==="property")&&!w(n,e))return[];n=""}r="index";break}case"]":{if(r==="index"){if(n==="")n=(e.pop()||"")+"[]",r="property";else{const s=Number.parseInt(n,10);!Number.isNaN(s)&&Number.isFinite(s)&&s>=0&&s<=Number.MAX_SAFE_INTEGER&&s<=_&&n===String(s)?e.push(s):e.push(n),n="",r="indexEnd"}break}if(r==="indexEnd")throw new Error(`Invalid character '${a}' after an index at position ${i}`);n+=a;break}default:{if(r==="index"&&!X(a))throw new Error(`Invalid character '${a}' in an index at position ${i}`);if(r==="indexEnd")throw new Error(`Invalid character '${a}' after an index at position ${i}`);r==="start"&&(r="property"),n+=a}}}switch(o&&(n+="\\"),r){case"property":{if(!w(n,e))return[];break}case"index":throw new Error("Index was not closed");case"start":{e.push("");break}}return e}function z(t){if(typeof t=="string")return H(t);if(Array.isArray(t)){const e=[];for(const[n,r]of t.entries()){if(typeof r!="string"&&typeof r!="number")throw new TypeError(`Expected a string or number for path segment at index ${n}, got ${typeof r}`);if(typeof r=="number"&&!Number.isFinite(r))throw new TypeError(`Path segment at index ${n} must be a finite number, got ${r}`);if(O.has(r))return[];typeof r=="string"&&P(r)?e.push(Number.parseInt(r,10)):e.push(r)}return e}return[]}function S(t,e,n){if(!x(t)||typeof e!="string"&&!Array.isArray(e))return t;const r=t,o=z(e);if(o.length===0)return t;for(let i=0;i<o.length;i++){const a=o[i];if(i===o.length-1)t[a]=n;else if(!x(t[a])){const s=typeof o[i+1]=="number";t[a]=s?[]:{}}t=t[a]}return r}const v=t=>{const e={};return t.split(",").forEach(n=>{S(e,n,!0)}),e},K=t=>{let e;try{e=JSON.parse(t)}catch{throw c(400,'Invalid JSON in "where" query parameter')}const n={};return Object.keys(e).forEach(r=>{S(n,r,e[r])}),n},V=t=>{let e;try{e=JSON.parse(t)}catch{throw c(400,'Invalid JSON in "orderBy" query parameter')}const n=Object.keys(e),r=n[0];if(n.length!==1||r===void 0||e[r]!=="$asc"&&e[r]!=="$desc")throw c(400,"orderBy needs to be an object with exactly 1 property with either $asc or $desc value");return{[r]:e[r]}},W=t=>{if(t){const{searchParams:e}=new M(t),n={};return e.get("select")&&(n.select=v(e.get("select"))),e.get("include")&&(n.include=v(e.get("include"))),e.get("where")&&(n.where=K(e.get("where"))),e.get("orderBy")&&(n.orderBy=V(e.get("orderBy"))),e.has("limit")&&(n.limit=Number.isFinite(+e.get("limit"))?+e.get("limit"):void 0),e.has("skip")&&(n.skip=Number.isFinite(+e.get("skip"))?+e.get("skip"):void 0),e.get("distinct")&&(n.distinct=e.get("distinct")),e.get("page")&&(n.page=Number.isFinite(+e.get("page"))?+e.get("page"):void 0),{originalQuery:Object.fromEntries(e.entries()),...n}}return{}},Y=(t,e)=>{const n=new Set(e),r={};return Object.keys(t).forEach(o=>{n.has(o)&&(r[o]=t[o])}),r},b=t=>{const e=[];return Object.keys(t).forEach(n=>{if(n==="$and"||n==="$or"||n==="$not"){const r=t[n];Array.isArray(r)?r.forEach(o=>e.push(...b(o))):r&&typeof r=="object"&&e.push(...b(r));return}e.push(n.split(".")[0])}),e},Z=(t,e)=>{if(!e)return t;if(t.select&&(e.selectableFields&&(t.select=Y(t.select,e.selectableFields)),e.readableFields&&e.readableFields.length>0)){const n=new Set(e.readableFields);t.select=Object.fromEntries(Object.entries(t.select).filter(([r])=>!n.has(r)))}if(t.include&&e.includableRelations){const n=new Set(e.includableRelations);Object.keys(t.include).forEach(r=>{if(!n.has(r))throw c(400,`Relation "${r}" is not includable`)})}if(e.filterableFields){const n=new Set(e.filterableFields);t.where&&b(t.where).forEach(r=>{if(!n.has(r))throw c(400,`Field "${r}" is not filterable`)}),t.orderBy&&Object.keys(t.orderBy).forEach(r=>{if(!n.has(r))throw c(400,`Field "${r}" is not sortable`)})}return t},R=(t,e)=>{if(!e?.writableFields)return t;const n=new Set(e.writableFields);return Object.fromEntries(Object.entries(t).filter(([r])=>n.has(r)))},ee=t=>Number.isSafeInteger(+t)?+t:t,te=t=>`${t.charAt(0).toLowerCase()}${t.slice(1)}`,re=(t,e)=>{const n=t.split("?")[0];if(n===void 0)throw new TypeError("Path is undefined");const r=new Set(n.split("/").filter(Boolean)),o=Object.keys(e).find(i=>{const a=e[i];return a===""?!0:r.has(a)||r.has(te(a))});if(o===void 0)throw new Error(`Couldn't find model name for url ${t}`);return{modelName:o,resourceName:e[o]}},A=new Map,ne=t=>{let e=A.get(t);return e===void 0&&(e={entityMatcher:I(`/*placeholder/${t}{/:id}`,{decode:decodeURIComponent}),simpleMatcher:I(`/*placeholder/${t}`,{decode:decodeURIComponent})},A.set(t,e)),e},oe=(t,e,n)=>{const r=e.split("?")[0];if(r===void 0)throw new TypeError("Path is undefined");if(!r.includes(`/${n}`))throw new Error(`invalid resource name '${n}' for route '${r}'`);const{entityMatcher:o,simpleMatcher:i}=ne(n);switch(t){case"DELETE":{const a=o(r);return typeof a=="object"&&a.params.id?{resourceId:a.params.id,routeType:u.DELETE}:{routeType:null}}case"GET":{const a=o(r);return typeof a=="object"&&a.params.id?{resourceId:a.params.id,routeType:u.READ_ONE}:{routeType:u.READ_ALL}}case"PATCH":case"PUT":{const a=o(r);return typeof a=="object"&&a.params.id?{resourceId:a.params.id,routeType:u.UPDATE}:{routeType:null}}case"POST":return i(r)?{routeType:u.CREATE}:{routeType:null};default:return{routeType:null}}},ae=["create","delete","getAll","getOne","parseQuery","update","getPaginationData","getModels"],se=t=>{ae.forEach(e=>{if(!t[e])throw c(500,`Adapter must implement the "${e}" method.`)})},ie=/\/$/u,j=async(t,e)=>t?await t.parse(e):e,ce=t=>{const{headers:e}=t;return e&&typeof e.get=="function"?e.get("host")??"":e?.host??""},ue=async(t,e)=>{throw c(404,`Resource not found: ${e}`)},de=async({config:t,modelConfig:e,parameters:n,parsedQuery:r,request:o,resourceIdFormatted:i,routeType:a})=>{switch(a){case u.CREATE:{const s=await j(e?.createSchema,R(o.body??{},e));return(t.handlers?.create??B)({...n,request:Object.assign(o,{body:s})})}case u.DELETE:return(t.handlers?.delete??U)({...n,resourceId:i});case u.READ_ALL:return(t.handlers?.list??Q)({...n,pagination:t.pagination,query:{...n.query,limit:r.limit??void 0,page:r.page??void 0}});case u.READ_ONE:return(t.handlers?.get??J)({...n,resourceId:i});case u.UPDATE:{const s=await j(e?.updateSchema,R(o.body??{},e));return(t.handlers?.update??G)({...n,request:Object.assign(o,{body:s}),resourceId:i})}default:return{data:"Method not found",status:404}}};async function we(t,e,n,r){try{se(n)}catch(s){const d=s;throw new T(d.statusCode,d.message)}await n.init?.();const o={formatResourceId:ee,pagination:{perPage:20},...r},i=await n.mapModelsToRouteNames?.(),a={};return n.getModels().forEach(s=>{a[s]=o.models?.[s]?.name??i?.[s]??s}),await n.connect?.(),async(s,d)=>{const{modelName:y,resourceName:E}=re(s.url,a);E||await ue(n,s.url);const{resourceId:$,routeType:l}=oe(s.method,s.url,E);if(l===null)throw c(404,`Route not found: ${s.url}`);const p=r?.models?.[y];if(!L(p?.only,p?.exclude,r?.exposeStrategy??"all").includes(l))throw c(404,`Route not found: ${s.url}`);const N=p?.formatResourceId?.($)??o.formatResourceId($);await r?.onRequest?.({method:s.method,resourceId:l===u.CREATE||l===u.READ_ALL?void 0:N,resourceName:y,routeType:l,url:s.url});try{const f=W(`https://${ce(s).replace(ie,"")}/${s.url}`);Z(f,p);const g=p?.maxPerPage??r?.maxPerPage;g!==void 0&&f.limit!==void 0&&f.limit>g&&(f.limit=g);const k={adapter:n,query:n.parseQuery(y,f),resourceName:y};try{const h=await de({config:o,modelConfig:p,parameters:k,parsedQuery:f,request:s,resourceIdFormatted:N,routeType:l});return await t(d,h)}catch(h){if(n.handleError&&!(h instanceof T))n.handleError(h);else throw h;return d}}finally{await e(d)}}}export{we as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const k=require("http-errors"),T=require("./CrudApiError-DkRqkpib.cjs"),F=require("@visulima/pagination"),_=require("node:url"),c=require("./RouteType-DLV_OhhD.cjs"),C=require("./get-accessible-routes-BCUs20dV.cjs"),R=require("path-to-regexp"),D=t=>t&&typeof t=="object"&&"default"in t?t.default:t,u=D(k),L=async({adapter:t,query:e,request:n,resourceName:r})=>({data:await t.create(r,n.body,e),status:201}),M=async({adapter:t,query:e,resourceId:n,resourceName:r})=>{if(await t.getOne(r,n,e))return{data:await t.delete(r,n,e),status:200};throw u(404,`${r} ${String(n)} not found`)},B=async({adapter:t,pagination:e,query:n,resourceName:r})=>{let o=!1,i;if(n.page!==void 0){if(n.page<=0)throw new Error("page query must be a strictly positive number");i={page:n.page,perPage:n.limit??e.perPage}}i&&(o=!0,n.skip=(i.page-1)*i.perPage,n.take=i.perPage);const a=await t.getAll(r,n);if(o){const{page:s,total:d}=await t.getPaginationData(r,n);return{data:F.paginate(s,i.perPage,d,a).toJSON(),status:200}}return{data:a,status:200}},U=async({adapter:t,query:e,resourceId:n,resourceName:r})=>{const o=await t.getOne(r,n,e);if(!o)throw u(404,`${r} ${String(n)} not found`);return{data:o,status:200}},Q=async({adapter:t,query:e,request:n,resourceId:r,resourceName:o})=>{if(await t.getOne(o,r,e))return{data:await t.update(o,r,n.body,e),status:200};throw u(404,`${o} ${String(r)} not found`)},N=t=>{const e=typeof t;return t!==null&&(e==="object"||e==="function")},O=new Set(["__proto__","prototype","constructor"]),q=1e6,J=t=>t>="0"&&t<="9";function P(t){if(t==="0")return!0;if(/^[1-9]\d*$/.test(t)){const e=Number.parseInt(t,10);return e<=Number.MAX_SAFE_INTEGER&&e<=q}return!1}function g(t,e){return O.has(t)?!1:(t&&P(t)?e.push(Number.parseInt(t,10)):e.push(t),!0)}function G(t){if(typeof t!="string")throw new TypeError(`Expected a string, got ${typeof t}`);const e=[];let n="",r="start",o=!1,i=0;for(const a of t){if(i++,o){n+=a,o=!1;continue}if(a==="\\"){if(r==="index")throw new Error(`Invalid character '${a}' in an index at position ${i}`);if(r==="indexEnd")throw new Error(`Invalid character '${a}' after an index at position ${i}`);o=!0,r=r==="start"?"property":r;continue}switch(a){case".":{if(r==="index")throw new Error(`Invalid character '${a}' in an index at position ${i}`);if(r==="indexEnd"){r="property";break}if(!g(n,e))return[];n="",r="property";break}case"[":{if(r==="index")throw new Error(`Invalid character '${a}' in an index at position ${i}`);if(r==="indexEnd"){r="index";break}if(r==="property"||r==="start"){if((n||r==="property")&&!g(n,e))return[];n=""}r="index";break}case"]":{if(r==="index"){if(n==="")n=(e.pop()||"")+"[]",r="property";else{const s=Number.parseInt(n,10);!Number.isNaN(s)&&Number.isFinite(s)&&s>=0&&s<=Number.MAX_SAFE_INTEGER&&s<=q&&n===String(s)?e.push(s):e.push(n),n="",r="indexEnd"}break}if(r==="indexEnd")throw new Error(`Invalid character '${a}' after an index at position ${i}`);n+=a;break}default:{if(r==="index"&&!J(a))throw new Error(`Invalid character '${a}' in an index at position ${i}`);if(r==="indexEnd")throw new Error(`Invalid character '${a}' after an index at position ${i}`);r==="start"&&(r="property"),n+=a}}}switch(o&&(n+="\\"),r){case"property":{if(!g(n,e))return[];break}case"index":throw new Error("Index was not closed");case"start":{e.push("");break}}return e}function X(t){if(typeof t=="string")return G(t);if(Array.isArray(t)){const e=[];for(const[n,r]of t.entries()){if(typeof r!="string"&&typeof r!="number")throw new TypeError(`Expected a string or number for path segment at index ${n}, got ${typeof r}`);if(typeof r=="number"&&!Number.isFinite(r))throw new TypeError(`Path segment at index ${n} must be a finite number, got ${r}`);if(O.has(r))return[];typeof r=="string"&&P(r)?e.push(Number.parseInt(r,10)):e.push(r)}return e}return[]}function S(t,e,n){if(!N(t)||typeof e!="string"&&!Array.isArray(e))return t;const r=t,o=X(e);if(o.length===0)return t;for(let i=0;i<o.length;i++){const a=o[i];if(i===o.length-1)t[a]=n;else if(!N(t[a])){const s=typeof o[i+1]=="number";t[a]=s?[]:{}}t=t[a]}return r}const I=t=>{const e={};return t.split(",").forEach(n=>{S(e,n,!0)}),e},H=t=>{let e;try{e=JSON.parse(t)}catch{throw u(400,'Invalid JSON in "where" query parameter')}const n={};return Object.keys(e).forEach(r=>{S(n,r,e[r])}),n},z=t=>{let e;try{e=JSON.parse(t)}catch{throw u(400,'Invalid JSON in "orderBy" query parameter')}const n=Object.keys(e),r=n[0];if(n.length!==1||r===void 0||e[r]!=="$asc"&&e[r]!=="$desc")throw u(400,"orderBy needs to be an object with exactly 1 property with either $asc or $desc value");return{[r]:e[r]}},K=t=>{if(t){const{searchParams:e}=new _.URL(t),n={};return e.get("select")&&(n.select=I(e.get("select"))),e.get("include")&&(n.include=I(e.get("include"))),e.get("where")&&(n.where=H(e.get("where"))),e.get("orderBy")&&(n.orderBy=z(e.get("orderBy"))),e.has("limit")&&(n.limit=Number.isFinite(+e.get("limit"))?+e.get("limit"):void 0),e.has("skip")&&(n.skip=Number.isFinite(+e.get("skip"))?+e.get("skip"):void 0),e.get("distinct")&&(n.distinct=e.get("distinct")),e.get("page")&&(n.page=Number.isFinite(+e.get("page"))?+e.get("page"):void 0),{originalQuery:Object.fromEntries(e.entries()),...n}}return{}},V=(t,e)=>{const n=new Set(e),r={};return Object.keys(t).forEach(o=>{n.has(o)&&(r[o]=t[o])}),r},w=t=>{const e=[];return Object.keys(t).forEach(n=>{if(n==="$and"||n==="$or"||n==="$not"){const r=t[n];Array.isArray(r)?r.forEach(o=>e.push(...w(o))):r&&typeof r=="object"&&e.push(...w(r));return}e.push(n.split(".")[0])}),e},W=(t,e)=>{if(!e)return t;if(t.select&&(e.selectableFields&&(t.select=V(t.select,e.selectableFields)),e.readableFields&&e.readableFields.length>0)){const n=new Set(e.readableFields);t.select=Object.fromEntries(Object.entries(t.select).filter(([r])=>!n.has(r)))}if(t.include&&e.includableRelations){const n=new Set(e.includableRelations);Object.keys(t.include).forEach(r=>{if(!n.has(r))throw u(400,`Relation "${r}" is not includable`)})}if(e.filterableFields){const n=new Set(e.filterableFields);t.where&&w(t.where).forEach(r=>{if(!n.has(r))throw u(400,`Field "${r}" is not filterable`)}),t.orderBy&&Object.keys(t.orderBy).forEach(r=>{if(!n.has(r))throw u(400,`Field "${r}" is not sortable`)})}return t},x=(t,e)=>{if(!e?.writableFields)return t;const n=new Set(e.writableFields);return Object.fromEntries(Object.entries(t).filter(([r])=>n.has(r)))},Y=t=>Number.isSafeInteger(+t)?+t:t,Z=t=>`${t.charAt(0).toLowerCase()}${t.slice(1)}`,ee=(t,e)=>{const n=t.split("?")[0];if(n===void 0)throw new TypeError("Path is undefined");const r=new Set(n.split("/").filter(Boolean)),o=Object.keys(e).find(i=>{const a=e[i];return a===""?!0:r.has(a)||r.has(Z(a))});if(o===void 0)throw new Error(`Couldn't find model name for url ${t}`);return{modelName:o,resourceName:e[o]}},A=new Map,te=t=>{let e=A.get(t);return e===void 0&&(e={entityMatcher:R.match(`/*placeholder/${t}{/:id}`,{decode:decodeURIComponent}),simpleMatcher:R.match(`/*placeholder/${t}`,{decode:decodeURIComponent})},A.set(t,e)),e},re=(t,e,n)=>{const r=e.split("?")[0];if(r===void 0)throw new TypeError("Path is undefined");if(!r.includes(`/${n}`))throw new Error(`invalid resource name '${n}' for route '${r}'`);const{entityMatcher:o,simpleMatcher:i}=te(n);switch(t){case"DELETE":{const a=o(r);return typeof a=="object"&&a.params.id?{resourceId:a.params.id,routeType:c.RouteType.DELETE}:{routeType:null}}case"GET":{const a=o(r);return typeof a=="object"&&a.params.id?{resourceId:a.params.id,routeType:c.RouteType.READ_ONE}:{routeType:c.RouteType.READ_ALL}}case"PATCH":case"PUT":{const a=o(r);return typeof a=="object"&&a.params.id?{resourceId:a.params.id,routeType:c.RouteType.UPDATE}:{routeType:null}}case"POST":return i(r)?{routeType:c.RouteType.CREATE}:{routeType:null};default:return{routeType:null}}},ne=["create","delete","getAll","getOne","parseQuery","update","getPaginationData","getModels"],oe=t=>{ne.forEach(e=>{if(!t[e])throw u(500,`Adapter must implement the "${e}" method.`)})},ae=/\/$/u,v=async(t,e)=>t?await t.parse(e):e,se=t=>{const{headers:e}=t;return e&&typeof e.get=="function"?e.get("host")??"":e?.host??""},ie=async(t,e)=>{throw u(404,`Resource not found: ${e}`)},ue=async({config:t,modelConfig:e,parameters:n,parsedQuery:r,request:o,resourceIdFormatted:i,routeType:a})=>{switch(a){case c.RouteType.CREATE:{const s=await v(e?.createSchema,x(o.body??{},e));return(t.handlers?.create??L)({...n,request:Object.assign(o,{body:s})})}case c.RouteType.DELETE:return(t.handlers?.delete??M)({...n,resourceId:i});case c.RouteType.READ_ALL:return(t.handlers?.list??B)({...n,pagination:t.pagination,query:{...n.query,limit:r.limit??void 0,page:r.page??void 0}});case c.RouteType.READ_ONE:return(t.handlers?.get??U)({...n,resourceId:i});case c.RouteType.UPDATE:{const s=await v(e?.updateSchema,x(o.body??{},e));return(t.handlers?.update??Q)({...n,request:Object.assign(o,{body:s}),resourceId:i})}default:return{data:"Method not found",status:404}}};async function ce(t,e,n,r){try{oe(n)}catch(s){const d=s;throw new T(d.statusCode,d.message)}await n.init?.();const o={formatResourceId:Y,pagination:{perPage:20},...r},i=await n.mapModelsToRouteNames?.(),a={};return n.getModels().forEach(s=>{a[s]=o.models?.[s]?.name??i?.[s]??s}),await n.connect?.(),async(s,d)=>{const{modelName:y,resourceName:b}=ee(s.url,a);b||await ie(n,s.url);const{resourceId:E,routeType:l}=re(s.method,s.url,b);if(l===null)throw u(404,`Route not found: ${s.url}`);const p=r?.models?.[y];if(!C.s(p?.only,p?.exclude,r?.exposeStrategy??"all").includes(l))throw u(404,`Route not found: ${s.url}`);const $=p?.formatResourceId?.(E)??o.formatResourceId(E);await r?.onRequest?.({method:s.method,resourceId:l===c.RouteType.CREATE||l===c.RouteType.READ_ALL?void 0:$,resourceName:y,routeType:l,url:s.url});try{const f=K(`https://${se(s).replace(ae,"")}/${s.url}`);W(f,p);const m=p?.maxPerPage??r?.maxPerPage;m!==void 0&&f.limit!==void 0&&f.limit>m&&(f.limit=m);const j={adapter:n,query:n.parseQuery(y,f),resourceName:y};try{const h=await ue({config:o,modelConfig:p,parameters:j,parsedQuery:f,request:s,resourceIdFormatted:$,routeType:l});return await t(d,h)}catch(h){if(n.handleError&&!(h instanceof T))n.handleError(h);else throw h;return d}}finally{await e(d)}}}module.exports=ce;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import n from"./baseHandler-BGTzX4YA.mjs";const c=async(a,s)=>await n(async(o,t)=>Response.json(t.data,{headers:{"content-type":"application/json; charset=utf-8"},status:t.status}),async()=>{},a,s);export{c as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const n=require("./baseHandler-DnuGeT2-.cjs"),e=async(t,a)=>await n(async(c,s)=>Response.json(s.data,{headers:{"content-type":"application/json; charset=utf-8"},status:s.status}),async()=>{},t,a);module.exports=e;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("./RouteType-DLV_OhhD.cjs"),T=(u,r,E="all")=>{let t=E==="none"?[]:[e.RouteType.READ_ALL,e.RouteType.READ_ONE,e.RouteType.UPDATE,e.RouteType.DELETE,e.RouteType.CREATE];return Array.isArray(u)&&(t=u),r?.length&&(t=t.filter(R=>!r.includes(R))),t};exports.s=T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{RouteType as e}from"./RouteType-BQ2RxFPE.mjs";const o=(t,E,A="all")=>{let r=A==="none"?[]:[e.READ_ALL,e.READ_ONE,e.UPDATE,e.DELETE,e.CREATE];return Array.isArray(t)&&(r=t),E?.length&&(r=r.filter(l=>!E.includes(l))),r};export{o as s};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const c=(n,o)=>{const r={};return o.forEach(t=>{r[t]=n[t].plural}),r};export{c as n};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const s=(r,c)=>{const t={};return c.forEach(n=>{t[n]=r[n].plural}),t};exports.n=s;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const I=require("./models-to-route-names-CWnxPVCQ.cjs"),S=require("@visulima/pagination"),D=require("@visulima/prisma-dmmf-transformer"),A=require("./get-accessible-routes-BCUs20dV.cjs"),l=require("./RouteType-DLV_OhhD.cjs"),g=r=>`#/components/schemas/${r}`,O=r=>{switch(r){case"BigInt":case"Int":return"integer";case"Boolean":return"boolean";case"Bytes":case"DateTime":case"String":return"string";case"Decimal":case"Float":return"number";case"Json":return"object";case"Null":return"null";default:return""}},$="PaginationData",M=[{methodStart:"createOne",schemaNameStart:"Create"},{methodStart:"updateOne",schemaNameStart:"Update"}];class C{constructor(e){this.dmmf=e}dmmf;schemaInputTypes=new Map;formatInputTypeData(e){if(e.kind==="object"){const t=g(e.type.name);return e.isList?{items:{$ref:t},type:"array",xml:{name:e.type.name,wrapped:!0}}:{$ref:t}}const a=O(e.type);return e.isList?{items:{type:a},type:"array",xml:{name:e.type.name,wrapped:!0}}:{type:a}}getExampleModelsSchemas(e,a){const t=n=>{const o=n.replace("#/components/schemas/",""),p=a[o],c={};return Object.entries(p.properties??{}).forEach(([u,m])=>{const d=m.type;c[u]=d==="array"?[i(m.items)]:d}),c},s=n=>{const o={};return Object.entries(n).forEach(([p,c])=>{o[p]=c.$ref===void 0?c.type:t(c.$ref)}),o},i=n=>{const o={};return Object.entries(n).forEach(([p,c])=>{c.items.$ref!==void 0?o[p]=[t(c.items.$ref)]:c.type==="array"?o[p]=[i(c.items)]:c.type==="object"?o[p]=s(c.properties):o[p]=c.type}),o};return e.reduce((n,o)=>{const p={},c=a[o];Object.entries(c.properties).forEach(([d,y])=>{const f=y.type;f==="array"?p[d]=[t(y.items.$ref)]:f==="object"?p[d]=s(y.properties):p[d]=f});const u=this.getPaginationDataSchema()[$],m={};return Object.entries(u.properties).forEach(([d,y])=>{m[d]=y.type}),{...n,[`${o}Page`]:{value:{data:[p],meta:m}},[`${o}s`]:{value:[p]},[o]:{value:p}}},{})}getPaginatedModelsSchemas(e){return e.reduce((a,t)=>({...a,[`${t}Page`]:{properties:{data:{items:{$ref:g(t)},type:"array",xml:{name:"data",wrapped:!0}},meta:{$ref:g($)}},type:"object",xml:{name:`${t}Page`}}}),{})}getPaginationDataSchema(){return S.createPaginationMetaSchemaObject($)}parseInputTypes(e){const a=e.reduce((t,s)=>(M.map(i=>({name:`${i.methodStart}${s}`,schemaName:`${i.schemaNameStart}${s}`})).forEach(({name:i,schemaName:n})=>{const o=this.dmmf.mutationType.fieldMap[i].args[0].inputTypes[0].type.fields,p=[],c=o.reduce((u,m)=>{if(m.inputTypes[0].kind==="scalar"){const d=D.getJSONSchemaProperty(this.dmmf.datamodel,{})({name:m.name,...m.inputTypes[0]}),{type:y}=d[1];y&&Array.isArray(y)?y.includes("null")&&(u[m.name]={...y,nullable:!0,type:y.filter(f=>f!=="null")},u[m.name].type.length===1&&(u[m.name]={...u[m.name],type:u[m.name].type[0]})):u[m.name]=d[1]}else{const d=this.parseObjectInputType(m.inputTypes[0]);u[m.name]={...d,nullable:m.isNullable}}return m.isRequired&&p.push(m.name),u},{});t[n]={properties:c,type:"object",xml:{name:n}},p.length>0&&(t[n].required=p)}),t),{});return this.schemaInputTypes.forEach((t,s)=>{a[s]={properties:t,type:"object",xml:{name:s}}}),a}parseModels(){const e=D.transformDMMF(this.dmmf).definitions;return Object.keys(e).forEach(a=>{const{properties:t}=e[a];Object.keys(t).forEach(s=>{Array.isArray(t[s].type)&&t[s].type.includes("null")&&(t[s].type=t[s].type.filter(i=>i!=="null"),t[s].type.length===1&&(t[s].type=t[s].type[0]),t[s].nullable=!0)})}),e}parseObjectInputType(e){return e.kind==="object"?(this.schemaInputTypes.has(e.type.name)||(this.schemaInputTypes.set(e.type.name,{}),e.type.fields.forEach(a=>{let t={};if(a.inputTypes.length>1){let s=!1;const i=a.inputTypes.map(n=>{const o=this.formatInputTypeData(n);if(o.type==="null"){s=!0;return}return o}).filter(Boolean);i.length===1?t=i[0]:t.anyOf=i,s&&(t.nullable=!0)}else{const s=a.inputTypes[0];t=this.formatInputTypeData(s)}this.schemaInputTypes.set(e.type.name,{...this.schemaInputTypes.get(e.type.name),[a.name]:t}),a.inputTypes.forEach(s=>{s.kind==="object"&&this.parseObjectInputType(s)})})),{$ref:g(e.type.name)}):{type:O(e.type)}}}const N=(r,e,a="all")=>r.reduce((t,s)=>e?.[s]?{...t,[s]:A.s(e[s].only,e[s].exclude,a)}:{...t,[s]:A.s(void 0,void 0,a)},{}),h={distinct:{description:"Fields to distinctively retrieve",name:"distinct",schema:{type:"string"}},include:{description:"Include relations, same as select",name:"include",schema:{type:"string"}},limit:{description:"Maximum number of elements to retrieve",name:"limit",schema:{minimum:0,type:"integer"}},orderBy:{description:'Field on which to order by a direction. See <a href="https://next-crud.js.org/query-params#orderBy">the docs</a>',name:"orderBy",schema:{type:"string"}},page:{description:"Page number. Use only for pagination.",name:"page",schema:{minimum:1,type:"integer"}},select:{description:"Fields to select. For nested fields, chain them separated with a dot, eg: user.posts",name:"select",schema:{type:"string"}},skip:{description:"Number of rows to skip",name:"skip",schema:{minimum:0,type:"integer"}},where:{description:'Fields to filter. See <a href="https://next-crud.js.org/query-params#where">the docs</a>',name:"where",schema:{type:"string"}}},w=[h.select,h.include].filter(Boolean),L=[...w,h.limit,h.skip,h.where,h.orderBy,h.page,h.distinct].filter(Boolean),k=(r,e=[])=>r===l.RouteType.READ_ALL?[...L,...e].filter(Boolean):[...w,...e].filter(Boolean),T=r=>`#/components/examples/${r}`,E=(r,e)=>e?{items:{$ref:g(r)},type:"array"}:{$ref:g(r)},B=(r,e)=>r===l.RouteType.CREATE?{content:{content:{"application/json":{example:T(e),schema:E(e)}},description:`${e} created`},statusCode:201}:r===l.RouteType.DELETE?{content:{content:{"application/json":{example:T(e),schema:E(e)}},description:`${e} item deleted`},statusCode:200}:r===l.RouteType.READ_ALL?{content:{content:{"application/json":{examples:{Default:{$ref:T(`${e}s`)},Pagination:{$ref:T(`${e}Page`)}},schema:{oneOf:[E(e,!0),E(`${e}Page`,!1)]}}},description:`${e} list retrieved`},statusCode:200}:r===l.RouteType.READ_ONE?{content:{content:{"application/json":{example:T(e),schema:E(e)}},description:`${e} item retrieved`},statusCode:200}:{content:{content:{"application/json":{example:T(e),schema:E(e)}},description:`${e} item updated`},statusCode:200},v=(r,e)=>({content:{"application/json":{schema:{$ref:g(`${r}${e}`)}}}}),q=r=>{switch(r){case l.RouteType.CREATE:return"post";case l.RouteType.DELETE:return"delete";case l.RouteType.READ_ALL:case l.RouteType.READ_ONE:return"get";case l.RouteType.UPDATE:return"put";default:throw new TypeError(`Method for route type ${r} was not found.`)}},x=({hasId:r,modelName:e,modelsConfig:a,routeTypes:t,tag:s})=>{const i={};return t.forEach(n=>{const o=a?.[e]?.routeTypes?.[n]?.response.name??a?.[e]?.type?.name??e,p=q(n),c=B(n,o);i[p]={parameters:k(n).map(u=>({...u,in:"query"})),responses:{[c.statusCode]:c.content,...a?.[e]?.routeTypes?.[n]?.responses},summary:a?.[e]?.routeTypes?.[n]?.summary,tags:[s]},r&&i[p].parameters.push({description:`ID of the ${e}`,in:"path",name:"id",required:!0,schema:{type:"string"}}),n===l.RouteType.UPDATE?i[p].requestBody=v("Update",o):n===l.RouteType.CREATE&&(i[p].requestBody=v("Create",o))}),i},_=({models:r,modelsConfig:e,routes:a,routesMap:t})=>Object.keys(a).reduce((s,i)=>{const n=a[i],o=r?.[i]?.name??t?.[i]??i,p=e?.[i]?.tag.name??i;if(n.includes(l.RouteType.CREATE)||n.includes(l.RouteType.READ_ALL)){const c=`/${o}`,u=[l.RouteType.READ_ALL,l.RouteType.CREATE].filter(m=>n.includes(m));s[c]=x({modelName:i,modelsConfig:e,routeTypes:u,tag:p})}if(n.includes(l.RouteType.READ_ONE)||n.includes(l.RouteType.UPDATE)||n.includes(l.RouteType.DELETE)){const c=`/${o}/{id}`,u=[l.RouteType.READ_ONE,l.RouteType.UPDATE,l.RouteType.DELETE].filter(m=>n.includes(m));s[c]=x({hasId:!0,modelName:i,modelsConfig:e,routeTypes:u,tag:p})}return s},{}),F=(r,e)=>r.map(a=>e?.[a]?.tag?e[a].tag:{name:a}),U=(r,e)=>{if(typeof r.example=="string"){const a=r.example.replace("#/components/examples/","");e[a]?.value!==void 0&&(r.example=e[a].value)}},J=(r,e)=>(Object.values(r).forEach(a=>{Object.values(a).forEach(t=>{typeof t.responses=="object"&&Object.values(t.responses).forEach(s=>{typeof s.content=="object"&&Object.values(s.content).forEach(i=>{U(i,e)})})})}),r),Q=async({crud:r={models:{}},defaultExposeStrategy:e="all",dmmf:a,models:t,prismaClient:s,swagger:i={allowedMediaTypes:{"application/json":!0},models:{}}})=>{let n,o;if(a!==void 0?(n=a,o=a.mappingsMap):s._dmmf!==void 0?(n=s._dmmf,o=n.mappingsMap):s._getDmmf!==void 0&&(n=await s._getDmmf(),o=n.mappingsMap),n===void 0||o===void 0)throw new TypeError("Couldn't get prisma client models");const p=new C(n),c=p.parseModels(),u=Object.keys(c),m=JSON.stringify({...c,...p.parseInputTypes(u),...p.getPaginationDataSchema(),...p.getPaginatedModelsSchemas(u)});t!==void 0&&t.forEach(j=>{if(!Object.keys(o).includes(j))throw new Error(`Model name ${j} is invalid.`)});const d=t??Object.keys(o),y=N(d,r.models,e),f=F(d,i.models),P=_({models:r.models,modelsConfig:i.models,routes:y,routesMap:I.n(o,d)}),b=JSON.parse(m.replaceAll("#/definitions","#/components/schemas")),R=p.getExampleModelsSchemas(u,b);return{examples:R,paths:J(P,R),schemas:b,tags:f}};module.exports=Q;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as I}from"./models-to-route-names-BFpwjyxy.mjs";import{createPaginationMetaSchemaObject as S}from"@visulima/pagination";import{getJSONSchemaProperty as M,transformDMMF as C}from"@visulima/prisma-dmmf-transformer";import{s as A}from"./get-accessible-routes-CGvT_kuy.mjs";import{RouteType as d}from"./RouteType-BQ2RxFPE.mjs";const g=r=>`#/components/schemas/${r}`,O=r=>{switch(r){case"BigInt":case"Int":return"integer";case"Boolean":return"boolean";case"Bytes":case"DateTime":case"String":return"string";case"Decimal":case"Float":return"number";case"Json":return"object";case"Null":return"null";default:return""}},$="PaginationData",N=[{methodStart:"createOne",schemaNameStart:"Create"},{methodStart:"updateOne",schemaNameStart:"Update"}];class R{constructor(e){this.dmmf=e}dmmf;schemaInputTypes=new Map;formatInputTypeData(e){if(e.kind==="object"){const t=g(e.type.name);return e.isList?{items:{$ref:t},type:"array",xml:{name:e.type.name,wrapped:!0}}:{$ref:t}}const s=O(e.type);return e.isList?{items:{type:s},type:"array",xml:{name:e.type.name,wrapped:!0}}:{type:s}}getExampleModelsSchemas(e,s){const t=n=>{const o=n.replace("#/components/schemas/",""),p=s[o],c={};return Object.entries(p.properties??{}).forEach(([l,m])=>{const u=m.type;c[l]=u==="array"?[i(m.items)]:u}),c},a=n=>{const o={};return Object.entries(n).forEach(([p,c])=>{o[p]=c.$ref===void 0?c.type:t(c.$ref)}),o},i=n=>{const o={};return Object.entries(n).forEach(([p,c])=>{c.items.$ref!==void 0?o[p]=[t(c.items.$ref)]:c.type==="array"?o[p]=[i(c.items)]:c.type==="object"?o[p]=a(c.properties):o[p]=c.type}),o};return e.reduce((n,o)=>{const p={},c=s[o];Object.entries(c.properties).forEach(([u,y])=>{const f=y.type;f==="array"?p[u]=[t(y.items.$ref)]:f==="object"?p[u]=a(y.properties):p[u]=f});const l=this.getPaginationDataSchema()[$],m={};return Object.entries(l.properties).forEach(([u,y])=>{m[u]=y.type}),{...n,[`${o}Page`]:{value:{data:[p],meta:m}},[`${o}s`]:{value:[p]},[o]:{value:p}}},{})}getPaginatedModelsSchemas(e){return e.reduce((s,t)=>({...s,[`${t}Page`]:{properties:{data:{items:{$ref:g(t)},type:"array",xml:{name:"data",wrapped:!0}},meta:{$ref:g($)}},type:"object",xml:{name:`${t}Page`}}}),{})}getPaginationDataSchema(){return S($)}parseInputTypes(e){const s=e.reduce((t,a)=>(N.map(i=>({name:`${i.methodStart}${a}`,schemaName:`${i.schemaNameStart}${a}`})).forEach(({name:i,schemaName:n})=>{const o=this.dmmf.mutationType.fieldMap[i].args[0].inputTypes[0].type.fields,p=[],c=o.reduce((l,m)=>{if(m.inputTypes[0].kind==="scalar"){const u=M(this.dmmf.datamodel,{})({name:m.name,...m.inputTypes[0]}),{type:y}=u[1];y&&Array.isArray(y)?y.includes("null")&&(l[m.name]={...y,nullable:!0,type:y.filter(f=>f!=="null")},l[m.name].type.length===1&&(l[m.name]={...l[m.name],type:l[m.name].type[0]})):l[m.name]=u[1]}else{const u=this.parseObjectInputType(m.inputTypes[0]);l[m.name]={...u,nullable:m.isNullable}}return m.isRequired&&p.push(m.name),l},{});t[n]={properties:c,type:"object",xml:{name:n}},p.length>0&&(t[n].required=p)}),t),{});return this.schemaInputTypes.forEach((t,a)=>{s[a]={properties:t,type:"object",xml:{name:a}}}),s}parseModels(){const e=C(this.dmmf).definitions;return Object.keys(e).forEach(s=>{const{properties:t}=e[s];Object.keys(t).forEach(a=>{Array.isArray(t[a].type)&&t[a].type.includes("null")&&(t[a].type=t[a].type.filter(i=>i!=="null"),t[a].type.length===1&&(t[a].type=t[a].type[0]),t[a].nullable=!0)})}),e}parseObjectInputType(e){return e.kind==="object"?(this.schemaInputTypes.has(e.type.name)||(this.schemaInputTypes.set(e.type.name,{}),e.type.fields.forEach(s=>{let t={};if(s.inputTypes.length>1){let a=!1;const i=s.inputTypes.map(n=>{const o=this.formatInputTypeData(n);if(o.type==="null"){a=!0;return}return o}).filter(Boolean);i.length===1?t=i[0]:t.anyOf=i,a&&(t.nullable=!0)}else{const a=s.inputTypes[0];t=this.formatInputTypeData(a)}this.schemaInputTypes.set(e.type.name,{...this.schemaInputTypes.get(e.type.name),[s.name]:t}),s.inputTypes.forEach(a=>{a.kind==="object"&&this.parseObjectInputType(a)})})),{$ref:g(e.type.name)}):{type:O(e.type)}}}const L=(r,e,s="all")=>r.reduce((t,a)=>e?.[a]?{...t,[a]:A(e[a].only,e[a].exclude,s)}:{...t,[a]:A(void 0,void 0,s)},{}),h={distinct:{description:"Fields to distinctively retrieve",name:"distinct",schema:{type:"string"}},include:{description:"Include relations, same as select",name:"include",schema:{type:"string"}},limit:{description:"Maximum number of elements to retrieve",name:"limit",schema:{minimum:0,type:"integer"}},orderBy:{description:'Field on which to order by a direction. See <a href="https://next-crud.js.org/query-params#orderBy">the docs</a>',name:"orderBy",schema:{type:"string"}},page:{description:"Page number. Use only for pagination.",name:"page",schema:{minimum:1,type:"integer"}},select:{description:"Fields to select. For nested fields, chain them separated with a dot, eg: user.posts",name:"select",schema:{type:"string"}},skip:{description:"Number of rows to skip",name:"skip",schema:{minimum:0,type:"integer"}},where:{description:'Fields to filter. See <a href="https://next-crud.js.org/query-params#where">the docs</a>',name:"where",schema:{type:"string"}}},w=[h.select,h.include].filter(Boolean),k=[...w,h.limit,h.skip,h.where,h.orderBy,h.page,h.distinct].filter(Boolean),B=(r,e=[])=>r===d.READ_ALL?[...k,...e].filter(Boolean):[...w,...e].filter(Boolean),E=r=>`#/components/examples/${r}`,T=(r,e)=>e?{items:{$ref:g(r)},type:"array"}:{$ref:g(r)},_=(r,e)=>r===d.CREATE?{content:{content:{"application/json":{example:E(e),schema:T(e)}},description:`${e} created`},statusCode:201}:r===d.DELETE?{content:{content:{"application/json":{example:E(e),schema:T(e)}},description:`${e} item deleted`},statusCode:200}:r===d.READ_ALL?{content:{content:{"application/json":{examples:{Default:{$ref:E(`${e}s`)},Pagination:{$ref:E(`${e}Page`)}},schema:{oneOf:[T(e,!0),T(`${e}Page`,!1)]}}},description:`${e} list retrieved`},statusCode:200}:r===d.READ_ONE?{content:{content:{"application/json":{example:E(e),schema:T(e)}},description:`${e} item retrieved`},statusCode:200}:{content:{content:{"application/json":{example:E(e),schema:T(e)}},description:`${e} item updated`},statusCode:200},v=(r,e)=>({content:{"application/json":{schema:{$ref:g(`${r}${e}`)}}}}),q=r=>{switch(r){case d.CREATE:return"post";case d.DELETE:return"delete";case d.READ_ALL:case d.READ_ONE:return"get";case d.UPDATE:return"put";default:throw new TypeError(`Method for route type ${r} was not found.`)}},x=({hasId:r,modelName:e,modelsConfig:s,routeTypes:t,tag:a})=>{const i={};return t.forEach(n=>{const o=s?.[e]?.routeTypes?.[n]?.response.name??s?.[e]?.type?.name??e,p=q(n),c=_(n,o);i[p]={parameters:B(n).map(l=>({...l,in:"query"})),responses:{[c.statusCode]:c.content,...s?.[e]?.routeTypes?.[n]?.responses},summary:s?.[e]?.routeTypes?.[n]?.summary,tags:[a]},r&&i[p].parameters.push({description:`ID of the ${e}`,in:"path",name:"id",required:!0,schema:{type:"string"}}),n===d.UPDATE?i[p].requestBody=v("Update",o):n===d.CREATE&&(i[p].requestBody=v("Create",o))}),i},F=({models:r,modelsConfig:e,routes:s,routesMap:t})=>Object.keys(s).reduce((a,i)=>{const n=s[i],o=r?.[i]?.name??t?.[i]??i,p=e?.[i]?.tag.name??i;if(n.includes(d.CREATE)||n.includes(d.READ_ALL)){const c=`/${o}`,l=[d.READ_ALL,d.CREATE].filter(m=>n.includes(m));a[c]=x({modelName:i,modelsConfig:e,routeTypes:l,tag:p})}if(n.includes(d.READ_ONE)||n.includes(d.UPDATE)||n.includes(d.DELETE)){const c=`/${o}/{id}`,l=[d.READ_ONE,d.UPDATE,d.DELETE].filter(m=>n.includes(m));a[c]=x({hasId:!0,modelName:i,modelsConfig:e,routeTypes:l,tag:p})}return a},{}),U=(r,e)=>r.map(s=>e?.[s]?.tag?e[s].tag:{name:s}),J=(r,e)=>{if(typeof r.example=="string"){const s=r.example.replace("#/components/examples/","");e[s]?.value!==void 0&&(r.example=e[s].value)}},Q=(r,e)=>(Object.values(r).forEach(s=>{Object.values(s).forEach(t=>{typeof t.responses=="object"&&Object.values(t.responses).forEach(a=>{typeof a.content=="object"&&Object.values(a.content).forEach(i=>{J(i,e)})})})}),r),W=async({crud:r={models:{}},defaultExposeStrategy:e="all",dmmf:s,models:t,prismaClient:a,swagger:i={allowedMediaTypes:{"application/json":!0},models:{}}})=>{let n,o;if(s!==void 0?(n=s,o=s.mappingsMap):a._dmmf!==void 0?(n=a._dmmf,o=n.mappingsMap):a._getDmmf!==void 0&&(n=await a._getDmmf(),o=n.mappingsMap),n===void 0||o===void 0)throw new TypeError("Couldn't get prisma client models");const p=new R(n),c=p.parseModels(),l=Object.keys(c),m=JSON.stringify({...c,...p.parseInputTypes(l),...p.getPaginationDataSchema(),...p.getPaginatedModelsSchemas(l)});t!==void 0&&t.forEach(D=>{if(!Object.keys(o).includes(D))throw new Error(`Model name ${D} is invalid.`)});const u=t??Object.keys(o),y=L(u,r.models,e),f=U(u,i.models),P=F({models:r.models,modelsConfig:i.models,routes:y,routesMap:I(o,u)}),b=JSON.parse(m.replaceAll("#/definitions","#/components/schemas")),j=p.getExampleModelsSchemas(l,b);return{examples:j,paths:Q(P,j),schemas:b,tags:f}};export{W as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import c from"./baseHandler-BGTzX4YA.mjs";const e=async(t,n)=>await c(async(a,s)=>{a.status(s.status).send(s.data)},async a=>{a.end()},t,n);export{e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const e=require("./baseHandler-DnuGeT2-.cjs"),c=async(t,n)=>await e(async(s,a)=>{s.status(a.status).send(a.data)},async s=>{s.end()},t,n);module.exports=c;
|