@strapi/utils 5.19.0 → 5.21.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-types.d.ts +3 -1
- package/dist/content-types.d.ts.map +1 -1
- package/dist/content-types.js +4 -0
- package/dist/content-types.js.map +1 -1
- package/dist/content-types.mjs +4 -1
- package/dist/content-types.mjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -1
- package/dist/validation/index.d.ts +3 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/route-validators/base.d.ts +107 -0
- package/dist/validation/route-validators/base.d.ts.map +1 -0
- package/dist/validation/route-validators/base.js +92 -0
- package/dist/validation/route-validators/base.js.map +1 -0
- package/dist/validation/route-validators/base.mjs +90 -0
- package/dist/validation/route-validators/base.mjs.map +1 -0
- package/dist/validation/route-validators/index.d.ts +39 -0
- package/dist/validation/route-validators/index.d.ts.map +1 -0
- package/dist/validation/route-validators/query-params.d.ts +100 -0
- package/dist/validation/route-validators/query-params.d.ts.map +1 -0
- package/dist/validation/route-validators/query-params.js +117 -0
- package/dist/validation/route-validators/query-params.js.map +1 -0
- package/dist/validation/route-validators/query-params.mjs +88 -0
- package/dist/validation/route-validators/query-params.mjs.map +1 -0
- package/dist/validation/utilities.d.ts +81 -0
- package/dist/validation/utilities.d.ts.map +1 -0
- package/dist/validation/utilities.js +123 -0
- package/dist/validation/utilities.js.map +1 -0
- package/dist/validation/utilities.mjs +116 -0
- package/dist/validation/utilities.mjs.map +1 -0
- package/dist/zod.js +2 -2
- package/dist/zod.js.map +1 -1
- package/dist/zod.mjs +2 -2
- package/dist/zod.mjs.map +1 -1
- package/package.json +4 -4
package/dist/content-types.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ declare const constants: {
|
|
|
3
3
|
ID_ATTRIBUTE: string;
|
|
4
4
|
DOC_ID_ATTRIBUTE: string;
|
|
5
5
|
PUBLISHED_AT_ATTRIBUTE: string;
|
|
6
|
+
FIRST_PUBLISHED_AT_ATTRIBUTE: string;
|
|
6
7
|
CREATED_BY_ATTRIBUTE: string;
|
|
7
8
|
UPDATED_BY_ATTRIBUTE: string;
|
|
8
9
|
CREATED_AT_ATTRIBUTE: string;
|
|
@@ -27,6 +28,7 @@ declare const getOptions: (model: Model) => {
|
|
|
27
28
|
draftAndPublish?: boolean | undefined;
|
|
28
29
|
});
|
|
29
30
|
declare const hasDraftAndPublish: (model: Model) => boolean;
|
|
31
|
+
declare const hasFirstPublishedAtField: (model: Model) => any;
|
|
30
32
|
declare const isDraft: <T extends object>(data: T, model: Model) => boolean;
|
|
31
33
|
declare const isSchema: (data: unknown) => data is Model;
|
|
32
34
|
declare const isComponentSchema: (data: unknown) => data is Model & {
|
|
@@ -67,5 +69,5 @@ declare const isTypedAttribute: (attribute: Attribute, type: string) => boolean;
|
|
|
67
69
|
* @returns {string}
|
|
68
70
|
*/
|
|
69
71
|
declare const getContentTypeRoutePrefix: (contentType: WithRequired<Model, 'info'>) => string;
|
|
70
|
-
export { isSchema, isContentTypeSchema, isComponentSchema, isScalarAttribute, isMediaAttribute, isRelationalAttribute, hasRelationReordering, isComponentAttribute, isDynamicZoneAttribute, isMorphToRelationalAttribute, isTypedAttribute, getPrivateAttributes, isPrivateAttribute, constants, getNonWritableAttributes, getComponentAttributes, getScalarAttributes, getRelationalAttributes, getWritableAttributes, isWritableAttribute, getNonVisibleAttributes, getVisibleAttributes, getTimestamps, getCreatorFields, isVisibleAttribute, getOptions, isDraft, hasDraftAndPublish, isSingleType, isCollectionType, isKind, getContentTypeRoutePrefix, getDoesAttributeRequireValidation, };
|
|
72
|
+
export { isSchema, isContentTypeSchema, isComponentSchema, isScalarAttribute, isMediaAttribute, isRelationalAttribute, hasRelationReordering, isComponentAttribute, isDynamicZoneAttribute, isMorphToRelationalAttribute, isTypedAttribute, getPrivateAttributes, isPrivateAttribute, constants, getNonWritableAttributes, getComponentAttributes, getScalarAttributes, getRelationalAttributes, getWritableAttributes, isWritableAttribute, getNonVisibleAttributes, getVisibleAttributes, getTimestamps, getCreatorFields, isVisibleAttribute, getOptions, isDraft, hasDraftAndPublish, hasFirstPublishedAtField, isSingleType, isCollectionType, isKind, getContentTypeRoutePrefix, getDoesAttributeRequireValidation, };
|
|
71
73
|
//# 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;
|
|
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
|
@@ -8,6 +8,7 @@ const COLLECTION_TYPE = 'collectionType';
|
|
|
8
8
|
const ID_ATTRIBUTE = 'id';
|
|
9
9
|
const DOC_ID_ATTRIBUTE = 'documentId';
|
|
10
10
|
const PUBLISHED_AT_ATTRIBUTE = 'publishedAt';
|
|
11
|
+
const FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';
|
|
11
12
|
const CREATED_BY_ATTRIBUTE = 'createdBy';
|
|
12
13
|
const UPDATED_BY_ATTRIBUTE = 'updatedBy';
|
|
13
14
|
const CREATED_AT_ATTRIBUTE = 'createdAt';
|
|
@@ -16,6 +17,7 @@ const constants = {
|
|
|
16
17
|
ID_ATTRIBUTE,
|
|
17
18
|
DOC_ID_ATTRIBUTE,
|
|
18
19
|
PUBLISHED_AT_ATTRIBUTE,
|
|
20
|
+
FIRST_PUBLISHED_AT_ATTRIBUTE,
|
|
19
21
|
CREATED_BY_ATTRIBUTE,
|
|
20
22
|
UPDATED_BY_ATTRIBUTE,
|
|
21
23
|
CREATED_AT_ATTRIBUTE,
|
|
@@ -79,6 +81,7 @@ const getOptions = (model)=>_.assign({
|
|
|
79
81
|
draftAndPublish: false
|
|
80
82
|
}, _.get(model, 'options', {}));
|
|
81
83
|
const hasDraftAndPublish = (model)=>_.get(model, 'options.draftAndPublish', false) === true;
|
|
84
|
+
const hasFirstPublishedAtField = (model)=>strapi.config.get('features.future.experimental_firstPublishedAt', false) && hasDraftAndPublish(model);
|
|
82
85
|
const isDraft = (data, model)=>hasDraftAndPublish(model) && _.get(data, PUBLISHED_AT_ATTRIBUTE) === null;
|
|
83
86
|
const isSchema = (data)=>{
|
|
84
87
|
return typeof data === 'object' && data !== null && 'modelType' in data && typeof data.modelType === 'string' && [
|
|
@@ -180,6 +183,7 @@ exports.getTimestamps = getTimestamps;
|
|
|
180
183
|
exports.getVisibleAttributes = getVisibleAttributes;
|
|
181
184
|
exports.getWritableAttributes = getWritableAttributes;
|
|
182
185
|
exports.hasDraftAndPublish = hasDraftAndPublish;
|
|
186
|
+
exports.hasFirstPublishedAtField = hasFirstPublishedAtField;
|
|
183
187
|
exports.hasRelationReordering = hasRelationReordering;
|
|
184
188
|
exports.isCollectionType = isCollectionType;
|
|
185
189
|
exports.isComponentAttribute = isComponentAttribute;
|
|
@@ -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 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 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([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...getTimestamps(model), ...nonVisibleAttributes]);\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 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 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 getScalarAttributes,\n getRelationalAttributes,\n getWritableAttributes,\n isWritableAttribute,\n getNonVisibleAttributes,\n getVisibleAttributes,\n getTimestamps,\n getCreatorFields,\n isVisibleAttribute,\n getOptions,\n isDraft,\n hasDraftAndPublish,\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","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","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","getStoredPrivateAttributes","union","strapi","config","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","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\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([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...getTimestamps(model), ...nonVisibleAttributes]);\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 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 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","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
package/dist/content-types.mjs
CHANGED
|
@@ -6,6 +6,7 @@ const COLLECTION_TYPE = 'collectionType';
|
|
|
6
6
|
const ID_ATTRIBUTE = 'id';
|
|
7
7
|
const DOC_ID_ATTRIBUTE = 'documentId';
|
|
8
8
|
const PUBLISHED_AT_ATTRIBUTE = 'publishedAt';
|
|
9
|
+
const FIRST_PUBLISHED_AT_ATTRIBUTE = 'firstPublishedAt';
|
|
9
10
|
const CREATED_BY_ATTRIBUTE = 'createdBy';
|
|
10
11
|
const UPDATED_BY_ATTRIBUTE = 'updatedBy';
|
|
11
12
|
const CREATED_AT_ATTRIBUTE = 'createdAt';
|
|
@@ -14,6 +15,7 @@ const constants = {
|
|
|
14
15
|
ID_ATTRIBUTE,
|
|
15
16
|
DOC_ID_ATTRIBUTE,
|
|
16
17
|
PUBLISHED_AT_ATTRIBUTE,
|
|
18
|
+
FIRST_PUBLISHED_AT_ATTRIBUTE,
|
|
17
19
|
CREATED_BY_ATTRIBUTE,
|
|
18
20
|
UPDATED_BY_ATTRIBUTE,
|
|
19
21
|
CREATED_AT_ATTRIBUTE,
|
|
@@ -77,6 +79,7 @@ const getOptions = (model)=>___default.assign({
|
|
|
77
79
|
draftAndPublish: false
|
|
78
80
|
}, ___default.get(model, 'options', {}));
|
|
79
81
|
const hasDraftAndPublish = (model)=>___default.get(model, 'options.draftAndPublish', false) === true;
|
|
82
|
+
const hasFirstPublishedAtField = (model)=>strapi.config.get('features.future.experimental_firstPublishedAt', false) && hasDraftAndPublish(model);
|
|
80
83
|
const isDraft = (data, model)=>hasDraftAndPublish(model) && ___default.get(data, PUBLISHED_AT_ATTRIBUTE) === null;
|
|
81
84
|
const isSchema = (data)=>{
|
|
82
85
|
return typeof data === 'object' && data !== null && 'modelType' in data && typeof data.modelType === 'string' && [
|
|
@@ -163,5 +166,5 @@ const getRelationalAttributes = (schema)=>{
|
|
|
163
166
|
return isSingleType(contentType) ? ___default.kebabCase(contentType.info.singularName) : ___default.kebabCase(contentType.info.pluralName);
|
|
164
167
|
};
|
|
165
168
|
|
|
166
|
-
export { constants, getComponentAttributes, getContentTypeRoutePrefix, getCreatorFields, getDoesAttributeRequireValidation, getNonVisibleAttributes, getNonWritableAttributes, getOptions, getPrivateAttributes, getRelationalAttributes, getScalarAttributes, getTimestamps, getVisibleAttributes, getWritableAttributes, hasDraftAndPublish, hasRelationReordering, isCollectionType, isComponentAttribute, isComponentSchema, isContentTypeSchema, isDraft, isDynamicZoneAttribute, isKind, isMediaAttribute, isMorphToRelationalAttribute, isPrivateAttribute, isRelationalAttribute, isScalarAttribute, isSchema, isSingleType, isTypedAttribute, isVisibleAttribute, isWritableAttribute };
|
|
169
|
+
export { constants, getComponentAttributes, getContentTypeRoutePrefix, getCreatorFields, getDoesAttributeRequireValidation, 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 };
|
|
167
170
|
//# 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 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 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([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...getTimestamps(model), ...nonVisibleAttributes]);\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 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 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 getScalarAttributes,\n getRelationalAttributes,\n getWritableAttributes,\n isWritableAttribute,\n getNonVisibleAttributes,\n getVisibleAttributes,\n getTimestamps,\n getCreatorFields,\n isVisibleAttribute,\n getOptions,\n isDraft,\n hasDraftAndPublish,\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","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","isDraft","data","isSchema","modelType","isComponentSchema","isContentTypeSchema","isSingleType","kind","isCollectionType","isKind","getStoredPrivateAttributes","union","strapi","config","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","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\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([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE, ...getTimestamps(model), ...nonVisibleAttributes]);\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 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 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","getScalarAttributes","getRelationalAttributes","isTypedAttribute","getContentTypeRoutePrefix","contentType","kebabCase","info","singularName","pluralName"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,cAAc,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3D,OAAO,KAAK,WAAW,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,cAAc,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,OAAO,CAAC;AAC7B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAE7B,cAAc,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -25,6 +25,9 @@ var contentTypes = require('./content-types.js');
|
|
|
25
25
|
var relations = require('./relations.js');
|
|
26
26
|
var hooks = require('./hooks.js');
|
|
27
27
|
var zod = require('./zod.js');
|
|
28
|
+
var base = require('./validation/route-validators/base.js');
|
|
29
|
+
var queryParams = require('./validation/route-validators/query-params.js');
|
|
30
|
+
var utilities = require('./validation/utilities.js');
|
|
28
31
|
var strings = require('./primitives/strings.js');
|
|
29
32
|
var arrays = require('./primitives/arrays.js');
|
|
30
33
|
var objects = require('./primitives/objects.js');
|
|
@@ -59,6 +62,22 @@ exports.contentTypes = contentTypes;
|
|
|
59
62
|
exports.relations = relations;
|
|
60
63
|
exports.hooks = hooks;
|
|
61
64
|
exports.validateZod = zod.validateZod;
|
|
65
|
+
exports.AbstractRouteValidator = base.AbstractRouteValidator;
|
|
66
|
+
exports.filtersSchema = queryParams.filtersSchema;
|
|
67
|
+
exports.localeSchema = queryParams.localeSchema;
|
|
68
|
+
exports.paginationSchema = queryParams.paginationSchema;
|
|
69
|
+
exports.queryFieldsSchema = queryParams.queryFieldsSchema;
|
|
70
|
+
exports.queryParameterSchemas = queryParams.queryParameterSchemas;
|
|
71
|
+
exports.queryPopulateSchema = queryParams.queryPopulateSchema;
|
|
72
|
+
exports.querySortSchema = queryParams.querySortSchema;
|
|
73
|
+
exports.searchQuerySchema = queryParams.searchQuerySchema;
|
|
74
|
+
exports.statusSchema = queryParams.statusSchema;
|
|
75
|
+
exports.augmentSchema = utilities.augmentSchema;
|
|
76
|
+
exports.maybeReadonly = utilities.maybeReadonly;
|
|
77
|
+
exports.maybeRequired = utilities.maybeRequired;
|
|
78
|
+
exports.maybeWithDefault = utilities.maybeWithDefault;
|
|
79
|
+
exports.maybeWithMinMax = utilities.maybeWithMinMax;
|
|
80
|
+
exports.transformUidToValidOpenApiName = utilities.transformUidToValidOpenApiName;
|
|
62
81
|
exports.strings = strings;
|
|
63
82
|
exports.arrays = arrays;
|
|
64
83
|
exports.objects = objects;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.mjs
CHANGED
|
@@ -38,6 +38,9 @@ export { relations };
|
|
|
38
38
|
import * as hooks from './hooks.mjs';
|
|
39
39
|
export { hooks };
|
|
40
40
|
export { validateZod } from './zod.mjs';
|
|
41
|
+
export { AbstractRouteValidator } from './validation/route-validators/base.mjs';
|
|
42
|
+
export { filtersSchema, localeSchema, paginationSchema, queryFieldsSchema, queryParameterSchemas, queryPopulateSchema, querySortSchema, searchQuerySchema, statusSchema } from './validation/route-validators/query-params.mjs';
|
|
43
|
+
export { augmentSchema, maybeReadonly, maybeRequired, maybeWithDefault, maybeWithMinMax, transformUidToValidOpenApiName } from './validation/utilities.mjs';
|
|
41
44
|
import * as strings from './primitives/strings.mjs';
|
|
42
45
|
export { strings };
|
|
43
46
|
import * as arrays from './primitives/arrays.mjs';
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import * as z from 'zod/v4';
|
|
2
|
+
import { type QueryParam } from './query-params';
|
|
3
|
+
/**
|
|
4
|
+
* AbstractRouteValidator provides the foundation for validating routes.
|
|
5
|
+
*
|
|
6
|
+
* This abstract class provides common query parameter validators that can be reused
|
|
7
|
+
* across different route validators in Strapi. It serves as a building block for
|
|
8
|
+
* both generic validation (plugins, external packages) and schema-aware validation
|
|
9
|
+
* (core content types).
|
|
10
|
+
*/
|
|
11
|
+
export declare abstract class AbstractRouteValidator {
|
|
12
|
+
/**
|
|
13
|
+
* Creates a fields query parameter validator
|
|
14
|
+
* Validates field selection for API responses
|
|
15
|
+
*/
|
|
16
|
+
get queryFields(): z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
|
|
17
|
+
/**
|
|
18
|
+
* Creates a populate query parameter validator
|
|
19
|
+
* Validates which relations to populate in the response
|
|
20
|
+
*/
|
|
21
|
+
get queryPopulate(): z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodString, z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodAny>]>;
|
|
22
|
+
/**
|
|
23
|
+
* Creates a sort query parameter validator
|
|
24
|
+
* Validates sorting options for list endpoints
|
|
25
|
+
*/
|
|
26
|
+
get querySort(): z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
27
|
+
asc: "asc";
|
|
28
|
+
desc: "desc";
|
|
29
|
+
}>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
30
|
+
asc: "asc";
|
|
31
|
+
desc: "desc";
|
|
32
|
+
}>>>]>;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a pagination query parameter validator
|
|
35
|
+
* Supports both page-based and offset-based pagination
|
|
36
|
+
*/
|
|
37
|
+
get pagination(): z.ZodIntersection<z.ZodObject<{
|
|
38
|
+
withCount: z.ZodOptional<z.ZodBoolean>;
|
|
39
|
+
}, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
|
|
40
|
+
page: z.ZodNumber;
|
|
41
|
+
pageSize: z.ZodNumber;
|
|
42
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
43
|
+
start: z.ZodNumber;
|
|
44
|
+
limit: z.ZodNumber;
|
|
45
|
+
}, z.core.$strip>]>>;
|
|
46
|
+
/**
|
|
47
|
+
* Creates a filters query parameter validator
|
|
48
|
+
* Validates filtering options for list endpoints
|
|
49
|
+
*/
|
|
50
|
+
get filters(): z.ZodRecord<z.ZodString, z.ZodAny>;
|
|
51
|
+
/**
|
|
52
|
+
* Creates a locale query parameter validator
|
|
53
|
+
* Used for internationalization
|
|
54
|
+
*/
|
|
55
|
+
get locale(): z.ZodString;
|
|
56
|
+
/**
|
|
57
|
+
* Creates a status query parameter validator
|
|
58
|
+
* Used for draft & publish functionality
|
|
59
|
+
*/
|
|
60
|
+
get status(): z.ZodEnum<{
|
|
61
|
+
draft: "draft";
|
|
62
|
+
published: "published";
|
|
63
|
+
}>;
|
|
64
|
+
/**
|
|
65
|
+
* Creates a search query parameter validator
|
|
66
|
+
* Used for text search functionality
|
|
67
|
+
*/
|
|
68
|
+
get query(): z.ZodString;
|
|
69
|
+
/**
|
|
70
|
+
* Provides access to all base query parameter validators
|
|
71
|
+
*/
|
|
72
|
+
protected get baseQueryValidators(): {
|
|
73
|
+
fields: () => z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
74
|
+
populate: () => z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"*">, z.ZodString, z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodAny>]>>;
|
|
75
|
+
sort: () => z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>, z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
76
|
+
asc: "asc";
|
|
77
|
+
desc: "desc";
|
|
78
|
+
}>>, z.ZodArray<z.ZodRecord<z.ZodString, z.ZodEnum<{
|
|
79
|
+
asc: "asc";
|
|
80
|
+
desc: "desc";
|
|
81
|
+
}>>>]>>;
|
|
82
|
+
filters: () => z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
83
|
+
pagination: () => z.ZodOptional<z.ZodIntersection<z.ZodObject<{
|
|
84
|
+
withCount: z.ZodOptional<z.ZodBoolean>;
|
|
85
|
+
}, z.core.$strip>, z.ZodUnion<readonly [z.ZodObject<{
|
|
86
|
+
page: z.ZodNumber;
|
|
87
|
+
pageSize: z.ZodNumber;
|
|
88
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
89
|
+
start: z.ZodNumber;
|
|
90
|
+
limit: z.ZodNumber;
|
|
91
|
+
}, z.core.$strip>]>>>;
|
|
92
|
+
locale: () => z.ZodOptional<z.ZodString>;
|
|
93
|
+
status: () => z.ZodOptional<z.ZodEnum<{
|
|
94
|
+
draft: "draft";
|
|
95
|
+
published: "published";
|
|
96
|
+
}>>;
|
|
97
|
+
_q: () => z.ZodOptional<z.ZodString>;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Helper method to create a query parameters object with specified validators
|
|
101
|
+
*
|
|
102
|
+
* @param params - Array of query parameter names to include
|
|
103
|
+
* @returns Object containing Zod schemas for the requested query parameters
|
|
104
|
+
*/
|
|
105
|
+
queryParams(params: QueryParam[]): Record<string, z.ZodSchema>;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/validation/route-validators/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAExE;;;;;;;GAOG;AACH,8BAAsB,sBAAsB;IAC1C;;;OAGG;IACH,IAAI,WAAW,gEAEd;IAED;;;OAGG;IACH,IAAI,aAAa,uHAEhB;IAED;;;OAGG;IACH,IAAI,SAAS;;;;;;WAEZ;IAED;;;OAGG;IACH,IAAI,UAAU;;;;;;;;yBAEb;IAED;;;OAGG;IACH,IAAI,OAAO,uCAEV;IAED;;;OAGG;IACH,IAAI,MAAM,gBAET;IAED;;;OAGG;IACH,IAAI,MAAM;;;OAET;IAED;;;OAGG;IACH,IAAI,KAAK,gBAER;IAED;;OAEG;IACH,SAAS,KAAK,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;MAWhC;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;CAa/D"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var queryParams = require('./query-params.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* AbstractRouteValidator provides the foundation for validating routes.
|
|
7
|
+
*
|
|
8
|
+
* This abstract class provides common query parameter validators that can be reused
|
|
9
|
+
* across different route validators in Strapi. It serves as a building block for
|
|
10
|
+
* both generic validation (plugins, external packages) and schema-aware validation
|
|
11
|
+
* (core content types).
|
|
12
|
+
*/ class AbstractRouteValidator {
|
|
13
|
+
/**
|
|
14
|
+
* Creates a fields query parameter validator
|
|
15
|
+
* Validates field selection for API responses
|
|
16
|
+
*/ get queryFields() {
|
|
17
|
+
return queryParams.queryParameterSchemas.fields;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a populate query parameter validator
|
|
21
|
+
* Validates which relations to populate in the response
|
|
22
|
+
*/ get queryPopulate() {
|
|
23
|
+
return queryParams.queryParameterSchemas.populate;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Creates a sort query parameter validator
|
|
27
|
+
* Validates sorting options for list endpoints
|
|
28
|
+
*/ get querySort() {
|
|
29
|
+
return queryParams.queryParameterSchemas.sort;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Creates a pagination query parameter validator
|
|
33
|
+
* Supports both page-based and offset-based pagination
|
|
34
|
+
*/ get pagination() {
|
|
35
|
+
return queryParams.queryParameterSchemas.pagination;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Creates a filters query parameter validator
|
|
39
|
+
* Validates filtering options for list endpoints
|
|
40
|
+
*/ get filters() {
|
|
41
|
+
return queryParams.queryParameterSchemas.filters;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates a locale query parameter validator
|
|
45
|
+
* Used for internationalization
|
|
46
|
+
*/ get locale() {
|
|
47
|
+
return queryParams.queryParameterSchemas.locale;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Creates a status query parameter validator
|
|
51
|
+
* Used for draft & publish functionality
|
|
52
|
+
*/ get status() {
|
|
53
|
+
return queryParams.queryParameterSchemas.status;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Creates a search query parameter validator
|
|
57
|
+
* Used for text search functionality
|
|
58
|
+
*/ get query() {
|
|
59
|
+
return queryParams.queryParameterSchemas._q;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Provides access to all base query parameter validators
|
|
63
|
+
*/ get baseQueryValidators() {
|
|
64
|
+
return {
|
|
65
|
+
fields: ()=>this.queryFields.optional(),
|
|
66
|
+
populate: ()=>this.queryPopulate.optional(),
|
|
67
|
+
sort: ()=>this.querySort.optional(),
|
|
68
|
+
filters: ()=>this.filters.optional(),
|
|
69
|
+
pagination: ()=>this.pagination.optional(),
|
|
70
|
+
locale: ()=>this.locale.optional(),
|
|
71
|
+
status: ()=>this.status.optional(),
|
|
72
|
+
_q: ()=>this.query.optional()
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Helper method to create a query parameters object with specified validators
|
|
77
|
+
*
|
|
78
|
+
* @param params - Array of query parameter names to include
|
|
79
|
+
* @returns Object containing Zod schemas for the requested query parameters
|
|
80
|
+
*/ queryParams(params) {
|
|
81
|
+
const validators = this.baseQueryValidators;
|
|
82
|
+
return params.reduce((acc, param)=>{
|
|
83
|
+
if (param in validators) {
|
|
84
|
+
acc[param] = validators[param]();
|
|
85
|
+
}
|
|
86
|
+
return acc;
|
|
87
|
+
}, {});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
exports.AbstractRouteValidator = AbstractRouteValidator;
|
|
92
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sources":["../../../src/validation/route-validators/base.ts"],"sourcesContent":["import * as z from 'zod/v4';\nimport { queryParameterSchemas, type QueryParam } from './query-params';\n\n/**\n * AbstractRouteValidator provides the foundation for validating routes.\n *\n * This abstract class provides common query parameter validators that can be reused\n * across different route validators in Strapi. It serves as a building block for\n * both generic validation (plugins, external packages) and schema-aware validation\n * (core content types).\n */\nexport abstract class AbstractRouteValidator {\n /**\n * Creates a fields query parameter validator\n * Validates field selection for API responses\n */\n get queryFields() {\n return queryParameterSchemas.fields;\n }\n\n /**\n * Creates a populate query parameter validator\n * Validates which relations to populate in the response\n */\n get queryPopulate() {\n return queryParameterSchemas.populate;\n }\n\n /**\n * Creates a sort query parameter validator\n * Validates sorting options for list endpoints\n */\n get querySort() {\n return queryParameterSchemas.sort;\n }\n\n /**\n * Creates a pagination query parameter validator\n * Supports both page-based and offset-based pagination\n */\n get pagination() {\n return queryParameterSchemas.pagination;\n }\n\n /**\n * Creates a filters query parameter validator\n * Validates filtering options for list endpoints\n */\n get filters() {\n return queryParameterSchemas.filters;\n }\n\n /**\n * Creates a locale query parameter validator\n * Used for internationalization\n */\n get locale() {\n return queryParameterSchemas.locale;\n }\n\n /**\n * Creates a status query parameter validator\n * Used for draft & publish functionality\n */\n get status() {\n return queryParameterSchemas.status;\n }\n\n /**\n * Creates a search query parameter validator\n * Used for text search functionality\n */\n get query() {\n return queryParameterSchemas._q;\n }\n\n /**\n * Provides access to all base query parameter validators\n */\n protected get baseQueryValidators() {\n return {\n fields: () => this.queryFields.optional(),\n populate: () => this.queryPopulate.optional(),\n sort: () => this.querySort.optional(),\n filters: () => this.filters.optional(),\n pagination: () => this.pagination.optional(),\n locale: () => this.locale.optional(),\n status: () => this.status.optional(),\n _q: () => this.query.optional(),\n };\n }\n\n /**\n * Helper method to create a query parameters object with specified validators\n *\n * @param params - Array of query parameter names to include\n * @returns Object containing Zod schemas for the requested query parameters\n */\n queryParams(params: QueryParam[]): Record<string, z.ZodSchema> {\n const validators = this.baseQueryValidators;\n\n return params.reduce(\n (acc, param) => {\n if (param in validators) {\n acc[param] = validators[param]();\n }\n return acc;\n },\n {} as Record<string, z.ZodSchema>\n );\n }\n}\n"],"names":["AbstractRouteValidator","queryFields","queryParameterSchemas","fields","queryPopulate","populate","querySort","sort","pagination","filters","locale","status","query","_q","baseQueryValidators","optional","queryParams","params","validators","reduce","acc","param"],"mappings":";;;;AAGA;;;;;;;AAOC,IACM,MAAeA,sBAAAA,CAAAA;AACpB;;;AAGC,MACD,IAAIC,WAAc,GAAA;AAChB,QAAA,OAAOC,kCAAsBC,MAAM;AACrC;AAEA;;;AAGC,MACD,IAAIC,aAAgB,GAAA;AAClB,QAAA,OAAOF,kCAAsBG,QAAQ;AACvC;AAEA;;;AAGC,MACD,IAAIC,SAAY,GAAA;AACd,QAAA,OAAOJ,kCAAsBK,IAAI;AACnC;AAEA;;;AAGC,MACD,IAAIC,UAAa,GAAA;AACf,QAAA,OAAON,kCAAsBM,UAAU;AACzC;AAEA;;;AAGC,MACD,IAAIC,OAAU,GAAA;AACZ,QAAA,OAAOP,kCAAsBO,OAAO;AACtC;AAEA;;;AAGC,MACD,IAAIC,MAAS,GAAA;AACX,QAAA,OAAOR,kCAAsBQ,MAAM;AACrC;AAEA;;;AAGC,MACD,IAAIC,MAAS,GAAA;AACX,QAAA,OAAOT,kCAAsBS,MAAM;AACrC;AAEA;;;AAGC,MACD,IAAIC,KAAQ,GAAA;AACV,QAAA,OAAOV,kCAAsBW,EAAE;AACjC;AAEA;;AAEC,MACD,IAAcC,mBAAsB,GAAA;QAClC,OAAO;AACLX,YAAAA,MAAAA,EAAQ,IAAM,IAAI,CAACF,WAAW,CAACc,QAAQ,EAAA;AACvCV,YAAAA,QAAAA,EAAU,IAAM,IAAI,CAACD,aAAa,CAACW,QAAQ,EAAA;AAC3CR,YAAAA,IAAAA,EAAM,IAAM,IAAI,CAACD,SAAS,CAACS,QAAQ,EAAA;AACnCN,YAAAA,OAAAA,EAAS,IAAM,IAAI,CAACA,OAAO,CAACM,QAAQ,EAAA;AACpCP,YAAAA,UAAAA,EAAY,IAAM,IAAI,CAACA,UAAU,CAACO,QAAQ,EAAA;AAC1CL,YAAAA,MAAAA,EAAQ,IAAM,IAAI,CAACA,MAAM,CAACK,QAAQ,EAAA;AAClCJ,YAAAA,MAAAA,EAAQ,IAAM,IAAI,CAACA,MAAM,CAACI,QAAQ,EAAA;AAClCF,YAAAA,EAAAA,EAAI,IAAM,IAAI,CAACD,KAAK,CAACG,QAAQ;AAC/B,SAAA;AACF;AAEA;;;;;MAMAC,WAAAA,CAAYC,MAAoB,EAA+B;QAC7D,MAAMC,UAAAA,GAAa,IAAI,CAACJ,mBAAmB;AAE3C,QAAA,OAAOG,MAAOE,CAAAA,MAAM,CAClB,CAACC,GAAKC,EAAAA,KAAAA,GAAAA;AACJ,YAAA,IAAIA,SAASH,UAAY,EAAA;AACvBE,gBAAAA,GAAG,CAACC,KAAAA,CAAM,GAAGH,UAAU,CAACG,KAAM,CAAA,EAAA;AAChC;YACA,OAAOD,GAAAA;AACT,SAAA,EACA,EAAC,CAAA;AAEL;AACF;;;;"}
|