@strapi/utils 5.36.1 → 5.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/content-api-constants.d.ts +17 -0
- package/dist/content-api-constants.d.ts.map +1 -0
- package/dist/content-api-constants.js +43 -0
- package/dist/content-api-constants.js.map +1 -0
- package/dist/content-api-constants.mjs +39 -0
- package/dist/content-api-constants.mjs.map +1 -0
- package/dist/content-api-route-params.d.ts +17 -0
- package/dist/content-api-route-params.d.ts.map +1 -0
- package/dist/content-api-route-params.js +21 -0
- package/dist/content-api-route-params.js.map +1 -0
- package/dist/content-api-route-params.mjs +18 -0
- package/dist/content-api-route-params.mjs.map +1 -0
- package/dist/content-types.d.ts +10 -2
- package/dist/content-types.d.ts.map +1 -1
- package/dist/content-types.js +22 -2
- package/dist/content-types.js.map +1 -1
- package/dist/content-types.mjs +19 -3
- package/dist/content-types.mjs.map +1 -1
- package/dist/convert-query-params.d.ts +5 -0
- package/dist/convert-query-params.d.ts.map +1 -1
- package/dist/convert-query-params.js +5 -4
- package/dist/convert-query-params.js.map +1 -1
- package/dist/convert-query-params.mjs +5 -4
- package/dist/convert-query-params.mjs.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/dist/sanitize/index.d.ts +15 -1
- package/dist/sanitize/index.d.ts.map +1 -1
- package/dist/sanitize/index.js +73 -3
- package/dist/sanitize/index.js.map +1 -1
- package/dist/sanitize/index.mjs +74 -4
- package/dist/sanitize/index.mjs.map +1 -1
- package/dist/sanitize/visitors/index.d.ts +1 -0
- package/dist/sanitize/visitors/index.d.ts.map +1 -1
- package/dist/sanitize/visitors/index.js +2 -0
- package/dist/sanitize/visitors/index.js.map +1 -1
- package/dist/sanitize/visitors/index.mjs +1 -0
- package/dist/sanitize/visitors/index.mjs.map +1 -1
- package/dist/sanitize/visitors/remove-unrecognized-fields.d.ts +4 -0
- package/dist/sanitize/visitors/remove-unrecognized-fields.d.ts.map +1 -0
- package/dist/sanitize/visitors/remove-unrecognized-fields.js +43 -0
- package/dist/sanitize/visitors/remove-unrecognized-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-unrecognized-fields.mjs +41 -0
- package/dist/sanitize/visitors/remove-unrecognized-fields.mjs.map +1 -0
- package/dist/traverse-entity.d.ts +4 -0
- package/dist/traverse-entity.d.ts.map +1 -1
- package/dist/traverse-entity.js +13 -7
- package/dist/traverse-entity.js.map +1 -1
- package/dist/traverse-entity.mjs +13 -7
- package/dist/traverse-entity.mjs.map +1 -1
- package/dist/validate/index.d.ts +14 -1
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/index.js +83 -7
- package/dist/validate/index.js.map +1 -1
- package/dist/validate/index.mjs +83 -7
- package/dist/validate/index.mjs.map +1 -1
- package/dist/validate/validators.js +0 -1
- package/dist/validate/validators.js.map +1 -1
- package/dist/validate/validators.mjs +0 -1
- package/dist/validate/validators.mjs.map +1 -1
- package/dist/validate/visitors/throw-unrecognized-fields.d.ts.map +1 -1
- package/dist/validate/visitors/throw-unrecognized-fields.js +16 -32
- package/dist/validate/visitors/throw-unrecognized-fields.js.map +1 -1
- package/dist/validate/visitors/throw-unrecognized-fields.mjs +17 -33
- package/dist/validate/visitors/throw-unrecognized-fields.mjs.map +1 -1
- package/dist/zod-schema.d.ts +17 -0
- package/dist/zod-schema.d.ts.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Param keys shared by the Content API (query) and the document service (query building).
|
|
3
|
+
* Add new shared params here only; both ALLOWED_QUERY_PARAM_KEYS and ALLOWED_DOCUMENT_PARAM_KEYS derive from this.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SHARED_QUERY_PARAM_KEYS: readonly ["filters", "sort", "fields", "populate", "status", "locale", "page", "pageSize", "start", "limit", "_q", "hasPublishedVersion"];
|
|
6
|
+
/**
|
|
7
|
+
* Core query param keys allowed by the Content API (validate/sanitize query).
|
|
8
|
+
* Used when strictParams is true. User code and plugins can add additional keys via contentAPI.addQueryParams.
|
|
9
|
+
* = SHARED_QUERY_PARAM_KEYS + Content API–only keys (pagination, count, ordering).
|
|
10
|
+
*/
|
|
11
|
+
export declare const ALLOWED_QUERY_PARAM_KEYS: readonly ["filters", "sort", "fields", "populate", "status", "locale", "page", "pageSize", "start", "limit", "_q", "hasPublishedVersion", "pagination", "count", "ordering"];
|
|
12
|
+
/**
|
|
13
|
+
* Root-level body.data keys reserved for core (id, documentId).
|
|
14
|
+
* These cannot be added as custom input params via contentAPI.addInputParams.
|
|
15
|
+
*/
|
|
16
|
+
export declare const RESERVED_INPUT_PARAM_KEYS: readonly [string, string];
|
|
17
|
+
//# sourceMappingURL=content-api-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-api-constants.d.ts","sourceRoot":"","sources":["../src/content-api-constants.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,2IAa1B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,8KAK3B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,yBAAyB,2BAG5B,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var contentTypes = require('./content-types.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Param keys shared by the Content API (query) and the document service (query building).
|
|
7
|
+
* Add new shared params here only; both ALLOWED_QUERY_PARAM_KEYS and ALLOWED_DOCUMENT_PARAM_KEYS derive from this.
|
|
8
|
+
*/ const SHARED_QUERY_PARAM_KEYS = [
|
|
9
|
+
'filters',
|
|
10
|
+
'sort',
|
|
11
|
+
'fields',
|
|
12
|
+
'populate',
|
|
13
|
+
'status',
|
|
14
|
+
'locale',
|
|
15
|
+
'page',
|
|
16
|
+
'pageSize',
|
|
17
|
+
'start',
|
|
18
|
+
'limit',
|
|
19
|
+
'_q',
|
|
20
|
+
'hasPublishedVersion'
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Core query param keys allowed by the Content API (validate/sanitize query).
|
|
24
|
+
* Used when strictParams is true. User code and plugins can add additional keys via contentAPI.addQueryParams.
|
|
25
|
+
* = SHARED_QUERY_PARAM_KEYS + Content API–only keys (pagination, count, ordering).
|
|
26
|
+
*/ const ALLOWED_QUERY_PARAM_KEYS = [
|
|
27
|
+
...SHARED_QUERY_PARAM_KEYS,
|
|
28
|
+
'pagination',
|
|
29
|
+
'count',
|
|
30
|
+
'ordering'
|
|
31
|
+
];
|
|
32
|
+
/**
|
|
33
|
+
* Root-level body.data keys reserved for core (id, documentId).
|
|
34
|
+
* These cannot be added as custom input params via contentAPI.addInputParams.
|
|
35
|
+
*/ const RESERVED_INPUT_PARAM_KEYS = [
|
|
36
|
+
contentTypes.constants.ID_ATTRIBUTE,
|
|
37
|
+
contentTypes.constants.DOC_ID_ATTRIBUTE
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
exports.ALLOWED_QUERY_PARAM_KEYS = ALLOWED_QUERY_PARAM_KEYS;
|
|
41
|
+
exports.RESERVED_INPUT_PARAM_KEYS = RESERVED_INPUT_PARAM_KEYS;
|
|
42
|
+
exports.SHARED_QUERY_PARAM_KEYS = SHARED_QUERY_PARAM_KEYS;
|
|
43
|
+
//# sourceMappingURL=content-api-constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-api-constants.js","sources":["../src/content-api-constants.ts"],"sourcesContent":["import { constants } from './content-types';\n\n/**\n * Param keys shared by the Content API (query) and the document service (query building).\n * Add new shared params here only; both ALLOWED_QUERY_PARAM_KEYS and ALLOWED_DOCUMENT_PARAM_KEYS derive from this.\n */\nexport const SHARED_QUERY_PARAM_KEYS = [\n 'filters',\n 'sort',\n 'fields',\n 'populate',\n 'status',\n 'locale',\n 'page',\n 'pageSize',\n 'start',\n 'limit',\n '_q',\n 'hasPublishedVersion',\n] as const;\n\n/**\n * Core query param keys allowed by the Content API (validate/sanitize query).\n * Used when strictParams is true. User code and plugins can add additional keys via contentAPI.addQueryParams.\n * = SHARED_QUERY_PARAM_KEYS + Content API–only keys (pagination, count, ordering).\n */\nexport const ALLOWED_QUERY_PARAM_KEYS = [\n ...SHARED_QUERY_PARAM_KEYS,\n 'pagination',\n 'count',\n 'ordering',\n] as const;\n\n/**\n * Root-level body.data keys reserved for core (id, documentId).\n * These cannot be added as custom input params via contentAPI.addInputParams.\n */\nexport const RESERVED_INPUT_PARAM_KEYS = [\n constants.ID_ATTRIBUTE,\n constants.DOC_ID_ATTRIBUTE,\n] as const;\n"],"names":["SHARED_QUERY_PARAM_KEYS","ALLOWED_QUERY_PARAM_KEYS","RESERVED_INPUT_PARAM_KEYS","constants","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE"],"mappings":";;;;AAEA;;;UAIaA,uBAA0B,GAAA;AACrC,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,IAAA;AACA,IAAA;;AAGF;;;;UAKaC,wBAA2B,GAAA;AACnCD,IAAAA,GAAAA,uBAAAA;AACH,IAAA,YAAA;AACA,IAAA,OAAA;AACA,IAAA;;AAGF;;;UAIaE,yBAA4B,GAAA;AACvCC,IAAAA,sBAAAA,CAAUC,YAAY;AACtBD,IAAAA,sBAAAA,CAAUE;;;;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { constants } from './content-types.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Param keys shared by the Content API (query) and the document service (query building).
|
|
5
|
+
* Add new shared params here only; both ALLOWED_QUERY_PARAM_KEYS and ALLOWED_DOCUMENT_PARAM_KEYS derive from this.
|
|
6
|
+
*/ const SHARED_QUERY_PARAM_KEYS = [
|
|
7
|
+
'filters',
|
|
8
|
+
'sort',
|
|
9
|
+
'fields',
|
|
10
|
+
'populate',
|
|
11
|
+
'status',
|
|
12
|
+
'locale',
|
|
13
|
+
'page',
|
|
14
|
+
'pageSize',
|
|
15
|
+
'start',
|
|
16
|
+
'limit',
|
|
17
|
+
'_q',
|
|
18
|
+
'hasPublishedVersion'
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Core query param keys allowed by the Content API (validate/sanitize query).
|
|
22
|
+
* Used when strictParams is true. User code and plugins can add additional keys via contentAPI.addQueryParams.
|
|
23
|
+
* = SHARED_QUERY_PARAM_KEYS + Content API–only keys (pagination, count, ordering).
|
|
24
|
+
*/ const ALLOWED_QUERY_PARAM_KEYS = [
|
|
25
|
+
...SHARED_QUERY_PARAM_KEYS,
|
|
26
|
+
'pagination',
|
|
27
|
+
'count',
|
|
28
|
+
'ordering'
|
|
29
|
+
];
|
|
30
|
+
/**
|
|
31
|
+
* Root-level body.data keys reserved for core (id, documentId).
|
|
32
|
+
* These cannot be added as custom input params via contentAPI.addInputParams.
|
|
33
|
+
*/ const RESERVED_INPUT_PARAM_KEYS = [
|
|
34
|
+
constants.ID_ATTRIBUTE,
|
|
35
|
+
constants.DOC_ID_ATTRIBUTE
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
export { ALLOWED_QUERY_PARAM_KEYS, RESERVED_INPUT_PARAM_KEYS, SHARED_QUERY_PARAM_KEYS };
|
|
39
|
+
//# sourceMappingURL=content-api-constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-api-constants.mjs","sources":["../src/content-api-constants.ts"],"sourcesContent":["import { constants } from './content-types';\n\n/**\n * Param keys shared by the Content API (query) and the document service (query building).\n * Add new shared params here only; both ALLOWED_QUERY_PARAM_KEYS and ALLOWED_DOCUMENT_PARAM_KEYS derive from this.\n */\nexport const SHARED_QUERY_PARAM_KEYS = [\n 'filters',\n 'sort',\n 'fields',\n 'populate',\n 'status',\n 'locale',\n 'page',\n 'pageSize',\n 'start',\n 'limit',\n '_q',\n 'hasPublishedVersion',\n] as const;\n\n/**\n * Core query param keys allowed by the Content API (validate/sanitize query).\n * Used when strictParams is true. User code and plugins can add additional keys via contentAPI.addQueryParams.\n * = SHARED_QUERY_PARAM_KEYS + Content API–only keys (pagination, count, ordering).\n */\nexport const ALLOWED_QUERY_PARAM_KEYS = [\n ...SHARED_QUERY_PARAM_KEYS,\n 'pagination',\n 'count',\n 'ordering',\n] as const;\n\n/**\n * Root-level body.data keys reserved for core (id, documentId).\n * These cannot be added as custom input params via contentAPI.addInputParams.\n */\nexport const RESERVED_INPUT_PARAM_KEYS = [\n constants.ID_ATTRIBUTE,\n constants.DOC_ID_ATTRIBUTE,\n] as const;\n"],"names":["SHARED_QUERY_PARAM_KEYS","ALLOWED_QUERY_PARAM_KEYS","RESERVED_INPUT_PARAM_KEYS","constants","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE"],"mappings":";;AAEA;;;UAIaA,uBAA0B,GAAA;AACrC,IAAA,SAAA;AACA,IAAA,MAAA;AACA,IAAA,QAAA;AACA,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,QAAA;AACA,IAAA,MAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AACA,IAAA,IAAA;AACA,IAAA;;AAGF;;;;UAKaC,wBAA2B,GAAA;AACnCD,IAAAA,GAAAA,uBAAAA;AACH,IAAA,YAAA;AACA,IAAA,OAAA;AACA,IAAA;;AAGF;;;UAIaE,yBAA4B,GAAA;AACvCC,IAAAA,SAAAA,CAAUC,YAAY;AACtBD,IAAAA,SAAAA,CAAUE;;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { z } from 'zod/v4';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal route shape used by sanitize/validate to derive allowed extra query/input params
|
|
4
|
+
* from the route's request schema. When present, extra keys are taken from route.request.query
|
|
5
|
+
* / route.request.body and validated or sanitized with Zod.
|
|
6
|
+
*/
|
|
7
|
+
export interface RouteLike {
|
|
8
|
+
request?: {
|
|
9
|
+
query?: Record<string, z.ZodTypeAny>;
|
|
10
|
+
body?: Record<string, z.ZodTypeAny>;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** Extra query param keys from the route's request.query (excluding core ALLOWED_QUERY_PARAM_KEYS). */
|
|
14
|
+
export declare function getExtraQueryKeysFromRoute(route?: RouteLike): string[];
|
|
15
|
+
/** Root-level keys from the route's request.body['application/json'] schema shape (for Zod object schemas). */
|
|
16
|
+
export declare function getExtraRootKeysFromRouteBody(route?: RouteLike): string[];
|
|
17
|
+
//# sourceMappingURL=content-api-route-params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-api-route-params.d.ts","sourceRoot":"","sources":["../src/content-api-route-params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAIhC;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;KACrC,CAAC;CACH;AAED,uGAAuG;AACvG,wBAAgB,0BAA0B,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,EAAE,CAItE;AAED,+GAA+G;AAC/G,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,EAAE,CAUzE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var contentApiConstants = require('./content-api-constants.js');
|
|
4
|
+
|
|
5
|
+
/** Extra query param keys from the route's request.query (excluding core ALLOWED_QUERY_PARAM_KEYS). */ function getExtraQueryKeysFromRoute(route) {
|
|
6
|
+
if (!route?.request?.query) return [];
|
|
7
|
+
const coreKeys = new Set(contentApiConstants.ALLOWED_QUERY_PARAM_KEYS);
|
|
8
|
+
return Object.keys(route.request.query).filter((key)=>!coreKeys.has(key));
|
|
9
|
+
}
|
|
10
|
+
/** Root-level keys from the route's request.body['application/json'] schema shape (for Zod object schemas). */ function getExtraRootKeysFromRouteBody(route) {
|
|
11
|
+
const bodySchema = route?.request?.body?.['application/json'];
|
|
12
|
+
if (!bodySchema || typeof bodySchema !== 'object') return [];
|
|
13
|
+
if ('shape' in bodySchema && typeof bodySchema.shape === 'object') {
|
|
14
|
+
return Object.keys(bodySchema.shape);
|
|
15
|
+
}
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
exports.getExtraQueryKeysFromRoute = getExtraQueryKeysFromRoute;
|
|
20
|
+
exports.getExtraRootKeysFromRouteBody = getExtraRootKeysFromRouteBody;
|
|
21
|
+
//# sourceMappingURL=content-api-route-params.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-api-route-params.js","sources":["../src/content-api-route-params.ts"],"sourcesContent":["import type { z } from 'zod/v4';\n\nimport { ALLOWED_QUERY_PARAM_KEYS } from './content-api-constants';\n\n/**\n * Minimal route shape used by sanitize/validate to derive allowed extra query/input params\n * from the route's request schema. When present, extra keys are taken from route.request.query\n * / route.request.body and validated or sanitized with Zod.\n */\nexport interface RouteLike {\n request?: {\n query?: Record<string, z.ZodTypeAny>;\n body?: Record<string, z.ZodTypeAny>;\n };\n}\n\n/** Extra query param keys from the route's request.query (excluding core ALLOWED_QUERY_PARAM_KEYS). */\nexport function getExtraQueryKeysFromRoute(route?: RouteLike): string[] {\n if (!route?.request?.query) return [];\n const coreKeys = new Set<string>(ALLOWED_QUERY_PARAM_KEYS as readonly string[]);\n return Object.keys(route.request.query).filter((key) => !coreKeys.has(key));\n}\n\n/** Root-level keys from the route's request.body['application/json'] schema shape (for Zod object schemas). */\nexport function getExtraRootKeysFromRouteBody(route?: RouteLike): string[] {\n const bodySchema = route?.request?.body?.['application/json'];\n if (!bodySchema || typeof bodySchema !== 'object') return [];\n if (\n 'shape' in bodySchema &&\n typeof (bodySchema as { shape: Record<string, unknown> }).shape === 'object'\n ) {\n return Object.keys((bodySchema as { shape: Record<string, unknown> }).shape);\n }\n return [];\n}\n"],"names":["getExtraQueryKeysFromRoute","route","request","query","coreKeys","Set","ALLOWED_QUERY_PARAM_KEYS","Object","keys","filter","key","has","getExtraRootKeysFromRouteBody","bodySchema","body","shape"],"mappings":";;;;AAgBA,wGACO,SAASA,0BAAAA,CAA2BC,KAAiB,EAAA;AAC1D,IAAA,IAAI,CAACA,KAAAA,EAAOC,OAASC,EAAAA,KAAAA,EAAO,OAAO,EAAE;IACrC,MAAMC,QAAAA,GAAW,IAAIC,GAAYC,CAAAA,4CAAAA,CAAAA;AACjC,IAAA,OAAOC,MAAOC,CAAAA,IAAI,CAACP,KAAAA,CAAMC,OAAO,CAACC,KAAK,CAAEM,CAAAA,MAAM,CAAC,CAACC,GAAAA,GAAQ,CAACN,QAAAA,CAASO,GAAG,CAACD,GAAAA,CAAAA,CAAAA;AACxE;AAEA,gHACO,SAASE,6BAAAA,CAA8BX,KAAiB,EAAA;AAC7D,IAAA,MAAMY,UAAaZ,GAAAA,KAAAA,EAAOC,OAASY,EAAAA,IAAAA,GAAO,kBAAmB,CAAA;AAC7D,IAAA,IAAI,CAACD,UAAc,IAAA,OAAOA,UAAe,KAAA,QAAA,EAAU,OAAO,EAAE;AAC5D,IAAA,IACE,WAAWA,UACX,IAAA,OAAO,UAAmDE,CAAAA,KAAK,KAAK,QACpE,EAAA;AACA,QAAA,OAAOR,MAAOC,CAAAA,IAAI,CAAEK,WAAkDE,KAAK,CAAA;AAC7E;AACA,IAAA,OAAO,EAAE;AACX;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ALLOWED_QUERY_PARAM_KEYS } from './content-api-constants.mjs';
|
|
2
|
+
|
|
3
|
+
/** Extra query param keys from the route's request.query (excluding core ALLOWED_QUERY_PARAM_KEYS). */ function getExtraQueryKeysFromRoute(route) {
|
|
4
|
+
if (!route?.request?.query) return [];
|
|
5
|
+
const coreKeys = new Set(ALLOWED_QUERY_PARAM_KEYS);
|
|
6
|
+
return Object.keys(route.request.query).filter((key)=>!coreKeys.has(key));
|
|
7
|
+
}
|
|
8
|
+
/** Root-level keys from the route's request.body['application/json'] schema shape (for Zod object schemas). */ function getExtraRootKeysFromRouteBody(route) {
|
|
9
|
+
const bodySchema = route?.request?.body?.['application/json'];
|
|
10
|
+
if (!bodySchema || typeof bodySchema !== 'object') return [];
|
|
11
|
+
if ('shape' in bodySchema && typeof bodySchema.shape === 'object') {
|
|
12
|
+
return Object.keys(bodySchema.shape);
|
|
13
|
+
}
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export { getExtraQueryKeysFromRoute, getExtraRootKeysFromRouteBody };
|
|
18
|
+
//# sourceMappingURL=content-api-route-params.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-api-route-params.mjs","sources":["../src/content-api-route-params.ts"],"sourcesContent":["import type { z } from 'zod/v4';\n\nimport { ALLOWED_QUERY_PARAM_KEYS } from './content-api-constants';\n\n/**\n * Minimal route shape used by sanitize/validate to derive allowed extra query/input params\n * from the route's request schema. When present, extra keys are taken from route.request.query\n * / route.request.body and validated or sanitized with Zod.\n */\nexport interface RouteLike {\n request?: {\n query?: Record<string, z.ZodTypeAny>;\n body?: Record<string, z.ZodTypeAny>;\n };\n}\n\n/** Extra query param keys from the route's request.query (excluding core ALLOWED_QUERY_PARAM_KEYS). */\nexport function getExtraQueryKeysFromRoute(route?: RouteLike): string[] {\n if (!route?.request?.query) return [];\n const coreKeys = new Set<string>(ALLOWED_QUERY_PARAM_KEYS as readonly string[]);\n return Object.keys(route.request.query).filter((key) => !coreKeys.has(key));\n}\n\n/** Root-level keys from the route's request.body['application/json'] schema shape (for Zod object schemas). */\nexport function getExtraRootKeysFromRouteBody(route?: RouteLike): string[] {\n const bodySchema = route?.request?.body?.['application/json'];\n if (!bodySchema || typeof bodySchema !== 'object') return [];\n if (\n 'shape' in bodySchema &&\n typeof (bodySchema as { shape: Record<string, unknown> }).shape === 'object'\n ) {\n return Object.keys((bodySchema as { shape: Record<string, unknown> }).shape);\n }\n return [];\n}\n"],"names":["getExtraQueryKeysFromRoute","route","request","query","coreKeys","Set","ALLOWED_QUERY_PARAM_KEYS","Object","keys","filter","key","has","getExtraRootKeysFromRouteBody","bodySchema","body","shape"],"mappings":";;AAgBA,wGACO,SAASA,0BAAAA,CAA2BC,KAAiB,EAAA;AAC1D,IAAA,IAAI,CAACA,KAAAA,EAAOC,OAASC,EAAAA,KAAAA,EAAO,OAAO,EAAE;IACrC,MAAMC,QAAAA,GAAW,IAAIC,GAAYC,CAAAA,wBAAAA,CAAAA;AACjC,IAAA,OAAOC,MAAOC,CAAAA,IAAI,CAACP,KAAAA,CAAMC,OAAO,CAACC,KAAK,CAAEM,CAAAA,MAAM,CAAC,CAACC,GAAAA,GAAQ,CAACN,QAAAA,CAASO,GAAG,CAACD,GAAAA,CAAAA,CAAAA;AACxE;AAEA,gHACO,SAASE,6BAAAA,CAA8BX,KAAiB,EAAA;AAC7D,IAAA,MAAMY,UAAaZ,GAAAA,KAAAA,EAAOC,OAASY,EAAAA,IAAAA,GAAO,kBAAmB,CAAA;AAC7D,IAAA,IAAI,CAACD,UAAc,IAAA,OAAOA,UAAe,KAAA,QAAA,EAAU,OAAO,EAAE;AAC5D,IAAA,IACE,WAAWA,UACX,IAAA,OAAO,UAAmDE,CAAAA,KAAK,KAAK,QACpE,EAAA;AACA,QAAA,OAAOR,MAAOC,CAAAA,IAAI,CAAEK,WAAkDE,KAAK,CAAA;AAC7E;AACA,IAAA,OAAO,EAAE;AACX;;;;"}
|
package/dist/content-types.d.ts
CHANGED
|
@@ -11,6 +11,14 @@ declare const constants: {
|
|
|
11
11
|
SINGLE_TYPE: string;
|
|
12
12
|
COLLECTION_TYPE: string;
|
|
13
13
|
};
|
|
14
|
+
/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */
|
|
15
|
+
declare const ID_FIELDS: string[];
|
|
16
|
+
/** Keys accepted on morphTo relation payloads (e.g. __type). */
|
|
17
|
+
declare const MORPH_TO_KEYS: string[];
|
|
18
|
+
/** Keys accepted on dynamic zone component payloads (e.g. __component). */
|
|
19
|
+
declare const DYNAMIC_ZONE_KEYS: string[];
|
|
20
|
+
/** Relation operation keys (connect, disconnect, set, options). */
|
|
21
|
+
declare const RELATION_OPERATION_KEYS: string[];
|
|
14
22
|
declare const getTimestamps: (model: Model) => string[];
|
|
15
23
|
declare const getCreatorFields: (model: Model) => string[];
|
|
16
24
|
declare const getNonWritableAttributes: (model: Model) => string[];
|
|
@@ -51,7 +59,7 @@ declare const getDoesAttributeRequireValidation: (attribute: Attribute) => any;
|
|
|
51
59
|
declare const isMediaAttribute: (attribute?: Attribute) => boolean;
|
|
52
60
|
declare const isRelationalAttribute: (attribute?: Attribute) => attribute is RelationalAttribute;
|
|
53
61
|
declare const hasRelationReordering: (attribute?: Attribute) => boolean;
|
|
54
|
-
declare const isComponentAttribute: (attribute
|
|
62
|
+
declare const isComponentAttribute: (attribute?: Attribute) => attribute is ComponentAttribute | DynamicZoneAttribute;
|
|
55
63
|
declare const isDynamicZoneAttribute: (attribute?: Attribute) => attribute is DynamicZoneAttribute;
|
|
56
64
|
declare const isMorphToRelationalAttribute: (attribute?: Attribute) => boolean;
|
|
57
65
|
declare const getComponentAttributes: (schema: Model) => string[];
|
|
@@ -70,5 +78,5 @@ declare const isTypedAttribute: (attribute: Attribute, type: string) => boolean;
|
|
|
70
78
|
* @returns {string}
|
|
71
79
|
*/
|
|
72
80
|
declare const getContentTypeRoutePrefix: (contentType: WithRequired<Model, 'info'>) => string;
|
|
73
|
-
export { isSchema, isContentTypeSchema, isComponentSchema, isScalarAttribute, isMediaAttribute, isRelationalAttribute, hasRelationReordering, isComponentAttribute, isDynamicZoneAttribute, isMorphToRelationalAttribute, isTypedAttribute, getPrivateAttributes, isPrivateAttribute, constants, getNonWritableAttributes, getComponentAttributes, getMediaAttributes, getScalarAttributes, getRelationalAttributes, getWritableAttributes, isWritableAttribute, getNonVisibleAttributes, getVisibleAttributes, getTimestamps, getCreatorFields, isVisibleAttribute, getOptions, isDraft, hasDraftAndPublish, hasFirstPublishedAtField, isSingleType, isCollectionType, isKind, getContentTypeRoutePrefix, getDoesAttributeRequireValidation, };
|
|
81
|
+
export { isSchema, isContentTypeSchema, isComponentSchema, isScalarAttribute, isMediaAttribute, isRelationalAttribute, hasRelationReordering, isComponentAttribute, isDynamicZoneAttribute, isMorphToRelationalAttribute, isTypedAttribute, getPrivateAttributes, isPrivateAttribute, constants, ID_FIELDS, MORPH_TO_KEYS, DYNAMIC_ZONE_KEYS, RELATION_OPERATION_KEYS, getNonWritableAttributes, getComponentAttributes, getMediaAttributes, getScalarAttributes, getRelationalAttributes, getWritableAttributes, isWritableAttribute, getNonVisibleAttributes, getVisibleAttributes, getTimestamps, getCreatorFields, isVisibleAttribute, getOptions, isDraft, hasDraftAndPublish, hasFirstPublishedAtField, isSingleType, isCollectionType, isKind, getContentTypeRoutePrefix, getDoesAttributeRequireValidation, };
|
|
74
82
|
//# sourceMappingURL=content-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../src/content-types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,KAAK,EACL,IAAI,EACJ,SAAS,EACT,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACb,MAAM,SAAS,CAAC;AAgBjB,QAAA,MAAM,SAAS;;;;;;;;;;;CAWd,CAAC;AAEF,QAAA,MAAM,aAAa,UAAW,KAAK,aAYlC,CAAC;AAEF,QAAA,MAAM,gBAAgB,UAAW,KAAK,aAYrC,CAAC;AAEF,QAAA,MAAM,wBAAwB,UAAW,KAAK,aAe7C,CAAC;AAEF,QAAA,MAAM,qBAAqB,UAAW,KAAK,aAI1C,CAAC;AAEF,QAAA,MAAM,mBAAmB,UAAW,KAAK,iBAAiB,MAAM,YAE/D,CAAC;AAEF,QAAA,MAAM,uBAAuB,UAAW,KAAK,aAc5C,CAAC;AAEF,QAAA,MAAM,oBAAoB,UAAW,KAAK,aAEzC,CAAC;AAEF,QAAA,MAAM,kBAAkB,UAAW,KAAK,iBAAiB,MAAM,YAE9D,CAAC;AAEF,QAAA,MAAM,UAAU,UAAW,KAAK;;;;;;;EACmC,CAAC;AAEpE,QAAA,MAAM,kBAAkB,UAAW,KAAK,YACiB,CAAC;AAE1D,QAAA,MAAM,wBAAwB,UAAW,KAAK,QAEnB,CAAC;AAE5B,QAAA,MAAM,OAAO,2BAA4B,CAAC,SAAS,KAAK,YACmB,CAAC;AAE5E,QAAA,MAAM,QAAQ,SAAU,OAAO,kBAQ9B,CAAC;AAEF,QAAA,MAAM,iBAAiB,SAAU,OAAO;eAAgC,WAAW;CAElF,CAAC;AAEF,QAAA,MAAM,mBAAmB,SAAU,OAAO;eAAgC,aAAa;CAEtF,CAAC;AAEF,QAAA,MAAM,YAAY;;aAAuD,CAAC;AAC1E,QAAA,MAAM,gBAAgB;;aAA2D,CAAC;AAClF,QAAA,MAAM,MAAM,SAAU,IAAI,aAAa,KAAK,YAAwB,CAAC;AAQrE,QAAA,MAAM,oBAAoB,UAAW,KAAK,aAKzC,CAAC;AAEF,QAAA,MAAM,kBAAkB,UAAW,KAAK,iBAAiB,MAAM,YAK9D,CAAC;AAEF,QAAA,MAAM,iBAAiB,eAAgB,SAAS,wBAE/C,CAAC;AAEF,QAAA,MAAM,iCAAiC,cAAe,SAAS,QAS9D,CAAC;AACF,QAAA,MAAM,gBAAgB,eAAgB,SAAS,YAAgC,CAAC;AAChF,QAAA,MAAM,qBAAqB,eAAgB,SAAS,qCACpB,CAAC;AAGjC,QAAA,MAAM,qBAAqB,eAAgB,SAAS,YACsC,CAAC;AAE3F,QAAA,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"content-types.d.ts","sourceRoot":"","sources":["../src/content-types.ts"],"names":[],"mappings":"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"}
|
package/dist/content-types.js
CHANGED
|
@@ -25,6 +25,22 @@ const constants = {
|
|
|
25
25
|
SINGLE_TYPE,
|
|
26
26
|
COLLECTION_TYPE
|
|
27
27
|
};
|
|
28
|
+
/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */ const ID_FIELDS = [
|
|
29
|
+
ID_ATTRIBUTE,
|
|
30
|
+
DOC_ID_ATTRIBUTE
|
|
31
|
+
];
|
|
32
|
+
/** Keys accepted on morphTo relation payloads (e.g. __type). */ const MORPH_TO_KEYS = [
|
|
33
|
+
'__type'
|
|
34
|
+
];
|
|
35
|
+
/** Keys accepted on dynamic zone component payloads (e.g. __component). */ const DYNAMIC_ZONE_KEYS = [
|
|
36
|
+
'__component'
|
|
37
|
+
];
|
|
38
|
+
/** Relation operation keys (connect, disconnect, set, options). */ const RELATION_OPERATION_KEYS = [
|
|
39
|
+
'connect',
|
|
40
|
+
'disconnect',
|
|
41
|
+
'set',
|
|
42
|
+
'options'
|
|
43
|
+
];
|
|
28
44
|
const getTimestamps = (model)=>{
|
|
29
45
|
const attributes = [];
|
|
30
46
|
if (fp.has(CREATED_AT_ATTRIBUTE, model.attributes)) {
|
|
@@ -128,10 +144,10 @@ const HAS_RELATION_REORDERING = [
|
|
|
128
144
|
'oneToMany'
|
|
129
145
|
];
|
|
130
146
|
const hasRelationReordering = (attribute)=>isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);
|
|
131
|
-
const isComponentAttribute = (attribute)
|
|
147
|
+
const isComponentAttribute = (attribute)=>!!attribute && [
|
|
132
148
|
'component',
|
|
133
149
|
'dynamiczone'
|
|
134
|
-
].includes(attribute
|
|
150
|
+
].includes(attribute.type);
|
|
135
151
|
const isDynamicZoneAttribute = (attribute)=>!!attribute && attribute.type === 'dynamiczone';
|
|
136
152
|
const isMorphToRelationalAttribute = (attribute)=>{
|
|
137
153
|
return !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo');
|
|
@@ -175,6 +191,10 @@ const getRelationalAttributes = (schema)=>{
|
|
|
175
191
|
return isSingleType(contentType) ? _.kebabCase(contentType.info.singularName) : _.kebabCase(contentType.info.pluralName);
|
|
176
192
|
};
|
|
177
193
|
|
|
194
|
+
exports.DYNAMIC_ZONE_KEYS = DYNAMIC_ZONE_KEYS;
|
|
195
|
+
exports.ID_FIELDS = ID_FIELDS;
|
|
196
|
+
exports.MORPH_TO_KEYS = MORPH_TO_KEYS;
|
|
197
|
+
exports.RELATION_OPERATION_KEYS = RELATION_OPERATION_KEYS;
|
|
178
198
|
exports.constants = constants;
|
|
179
199
|
exports.getComponentAttributes = getComponentAttributes;
|
|
180
200
|
exports.getContentTypeRoutePrefix = getContentTypeRoutePrefix;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.js","sources":["../src/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, getOr, union } from 'lodash/fp';\nimport type {\n Model,\n Kind,\n Attribute,\n RelationalAttribute,\n ComponentAttribute,\n DynamicZoneAttribute,\n WithRequired,\n} from './types';\n\nconst SINGLE_TYPE = 'singleType';\nconst COLLECTION_TYPE = 'collectionType';\n\nconst ID_ATTRIBUTE = 'id';\nconst DOC_ID_ATTRIBUTE = 'documentId';\n\nconst PUBLISHED_AT_ATTRIBUTE = 'publishedAt';\nconst FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';\nconst CREATED_BY_ATTRIBUTE = 'createdBy';\nconst UPDATED_BY_ATTRIBUTE = 'updatedBy';\n\nconst CREATED_AT_ATTRIBUTE = 'createdAt';\nconst UPDATED_AT_ATTRIBUTE = 'updatedAt';\n\nconst constants = {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n FIRST_PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n SINGLE_TYPE,\n COLLECTION_TYPE,\n};\n\nconst getTimestamps = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_AT_ATTRIBUTE);\n }\n\n if (has(UPDATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_AT_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getCreatorFields = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_BY_ATTRIBUTE);\n }\n\n if (has(UPDATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_BY_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getNonWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n const nonWritableAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.writable === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonWritableAttributes,\n ]);\n};\n\nconst getWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n return _.difference(Object.keys(model.attributes), getNonWritableAttributes(model));\n};\n\nconst isWritableAttribute = (model: Model, attributeName: string) => {\n return getWritableAttributes(model).includes(attributeName);\n};\n\nconst getNonVisibleAttributes = (model: Model) => {\n const nonVisibleAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.visible === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonVisibleAttributes,\n ]);\n};\n\nconst getVisibleAttributes = (model: Model) => {\n return _.difference(_.keys(model.attributes), getNonVisibleAttributes(model));\n};\n\nconst isVisibleAttribute = (model: Model, attributeName: string) => {\n return getVisibleAttributes(model).includes(attributeName);\n};\n\nconst getOptions = (model: Model) =>\n _.assign({ draftAndPublish: false }, _.get(model, 'options', {}));\n\nconst hasDraftAndPublish = (model: Model) =>\n _.get(model, 'options.draftAndPublish', false) === true;\n\nconst hasFirstPublishedAtField = (model: Model) =>\n strapi.config.get('features.future.experimental_firstPublishedAt', false) &&\n hasDraftAndPublish(model);\n\nconst isDraft = <T extends object>(data: T, model: Model) =>\n hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null;\n\nconst isSchema = (data: unknown): data is Model => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'modelType' in data &&\n typeof data.modelType === 'string' &&\n ['component', 'contentType'].includes(data.modelType)\n );\n};\n\nconst isComponentSchema = (data: unknown): data is Model & { modelType: 'component' } => {\n return isSchema(data) && data.modelType === 'component';\n};\n\nconst isContentTypeSchema = (data: unknown): data is Model & { modelType: 'contentType' } => {\n return isSchema(data) && data.modelType === 'contentType';\n};\n\nconst isSingleType = ({ kind = COLLECTION_TYPE }) => kind === SINGLE_TYPE;\nconst isCollectionType = ({ kind = COLLECTION_TYPE }) => kind === COLLECTION_TYPE;\nconst isKind = (kind: Kind) => (model: Model) => model.kind === kind;\n\nconst getStoredPrivateAttributes = (model: Model) =>\n union(\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>,\n getOr([], 'options.privateAttributes', model)\n );\n\nconst getPrivateAttributes = (model: Model) => {\n return _.union(\n getStoredPrivateAttributes(model),\n _.keys(_.pickBy(model.attributes, (attr) => !!attr.private))\n );\n};\n\nconst isPrivateAttribute = (model: Model, attributeName: string) => {\n if (model?.attributes?.[attributeName]?.private === true) {\n return true;\n }\n return getStoredPrivateAttributes(model).includes(attributeName);\n};\n\nconst isScalarAttribute = (attribute?: Attribute) => {\n return attribute && !['media', 'component', 'relation', 'dynamiczone'].includes(attribute.type);\n};\n\nconst getDoesAttributeRequireValidation = (attribute: Attribute) => {\n return (\n attribute.required ||\n attribute.unique ||\n Object.prototype.hasOwnProperty.call(attribute, 'max') ||\n Object.prototype.hasOwnProperty.call(attribute, 'min') ||\n Object.prototype.hasOwnProperty.call(attribute, 'maxLength') ||\n Object.prototype.hasOwnProperty.call(attribute, 'minLength')\n );\n};\nconst isMediaAttribute = (attribute?: Attribute) => attribute?.type === 'media';\nconst isRelationalAttribute = (attribute?: Attribute): attribute is RelationalAttribute =>\n attribute?.type === 'relation';\n\nconst HAS_RELATION_REORDERING = ['manyToMany', 'manyToOne', 'oneToMany'];\nconst hasRelationReordering = (attribute?: Attribute) =>\n isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);\n\nconst isComponentAttribute = (\n attribute: Attribute\n): attribute is ComponentAttribute | DynamicZoneAttribute =>\n ['component', 'dynamiczone'].includes(attribute?.type);\n\nconst isDynamicZoneAttribute = (attribute?: Attribute): attribute is DynamicZoneAttribute =>\n !!attribute && attribute.type === 'dynamiczone';\nconst isMorphToRelationalAttribute = (attribute?: Attribute) => {\n return (\n !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo')\n );\n};\n\nconst getComponentAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isComponentAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getMediaAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isMediaAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getScalarAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isScalarAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getRelationalAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isRelationalAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\n/**\n * Checks if an attribute is of type `type`\n * @param {object} attribute\n * @param {string} type\n */\nconst isTypedAttribute = (attribute: Attribute, type: string) => {\n return _.has(attribute, 'type') && attribute.type === type;\n};\n\n/**\n * Returns a route prefix for a contentType\n * @param {object} contentType\n * @returns {string}\n */\nconst getContentTypeRoutePrefix = (contentType: WithRequired<Model, 'info'>) => {\n return isSingleType(contentType)\n ? _.kebabCase(contentType.info.singularName)\n : _.kebabCase(contentType.info.pluralName);\n};\n\nexport {\n isSchema,\n isContentTypeSchema,\n isComponentSchema,\n isScalarAttribute,\n isMediaAttribute,\n isRelationalAttribute,\n hasRelationReordering,\n isComponentAttribute,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n isTypedAttribute,\n getPrivateAttributes,\n isPrivateAttribute,\n constants,\n getNonWritableAttributes,\n getComponentAttributes,\n getMediaAttributes,\n getScalarAttributes,\n getRelationalAttributes,\n getWritableAttributes,\n isWritableAttribute,\n getNonVisibleAttributes,\n getVisibleAttributes,\n getTimestamps,\n getCreatorFields,\n isVisibleAttribute,\n getOptions,\n isDraft,\n hasDraftAndPublish,\n hasFirstPublishedAtField,\n isSingleType,\n isCollectionType,\n isKind,\n getContentTypeRoutePrefix,\n getDoesAttributeRequireValidation,\n};\n"],"names":["SINGLE_TYPE","COLLECTION_TYPE","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","FIRST_PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","attributeName","includes","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","draftAndPublish","get","hasDraftAndPublish","hasFirstPublishedAtField","strapi","config","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","getStoredPrivateAttributes","union","getOr","getPrivateAttributes","pickBy","private","isPrivateAttribute","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","startsWith","getComponentAttributes","schema","getMediaAttributes","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-types.js","sources":["../src/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, getOr, union } from 'lodash/fp';\nimport type {\n Model,\n Kind,\n Attribute,\n RelationalAttribute,\n ComponentAttribute,\n DynamicZoneAttribute,\n WithRequired,\n} from './types';\n\nconst SINGLE_TYPE = 'singleType';\nconst COLLECTION_TYPE = 'collectionType';\n\nconst ID_ATTRIBUTE = 'id';\nconst DOC_ID_ATTRIBUTE = 'documentId';\n\nconst PUBLISHED_AT_ATTRIBUTE = 'publishedAt';\nconst FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';\nconst CREATED_BY_ATTRIBUTE = 'createdBy';\nconst UPDATED_BY_ATTRIBUTE = 'updatedBy';\n\nconst CREATED_AT_ATTRIBUTE = 'createdAt';\nconst UPDATED_AT_ATTRIBUTE = 'updatedAt';\n\nconst constants = {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n FIRST_PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n SINGLE_TYPE,\n COLLECTION_TYPE,\n};\n\n/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */\nconst ID_FIELDS: string[] = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n/** Keys accepted on morphTo relation payloads (e.g. __type). */\nconst MORPH_TO_KEYS: string[] = ['__type'];\n/** Keys accepted on dynamic zone component payloads (e.g. __component). */\nconst DYNAMIC_ZONE_KEYS: string[] = ['__component'];\n/** Relation operation keys (connect, disconnect, set, options). */\nconst RELATION_OPERATION_KEYS: string[] = ['connect', 'disconnect', 'set', 'options'];\n\nconst getTimestamps = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_AT_ATTRIBUTE);\n }\n\n if (has(UPDATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_AT_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getCreatorFields = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_BY_ATTRIBUTE);\n }\n\n if (has(UPDATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_BY_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getNonWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n const nonWritableAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.writable === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonWritableAttributes,\n ]);\n};\n\nconst getWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n return _.difference(Object.keys(model.attributes), getNonWritableAttributes(model));\n};\n\nconst isWritableAttribute = (model: Model, attributeName: string) => {\n return getWritableAttributes(model).includes(attributeName);\n};\n\nconst getNonVisibleAttributes = (model: Model) => {\n const nonVisibleAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.visible === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonVisibleAttributes,\n ]);\n};\n\nconst getVisibleAttributes = (model: Model) => {\n return _.difference(_.keys(model.attributes), getNonVisibleAttributes(model));\n};\n\nconst isVisibleAttribute = (model: Model, attributeName: string) => {\n return getVisibleAttributes(model).includes(attributeName);\n};\n\nconst getOptions = (model: Model) =>\n _.assign({ draftAndPublish: false }, _.get(model, 'options', {}));\n\nconst hasDraftAndPublish = (model: Model) =>\n _.get(model, 'options.draftAndPublish', false) === true;\n\nconst hasFirstPublishedAtField = (model: Model) =>\n strapi.config.get('features.future.experimental_firstPublishedAt', false) &&\n hasDraftAndPublish(model);\n\nconst isDraft = <T extends object>(data: T, model: Model) =>\n hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null;\n\nconst isSchema = (data: unknown): data is Model => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'modelType' in data &&\n typeof data.modelType === 'string' &&\n ['component', 'contentType'].includes(data.modelType)\n );\n};\n\nconst isComponentSchema = (data: unknown): data is Model & { modelType: 'component' } => {\n return isSchema(data) && data.modelType === 'component';\n};\n\nconst isContentTypeSchema = (data: unknown): data is Model & { modelType: 'contentType' } => {\n return isSchema(data) && data.modelType === 'contentType';\n};\n\nconst isSingleType = ({ kind = COLLECTION_TYPE }) => kind === SINGLE_TYPE;\nconst isCollectionType = ({ kind = COLLECTION_TYPE }) => kind === COLLECTION_TYPE;\nconst isKind = (kind: Kind) => (model: Model) => model.kind === kind;\n\nconst getStoredPrivateAttributes = (model: Model) =>\n union(\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>,\n getOr([], 'options.privateAttributes', model)\n );\n\nconst getPrivateAttributes = (model: Model) => {\n return _.union(\n getStoredPrivateAttributes(model),\n _.keys(_.pickBy(model.attributes, (attr) => !!attr.private))\n );\n};\n\nconst isPrivateAttribute = (model: Model, attributeName: string) => {\n if (model?.attributes?.[attributeName]?.private === true) {\n return true;\n }\n return getStoredPrivateAttributes(model).includes(attributeName);\n};\n\nconst isScalarAttribute = (attribute?: Attribute) => {\n return attribute && !['media', 'component', 'relation', 'dynamiczone'].includes(attribute.type);\n};\n\nconst getDoesAttributeRequireValidation = (attribute: Attribute) => {\n return (\n attribute.required ||\n attribute.unique ||\n Object.prototype.hasOwnProperty.call(attribute, 'max') ||\n Object.prototype.hasOwnProperty.call(attribute, 'min') ||\n Object.prototype.hasOwnProperty.call(attribute, 'maxLength') ||\n Object.prototype.hasOwnProperty.call(attribute, 'minLength')\n );\n};\nconst isMediaAttribute = (attribute?: Attribute) => attribute?.type === 'media';\nconst isRelationalAttribute = (attribute?: Attribute): attribute is RelationalAttribute =>\n attribute?.type === 'relation';\n\nconst HAS_RELATION_REORDERING = ['manyToMany', 'manyToOne', 'oneToMany'];\nconst hasRelationReordering = (attribute?: Attribute) =>\n isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);\n\nconst isComponentAttribute = (\n attribute?: Attribute\n): attribute is ComponentAttribute | DynamicZoneAttribute =>\n !!attribute && ['component', 'dynamiczone'].includes(attribute.type);\n\nconst isDynamicZoneAttribute = (attribute?: Attribute): attribute is DynamicZoneAttribute =>\n !!attribute && attribute.type === 'dynamiczone';\nconst isMorphToRelationalAttribute = (attribute?: Attribute) => {\n return (\n !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo')\n );\n};\n\nconst getComponentAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isComponentAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getMediaAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isMediaAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getScalarAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isScalarAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getRelationalAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isRelationalAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\n/**\n * Checks if an attribute is of type `type`\n * @param {object} attribute\n * @param {string} type\n */\nconst isTypedAttribute = (attribute: Attribute, type: string) => {\n return _.has(attribute, 'type') && attribute.type === type;\n};\n\n/**\n * Returns a route prefix for a contentType\n * @param {object} contentType\n * @returns {string}\n */\nconst getContentTypeRoutePrefix = (contentType: WithRequired<Model, 'info'>) => {\n return isSingleType(contentType)\n ? _.kebabCase(contentType.info.singularName)\n : _.kebabCase(contentType.info.pluralName);\n};\n\nexport {\n isSchema,\n isContentTypeSchema,\n isComponentSchema,\n isScalarAttribute,\n isMediaAttribute,\n isRelationalAttribute,\n hasRelationReordering,\n isComponentAttribute,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n isTypedAttribute,\n getPrivateAttributes,\n isPrivateAttribute,\n constants,\n ID_FIELDS,\n MORPH_TO_KEYS,\n DYNAMIC_ZONE_KEYS,\n RELATION_OPERATION_KEYS,\n getNonWritableAttributes,\n getComponentAttributes,\n getMediaAttributes,\n getScalarAttributes,\n getRelationalAttributes,\n getWritableAttributes,\n isWritableAttribute,\n getNonVisibleAttributes,\n getVisibleAttributes,\n getTimestamps,\n getCreatorFields,\n isVisibleAttribute,\n getOptions,\n isDraft,\n hasDraftAndPublish,\n hasFirstPublishedAtField,\n isSingleType,\n isCollectionType,\n isKind,\n getContentTypeRoutePrefix,\n getDoesAttributeRequireValidation,\n};\n"],"names":["SINGLE_TYPE","COLLECTION_TYPE","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","FIRST_PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","ID_FIELDS","MORPH_TO_KEYS","DYNAMIC_ZONE_KEYS","RELATION_OPERATION_KEYS","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","attributeName","includes","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","draftAndPublish","get","hasDraftAndPublish","hasFirstPublishedAtField","strapi","config","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","getStoredPrivateAttributes","union","getOr","getPrivateAttributes","pickBy","private","isPrivateAttribute","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","startsWith","getComponentAttributes","schema","getMediaAttributes","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
package/dist/content-types.mjs
CHANGED
|
@@ -23,6 +23,22 @@ const constants = {
|
|
|
23
23
|
SINGLE_TYPE,
|
|
24
24
|
COLLECTION_TYPE
|
|
25
25
|
};
|
|
26
|
+
/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */ const ID_FIELDS = [
|
|
27
|
+
ID_ATTRIBUTE,
|
|
28
|
+
DOC_ID_ATTRIBUTE
|
|
29
|
+
];
|
|
30
|
+
/** Keys accepted on morphTo relation payloads (e.g. __type). */ const MORPH_TO_KEYS = [
|
|
31
|
+
'__type'
|
|
32
|
+
];
|
|
33
|
+
/** Keys accepted on dynamic zone component payloads (e.g. __component). */ const DYNAMIC_ZONE_KEYS = [
|
|
34
|
+
'__component'
|
|
35
|
+
];
|
|
36
|
+
/** Relation operation keys (connect, disconnect, set, options). */ const RELATION_OPERATION_KEYS = [
|
|
37
|
+
'connect',
|
|
38
|
+
'disconnect',
|
|
39
|
+
'set',
|
|
40
|
+
'options'
|
|
41
|
+
];
|
|
26
42
|
const getTimestamps = (model)=>{
|
|
27
43
|
const attributes = [];
|
|
28
44
|
if (has(CREATED_AT_ATTRIBUTE, model.attributes)) {
|
|
@@ -126,10 +142,10 @@ const HAS_RELATION_REORDERING = [
|
|
|
126
142
|
'oneToMany'
|
|
127
143
|
];
|
|
128
144
|
const hasRelationReordering = (attribute)=>isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);
|
|
129
|
-
const isComponentAttribute = (attribute)
|
|
145
|
+
const isComponentAttribute = (attribute)=>!!attribute && [
|
|
130
146
|
'component',
|
|
131
147
|
'dynamiczone'
|
|
132
|
-
].includes(attribute
|
|
148
|
+
].includes(attribute.type);
|
|
133
149
|
const isDynamicZoneAttribute = (attribute)=>!!attribute && attribute.type === 'dynamiczone';
|
|
134
150
|
const isMorphToRelationalAttribute = (attribute)=>{
|
|
135
151
|
return !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo');
|
|
@@ -173,5 +189,5 @@ const getRelationalAttributes = (schema)=>{
|
|
|
173
189
|
return isSingleType(contentType) ? ___default.kebabCase(contentType.info.singularName) : ___default.kebabCase(contentType.info.pluralName);
|
|
174
190
|
};
|
|
175
191
|
|
|
176
|
-
export { constants, getComponentAttributes, getContentTypeRoutePrefix, getCreatorFields, getDoesAttributeRequireValidation, getMediaAttributes, getNonVisibleAttributes, getNonWritableAttributes, getOptions, getPrivateAttributes, getRelationalAttributes, getScalarAttributes, getTimestamps, getVisibleAttributes, getWritableAttributes, hasDraftAndPublish, hasFirstPublishedAtField, hasRelationReordering, isCollectionType, isComponentAttribute, isComponentSchema, isContentTypeSchema, isDraft, isDynamicZoneAttribute, isKind, isMediaAttribute, isMorphToRelationalAttribute, isPrivateAttribute, isRelationalAttribute, isScalarAttribute, isSchema, isSingleType, isTypedAttribute, isVisibleAttribute, isWritableAttribute };
|
|
192
|
+
export { DYNAMIC_ZONE_KEYS, ID_FIELDS, MORPH_TO_KEYS, RELATION_OPERATION_KEYS, constants, getComponentAttributes, getContentTypeRoutePrefix, getCreatorFields, getDoesAttributeRequireValidation, getMediaAttributes, getNonVisibleAttributes, getNonWritableAttributes, getOptions, getPrivateAttributes, getRelationalAttributes, getScalarAttributes, getTimestamps, getVisibleAttributes, getWritableAttributes, hasDraftAndPublish, hasFirstPublishedAtField, hasRelationReordering, isCollectionType, isComponentAttribute, isComponentSchema, isContentTypeSchema, isDraft, isDynamicZoneAttribute, isKind, isMediaAttribute, isMorphToRelationalAttribute, isPrivateAttribute, isRelationalAttribute, isScalarAttribute, isSchema, isSingleType, isTypedAttribute, isVisibleAttribute, isWritableAttribute };
|
|
177
193
|
//# sourceMappingURL=content-types.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-types.mjs","sources":["../src/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, getOr, union } from 'lodash/fp';\nimport type {\n Model,\n Kind,\n Attribute,\n RelationalAttribute,\n ComponentAttribute,\n DynamicZoneAttribute,\n WithRequired,\n} from './types';\n\nconst SINGLE_TYPE = 'singleType';\nconst COLLECTION_TYPE = 'collectionType';\n\nconst ID_ATTRIBUTE = 'id';\nconst DOC_ID_ATTRIBUTE = 'documentId';\n\nconst PUBLISHED_AT_ATTRIBUTE = 'publishedAt';\nconst FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';\nconst CREATED_BY_ATTRIBUTE = 'createdBy';\nconst UPDATED_BY_ATTRIBUTE = 'updatedBy';\n\nconst CREATED_AT_ATTRIBUTE = 'createdAt';\nconst UPDATED_AT_ATTRIBUTE = 'updatedAt';\n\nconst constants = {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n FIRST_PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n SINGLE_TYPE,\n COLLECTION_TYPE,\n};\n\nconst getTimestamps = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_AT_ATTRIBUTE);\n }\n\n if (has(UPDATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_AT_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getCreatorFields = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_BY_ATTRIBUTE);\n }\n\n if (has(UPDATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_BY_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getNonWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n const nonWritableAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.writable === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonWritableAttributes,\n ]);\n};\n\nconst getWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n return _.difference(Object.keys(model.attributes), getNonWritableAttributes(model));\n};\n\nconst isWritableAttribute = (model: Model, attributeName: string) => {\n return getWritableAttributes(model).includes(attributeName);\n};\n\nconst getNonVisibleAttributes = (model: Model) => {\n const nonVisibleAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.visible === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonVisibleAttributes,\n ]);\n};\n\nconst getVisibleAttributes = (model: Model) => {\n return _.difference(_.keys(model.attributes), getNonVisibleAttributes(model));\n};\n\nconst isVisibleAttribute = (model: Model, attributeName: string) => {\n return getVisibleAttributes(model).includes(attributeName);\n};\n\nconst getOptions = (model: Model) =>\n _.assign({ draftAndPublish: false }, _.get(model, 'options', {}));\n\nconst hasDraftAndPublish = (model: Model) =>\n _.get(model, 'options.draftAndPublish', false) === true;\n\nconst hasFirstPublishedAtField = (model: Model) =>\n strapi.config.get('features.future.experimental_firstPublishedAt', false) &&\n hasDraftAndPublish(model);\n\nconst isDraft = <T extends object>(data: T, model: Model) =>\n hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null;\n\nconst isSchema = (data: unknown): data is Model => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'modelType' in data &&\n typeof data.modelType === 'string' &&\n ['component', 'contentType'].includes(data.modelType)\n );\n};\n\nconst isComponentSchema = (data: unknown): data is Model & { modelType: 'component' } => {\n return isSchema(data) && data.modelType === 'component';\n};\n\nconst isContentTypeSchema = (data: unknown): data is Model & { modelType: 'contentType' } => {\n return isSchema(data) && data.modelType === 'contentType';\n};\n\nconst isSingleType = ({ kind = COLLECTION_TYPE }) => kind === SINGLE_TYPE;\nconst isCollectionType = ({ kind = COLLECTION_TYPE }) => kind === COLLECTION_TYPE;\nconst isKind = (kind: Kind) => (model: Model) => model.kind === kind;\n\nconst getStoredPrivateAttributes = (model: Model) =>\n union(\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>,\n getOr([], 'options.privateAttributes', model)\n );\n\nconst getPrivateAttributes = (model: Model) => {\n return _.union(\n getStoredPrivateAttributes(model),\n _.keys(_.pickBy(model.attributes, (attr) => !!attr.private))\n );\n};\n\nconst isPrivateAttribute = (model: Model, attributeName: string) => {\n if (model?.attributes?.[attributeName]?.private === true) {\n return true;\n }\n return getStoredPrivateAttributes(model).includes(attributeName);\n};\n\nconst isScalarAttribute = (attribute?: Attribute) => {\n return attribute && !['media', 'component', 'relation', 'dynamiczone'].includes(attribute.type);\n};\n\nconst getDoesAttributeRequireValidation = (attribute: Attribute) => {\n return (\n attribute.required ||\n attribute.unique ||\n Object.prototype.hasOwnProperty.call(attribute, 'max') ||\n Object.prototype.hasOwnProperty.call(attribute, 'min') ||\n Object.prototype.hasOwnProperty.call(attribute, 'maxLength') ||\n Object.prototype.hasOwnProperty.call(attribute, 'minLength')\n );\n};\nconst isMediaAttribute = (attribute?: Attribute) => attribute?.type === 'media';\nconst isRelationalAttribute = (attribute?: Attribute): attribute is RelationalAttribute =>\n attribute?.type === 'relation';\n\nconst HAS_RELATION_REORDERING = ['manyToMany', 'manyToOne', 'oneToMany'];\nconst hasRelationReordering = (attribute?: Attribute) =>\n isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);\n\nconst isComponentAttribute = (\n attribute: Attribute\n): attribute is ComponentAttribute | DynamicZoneAttribute =>\n ['component', 'dynamiczone'].includes(attribute?.type);\n\nconst isDynamicZoneAttribute = (attribute?: Attribute): attribute is DynamicZoneAttribute =>\n !!attribute && attribute.type === 'dynamiczone';\nconst isMorphToRelationalAttribute = (attribute?: Attribute) => {\n return (\n !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo')\n );\n};\n\nconst getComponentAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isComponentAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getMediaAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isMediaAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getScalarAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isScalarAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getRelationalAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isRelationalAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\n/**\n * Checks if an attribute is of type `type`\n * @param {object} attribute\n * @param {string} type\n */\nconst isTypedAttribute = (attribute: Attribute, type: string) => {\n return _.has(attribute, 'type') && attribute.type === type;\n};\n\n/**\n * Returns a route prefix for a contentType\n * @param {object} contentType\n * @returns {string}\n */\nconst getContentTypeRoutePrefix = (contentType: WithRequired<Model, 'info'>) => {\n return isSingleType(contentType)\n ? _.kebabCase(contentType.info.singularName)\n : _.kebabCase(contentType.info.pluralName);\n};\n\nexport {\n isSchema,\n isContentTypeSchema,\n isComponentSchema,\n isScalarAttribute,\n isMediaAttribute,\n isRelationalAttribute,\n hasRelationReordering,\n isComponentAttribute,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n isTypedAttribute,\n getPrivateAttributes,\n isPrivateAttribute,\n constants,\n getNonWritableAttributes,\n getComponentAttributes,\n getMediaAttributes,\n getScalarAttributes,\n getRelationalAttributes,\n getWritableAttributes,\n isWritableAttribute,\n getNonVisibleAttributes,\n getVisibleAttributes,\n getTimestamps,\n getCreatorFields,\n isVisibleAttribute,\n getOptions,\n isDraft,\n hasDraftAndPublish,\n hasFirstPublishedAtField,\n isSingleType,\n isCollectionType,\n isKind,\n getContentTypeRoutePrefix,\n getDoesAttributeRequireValidation,\n};\n"],"names":["SINGLE_TYPE","COLLECTION_TYPE","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","FIRST_PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","attributeName","includes","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","draftAndPublish","get","hasDraftAndPublish","hasFirstPublishedAtField","strapi","config","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","getStoredPrivateAttributes","union","getOr","getPrivateAttributes","pickBy","private","isPrivateAttribute","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","startsWith","getComponentAttributes","schema","getMediaAttributes","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-types.mjs","sources":["../src/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { has, getOr, union } from 'lodash/fp';\nimport type {\n Model,\n Kind,\n Attribute,\n RelationalAttribute,\n ComponentAttribute,\n DynamicZoneAttribute,\n WithRequired,\n} from './types';\n\nconst SINGLE_TYPE = 'singleType';\nconst COLLECTION_TYPE = 'collectionType';\n\nconst ID_ATTRIBUTE = 'id';\nconst DOC_ID_ATTRIBUTE = 'documentId';\n\nconst PUBLISHED_AT_ATTRIBUTE = 'publishedAt';\nconst FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';\nconst CREATED_BY_ATTRIBUTE = 'createdBy';\nconst UPDATED_BY_ATTRIBUTE = 'updatedBy';\n\nconst CREATED_AT_ATTRIBUTE = 'createdAt';\nconst UPDATED_AT_ATTRIBUTE = 'updatedAt';\n\nconst constants = {\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n FIRST_PUBLISHED_AT_ATTRIBUTE,\n CREATED_BY_ATTRIBUTE,\n UPDATED_BY_ATTRIBUTE,\n CREATED_AT_ATTRIBUTE,\n UPDATED_AT_ATTRIBUTE,\n SINGLE_TYPE,\n COLLECTION_TYPE,\n};\n\n/** ID-like fields accepted at root level and on relations/media/components (validate/sanitize traversal). */\nconst ID_FIELDS: string[] = [ID_ATTRIBUTE, DOC_ID_ATTRIBUTE];\n/** Keys accepted on morphTo relation payloads (e.g. __type). */\nconst MORPH_TO_KEYS: string[] = ['__type'];\n/** Keys accepted on dynamic zone component payloads (e.g. __component). */\nconst DYNAMIC_ZONE_KEYS: string[] = ['__component'];\n/** Relation operation keys (connect, disconnect, set, options). */\nconst RELATION_OPERATION_KEYS: string[] = ['connect', 'disconnect', 'set', 'options'];\n\nconst getTimestamps = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_AT_ATTRIBUTE);\n }\n\n if (has(UPDATED_AT_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_AT_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getCreatorFields = (model: Model) => {\n const attributes: string[] = [];\n\n if (has(CREATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(CREATED_BY_ATTRIBUTE);\n }\n\n if (has(UPDATED_BY_ATTRIBUTE, model.attributes)) {\n attributes.push(UPDATED_BY_ATTRIBUTE);\n }\n\n return attributes;\n};\n\nconst getNonWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n const nonWritableAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.writable === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonWritableAttributes,\n ]);\n};\n\nconst getWritableAttributes = (model: Model) => {\n if (!model) return [];\n\n return _.difference(Object.keys(model.attributes), getNonWritableAttributes(model));\n};\n\nconst isWritableAttribute = (model: Model, attributeName: string) => {\n return getWritableAttributes(model).includes(attributeName);\n};\n\nconst getNonVisibleAttributes = (model: Model) => {\n const nonVisibleAttributes = _.reduce(\n model.attributes,\n (acc, attr, attrName) => (attr.visible === false ? acc.concat(attrName) : acc),\n [] as string[]\n );\n\n return _.uniq([\n ID_ATTRIBUTE,\n DOC_ID_ATTRIBUTE,\n PUBLISHED_AT_ATTRIBUTE,\n ...getTimestamps(model),\n ...nonVisibleAttributes,\n ]);\n};\n\nconst getVisibleAttributes = (model: Model) => {\n return _.difference(_.keys(model.attributes), getNonVisibleAttributes(model));\n};\n\nconst isVisibleAttribute = (model: Model, attributeName: string) => {\n return getVisibleAttributes(model).includes(attributeName);\n};\n\nconst getOptions = (model: Model) =>\n _.assign({ draftAndPublish: false }, _.get(model, 'options', {}));\n\nconst hasDraftAndPublish = (model: Model) =>\n _.get(model, 'options.draftAndPublish', false) === true;\n\nconst hasFirstPublishedAtField = (model: Model) =>\n strapi.config.get('features.future.experimental_firstPublishedAt', false) &&\n hasDraftAndPublish(model);\n\nconst isDraft = <T extends object>(data: T, model: Model) =>\n hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null;\n\nconst isSchema = (data: unknown): data is Model => {\n return (\n typeof data === 'object' &&\n data !== null &&\n 'modelType' in data &&\n typeof data.modelType === 'string' &&\n ['component', 'contentType'].includes(data.modelType)\n );\n};\n\nconst isComponentSchema = (data: unknown): data is Model & { modelType: 'component' } => {\n return isSchema(data) && data.modelType === 'component';\n};\n\nconst isContentTypeSchema = (data: unknown): data is Model & { modelType: 'contentType' } => {\n return isSchema(data) && data.modelType === 'contentType';\n};\n\nconst isSingleType = ({ kind = COLLECTION_TYPE }) => kind === SINGLE_TYPE;\nconst isCollectionType = ({ kind = COLLECTION_TYPE }) => kind === COLLECTION_TYPE;\nconst isKind = (kind: Kind) => (model: Model) => model.kind === kind;\n\nconst getStoredPrivateAttributes = (model: Model) =>\n union(\n (strapi?.config?.get('api.responses.privateAttributes', []) ?? []) as Array<string>,\n getOr([], 'options.privateAttributes', model)\n );\n\nconst getPrivateAttributes = (model: Model) => {\n return _.union(\n getStoredPrivateAttributes(model),\n _.keys(_.pickBy(model.attributes, (attr) => !!attr.private))\n );\n};\n\nconst isPrivateAttribute = (model: Model, attributeName: string) => {\n if (model?.attributes?.[attributeName]?.private === true) {\n return true;\n }\n return getStoredPrivateAttributes(model).includes(attributeName);\n};\n\nconst isScalarAttribute = (attribute?: Attribute) => {\n return attribute && !['media', 'component', 'relation', 'dynamiczone'].includes(attribute.type);\n};\n\nconst getDoesAttributeRequireValidation = (attribute: Attribute) => {\n return (\n attribute.required ||\n attribute.unique ||\n Object.prototype.hasOwnProperty.call(attribute, 'max') ||\n Object.prototype.hasOwnProperty.call(attribute, 'min') ||\n Object.prototype.hasOwnProperty.call(attribute, 'maxLength') ||\n Object.prototype.hasOwnProperty.call(attribute, 'minLength')\n );\n};\nconst isMediaAttribute = (attribute?: Attribute) => attribute?.type === 'media';\nconst isRelationalAttribute = (attribute?: Attribute): attribute is RelationalAttribute =>\n attribute?.type === 'relation';\n\nconst HAS_RELATION_REORDERING = ['manyToMany', 'manyToOne', 'oneToMany'];\nconst hasRelationReordering = (attribute?: Attribute) =>\n isRelationalAttribute(attribute) && HAS_RELATION_REORDERING.includes(attribute.relation);\n\nconst isComponentAttribute = (\n attribute?: Attribute\n): attribute is ComponentAttribute | DynamicZoneAttribute =>\n !!attribute && ['component', 'dynamiczone'].includes(attribute.type);\n\nconst isDynamicZoneAttribute = (attribute?: Attribute): attribute is DynamicZoneAttribute =>\n !!attribute && attribute.type === 'dynamiczone';\nconst isMorphToRelationalAttribute = (attribute?: Attribute) => {\n return (\n !!attribute && isRelationalAttribute(attribute) && attribute.relation?.startsWith?.('morphTo')\n );\n};\n\nconst getComponentAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isComponentAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getMediaAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isMediaAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getScalarAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isScalarAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\nconst getRelationalAttributes = (schema: Model) => {\n return _.reduce(\n schema.attributes,\n (acc, attr, attrName) => {\n if (isRelationalAttribute(attr)) acc.push(attrName);\n return acc;\n },\n [] as string[]\n );\n};\n\n/**\n * Checks if an attribute is of type `type`\n * @param {object} attribute\n * @param {string} type\n */\nconst isTypedAttribute = (attribute: Attribute, type: string) => {\n return _.has(attribute, 'type') && attribute.type === type;\n};\n\n/**\n * Returns a route prefix for a contentType\n * @param {object} contentType\n * @returns {string}\n */\nconst getContentTypeRoutePrefix = (contentType: WithRequired<Model, 'info'>) => {\n return isSingleType(contentType)\n ? _.kebabCase(contentType.info.singularName)\n : _.kebabCase(contentType.info.pluralName);\n};\n\nexport {\n isSchema,\n isContentTypeSchema,\n isComponentSchema,\n isScalarAttribute,\n isMediaAttribute,\n isRelationalAttribute,\n hasRelationReordering,\n isComponentAttribute,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n isTypedAttribute,\n getPrivateAttributes,\n isPrivateAttribute,\n constants,\n ID_FIELDS,\n MORPH_TO_KEYS,\n DYNAMIC_ZONE_KEYS,\n RELATION_OPERATION_KEYS,\n getNonWritableAttributes,\n getComponentAttributes,\n getMediaAttributes,\n getScalarAttributes,\n getRelationalAttributes,\n getWritableAttributes,\n isWritableAttribute,\n getNonVisibleAttributes,\n getVisibleAttributes,\n getTimestamps,\n getCreatorFields,\n isVisibleAttribute,\n getOptions,\n isDraft,\n hasDraftAndPublish,\n hasFirstPublishedAtField,\n isSingleType,\n isCollectionType,\n isKind,\n getContentTypeRoutePrefix,\n getDoesAttributeRequireValidation,\n};\n"],"names":["SINGLE_TYPE","COLLECTION_TYPE","ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","PUBLISHED_AT_ATTRIBUTE","FIRST_PUBLISHED_AT_ATTRIBUTE","CREATED_BY_ATTRIBUTE","UPDATED_BY_ATTRIBUTE","CREATED_AT_ATTRIBUTE","UPDATED_AT_ATTRIBUTE","constants","ID_FIELDS","MORPH_TO_KEYS","DYNAMIC_ZONE_KEYS","RELATION_OPERATION_KEYS","getTimestamps","model","attributes","has","push","getCreatorFields","getNonWritableAttributes","nonWritableAttributes","_","reduce","acc","attr","attrName","writable","concat","uniq","getWritableAttributes","difference","Object","keys","isWritableAttribute","attributeName","includes","getNonVisibleAttributes","nonVisibleAttributes","visible","getVisibleAttributes","isVisibleAttribute","getOptions","assign","draftAndPublish","get","hasDraftAndPublish","hasFirstPublishedAtField","strapi","config","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","getStoredPrivateAttributes","union","getOr","getPrivateAttributes","pickBy","private","isPrivateAttribute","isScalarAttribute","attribute","type","getDoesAttributeRequireValidation","required","unique","prototype","hasOwnProperty","call","isMediaAttribute","isRelationalAttribute","HAS_RELATION_REORDERING","hasRelationReordering","relation","isComponentAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","startsWith","getComponentAttributes","schema","getMediaAttributes","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
|
@@ -40,6 +40,11 @@ export interface Params {
|
|
|
40
40
|
page?: number | string;
|
|
41
41
|
pageSize?: number | string;
|
|
42
42
|
status?: 'draft' | 'published';
|
|
43
|
+
/**
|
|
44
|
+
* Filter documents by whether they have a published version.
|
|
45
|
+
* Use with `status: 'draft'` to find documents that have never been published.
|
|
46
|
+
*/
|
|
47
|
+
hasPublishedVersion?: boolean | 'true' | 'false';
|
|
43
48
|
}
|
|
44
49
|
type FiltersQuery = (options: {
|
|
45
50
|
meta: Model;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-query-params.d.ts","sourceRoot":"","sources":["../src/convert-query-params.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,KAAK,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,OAAO;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAAC;CAC7C;AAED,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;AAC5E,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAEtC,KAAK,aAAa,GAAG,OAAO,CAAC;AAE7B,MAAM,WAAW,wBAAwB;IACvC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,oBAAoB,CAAC;CAC/C;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,wBAAwB,CAAC;IACxD,EAAE,CAAC,EAAE,wBAAwB,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC5B;AAED,KAAK,cAAc,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,wBAAwB,CAAC;AAEnE,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"convert-query-params.d.ts","sourceRoot":"","sources":["../src/convert-query-params.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,10 +120,11 @@ const createTransformer = ({ getModel })=>{
|
|
|
120
120
|
}
|
|
121
121
|
return pageVal;
|
|
122
122
|
};
|
|
123
|
-
|
|
123
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
124
|
+
const convertPageSizeQueryParams = (pageSize, _page)=>{
|
|
124
125
|
const pageSizeVal = fp.toNumber(pageSize);
|
|
125
126
|
if (!fp.isInteger(pageSizeVal) || pageSizeVal <= 0) {
|
|
126
|
-
throw new errors.PaginationError(`Invalid 'pageSize' parameter. Expected an integer > 0, received: ${
|
|
127
|
+
throw new errors.PaginationError(`Invalid 'pageSize' parameter. Expected an integer > 0, received: ${pageSize}`);
|
|
127
128
|
}
|
|
128
129
|
return pageSizeVal;
|
|
129
130
|
};
|
|
@@ -320,7 +321,7 @@ const createTransformer = ({ getModel })=>{
|
|
|
320
321
|
query.page = convertPageQueryParams(page);
|
|
321
322
|
}
|
|
322
323
|
if (!fp.isNil(pageSize)) {
|
|
323
|
-
query.pageSize = convertPageSizeQueryParams(pageSize
|
|
324
|
+
query.pageSize = convertPageSizeQueryParams(pageSize);
|
|
324
325
|
}
|
|
325
326
|
if (!fp.isNil(start)) {
|
|
326
327
|
query.offset = convertStartQueryParams(start);
|
|
@@ -484,7 +485,7 @@ const createTransformer = ({ getModel })=>{
|
|
|
484
485
|
query.page = convertPageQueryParams(page);
|
|
485
486
|
}
|
|
486
487
|
if (!fp.isNil(pageSize)) {
|
|
487
|
-
query.pageSize = convertPageSizeQueryParams(pageSize
|
|
488
|
+
query.pageSize = convertPageSizeQueryParams(pageSize);
|
|
488
489
|
}
|
|
489
490
|
if (!fp.isNil(start)) {
|
|
490
491
|
query.offset = convertStartQueryParams(start);
|