@strapi/utils 5.48.1 → 5.50.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/async.d.ts +2 -1
- package/dist/async.d.ts.map +1 -1
- package/dist/async.js +5 -1
- package/dist/async.js.map +1 -1
- package/dist/content-api-router.d.ts.map +1 -1
- package/dist/content-types.d.ts +5 -5
- package/dist/content-types.d.ts.map +1 -1
- package/dist/content-types.js +21 -17
- package/dist/content-types.js.map +1 -1
- package/dist/convert-query-params.d.ts.map +1 -1
- package/dist/convert-query-params.js +23 -19
- package/dist/convert-query-params.js.map +1 -1
- package/dist/convert-query-params.mjs +2 -2
- package/dist/convert-query-params.mjs.map +1 -1
- package/dist/env-helper.js +12 -8
- package/dist/env-helper.js.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/file.d.ts +0 -10
- package/dist/file.d.ts.map +1 -1
- package/dist/format-yup-error.d.ts.map +1 -1
- package/dist/has-published-version-param.d.ts +1 -1
- package/dist/has-published-version-param.d.ts.map +1 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -1
- package/dist/install-id.d.ts.map +1 -1
- package/dist/install-id.js +6 -2
- package/dist/install-id.js.map +1 -1
- package/dist/model-cache.d.ts.map +1 -1
- package/dist/operators.d.ts.map +1 -1
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +7 -2
- package/dist/package-manager.js.map +1 -1
- package/dist/pagination.d.ts.map +1 -1
- package/dist/parse-type.d.ts.map +1 -1
- package/dist/parse-type.js +4 -3
- package/dist/parse-type.js.map +1 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/primitives/arrays.d.ts.map +1 -1
- package/dist/primitives/dates.d.ts.map +1 -1
- package/dist/primitives/objects.d.ts.map +1 -1
- package/dist/primitives/objects.js +6 -2
- package/dist/primitives/objects.js.map +1 -1
- package/dist/primitives/strings.d.ts.map +1 -1
- package/dist/primitives/strings.js +10 -5
- package/dist/primitives/strings.js.map +1 -1
- package/dist/provider-factory.d.ts.map +1 -1
- package/dist/publication-filter.d.ts +1 -1
- package/dist/publication-filter.d.ts.map +1 -1
- package/dist/relations.d.ts.map +1 -1
- package/dist/route-serialization.d.ts.map +1 -1
- package/dist/sanitize/index.d.ts.map +1 -1
- package/dist/sanitize/index.js +4 -1
- package/dist/sanitize/index.js.map +1 -1
- package/dist/sanitize/index.mjs +4 -1
- package/dist/sanitize/index.mjs.map +1 -1
- package/dist/sanitize/sanitizers.d.ts +0 -1
- package/dist/sanitize/sanitizers.d.ts.map +1 -1
- package/dist/sanitize/visitors/remove-disallowed-fields.d.ts.map +1 -1
- package/dist/sanitize/visitors/remove-restricted-fields.d.ts.map +1 -1
- package/dist/sanitize/visitors/remove-restricted-relations.d.ts.map +1 -1
- package/dist/security.d.ts +1 -1
- package/dist/security.d.ts.map +1 -1
- package/dist/sessions.d.ts +35 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +46 -0
- package/dist/sessions.js.map +1 -0
- package/dist/sessions.mjs +42 -0
- package/dist/sessions.mjs.map +1 -0
- package/dist/set-creator-fields.d.ts.map +1 -1
- package/dist/sort-query.js +5 -1
- package/dist/sort-query.js.map +1 -1
- package/dist/template.d.ts.map +1 -1
- package/dist/traverse/factory.d.ts +108 -9
- package/dist/traverse/factory.d.ts.map +1 -1
- package/dist/traverse/query-fields.d.ts +0 -1
- package/dist/traverse/query-fields.d.ts.map +1 -1
- package/dist/traverse/query-filters.d.ts +0 -1
- package/dist/traverse/query-filters.d.ts.map +1 -1
- package/dist/traverse/query-populate.d.ts +0 -1
- package/dist/traverse/query-populate.d.ts.map +1 -1
- package/dist/traverse/query-populate.js +24 -0
- package/dist/traverse/query-populate.js.map +1 -1
- package/dist/traverse/query-populate.mjs +24 -0
- package/dist/traverse/query-populate.mjs.map +1 -1
- package/dist/traverse/query-sort.d.ts +0 -1
- package/dist/traverse/query-sort.d.ts.map +1 -1
- package/dist/traverse-entity.d.ts +0 -1
- package/dist/traverse-entity.d.ts.map +1 -1
- package/dist/traverse-entity.js +7 -0
- package/dist/traverse-entity.js.map +1 -1
- package/dist/traverse-entity.mjs +7 -0
- package/dist/traverse-entity.mjs.map +1 -1
- package/dist/types.d.ts +0 -25
- package/dist/types.d.ts.map +1 -1
- package/dist/user-agent.d.ts +23 -0
- package/dist/user-agent.d.ts.map +1 -0
- package/dist/user-agent.js +74 -0
- package/dist/user-agent.js.map +1 -0
- package/dist/user-agent.mjs +71 -0
- package/dist/user-agent.mjs.map +1 -0
- package/dist/validate/index.d.ts.map +1 -1
- package/dist/validate/utils.d.ts.map +1 -1
- package/dist/validate/validators.d.ts +4 -4
- package/dist/validate/validators.d.ts.map +1 -1
- package/dist/validate/validators.js +157 -0
- package/dist/validate/validators.js.map +1 -1
- package/dist/validate/validators.mjs +159 -2
- package/dist/validate/validators.mjs.map +1 -1
- package/dist/validate/visitors/throw-disallowed-fields.d.ts.map +1 -1
- package/dist/validate/visitors/throw-restricted-fields.d.ts.map +1 -1
- package/dist/validate/visitors/throw-restricted-relations.d.ts.map +1 -1
- package/dist/validation/route-validators/query-params.js +3 -2
- package/dist/validation/route-validators/query-params.js.map +1 -1
- package/dist/validation/utilities.d.ts +5 -5
- package/dist/validation/utilities.d.ts.map +1 -1
- package/dist/validators.d.ts.map +1 -1
- package/dist/validators.js +3 -2
- package/dist/validators.js.map +1 -1
- package/dist/yup.d.ts.map +1 -1
- package/dist/yup.js +10 -6
- package/dist/yup.js.map +1 -1
- package/dist/zod.d.ts +1 -1
- package/dist/zod.d.ts.map +1 -1
- package/dist/zod.js +3 -2
- package/dist/zod.js.map +1 -1
- package/package.json +9 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { isEmpty, isNil, isObject } from 'lodash/fp';
|
|
1
|
+
import { isEmpty, isNil, isObject, trim, isPlainObject } from 'lodash/fp';
|
|
2
2
|
import { pipe } from '../async.mjs';
|
|
3
|
-
import { constants, isScalarAttribute } from '../content-types.mjs';
|
|
3
|
+
import { constants, isScalarAttribute, isDynamicZoneAttribute, isMorphToRelationalAttribute } from '../content-types.mjs';
|
|
4
4
|
import traverseQueryFilters from '../traverse/query-filters.mjs';
|
|
5
5
|
import traverseQuerySort from '../traverse/query-sort.mjs';
|
|
6
6
|
import traverseQueryPopulate from '../traverse/query-populate.mjs';
|
|
@@ -198,6 +198,148 @@ const validateFields = asyncCurry(async (ctx, fields, include)=>{
|
|
|
198
198
|
const defaultValidateFields = asyncCurry(async (ctx, fields)=>{
|
|
199
199
|
return validateFields(ctx, fields, FIELDS_TRAVERSALS);
|
|
200
200
|
});
|
|
201
|
+
const isMorphLikeAttribute = (attribute)=>isDynamicZoneAttribute(attribute) || isMorphToRelationalAttribute(attribute);
|
|
202
|
+
const isPopulatableAttribute = (attribute)=>!!attribute && [
|
|
203
|
+
'relation',
|
|
204
|
+
'dynamiczone',
|
|
205
|
+
'component',
|
|
206
|
+
'media'
|
|
207
|
+
].includes(attribute.type);
|
|
208
|
+
const isDotNotationPopulate = (populate)=>{
|
|
209
|
+
if (populate === '*') {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
if (typeof populate === 'string') {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
return Array.isArray(populate) && populate.length > 0 && populate.every((p)=>typeof p === 'string');
|
|
216
|
+
};
|
|
217
|
+
const flattenDotPopulatePaths = (populate)=>{
|
|
218
|
+
const items = Array.isArray(populate) ? populate : [
|
|
219
|
+
populate
|
|
220
|
+
];
|
|
221
|
+
return items.flatMap((item)=>item.split(',').map((segment)=>trim(segment)).filter(Boolean));
|
|
222
|
+
};
|
|
223
|
+
const validatePopulateDotPathSegments = ({ schema, getModel }, segments, pathPrefix)=>{
|
|
224
|
+
if (!segments.length) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const [head, ...tail] = segments;
|
|
228
|
+
const fullPath = pathPrefix ? `${pathPrefix}.${head}` : head;
|
|
229
|
+
const attribute = schema.attributes[head];
|
|
230
|
+
if (!attribute || !isPopulatableAttribute(attribute)) {
|
|
231
|
+
throwInvalidKey({
|
|
232
|
+
key: head,
|
|
233
|
+
path: fullPath
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
if (!tail.length) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
if (attribute.type === 'component') {
|
|
240
|
+
if (!attribute.component) {
|
|
241
|
+
throwInvalidKey({
|
|
242
|
+
key: head,
|
|
243
|
+
path: fullPath
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
validatePopulateDotPathSegments({
|
|
247
|
+
schema: getModel(attribute.component),
|
|
248
|
+
getModel
|
|
249
|
+
}, tail, fullPath);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
if (attribute.type === 'relation') {
|
|
253
|
+
if (isMorphLikeAttribute(attribute)) {
|
|
254
|
+
throwInvalidKey({
|
|
255
|
+
key: head,
|
|
256
|
+
path: fullPath
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
if (!attribute.target) {
|
|
260
|
+
throwInvalidKey({
|
|
261
|
+
key: head,
|
|
262
|
+
path: fullPath
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
validatePopulateDotPathSegments({
|
|
266
|
+
schema: getModel(attribute.target),
|
|
267
|
+
getModel
|
|
268
|
+
}, tail, fullPath);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (attribute.type === 'media') {
|
|
272
|
+
throwInvalidKey({
|
|
273
|
+
key: head,
|
|
274
|
+
path: fullPath
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
if (attribute.type === 'dynamiczone') {
|
|
278
|
+
const [nextSegment, ...rest] = tail;
|
|
279
|
+
const nextPath = `${fullPath}.${nextSegment}`;
|
|
280
|
+
const candidates = (attribute.components ?? []).map((uid)=>getModel(uid)).filter((model)=>model?.attributes?.[nextSegment]);
|
|
281
|
+
if (!candidates.length) {
|
|
282
|
+
throwInvalidKey({
|
|
283
|
+
key: nextSegment,
|
|
284
|
+
path: nextPath
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
let validated = false;
|
|
288
|
+
for (const componentSchema of candidates){
|
|
289
|
+
const nestedAttribute = componentSchema.attributes[nextSegment];
|
|
290
|
+
try {
|
|
291
|
+
if (!rest.length) {
|
|
292
|
+
if (nestedAttribute) {
|
|
293
|
+
validated = true;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
} else if (nestedAttribute?.type === 'component' && nestedAttribute.component) {
|
|
297
|
+
validatePopulateDotPathSegments({
|
|
298
|
+
schema: getModel(nestedAttribute.component),
|
|
299
|
+
getModel
|
|
300
|
+
}, rest, nextPath);
|
|
301
|
+
validated = true;
|
|
302
|
+
break;
|
|
303
|
+
} else if (nestedAttribute?.type === 'relation' && !isMorphLikeAttribute(nestedAttribute) && nestedAttribute.target) {
|
|
304
|
+
validatePopulateDotPathSegments({
|
|
305
|
+
schema: getModel(nestedAttribute.target),
|
|
306
|
+
getModel
|
|
307
|
+
}, rest, nextPath);
|
|
308
|
+
validated = true;
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
} catch {
|
|
312
|
+
// Try the next dynamic-zone component type.
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (!validated) {
|
|
316
|
+
throwInvalidKey({
|
|
317
|
+
key: nextSegment,
|
|
318
|
+
path: nextPath
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
const validatePopulateDotPaths = (ctx, populate)=>{
|
|
324
|
+
for (const path of flattenDotPopulatePaths(populate)){
|
|
325
|
+
const segments = path.split('.').map((segment)=>trim(segment)).filter(Boolean);
|
|
326
|
+
validatePopulateDotPathSegments(ctx, segments, '');
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
const validateMorphLikeNestedPopulate = (populateValue, { path })=>{
|
|
330
|
+
if (typeof populateValue === 'string' && populateValue !== '*' && !isNil(populateValue)) {
|
|
331
|
+
throwInvalidKey({
|
|
332
|
+
key: 'populate',
|
|
333
|
+
path
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
if (isPlainObject(populateValue) && !isEmpty(populateValue) && !isNil(populateValue)) {
|
|
337
|
+
throwInvalidKey({
|
|
338
|
+
key: 'populate',
|
|
339
|
+
path
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
};
|
|
201
343
|
const POPULATE_TRAVERSALS = [
|
|
202
344
|
'nonAttributesOperators',
|
|
203
345
|
'private'
|
|
@@ -206,6 +348,16 @@ const validatePopulate = asyncCurry(async (ctx, populate, includes)=>{
|
|
|
206
348
|
if (!ctx.schema) {
|
|
207
349
|
throw new Error('Missing schema in defaultValidatePopulate');
|
|
208
350
|
}
|
|
351
|
+
if (isDotNotationPopulate(populate)) {
|
|
352
|
+
validatePopulateDotPaths({
|
|
353
|
+
schema: ctx.schema,
|
|
354
|
+
getModel: ctx.getModel
|
|
355
|
+
}, populate);
|
|
356
|
+
if (includes?.populate?.includes('private')) {
|
|
357
|
+
return traverseQueryPopulate(visitor$3, ctx)(populate);
|
|
358
|
+
}
|
|
359
|
+
return populate;
|
|
360
|
+
}
|
|
209
361
|
// Build the list of functions conditionally based on the include array
|
|
210
362
|
const functionsToApply = [];
|
|
211
363
|
// Always include the main traversal function
|
|
@@ -222,6 +374,11 @@ const validatePopulate = asyncCurry(async (ctx, populate, includes)=>{
|
|
|
222
374
|
'component',
|
|
223
375
|
'media'
|
|
224
376
|
].includes(attribute.type);
|
|
377
|
+
if (isMorphLikeAttribute(attribute) && isObject(value) && 'populate' in value) {
|
|
378
|
+
validateMorphLikeNestedPopulate(value.populate, {
|
|
379
|
+
path: path.raw
|
|
380
|
+
});
|
|
381
|
+
}
|
|
225
382
|
// Throw on non-populate attributes
|
|
226
383
|
if (!isPopulatableAttribute) {
|
|
227
384
|
throwInvalidKey({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.mjs","sources":["../../src/validate/validators.ts"],"sourcesContent":["import { isEmpty, isNil, isObject } from 'lodash/fp';\n\nimport { pipe as pipeAsync } from '../async';\nimport { isScalarAttribute, constants } from '../content-types';\nimport {\n traverseQueryFilters,\n traverseQuerySort,\n traverseQueryFields,\n traverseQueryPopulate,\n} from '../traverse';\nimport { throwPassword, throwPrivate, throwDynamicZones, throwMorphToRelations } from './visitors';\nimport { isOperator } from '../operators';\nimport { asyncCurry, throwInvalidKey } from './utils';\nimport type { Model } from '../types';\nimport parseType from '../parse-type';\nimport type { Parent, Path } from '../traverse/factory';\n\nconst { ID_ATTRIBUTE, DOC_ID_ATTRIBUTE } = constants;\n\ninterface Context {\n schema: Model;\n getModel: (model: string) => Model;\n}\n\ninterface PopulateContext extends Context {\n path?: Path;\n parent?: Parent;\n}\n\ntype AnyFunc = (...args: any[]) => any;\n\nexport const FILTER_TRAVERSALS = [\n 'nonAttributesOperators',\n 'dynamicZones',\n 'morphRelations',\n 'passwords',\n 'private',\n];\n\nexport const validateFilters = asyncCurry(\n async (ctx: Context, filters: unknown, include: (typeof FILTER_TRAVERSALS)[number][]) => {\n // TODO: schema checks should check that it is a valid schema with yup\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidateFilters');\n }\n\n // Build the list of functions conditionally\n const functionsToApply: Array<AnyFunc> = [];\n\n // keys that are not attributes or valid operators\n if (include.includes('nonAttributesOperators')) {\n functionsToApply.push(\n traverseQueryFilters(({ key, attribute, path }) => {\n // ID is not an attribute per se, so we need to make\n // an extra check to ensure we're not removing it\n if ([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE].includes(key)) {\n return;\n }\n\n const isAttribute = !!attribute;\n\n if (!isAttribute && !isOperator(key)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n }\n\n if (include.includes('dynamicZones')) {\n functionsToApply.push(traverseQueryFilters(throwDynamicZones, ctx));\n }\n\n if (include.includes('morphRelations')) {\n functionsToApply.push(traverseQueryFilters(throwMorphToRelations, ctx));\n }\n\n if (include.includes('passwords')) {\n functionsToApply.push(traverseQueryFilters(throwPassword, ctx));\n }\n\n if (include.includes('private')) {\n functionsToApply.push(traverseQueryFilters(throwPrivate, ctx));\n }\n\n // Return directly if no validation functions are provided\n if (functionsToApply.length === 0) {\n return filters;\n }\n\n return pipeAsync(...functionsToApply)(filters);\n }\n);\n\nexport const defaultValidateFilters = asyncCurry(async (ctx: Context, filters: unknown) => {\n return validateFilters(ctx, filters, FILTER_TRAVERSALS);\n});\n\nexport const SORT_TRAVERSALS = [\n 'nonAttributesOperators',\n 'dynamicZones',\n 'morphRelations',\n 'passwords',\n 'private',\n 'nonScalarEmptyKeys',\n];\n\nexport const validateSort = asyncCurry(\n async (ctx: Context, sort: unknown, include: (typeof SORT_TRAVERSALS)[number][]) => {\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidateSort');\n }\n\n // Build the list of functions conditionally based on the include array\n const functionsToApply: Array<AnyFunc> = [];\n\n // Validate non attribute keys\n if (include.includes('nonAttributesOperators')) {\n functionsToApply.push(\n traverseQuerySort(({ key, attribute, path }) => {\n // ID is not an attribute per se, so we need to make\n // an extra check to ensure we're not removing it\n if ([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE].includes(key)) {\n return;\n }\n\n // status is a virtual sort key for D&P-enabled content types\n if (key === 'status' && ctx.schema?.options?.draftAndPublish) {\n return;\n }\n\n if (!attribute) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n }\n\n // Validate dynamic zones from sort\n if (include.includes('dynamicZones')) {\n functionsToApply.push(traverseQuerySort(throwDynamicZones, ctx));\n }\n\n // Validate morphTo relations from sort\n if (include.includes('morphRelations')) {\n functionsToApply.push(traverseQuerySort(throwMorphToRelations, ctx));\n }\n\n // Validate passwords from sort\n if (include.includes('passwords')) {\n functionsToApply.push(traverseQuerySort(throwPassword, ctx));\n }\n\n // Validate private from sort\n if (include.includes('private')) {\n functionsToApply.push(traverseQuerySort(throwPrivate, ctx));\n }\n\n // Validate non-scalar empty keys\n if (include.includes('nonScalarEmptyKeys')) {\n functionsToApply.push(\n traverseQuerySort(({ key, attribute, value, path }) => {\n // ID is not an attribute per se, so we need to make\n // an extra check to ensure we're not removing it\n if ([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE].includes(key)) {\n return;\n }\n\n if (!isScalarAttribute(attribute) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n }\n\n // Return directly if no validation functions are provided\n if (functionsToApply.length === 0) {\n return sort;\n }\n\n return pipeAsync(...functionsToApply)(sort);\n }\n);\n\nexport const defaultValidateSort = asyncCurry(async (ctx: Context, sort: unknown) => {\n return validateSort(ctx, sort, SORT_TRAVERSALS);\n});\n\nexport const FIELDS_TRAVERSALS = ['scalarAttributes', 'privateFields', 'passwordFields'];\n\nexport const validateFields = asyncCurry(\n async (ctx: Context, fields: unknown, include: (typeof FIELDS_TRAVERSALS)[number][]) => {\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidateFields');\n }\n // Build the list of functions conditionally based on the include array\n const functionsToApply: Array<AnyFunc> = [];\n\n // Only allow scalar attributes\n if (include.includes('scalarAttributes')) {\n functionsToApply.push(\n traverseQueryFields(({ key, attribute, path }) => {\n // ID is not an attribute per se, so we need to make\n // an extra check to ensure we're not throwing because of it\n if ([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE].includes(key)) {\n return;\n }\n\n if (isNil(attribute) || !isScalarAttribute(attribute)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n }\n\n // Private fields\n if (include.includes('privateFields')) {\n functionsToApply.push(traverseQueryFields(throwPrivate, ctx));\n }\n\n // Password fields\n if (include.includes('passwordFields')) {\n functionsToApply.push(traverseQueryFields(throwPassword, ctx));\n }\n\n // Return directly if no validation functions are provided\n if (functionsToApply.length === 0) {\n return fields;\n }\n\n return pipeAsync(...functionsToApply)(fields);\n }\n);\n\nexport const defaultValidateFields = asyncCurry(async (ctx: Context, fields: unknown) => {\n return validateFields(ctx, fields, FIELDS_TRAVERSALS);\n});\n\nexport const POPULATE_TRAVERSALS = ['nonAttributesOperators', 'private'];\n\nexport const validatePopulate = asyncCurry(\n async (\n ctx: PopulateContext,\n populate: unknown,\n includes: {\n fields?: (typeof FIELDS_TRAVERSALS)[number][];\n sort?: (typeof SORT_TRAVERSALS)[number][];\n filters?: (typeof FILTER_TRAVERSALS)[number][];\n populate?: (typeof POPULATE_TRAVERSALS)[number][];\n }\n ) => {\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidatePopulate');\n }\n // Build the list of functions conditionally based on the include array\n const functionsToApply: Array<AnyFunc> = [];\n\n // Always include the main traversal function\n functionsToApply.push(\n traverseQueryPopulate(\n async ({ key, path, value, schema, attribute, getModel, parent }, { set }) => {\n /**\n * NOTE: The parent check is done to support \"filters\" (and the rest of keys) as valid attribute names.\n *\n * The parent will not be an attribute when its a \"populate\" / \"filters\" / \"sort\" ... key.\n * Only in those scenarios the node will be an attribute.\n */\n if (!parent?.attribute && attribute) {\n const isPopulatableAttribute = [\n 'relation',\n 'dynamiczone',\n 'component',\n 'media',\n ].includes(attribute.type);\n\n // Throw on non-populate attributes\n if (!isPopulatableAttribute) {\n throwInvalidKey({ key, path: path.raw });\n }\n\n // Valid populatable attribute, so return\n return;\n }\n\n // If we're looking at a populate fragment, ensure its target is valid\n if (key === 'on') {\n // Populate fragment should always be an object\n if (!isObject(value)) {\n return throwInvalidKey({ key, path: path.raw });\n }\n\n const targets = Object.keys(value);\n\n for (const target of targets) {\n const model = getModel(target);\n\n // If a target is invalid (no matching model), then raise an error\n if (!model) {\n throwInvalidKey({ key: target, path: `${path.raw}.${target}` });\n }\n }\n\n // If the fragment's target is fine, then let it pass\n return;\n }\n\n // Ignore plain wildcards\n if (key === '' && value === '*') {\n return;\n }\n\n // Ensure count is a boolean\n if (key === 'count') {\n try {\n parseType({ type: 'boolean', value });\n return;\n } catch {\n throwInvalidKey({ key, path: path.attribute });\n }\n }\n\n // Allowed boolean-like keywords should be ignored\n try {\n parseType({ type: 'boolean', value: key });\n // Key is an allowed boolean-like keyword, skipping validation...\n return;\n } catch {\n // Continue, because it's not a boolean-like\n }\n\n // Handle nested `sort` validation with custom or default traversals\n if (key === 'sort') {\n set(\n key,\n await validateSort(\n {\n schema,\n getModel,\n },\n value, // pass the sort value\n includes?.sort || SORT_TRAVERSALS\n )\n );\n return;\n }\n\n // Handle nested `filters` validation with custom or default traversals\n if (key === 'filters') {\n set(\n key,\n await validateFilters(\n {\n schema,\n getModel,\n },\n value, // pass the filters value\n includes?.filters || FILTER_TRAVERSALS\n )\n );\n return;\n }\n\n // Handle nested `fields` validation with custom or default traversals\n if (key === 'fields') {\n set(\n key,\n await validateFields(\n {\n schema,\n getModel,\n },\n value, // pass the fields value\n includes?.fields || FIELDS_TRAVERSALS\n )\n );\n return;\n }\n\n // Handle recursive nested `populate` validation with the same include object\n if (key === 'populate') {\n set(\n key,\n await validatePopulate(\n {\n schema,\n getModel,\n parent: { key, path, schema, attribute },\n path,\n },\n value, // pass the nested populate value\n includes // pass down the same includes object\n )\n );\n return;\n }\n\n // Throw an error if non-attribute operators are included in the populate array\n if (includes?.populate?.includes('nonAttributesOperators')) {\n throwInvalidKey({ key, path: path.attribute });\n }\n },\n ctx\n )\n );\n\n // Conditionally traverse for private fields only if 'private' is included\n if (includes?.populate?.includes('private')) {\n functionsToApply.push(traverseQueryPopulate(throwPrivate, ctx));\n }\n\n // Return directly if no validation functions are provided\n if (functionsToApply.length === 0) {\n return populate;\n }\n\n return pipeAsync(...functionsToApply)(populate);\n }\n);\n\nexport const defaultValidatePopulate = asyncCurry(async (ctx: Context, populate: unknown) => {\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidatePopulate');\n }\n\n // Call validatePopulate and include all validations by passing in full traversal arrays\n return validatePopulate(ctx, populate, {\n filters: FILTER_TRAVERSALS,\n sort: SORT_TRAVERSALS,\n fields: FIELDS_TRAVERSALS,\n populate: POPULATE_TRAVERSALS,\n });\n});\n"],"names":["ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","constants","FILTER_TRAVERSALS","validateFilters","asyncCurry","ctx","filters","include","schema","Error","functionsToApply","includes","push","traverseQueryFilters","key","attribute","path","isAttribute","isOperator","throwInvalidKey","throwDynamicZones","throwMorphToRelations","throwPassword","throwPrivate","length","pipeAsync","defaultValidateFilters","SORT_TRAVERSALS","validateSort","sort","traverseQuerySort","options","draftAndPublish","value","isScalarAttribute","isEmpty","defaultValidateSort","FIELDS_TRAVERSALS","validateFields","fields","traverseQueryFields","isNil","defaultValidateFields","POPULATE_TRAVERSALS","validatePopulate","populate","traverseQueryPopulate","getModel","parent","set","isPopulatableAttribute","type","raw","isObject","targets","Object","keys","target","model","parseType","defaultValidatePopulate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validators.mjs","sources":["../../src/validate/validators.ts"],"sourcesContent":["import { isEmpty, isNil, isObject, isPlainObject, trim } from 'lodash/fp';\n\nimport { pipe as pipeAsync } from '../async';\nimport {\n isScalarAttribute,\n constants,\n isDynamicZoneAttribute,\n isMorphToRelationalAttribute,\n} from '../content-types';\nimport {\n traverseQueryFilters,\n traverseQuerySort,\n traverseQueryFields,\n traverseQueryPopulate,\n} from '../traverse';\nimport { throwPassword, throwPrivate, throwDynamicZones, throwMorphToRelations } from './visitors';\nimport { isOperator } from '../operators';\nimport { asyncCurry, throwInvalidKey } from './utils';\nimport type { Attribute, Model } from '../types';\nimport parseType from '../parse-type';\nimport type { Parent, Path } from '../traverse/factory';\n\nconst { ID_ATTRIBUTE, DOC_ID_ATTRIBUTE } = constants;\n\ninterface Context {\n schema: Model;\n getModel: (model: string) => Model;\n}\n\ninterface PopulateContext extends Context {\n path?: Path;\n parent?: Parent;\n}\n\ntype AnyFunc = (...args: any[]) => any;\n\nexport const FILTER_TRAVERSALS = [\n 'nonAttributesOperators',\n 'dynamicZones',\n 'morphRelations',\n 'passwords',\n 'private',\n];\n\nexport const validateFilters = asyncCurry(\n async (ctx: Context, filters: unknown, include: (typeof FILTER_TRAVERSALS)[number][]) => {\n // TODO: schema checks should check that it is a valid schema with yup\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidateFilters');\n }\n\n // Build the list of functions conditionally\n const functionsToApply: Array<AnyFunc> = [];\n\n // keys that are not attributes or valid operators\n if (include.includes('nonAttributesOperators')) {\n functionsToApply.push(\n traverseQueryFilters(({ key, attribute, path }) => {\n // ID is not an attribute per se, so we need to make\n // an extra check to ensure we're not removing it\n if ([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE].includes(key)) {\n return;\n }\n\n const isAttribute = !!attribute;\n\n if (!isAttribute && !isOperator(key)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n }\n\n if (include.includes('dynamicZones')) {\n functionsToApply.push(traverseQueryFilters(throwDynamicZones, ctx));\n }\n\n if (include.includes('morphRelations')) {\n functionsToApply.push(traverseQueryFilters(throwMorphToRelations, ctx));\n }\n\n if (include.includes('passwords')) {\n functionsToApply.push(traverseQueryFilters(throwPassword, ctx));\n }\n\n if (include.includes('private')) {\n functionsToApply.push(traverseQueryFilters(throwPrivate, ctx));\n }\n\n // Return directly if no validation functions are provided\n if (functionsToApply.length === 0) {\n return filters;\n }\n\n return pipeAsync(...functionsToApply)(filters);\n }\n);\n\nexport const defaultValidateFilters = asyncCurry(async (ctx: Context, filters: unknown) => {\n return validateFilters(ctx, filters, FILTER_TRAVERSALS);\n});\n\nexport const SORT_TRAVERSALS = [\n 'nonAttributesOperators',\n 'dynamicZones',\n 'morphRelations',\n 'passwords',\n 'private',\n 'nonScalarEmptyKeys',\n];\n\nexport const validateSort = asyncCurry(\n async (ctx: Context, sort: unknown, include: (typeof SORT_TRAVERSALS)[number][]) => {\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidateSort');\n }\n\n // Build the list of functions conditionally based on the include array\n const functionsToApply: Array<AnyFunc> = [];\n\n // Validate non attribute keys\n if (include.includes('nonAttributesOperators')) {\n functionsToApply.push(\n traverseQuerySort(({ key, attribute, path }) => {\n // ID is not an attribute per se, so we need to make\n // an extra check to ensure we're not removing it\n if ([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE].includes(key)) {\n return;\n }\n\n // status is a virtual sort key for D&P-enabled content types\n if (key === 'status' && ctx.schema?.options?.draftAndPublish) {\n return;\n }\n\n if (!attribute) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n }\n\n // Validate dynamic zones from sort\n if (include.includes('dynamicZones')) {\n functionsToApply.push(traverseQuerySort(throwDynamicZones, ctx));\n }\n\n // Validate morphTo relations from sort\n if (include.includes('morphRelations')) {\n functionsToApply.push(traverseQuerySort(throwMorphToRelations, ctx));\n }\n\n // Validate passwords from sort\n if (include.includes('passwords')) {\n functionsToApply.push(traverseQuerySort(throwPassword, ctx));\n }\n\n // Validate private from sort\n if (include.includes('private')) {\n functionsToApply.push(traverseQuerySort(throwPrivate, ctx));\n }\n\n // Validate non-scalar empty keys\n if (include.includes('nonScalarEmptyKeys')) {\n functionsToApply.push(\n traverseQuerySort(({ key, attribute, value, path }) => {\n // ID is not an attribute per se, so we need to make\n // an extra check to ensure we're not removing it\n if ([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE].includes(key)) {\n return;\n }\n\n if (!isScalarAttribute(attribute) && isEmpty(value)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n }\n\n // Return directly if no validation functions are provided\n if (functionsToApply.length === 0) {\n return sort;\n }\n\n return pipeAsync(...functionsToApply)(sort);\n }\n);\n\nexport const defaultValidateSort = asyncCurry(async (ctx: Context, sort: unknown) => {\n return validateSort(ctx, sort, SORT_TRAVERSALS);\n});\n\nexport const FIELDS_TRAVERSALS = ['scalarAttributes', 'privateFields', 'passwordFields'];\n\nexport const validateFields = asyncCurry(\n async (ctx: Context, fields: unknown, include: (typeof FIELDS_TRAVERSALS)[number][]) => {\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidateFields');\n }\n // Build the list of functions conditionally based on the include array\n const functionsToApply: Array<AnyFunc> = [];\n\n // Only allow scalar attributes\n if (include.includes('scalarAttributes')) {\n functionsToApply.push(\n traverseQueryFields(({ key, attribute, path }) => {\n // ID is not an attribute per se, so we need to make\n // an extra check to ensure we're not throwing because of it\n if ([ID_ATTRIBUTE, DOC_ID_ATTRIBUTE].includes(key)) {\n return;\n }\n\n if (isNil(attribute) || !isScalarAttribute(attribute)) {\n throwInvalidKey({ key, path: path.attribute });\n }\n }, ctx)\n );\n }\n\n // Private fields\n if (include.includes('privateFields')) {\n functionsToApply.push(traverseQueryFields(throwPrivate, ctx));\n }\n\n // Password fields\n if (include.includes('passwordFields')) {\n functionsToApply.push(traverseQueryFields(throwPassword, ctx));\n }\n\n // Return directly if no validation functions are provided\n if (functionsToApply.length === 0) {\n return fields;\n }\n\n return pipeAsync(...functionsToApply)(fields);\n }\n);\n\nexport const defaultValidateFields = asyncCurry(async (ctx: Context, fields: unknown) => {\n return validateFields(ctx, fields, FIELDS_TRAVERSALS);\n});\n\nconst isMorphLikeAttribute = (attribute?: Attribute) =>\n isDynamicZoneAttribute(attribute) || isMorphToRelationalAttribute(attribute);\n\nconst isPopulatableAttribute = (attribute?: Attribute) =>\n !!attribute && ['relation', 'dynamiczone', 'component', 'media'].includes(attribute.type);\n\nconst isDotNotationPopulate = (populate: unknown): populate is string | string[] => {\n if (populate === '*') {\n return false;\n }\n\n if (typeof populate === 'string') {\n return true;\n }\n\n return (\n Array.isArray(populate) && populate.length > 0 && populate.every((p) => typeof p === 'string')\n );\n};\n\nconst flattenDotPopulatePaths = (populate: string | string[]) => {\n const items = Array.isArray(populate) ? populate : [populate];\n\n return items.flatMap((item) =>\n item\n .split(',')\n .map((segment) => trim(segment))\n .filter(Boolean)\n );\n};\n\nconst validatePopulateDotPathSegments = (\n { schema, getModel }: { schema: Model; getModel: (uid: string) => Model },\n segments: string[],\n pathPrefix: string\n) => {\n if (!segments.length) {\n return;\n }\n\n const [head, ...tail] = segments;\n const fullPath = pathPrefix ? `${pathPrefix}.${head}` : head;\n const attribute = schema.attributes[head];\n\n if (!attribute || !isPopulatableAttribute(attribute)) {\n throwInvalidKey({ key: head, path: fullPath });\n }\n\n if (!tail.length) {\n return;\n }\n\n if (attribute.type === 'component') {\n if (!attribute.component) {\n throwInvalidKey({ key: head, path: fullPath });\n }\n\n validatePopulateDotPathSegments(\n { schema: getModel(attribute.component), getModel },\n tail,\n fullPath\n );\n return;\n }\n\n if (attribute.type === 'relation') {\n if (isMorphLikeAttribute(attribute)) {\n throwInvalidKey({ key: head, path: fullPath });\n }\n\n if (!attribute.target) {\n throwInvalidKey({ key: head, path: fullPath });\n }\n\n validatePopulateDotPathSegments(\n { schema: getModel(attribute.target!), getModel },\n tail,\n fullPath\n );\n return;\n }\n\n if (attribute.type === 'media') {\n throwInvalidKey({ key: head, path: fullPath });\n }\n\n if (attribute.type === 'dynamiczone') {\n const [nextSegment, ...rest] = tail;\n const nextPath = `${fullPath}.${nextSegment}`;\n const candidates = (attribute.components ?? [])\n .map((uid) => getModel(uid))\n .filter((model) => model?.attributes?.[nextSegment]);\n\n if (!candidates.length) {\n throwInvalidKey({ key: nextSegment, path: nextPath });\n }\n\n let validated = false;\n\n for (const componentSchema of candidates) {\n const nestedAttribute = componentSchema.attributes[nextSegment];\n\n try {\n if (!rest.length) {\n if (nestedAttribute) {\n validated = true;\n break;\n }\n } else if (nestedAttribute?.type === 'component' && nestedAttribute.component) {\n validatePopulateDotPathSegments(\n { schema: getModel(nestedAttribute.component), getModel },\n rest,\n nextPath\n );\n validated = true;\n break;\n } else if (\n nestedAttribute?.type === 'relation' &&\n !isMorphLikeAttribute(nestedAttribute) &&\n nestedAttribute.target\n ) {\n validatePopulateDotPathSegments(\n { schema: getModel(nestedAttribute.target), getModel },\n rest,\n nextPath\n );\n validated = true;\n break;\n }\n } catch {\n // Try the next dynamic-zone component type.\n }\n }\n\n if (!validated) {\n throwInvalidKey({ key: nextSegment, path: nextPath });\n }\n }\n};\n\nconst validatePopulateDotPaths = (\n ctx: { schema: Model; getModel: (uid: string) => Model },\n populate: string | string[]\n) => {\n for (const path of flattenDotPopulatePaths(populate)) {\n const segments = path\n .split('.')\n .map((segment) => trim(segment))\n .filter(Boolean);\n\n validatePopulateDotPathSegments(ctx, segments, '');\n }\n};\n\nconst validateMorphLikeNestedPopulate = (\n populateValue: unknown,\n { path }: { path: string | null }\n) => {\n if (typeof populateValue === 'string' && populateValue !== '*' && !isNil(populateValue)) {\n throwInvalidKey({ key: 'populate', path });\n }\n\n if (isPlainObject(populateValue) && !isEmpty(populateValue) && !isNil(populateValue)) {\n throwInvalidKey({ key: 'populate', path });\n }\n};\n\nexport const POPULATE_TRAVERSALS = ['nonAttributesOperators', 'private'];\n\nexport const validatePopulate = asyncCurry(\n async (\n ctx: PopulateContext,\n populate: unknown,\n includes: {\n fields?: (typeof FIELDS_TRAVERSALS)[number][];\n sort?: (typeof SORT_TRAVERSALS)[number][];\n filters?: (typeof FILTER_TRAVERSALS)[number][];\n populate?: (typeof POPULATE_TRAVERSALS)[number][];\n }\n ) => {\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidatePopulate');\n }\n\n if (isDotNotationPopulate(populate)) {\n validatePopulateDotPaths({ schema: ctx.schema, getModel: ctx.getModel }, populate);\n\n if (includes?.populate?.includes('private')) {\n return traverseQueryPopulate(throwPrivate, ctx)(populate);\n }\n\n return populate;\n }\n\n // Build the list of functions conditionally based on the include array\n const functionsToApply: Array<AnyFunc> = [];\n\n // Always include the main traversal function\n functionsToApply.push(\n traverseQueryPopulate(\n async ({ key, path, value, schema, attribute, getModel, parent }, { set }) => {\n /**\n * NOTE: The parent check is done to support \"filters\" (and the rest of keys) as valid attribute names.\n *\n * The parent will not be an attribute when its a \"populate\" / \"filters\" / \"sort\" ... key.\n * Only in those scenarios the node will be an attribute.\n */\n if (!parent?.attribute && attribute) {\n const isPopulatableAttribute = [\n 'relation',\n 'dynamiczone',\n 'component',\n 'media',\n ].includes(attribute.type);\n\n if (isMorphLikeAttribute(attribute) && isObject(value) && 'populate' in value) {\n validateMorphLikeNestedPopulate((value as Record<string, unknown>).populate, {\n path: path.raw,\n });\n }\n\n // Throw on non-populate attributes\n if (!isPopulatableAttribute) {\n throwInvalidKey({ key, path: path.raw });\n }\n\n // Valid populatable attribute, so return\n return;\n }\n\n // If we're looking at a populate fragment, ensure its target is valid\n if (key === 'on') {\n // Populate fragment should always be an object\n if (!isObject(value)) {\n return throwInvalidKey({ key, path: path.raw });\n }\n\n const targets = Object.keys(value);\n\n for (const target of targets) {\n const model = getModel(target);\n\n // If a target is invalid (no matching model), then raise an error\n if (!model) {\n throwInvalidKey({ key: target, path: `${path.raw}.${target}` });\n }\n }\n\n // If the fragment's target is fine, then let it pass\n return;\n }\n\n // Ignore plain wildcards\n if (key === '' && value === '*') {\n return;\n }\n\n // Ensure count is a boolean\n if (key === 'count') {\n try {\n parseType({ type: 'boolean', value });\n return;\n } catch {\n throwInvalidKey({ key, path: path.attribute });\n }\n }\n\n // Allowed boolean-like keywords should be ignored\n try {\n parseType({ type: 'boolean', value: key });\n // Key is an allowed boolean-like keyword, skipping validation...\n return;\n } catch {\n // Continue, because it's not a boolean-like\n }\n\n // Handle nested `sort` validation with custom or default traversals\n if (key === 'sort') {\n set(\n key,\n await validateSort(\n {\n schema,\n getModel,\n },\n value, // pass the sort value\n includes?.sort || SORT_TRAVERSALS\n )\n );\n return;\n }\n\n // Handle nested `filters` validation with custom or default traversals\n if (key === 'filters') {\n set(\n key,\n await validateFilters(\n {\n schema,\n getModel,\n },\n value, // pass the filters value\n includes?.filters || FILTER_TRAVERSALS\n )\n );\n return;\n }\n\n // Handle nested `fields` validation with custom or default traversals\n if (key === 'fields') {\n set(\n key,\n await validateFields(\n {\n schema,\n getModel,\n },\n value, // pass the fields value\n includes?.fields || FIELDS_TRAVERSALS\n )\n );\n return;\n }\n\n // Handle recursive nested `populate` validation with the same include object\n if (key === 'populate') {\n set(\n key,\n await validatePopulate(\n {\n schema,\n getModel,\n parent: { key, path, schema, attribute },\n path,\n },\n value, // pass the nested populate value\n includes // pass down the same includes object\n )\n );\n return;\n }\n\n // Throw an error if non-attribute operators are included in the populate array\n if (includes?.populate?.includes('nonAttributesOperators')) {\n throwInvalidKey({ key, path: path.attribute });\n }\n },\n ctx\n )\n );\n\n // Conditionally traverse for private fields only if 'private' is included\n if (includes?.populate?.includes('private')) {\n functionsToApply.push(traverseQueryPopulate(throwPrivate, ctx));\n }\n\n // Return directly if no validation functions are provided\n if (functionsToApply.length === 0) {\n return populate;\n }\n\n return pipeAsync(...functionsToApply)(populate);\n }\n);\n\nexport const defaultValidatePopulate = asyncCurry(async (ctx: Context, populate: unknown) => {\n if (!ctx.schema) {\n throw new Error('Missing schema in defaultValidatePopulate');\n }\n\n // Call validatePopulate and include all validations by passing in full traversal arrays\n return validatePopulate(ctx, populate, {\n filters: FILTER_TRAVERSALS,\n sort: SORT_TRAVERSALS,\n fields: FIELDS_TRAVERSALS,\n populate: POPULATE_TRAVERSALS,\n });\n});\n"],"names":["ID_ATTRIBUTE","DOC_ID_ATTRIBUTE","constants","FILTER_TRAVERSALS","validateFilters","asyncCurry","ctx","filters","include","schema","Error","functionsToApply","includes","push","traverseQueryFilters","key","attribute","path","isAttribute","isOperator","throwInvalidKey","throwDynamicZones","throwMorphToRelations","throwPassword","throwPrivate","length","pipeAsync","defaultValidateFilters","SORT_TRAVERSALS","validateSort","sort","traverseQuerySort","options","draftAndPublish","value","isScalarAttribute","isEmpty","defaultValidateSort","FIELDS_TRAVERSALS","validateFields","fields","traverseQueryFields","isNil","defaultValidateFields","isMorphLikeAttribute","isDynamicZoneAttribute","isMorphToRelationalAttribute","isPopulatableAttribute","type","isDotNotationPopulate","populate","Array","isArray","every","p","flattenDotPopulatePaths","items","flatMap","item","split","map","segment","trim","filter","Boolean","validatePopulateDotPathSegments","getModel","segments","pathPrefix","head","tail","fullPath","attributes","component","target","nextSegment","rest","nextPath","candidates","components","uid","model","validated","componentSchema","nestedAttribute","validatePopulateDotPaths","validateMorphLikeNestedPopulate","populateValue","isPlainObject","POPULATE_TRAVERSALS","validatePopulate","traverseQueryPopulate","parent","set","isObject","raw","targets","Object","keys","parseType","defaultValidatePopulate"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throw-disallowed-fields.d.ts","sourceRoot":"","sources":["../../../src/validate/visitors/throw-disallowed-fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"throw-disallowed-fields.d.ts","sourceRoot":"","sources":["../../../src/validate/visitors/throw-disallowed-fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;yBAGtC,gBAAe,MAAM,EAAE,GAAG,IAAW,KAAG,OAAO;AAA/D,wBAoEI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throw-restricted-fields.d.ts","sourceRoot":"","sources":["../../../src/validate/visitors/throw-restricted-fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"throw-restricted-fields.d.ts","sourceRoot":"","sources":["../../../src/validate/visitors/throw-restricted-fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;yBAGtC,mBAAkB,MAAM,EAAE,GAAG,IAAW,KAAG,OAAO;AAAlE,wBA0BI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throw-restricted-relations.d.ts","sourceRoot":"","sources":["../../../src/validate/visitors/throw-restricted-relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC
|
|
1
|
+
{"version":3,"file":"throw-restricted-relations.d.ts","sourceRoot":"","sources":["../../../src/validate/visitors/throw-restricted-relations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;yBAQtC,MAAM,OAAO,KAAG,OAAO;AAAvC,wBAkGI"}
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var z = require('zod/v4');
|
|
4
4
|
|
|
5
|
-
function
|
|
5
|
+
function _interopNamespace(e) {
|
|
6
|
+
if (e && e.__esModule) return e;
|
|
6
7
|
var n = Object.create(null);
|
|
7
8
|
if (e) {
|
|
8
9
|
Object.keys(e).forEach(function (k) {
|
|
@@ -19,7 +20,7 @@ function _interopNamespaceDefault(e) {
|
|
|
19
20
|
return Object.freeze(n);
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
var z__namespace = /*#__PURE__*/
|
|
23
|
+
var z__namespace = /*#__PURE__*/_interopNamespace(z);
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* Standard query parameter validators that can be reused across different route validators
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-params.js","sources":["../../../src/validation/route-validators/query-params.ts"],"sourcesContent":["import * as z from 'zod/v4';\n\n/**\n * Standard query parameter validators that can be reused across different route validators\n *\n * These schemas provide the basic structure validation for common Strapi API query parameters.\n * They can be used as building blocks for both generic validation and schema-aware validation.\n */\n\n/**\n * Fields parameter validation\n * Supports: 'title', ['title', 'name'], or '*'\n */\nexport const queryFieldsSchema = z\n .union([z.string(), z.array(z.string())])\n .describe('Select specific fields to return in the response');\n\n/**\n * Populate parameter validation\n * Supports: '*', 'relation', ['relation1', 'relation2'], or complex objects\n */\nexport const queryPopulateSchema = z\n .union([z.literal('*'), z.string(), z.array(z.string()), z.record(z.string(), z.any())])\n .describe('Specify which relations to populate in the response');\n\n/**\n * Sort parameter validation\n * Supports: 'name', ['name', 'title'], { name: 'asc' }, or [{ name: 'desc' }]\n */\nexport const querySortSchema = z\n .union([\n z.string(),\n z.array(z.string()),\n z.record(z.string(), z.enum(['asc', 'desc'])),\n z.array(z.record(z.string(), z.enum(['asc', 'desc']))),\n ])\n .describe('Sort the results by specified fields');\n\n/**\n * Pagination parameter validation\n * Supports both page-based and offset-based pagination\n */\nexport const paginationSchema = z\n .intersection(\n z.object({\n withCount: z.boolean().optional().describe('Include total count in response'),\n }),\n z.union([\n z\n .object({\n page: z.number().int().positive().describe('Page number (1-based)'),\n pageSize: z.number().int().positive().describe('Number of entries per page'),\n })\n .describe('Page-based pagination'),\n z\n .object({\n start: z.number().int().min(0).describe('Number of entries to skip'),\n limit: z.number().int().positive().describe('Maximum number of entries to return'),\n })\n .describe('Offset-based pagination'),\n ])\n )\n .describe('Pagination parameters');\n\n/**\n * Filters parameter validation\n * Supports any object structure for filtering\n */\nexport const filtersSchema = z.record(z.string(), z.any()).describe('Apply filters to the query');\n\n/**\n * Locale parameter validation\n * Used for internationalization\n */\nexport const localeSchema = z.string().describe('Specify the locale for localized content');\n\n/**\n * Status parameter validation\n * Used for draft & publish functionality\n */\nexport const statusSchema = z.enum(['draft', 'published']).describe('Filter by publication status');\n\n/**\n * Search query parameter validation\n * Used for text search functionality\n */\nexport const searchQuerySchema = z.string().describe('Search query string');\n\n/**\n * Complete collection of all standard query parameter schemas\n * This object provides easy access to all available query parameter validators\n */\nexport const queryParameterSchemas = {\n fields: queryFieldsSchema,\n populate: queryPopulateSchema,\n sort: querySortSchema,\n pagination: paginationSchema,\n filters: filtersSchema,\n locale: localeSchema,\n status: statusSchema,\n _q: searchQuerySchema,\n} as const;\n\n/**\n * Query parameter names supported by Strapi's API\n */\nexport type QueryParam = keyof typeof queryParameterSchemas;\n"],"names":["queryFieldsSchema","z","union","string","array","describe","queryPopulateSchema","literal","record","any","querySortSchema","enum","paginationSchema","intersection","object","withCount","boolean","optional","page","number","int","positive","pageSize","start","min","limit","filtersSchema","localeSchema","statusSchema","searchQuerySchema","queryParameterSchemas","fields","populate","sort","pagination","filters","locale","status","_q"],"mappings":"
|
|
1
|
+
{"version":3,"file":"query-params.js","sources":["../../../src/validation/route-validators/query-params.ts"],"sourcesContent":["import * as z from 'zod/v4';\n\n/**\n * Standard query parameter validators that can be reused across different route validators\n *\n * These schemas provide the basic structure validation for common Strapi API query parameters.\n * They can be used as building blocks for both generic validation and schema-aware validation.\n */\n\n/**\n * Fields parameter validation\n * Supports: 'title', ['title', 'name'], or '*'\n */\nexport const queryFieldsSchema = z\n .union([z.string(), z.array(z.string())])\n .describe('Select specific fields to return in the response');\n\n/**\n * Populate parameter validation\n * Supports: '*', 'relation', ['relation1', 'relation2'], or complex objects\n */\nexport const queryPopulateSchema = z\n .union([z.literal('*'), z.string(), z.array(z.string()), z.record(z.string(), z.any())])\n .describe('Specify which relations to populate in the response');\n\n/**\n * Sort parameter validation\n * Supports: 'name', ['name', 'title'], { name: 'asc' }, or [{ name: 'desc' }]\n */\nexport const querySortSchema = z\n .union([\n z.string(),\n z.array(z.string()),\n z.record(z.string(), z.enum(['asc', 'desc'])),\n z.array(z.record(z.string(), z.enum(['asc', 'desc']))),\n ])\n .describe('Sort the results by specified fields');\n\n/**\n * Pagination parameter validation\n * Supports both page-based and offset-based pagination\n */\nexport const paginationSchema = z\n .intersection(\n z.object({\n withCount: z.boolean().optional().describe('Include total count in response'),\n }),\n z.union([\n z\n .object({\n page: z.number().int().positive().describe('Page number (1-based)'),\n pageSize: z.number().int().positive().describe('Number of entries per page'),\n })\n .describe('Page-based pagination'),\n z\n .object({\n start: z.number().int().min(0).describe('Number of entries to skip'),\n limit: z.number().int().positive().describe('Maximum number of entries to return'),\n })\n .describe('Offset-based pagination'),\n ])\n )\n .describe('Pagination parameters');\n\n/**\n * Filters parameter validation\n * Supports any object structure for filtering\n */\nexport const filtersSchema = z.record(z.string(), z.any()).describe('Apply filters to the query');\n\n/**\n * Locale parameter validation\n * Used for internationalization\n */\nexport const localeSchema = z.string().describe('Specify the locale for localized content');\n\n/**\n * Status parameter validation\n * Used for draft & publish functionality\n */\nexport const statusSchema = z.enum(['draft', 'published']).describe('Filter by publication status');\n\n/**\n * Search query parameter validation\n * Used for text search functionality\n */\nexport const searchQuerySchema = z.string().describe('Search query string');\n\n/**\n * Complete collection of all standard query parameter schemas\n * This object provides easy access to all available query parameter validators\n */\nexport const queryParameterSchemas = {\n fields: queryFieldsSchema,\n populate: queryPopulateSchema,\n sort: querySortSchema,\n pagination: paginationSchema,\n filters: filtersSchema,\n locale: localeSchema,\n status: statusSchema,\n _q: searchQuerySchema,\n} as const;\n\n/**\n * Query parameter names supported by Strapi's API\n */\nexport type QueryParam = keyof typeof queryParameterSchemas;\n"],"names":["queryFieldsSchema","z","union","string","array","describe","queryPopulateSchema","literal","record","any","querySortSchema","enum","paginationSchema","intersection","object","withCount","boolean","optional","page","number","int","positive","pageSize","start","min","limit","filtersSchema","localeSchema","statusSchema","searchQuerySchema","queryParameterSchemas","fields","populate","sort","pagination","filters","locale","status","_q"],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export declare const transformUidToValidOpenApiName: (uid: string) => string;
|
|
|
23
23
|
* const requiredString = maybeRequired(true)(z.string()); // z.ZodString
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
|
-
export declare const maybeRequired: (required?: boolean) => <T extends z.
|
|
26
|
+
export declare const maybeRequired: (required?: boolean) => <T extends z.Schema>(schema: T) => z.ZodOptional<T> | z.ZodNonOptional<T>;
|
|
27
27
|
/**
|
|
28
28
|
* Conditionally makes a Zod schema readonly based on the `writable` parameter.
|
|
29
29
|
*
|
|
@@ -35,7 +35,7 @@ export declare const maybeRequired: (required?: boolean) => <T extends z.ZodType
|
|
|
35
35
|
* const writableNumber = maybeReadonly(true)(z.number()); // z.ZodNumber
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
38
|
-
export declare const maybeReadonly: (writable?: boolean) => <T extends z.
|
|
38
|
+
export declare const maybeReadonly: (writable?: boolean) => <T extends z.Schema>(schema: T) => T | z.ZodReadonly<T>;
|
|
39
39
|
/**
|
|
40
40
|
* Conditionally adds a default value to a Zod schema based on the `defaultValue` parameter.
|
|
41
41
|
*
|
|
@@ -48,7 +48,7 @@ export declare const maybeReadonly: (writable?: boolean) => <T extends z.ZodType
|
|
|
48
48
|
* const numberWithFunctionDefault = maybeWithDefault(() => Math.random())(z.number());
|
|
49
49
|
* ```
|
|
50
50
|
*/
|
|
51
|
-
export declare const maybeWithDefault: (defaultValue?: unknown) => <T extends z.
|
|
51
|
+
export declare const maybeWithDefault: (defaultValue?: unknown) => <T extends z.Schema>(schema: T) => T | z.ZodDefault<T>;
|
|
52
52
|
/**
|
|
53
53
|
* Conditionally applies `min` and `max` constraints to a Zod string, number, or array schema.
|
|
54
54
|
*
|
|
@@ -61,7 +61,7 @@ export declare const maybeWithDefault: (defaultValue?: unknown) => <T extends z.
|
|
|
61
61
|
* const numberWithMinMax = maybeWithMinMax(0, 100)(z.number()); // z.ZodNumber with min(0) and max(100)
|
|
62
62
|
* ```
|
|
63
63
|
*/
|
|
64
|
-
export declare const maybeWithMinMax: (min?: number, max?: number) => <R extends z.ZodString | z.
|
|
64
|
+
export declare const maybeWithMinMax: (min?: number, max?: number) => <R extends z.ZodString | z.ZodEmail | z.ZodNumber | z.ZodArray<z.ZodAny>>(schema: R) => z.ZodString | z.ZodNumber | z.ZodEmail | z.ZodArray<z.ZodAny>;
|
|
65
65
|
/**
|
|
66
66
|
* Applies a series of modifier functions to a Zod schema sequentially.
|
|
67
67
|
*
|
|
@@ -77,5 +77,5 @@ export declare const maybeWithMinMax: (min?: number, max?: number) => <R extends
|
|
|
77
77
|
* ]);
|
|
78
78
|
* ```
|
|
79
79
|
*/
|
|
80
|
-
export declare const augmentSchema: <T extends z.
|
|
80
|
+
export declare const augmentSchema: <T extends z.Schema>(schema: T, modifiers: ((schema: T) => z.Schema)[]) => T;
|
|
81
81
|
//# sourceMappingURL=utilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/validation/utilities.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../src/validation/utilities.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,GAAI,KAAK,MAAM,KAAG,MAyB5D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,GAAI,WAAW,OAAO,MACtC,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,2CAGtC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,GAAI,WAAW,OAAO,MACtC,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,yBACtC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAAI,eAAe,OAAO,MAC7C,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,wBAQtC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,MAChD,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,kEAG3F,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAC9C,QAAQ,CAAC,EACT,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,EAAE,MAGvC,CAAC"}
|
package/dist/validators.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAI3B,QAAA,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAI3B,QAAA,MAAM,cAAc,GAAI,OAAO,GAAG,CAAC,eAAe,EAAE,eAAe,MAAM,UAExE,CAAC;AAIF,QAAA,MAAM,iBAAiB,GACpB,OAAO,SAAS,GAAG,CAAC,SAAS,EAAE,QAAQ,OAAO,EAAE,YAAY,MACtD,MAAM,OAAO,EAAE,eAAe,MAAM,KAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAY3E,CAAC;AAEJ,QAAA,MAAM,qBAAqB,GACxB,OAAO,SAAS,GAAG,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,SAAS,EAAE,YAAY,MAClE,MAAM,OAAO,EAAE,eAAe,MAAM,KAAG,GAAG,CAAC,SAAS,CAAC,OAAO,CAW5D,CAAC;AAEJ,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/validators.js
CHANGED
|
@@ -4,7 +4,8 @@ var yup = require('yup');
|
|
|
4
4
|
var fp = require('lodash/fp');
|
|
5
5
|
var errors = require('./errors.js');
|
|
6
6
|
|
|
7
|
-
function
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
8
9
|
var n = Object.create(null);
|
|
9
10
|
if (e) {
|
|
10
11
|
Object.keys(e).forEach(function (k) {
|
|
@@ -21,7 +22,7 @@ function _interopNamespaceDefault(e) {
|
|
|
21
22
|
return Object.freeze(n);
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
var yup__namespace = /*#__PURE__*/
|
|
25
|
+
var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
|
|
25
26
|
|
|
26
27
|
const handleYupError = (error, errorMessage)=>{
|
|
27
28
|
throw new errors.YupValidationError(error, errorMessage);
|
package/dist/validators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sources":["../src/validators.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable no-template-curly-in-string */\nimport * as yup from 'yup';\nimport { defaults } from 'lodash/fp';\nimport { YupValidationError } from './errors';\n\nconst handleYupError = (error: yup.ValidationError, errorMessage?: string) => {\n throw new YupValidationError(error, errorMessage);\n};\n\nconst defaultValidationParam = { strict: true, abortEarly: false };\n\nconst validateYupSchema =\n <TSchema extends yup.AnySchema>(schema: TSchema, options = {}) =>\n async (body: unknown, errorMessage?: string): Promise<yup.InferType<TSchema>> => {\n try {\n const optionsWithDefaults = defaults(defaultValidationParam, options);\n const result = await schema.validate(body, optionsWithDefaults);\n return result;\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n handleYupError(e, errorMessage);\n }\n\n throw e;\n }\n };\n\nconst validateYupSchemaSync =\n <TSchema extends yup.AnySchema>(schema: yup.AnySchema, options = {}) =>\n (body: unknown, errorMessage?: string): yup.InferType<TSchema> => {\n try {\n const optionsWithDefaults = defaults(defaultValidationParam, options);\n return schema.validateSync(body, optionsWithDefaults);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n handleYupError(e, errorMessage);\n }\n\n throw e;\n }\n };\n\nexport { handleYupError, validateYupSchema, validateYupSchemaSync };\n"],"names":["handleYupError","error","errorMessage","YupValidationError","defaultValidationParam","strict","abortEarly","validateYupSchema","schema","options","body","optionsWithDefaults","defaults","result","validate","e","yup","ValidationError","validateYupSchemaSync","validateSync"],"mappings":"
|
|
1
|
+
{"version":3,"file":"validators.js","sources":["../src/validators.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable no-template-curly-in-string */\nimport * as yup from 'yup';\nimport { defaults } from 'lodash/fp';\nimport { YupValidationError } from './errors';\n\nconst handleYupError = (error: yup.ValidationError, errorMessage?: string) => {\n throw new YupValidationError(error, errorMessage);\n};\n\nconst defaultValidationParam = { strict: true, abortEarly: false };\n\nconst validateYupSchema =\n <TSchema extends yup.AnySchema>(schema: TSchema, options = {}) =>\n async (body: unknown, errorMessage?: string): Promise<yup.InferType<TSchema>> => {\n try {\n const optionsWithDefaults = defaults(defaultValidationParam, options);\n const result = await schema.validate(body, optionsWithDefaults);\n return result;\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n handleYupError(e, errorMessage);\n }\n\n throw e;\n }\n };\n\nconst validateYupSchemaSync =\n <TSchema extends yup.AnySchema>(schema: yup.AnySchema, options = {}) =>\n (body: unknown, errorMessage?: string): yup.InferType<TSchema> => {\n try {\n const optionsWithDefaults = defaults(defaultValidationParam, options);\n return schema.validateSync(body, optionsWithDefaults);\n } catch (e) {\n if (e instanceof yup.ValidationError) {\n handleYupError(e, errorMessage);\n }\n\n throw e;\n }\n };\n\nexport { handleYupError, validateYupSchema, validateYupSchemaSync };\n"],"names":["handleYupError","error","errorMessage","YupValidationError","defaultValidationParam","strict","abortEarly","validateYupSchema","schema","options","body","optionsWithDefaults","defaults","result","validate","e","yup","ValidationError","validateYupSchemaSync","validateSync"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,cAAAA,GAAiB,CAACC,KAAAA,EAA4BC,YAAAA,GAAAA;IAClD,MAAM,IAAIC,0BAAmBF,KAAAA,EAAOC,YAAAA,CAAAA;AACtC;AAEA,MAAME,sBAAAA,GAAyB;IAAEC,MAAAA,EAAQ,IAAA;IAAMC,UAAAA,EAAY;AAAM,CAAA;AAEjE,MAAMC,iBAAAA,GACJ,CAAgCC,MAAAA,EAAiBC,OAAAA,GAAU,EAAE,GAC7D,OAAOC,IAAAA,EAAeR,YAAAA,GAAAA;QACpB,IAAI;YACF,MAAMS,mBAAAA,GAAsBC,YAASR,sBAAAA,EAAwBK,OAAAA,CAAAA;AAC7D,YAAA,MAAMI,MAAAA,GAAS,MAAML,MAAAA,CAAOM,QAAQ,CAACJ,IAAAA,EAAMC,mBAAAA,CAAAA;YAC3C,OAAOE,MAAAA;AACT,QAAA,CAAA,CAAE,OAAOE,CAAAA,EAAG;YACV,IAAIA,CAAAA,YAAaC,cAAAA,CAAIC,eAAe,EAAE;AACpCjB,gBAAAA,cAAAA,CAAee,CAAAA,EAAGb,YAAAA,CAAAA;AACpB,YAAA;YAEA,MAAMa,CAAAA;AACR,QAAA;AACF,IAAA;AAEF,MAAMG,qBAAAA,GACJ,CAAgCV,MAAAA,EAAuBC,OAAAA,GAAU,EAAE,GACnE,CAACC,IAAAA,EAAeR,YAAAA,GAAAA;QACd,IAAI;YACF,MAAMS,mBAAAA,GAAsBC,YAASR,sBAAAA,EAAwBK,OAAAA,CAAAA;YAC7D,OAAOD,MAAAA,CAAOW,YAAY,CAACT,IAAAA,EAAMC,mBAAAA,CAAAA;AACnC,QAAA,CAAA,CAAE,OAAOI,CAAAA,EAAG;YACV,IAAIA,CAAAA,YAAaC,cAAAA,CAAIC,eAAe,EAAE;AACpCjB,gBAAAA,cAAAA,CAAee,CAAAA,EAAGb,YAAAA,CAAAA;AACpB,YAAA;YAEA,MAAMa,CAAAA;AACR,QAAA;AACF,IAAA;;;;;;"}
|
package/dist/yup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yup.d.ts","sourceRoot":"","sources":["../src/yup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAM3B,cAAc,KAAK,CAAC;AAEpB,eAAO,MAAM,QAAQ,QAAO,
|
|
1
|
+
{"version":3,"file":"yup.d.ts","sourceRoot":"","sources":["../src/yup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAM3B,cAAc,KAAK,CAAC;AAEpB,eAAO,MAAM,QAAQ,QAAO,YAAY,CAAC,OAAO,cAAc,CAAyB,CAAC;AAmFxF,qBAAa,cAAe,SAAQ,GAAG,CAAC,WAAW;;IAKjD,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,GAAG,MAAM;CAGrD;AAED,OAAO,QAAQ,KAAK,CAAC;IAGnB,UAAiB,UAAU;QACzB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC;IAED,UAAiB,YAAY;QAC3B,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACpC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC;IAGD,UAAiB,YAAY,CAAC,MAAM;QAClC,qBAAqB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC/C;CACF"}
|
package/dist/yup.js
CHANGED
|
@@ -6,7 +6,10 @@ var fp = require('lodash/fp');
|
|
|
6
6
|
var strings = require('./primitives/strings.js');
|
|
7
7
|
var printValue = require('./print-value.js');
|
|
8
8
|
|
|
9
|
-
function
|
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
function _interopNamespace(e) {
|
|
12
|
+
if (e && e.__esModule) return e;
|
|
10
13
|
var n = Object.create(null);
|
|
11
14
|
if (e) {
|
|
12
15
|
Object.keys(e).forEach(function (k) {
|
|
@@ -23,11 +26,12 @@ function _interopNamespaceDefault(e) {
|
|
|
23
26
|
return Object.freeze(n);
|
|
24
27
|
}
|
|
25
28
|
|
|
26
|
-
var yup__namespace = /*#__PURE__*/
|
|
29
|
+
var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
|
|
30
|
+
var ___default = /*#__PURE__*/_interopDefault(_);
|
|
27
31
|
|
|
28
32
|
const strapiID = ()=>new StrapiIDSchema();
|
|
29
|
-
const isNotNilTest = (value)=>!
|
|
30
|
-
const isNotNullTest = (value)=>!
|
|
33
|
+
const isNotNilTest = (value)=>!___default.default.isNil(value);
|
|
34
|
+
const isNotNullTest = (value)=>!___default.default.isNull(value);
|
|
31
35
|
yup__namespace.addMethod(yup__namespace.mixed, 'notNil', function isNotNill(msg = '${path} must be defined.') {
|
|
32
36
|
return this.test('defined', msg, isNotNilTest);
|
|
33
37
|
});
|
|
@@ -35,7 +39,7 @@ yup__namespace.addMethod(yup__namespace.mixed, 'notNull', function isNotNull(msg
|
|
|
35
39
|
return this.test('defined', msg, isNotNullTest);
|
|
36
40
|
});
|
|
37
41
|
yup__namespace.addMethod(yup__namespace.mixed, 'isFunction', function isFunction(message = '${path} is not a function') {
|
|
38
|
-
return this.test('is a function', message, (value)=>
|
|
42
|
+
return this.test('is a function', message, (value)=>___default.default.isUndefined(value) || ___default.default.isFunction(value));
|
|
39
43
|
});
|
|
40
44
|
yup__namespace.addMethod(yup__namespace.string, 'isCamelCase', function isCamelCase(message = '${path} is not in camel case (anExampleOfCamelCase)') {
|
|
41
45
|
return this.test('is in camelCase', message, (value)=>value ? strings.isCamelCase(value) : true);
|
|
@@ -44,7 +48,7 @@ yup__namespace.addMethod(yup__namespace.string, 'isKebabCase', function isKebabC
|
|
|
44
48
|
return this.test('is in kebab-case', message, (value)=>value ? strings.isKebabCase(value) : true);
|
|
45
49
|
});
|
|
46
50
|
yup__namespace.addMethod(yup__namespace.object, 'onlyContainsFunctions', function onlyContainsFunctions(message = '${path} contains values that are not functions') {
|
|
47
|
-
return this.test('only contains functions', message, (value)=>
|
|
51
|
+
return this.test('only contains functions', message, (value)=>___default.default.isUndefined(value) || value && Object.values(value).every(___default.default.isFunction));
|
|
48
52
|
});
|
|
49
53
|
yup__namespace.addMethod(yup__namespace.array, 'uniqueProperty', function uniqueProperty(propertyName, message) {
|
|
50
54
|
return this.test('unique', message, function unique(list) {
|
package/dist/yup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yup.js","sources":["../src/yup.ts"],"sourcesContent":["/* eslint-disable no-template-curly-in-string */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport * as yup from 'yup';\nimport _ from 'lodash';\nimport { isNumber, isInteger, get } from 'lodash/fp';\nimport { strings } from './primitives';\nimport { printValue } from './print-value';\n\nexport * from 'yup';\n\nexport const strapiID = (): InstanceType<typeof StrapiIDSchema> => new StrapiIDSchema();\n\nconst isNotNilTest = (value: unknown) => !_.isNil(value);\n\nconst isNotNullTest = (value: unknown) => !_.isNull(value);\n\nyup.addMethod(yup.mixed, 'notNil', function isNotNill(msg = '${path} must be defined.') {\n return this.test('defined', msg, isNotNilTest);\n});\n\nyup.addMethod(yup.mixed, 'notNull', function isNotNull(msg = '${path} cannot be null.') {\n return this.test('defined', msg, isNotNullTest);\n});\n\nyup.addMethod(yup.mixed, 'isFunction', function isFunction(message = '${path} is not a function') {\n return this.test(\n 'is a function',\n message,\n (value) => _.isUndefined(value) || _.isFunction(value)\n );\n});\n\nyup.addMethod(\n yup.string,\n 'isCamelCase',\n function isCamelCase(message = '${path} is not in camel case (anExampleOfCamelCase)') {\n return this.test('is in camelCase', message, (value) =>\n value ? strings.isCamelCase(value) : true\n );\n }\n);\n\nyup.addMethod(\n yup.string,\n 'isKebabCase',\n function isKebabCase(message = '${path} is not in kebab case (an-example-of-kebab-case)') {\n return this.test('is in kebab-case', message, (value) =>\n value ? strings.isKebabCase(value) : true\n );\n }\n);\n\nyup.addMethod(\n yup.object,\n 'onlyContainsFunctions',\n function onlyContainsFunctions(message = '${path} contains values that are not functions') {\n return this.test(\n 'only contains functions',\n message,\n (value) => _.isUndefined(value) || (value && Object.values(value).every(_.isFunction))\n );\n }\n);\n\nyup.addMethod(\n yup.array,\n 'uniqueProperty',\n function uniqueProperty(propertyName: string, message: string) {\n return this.test('unique', message, function unique(list) {\n const errors: yup.ValidationError[] = [];\n\n list?.forEach((element, index) => {\n const sameElements = list.filter(\n (e) => get(propertyName, e) === get(propertyName, element)\n );\n if (sameElements.length > 1) {\n errors.push(\n this.createError({\n path: `${this.path}[${index}].${propertyName}`,\n message,\n })\n );\n }\n });\n\n if (errors.length) {\n throw new yup.ValidationError(errors);\n }\n return true;\n });\n }\n);\n\nexport class StrapiIDSchema extends yup.MixedSchema {\n constructor() {\n super({ type: 'strapiID' });\n }\n\n _typeCheck(value: unknown): value is string | number {\n return typeof value === 'string' || (isNumber(value) && isInteger(value) && value >= 0);\n }\n}\n\ndeclare module 'yup' {\n // const strapiID: () => InstanceType<typeof StrapiIDSchema>;\n\n export interface BaseSchema {\n isFunction(message?: string): this;\n notNil(message?: string): this;\n notNull(message?: string): this;\n }\n\n export interface StringSchema {\n isCamelCase(message?: string): this;\n isKebabCase(message?: string): this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n export interface ObjectSchema<TShape> {\n onlyContainsFunctions(message?: string): this;\n }\n}\n\ninterface NoTypeOptions {\n path: string;\n type: string;\n value: unknown;\n originalValue: unknown;\n}\n\n// Temporary fix of this issue : https://github.com/jquense/yup/issues/616\nyup.setLocale({\n mixed: {\n notType(options: NoTypeOptions) {\n const { path, type, value, originalValue } = options;\n const isCast = originalValue != null && originalValue !== value;\n const msg =\n `${path} must be a \\`${type}\\` type, ` +\n `but the final value was: \\`${printValue(value, true)}\\`${\n isCast ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.'\n }`;\n\n /* Remove comment that is not supposed to be seen by the enduser\n if (value === null) {\n msg += `\\n If \"null\" is intended as an empty value be sure to mark the schema as \\`.nullable()\\``;\n }\n */\n return msg;\n },\n },\n});\n"],"names":["strapiID","StrapiIDSchema","isNotNilTest","value","_","isNil","isNotNullTest","isNull","yup","addMethod","mixed","isNotNill","msg","test","isNotNull","isFunction","message","isUndefined","string","isCamelCase","strings","isKebabCase","object","onlyContainsFunctions","Object","values","every","array","uniqueProperty","propertyName","unique","list","errors","forEach","element","index","sameElements","filter","e","get","length","push","createError","path","ValidationError","MixedSchema","_typeCheck","isNumber","isInteger","type","setLocale","notType","options","originalValue","isCast","printValue"],"mappings":"
|
|
1
|
+
{"version":3,"file":"yup.js","sources":["../src/yup.ts"],"sourcesContent":["/* eslint-disable no-template-curly-in-string */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport * as yup from 'yup';\nimport _ from 'lodash';\nimport { isNumber, isInteger, get } from 'lodash/fp';\nimport { strings } from './primitives';\nimport { printValue } from './print-value';\n\nexport * from 'yup';\n\nexport const strapiID = (): InstanceType<typeof StrapiIDSchema> => new StrapiIDSchema();\n\nconst isNotNilTest = (value: unknown) => !_.isNil(value);\n\nconst isNotNullTest = (value: unknown) => !_.isNull(value);\n\nyup.addMethod(yup.mixed, 'notNil', function isNotNill(msg = '${path} must be defined.') {\n return this.test('defined', msg, isNotNilTest);\n});\n\nyup.addMethod(yup.mixed, 'notNull', function isNotNull(msg = '${path} cannot be null.') {\n return this.test('defined', msg, isNotNullTest);\n});\n\nyup.addMethod(yup.mixed, 'isFunction', function isFunction(message = '${path} is not a function') {\n return this.test(\n 'is a function',\n message,\n (value) => _.isUndefined(value) || _.isFunction(value)\n );\n});\n\nyup.addMethod(\n yup.string,\n 'isCamelCase',\n function isCamelCase(message = '${path} is not in camel case (anExampleOfCamelCase)') {\n return this.test('is in camelCase', message, (value) =>\n value ? strings.isCamelCase(value) : true\n );\n }\n);\n\nyup.addMethod(\n yup.string,\n 'isKebabCase',\n function isKebabCase(message = '${path} is not in kebab case (an-example-of-kebab-case)') {\n return this.test('is in kebab-case', message, (value) =>\n value ? strings.isKebabCase(value) : true\n );\n }\n);\n\nyup.addMethod(\n yup.object,\n 'onlyContainsFunctions',\n function onlyContainsFunctions(message = '${path} contains values that are not functions') {\n return this.test(\n 'only contains functions',\n message,\n (value) => _.isUndefined(value) || (value && Object.values(value).every(_.isFunction))\n );\n }\n);\n\nyup.addMethod(\n yup.array,\n 'uniqueProperty',\n function uniqueProperty(propertyName: string, message: string) {\n return this.test('unique', message, function unique(list) {\n const errors: yup.ValidationError[] = [];\n\n list?.forEach((element, index) => {\n const sameElements = list.filter(\n (e) => get(propertyName, e) === get(propertyName, element)\n );\n if (sameElements.length > 1) {\n errors.push(\n this.createError({\n path: `${this.path}[${index}].${propertyName}`,\n message,\n })\n );\n }\n });\n\n if (errors.length) {\n throw new yup.ValidationError(errors);\n }\n return true;\n });\n }\n);\n\nexport class StrapiIDSchema extends yup.MixedSchema {\n constructor() {\n super({ type: 'strapiID' });\n }\n\n _typeCheck(value: unknown): value is string | number {\n return typeof value === 'string' || (isNumber(value) && isInteger(value) && value >= 0);\n }\n}\n\ndeclare module 'yup' {\n // const strapiID: () => InstanceType<typeof StrapiIDSchema>;\n\n export interface BaseSchema {\n isFunction(message?: string): this;\n notNil(message?: string): this;\n notNull(message?: string): this;\n }\n\n export interface StringSchema {\n isCamelCase(message?: string): this;\n isKebabCase(message?: string): this;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n export interface ObjectSchema<TShape> {\n onlyContainsFunctions(message?: string): this;\n }\n}\n\ninterface NoTypeOptions {\n path: string;\n type: string;\n value: unknown;\n originalValue: unknown;\n}\n\n// Temporary fix of this issue : https://github.com/jquense/yup/issues/616\nyup.setLocale({\n mixed: {\n notType(options: NoTypeOptions) {\n const { path, type, value, originalValue } = options;\n const isCast = originalValue != null && originalValue !== value;\n const msg =\n `${path} must be a \\`${type}\\` type, ` +\n `but the final value was: \\`${printValue(value, true)}\\`${\n isCast ? ` (cast from the value \\`${printValue(originalValue, true)}\\`).` : '.'\n }`;\n\n /* Remove comment that is not supposed to be seen by the enduser\n if (value === null) {\n msg += `\\n If \"null\" is intended as an empty value be sure to mark the schema as \\`.nullable()\\``;\n }\n */\n return msg;\n },\n },\n});\n"],"names":["strapiID","StrapiIDSchema","isNotNilTest","value","_","isNil","isNotNullTest","isNull","yup","addMethod","mixed","isNotNill","msg","test","isNotNull","isFunction","message","isUndefined","string","isCamelCase","strings","isKebabCase","object","onlyContainsFunctions","Object","values","every","array","uniqueProperty","propertyName","unique","list","errors","forEach","element","index","sameElements","filter","e","get","length","push","createError","path","ValidationError","MixedSchema","_typeCheck","isNumber","isInteger","type","setLocale","notType","options","originalValue","isCast","printValue"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUO,MAAMA,QAAAA,GAAW,IAA2C,IAAIC,cAAAA;AAEvE,MAAMC,eAAe,CAACC,KAAAA,GAAmB,CAACC,kBAAAA,CAAEC,KAAK,CAACF,KAAAA,CAAAA;AAElD,MAAMG,gBAAgB,CAACH,KAAAA,GAAmB,CAACC,kBAAAA,CAAEG,MAAM,CAACJ,KAAAA,CAAAA;AAEpDK,cAAAA,CAAIC,SAAS,CAACD,cAAAA,CAAIE,KAAK,EAAE,QAAA,EAAU,SAASC,SAAAA,CAAUC,GAAAA,GAAM,0BAA0B,EAAA;AACpF,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,WAAWD,GAAAA,EAAKV,YAAAA,CAAAA;AACnC,CAAA,CAAA;AAEAM,cAAAA,CAAIC,SAAS,CAACD,cAAAA,CAAIE,KAAK,EAAE,SAAA,EAAW,SAASI,SAAAA,CAAUF,GAAAA,GAAM,yBAAyB,EAAA;AACpF,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,WAAWD,GAAAA,EAAKN,aAAAA,CAAAA;AACnC,CAAA,CAAA;AAEAE,cAAAA,CAAIC,SAAS,CAACD,cAAAA,CAAIE,KAAK,EAAE,YAAA,EAAc,SAASK,UAAAA,CAAWC,OAAAA,GAAU,2BAA2B,EAAA;AAC9F,IAAA,OAAO,IAAI,CAACH,IAAI,CACd,iBACAG,OAAAA,EACA,CAACb,KAAAA,GAAUC,kBAAAA,CAAEa,WAAW,CAACd,KAAAA,CAAAA,IAAUC,kBAAAA,CAAEW,UAAU,CAACZ,KAAAA,CAAAA,CAAAA;AAEpD,CAAA,CAAA;AAEAK,cAAAA,CAAIC,SAAS,CACXD,cAAAA,CAAIU,MAAM,EACV,aAAA,EACA,SAASC,WAAAA,CAAYH,OAAAA,GAAU,qDAAqD,EAAA;AAClF,IAAA,OAAO,IAAI,CAACH,IAAI,CAAC,iBAAA,EAAmBG,OAAAA,EAAS,CAACb,KAAAA,GAC5CA,KAAAA,GAAQiB,mBAAmB,CAACjB,KAAAA,CAAAA,GAAS,IAAA,CAAA;AAEzC,CAAA,CAAA;AAGFK,cAAAA,CAAIC,SAAS,CACXD,cAAAA,CAAIU,MAAM,EACV,aAAA,EACA,SAASG,WAAAA,CAAYL,OAAAA,GAAU,yDAAyD,EAAA;AACtF,IAAA,OAAO,IAAI,CAACH,IAAI,CAAC,kBAAA,EAAoBG,OAAAA,EAAS,CAACb,KAAAA,GAC7CA,KAAAA,GAAQiB,mBAAmB,CAACjB,KAAAA,CAAAA,GAAS,IAAA,CAAA;AAEzC,CAAA,CAAA;AAGFK,cAAAA,CAAIC,SAAS,CACXD,cAAAA,CAAIc,MAAM,EACV,uBAAA,EACA,SAASC,qBAAAA,CAAsBP,OAAAA,GAAU,gDAAgD,EAAA;IACvF,OAAO,IAAI,CAACH,IAAI,CACd,2BACAG,OAAAA,EACA,CAACb,QAAUC,kBAAAA,CAAEa,WAAW,CAACd,KAAAA,CAAAA,IAAWA,KAAAA,IAASqB,OAAOC,MAAM,CAACtB,OAAOuB,KAAK,CAACtB,mBAAEW,UAAU,CAAA,CAAA;AAExF,CAAA,CAAA;AAGFP,cAAAA,CAAIC,SAAS,CACXD,cAAAA,CAAImB,KAAK,EACT,kBACA,SAASC,cAAAA,CAAeC,YAAoB,EAAEb,OAAe,EAAA;IAC3D,OAAO,IAAI,CAACH,IAAI,CAAC,UAAUG,OAAAA,EAAS,SAASc,OAAOC,IAAI,EAAA;AACtD,QAAA,MAAMC,SAAgC,EAAE;QAExCD,IAAAA,EAAME,OAAAA,CAAQ,CAACC,OAAAA,EAASC,KAAAA,GAAAA;YACtB,MAAMC,YAAAA,GAAeL,IAAAA,CAAKM,MAAM,CAC9B,CAACC,IAAMC,MAAAA,CAAIV,YAAAA,EAAcS,CAAAA,CAAAA,KAAOC,MAAAA,CAAIV,YAAAA,EAAcK,OAAAA,CAAAA,CAAAA;YAEpD,IAAIE,YAAAA,CAAaI,MAAM,GAAG,CAAA,EAAG;AAC3BR,gBAAAA,MAAAA,CAAOS,IAAI,CACT,IAAI,CAACC,WAAW,CAAC;oBACfC,IAAAA,EAAM,CAAA,EAAG,IAAI,CAACA,IAAI,CAAC,CAAC,EAAER,KAAAA,CAAM,EAAE,EAAEN,YAAAA,CAAAA,CAAc;AAC9Cb,oBAAAA;AACF,iBAAA,CAAA,CAAA;AAEJ,YAAA;AACF,QAAA,CAAA,CAAA;QAEA,IAAIgB,MAAAA,CAAOQ,MAAM,EAAE;YACjB,MAAM,IAAIhC,cAAAA,CAAIoC,eAAe,CAACZ,MAAAA,CAAAA;AAChC,QAAA;QACA,OAAO,IAAA;AACT,IAAA,CAAA,CAAA;AACF,CAAA,CAAA;AAGK,MAAM/B,cAAAA,SAAuBO,cAAAA,CAAIqC,WAAW,CAAA;AAKjDC,IAAAA,UAAAA,CAAW3C,KAAc,EAA4B;AACnD,QAAA,OAAO,OAAOA,KAAAA,KAAU,QAAA,IAAa4C,YAAS5C,KAAAA,CAAAA,IAAU6C,YAAAA,CAAU7C,UAAUA,KAAAA,IAAS,CAAA;AACvF,IAAA;IANA,WAAA,EAAc;AACZ,QAAA,KAAK,CAAC;YAAE8C,IAAAA,EAAM;AAAW,SAAA,CAAA;AAC3B,IAAA;AAKF;AA6BA;AACAzC,cAAAA,CAAI0C,SAAS,CAAC;IACZxC,KAAAA,EAAO;AACLyC,QAAAA,OAAAA,CAAAA,CAAQC,OAAsB,EAAA;YAC5B,MAAM,EAAET,IAAI,EAAEM,IAAI,EAAE9C,KAAK,EAAEkD,aAAa,EAAE,GAAGD,OAAAA;YAC7C,MAAME,MAAAA,GAASD,aAAAA,IAAiB,IAAA,IAAQA,aAAAA,KAAkBlD,KAAAA;YAC1D,MAAMS,GAAAA,GACJ,CAAA,EAAG+B,IAAAA,CAAK,aAAa,EAAEM,IAAAA,CAAK,SAAS,CAAC,GACtC,CAAC,2BAA2B,EAAEM,qBAAAA,CAAWpD,KAAAA,EAAO,IAAA,CAAA,CAAM,EAAE,EACtDmD,MAAAA,GAAS,CAAC,wBAAwB,EAAEC,qBAAAA,CAAWF,aAAAA,EAAe,IAAA,CAAA,CAAM,IAAI,CAAC,GAAG,GAAA,CAAA,CAC5E;AAEJ;;;;AAIA,SACA,OAAOzC,GAAAA;AACT,QAAA;AACF;AACF,CAAA,CAAA;;;;;;;;;;;"}
|
package/dist/zod.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ import * as z from 'zod/v4';
|
|
|
15
15
|
* });
|
|
16
16
|
*/
|
|
17
17
|
export { z };
|
|
18
|
-
export declare const validateZodSchema: <T extends z.
|
|
18
|
+
export declare const validateZodSchema: <T extends z.Schema>(schema: T) => (data: unknown, errorMessage?: string) => z.infer<T>;
|
|
19
19
|
type FormErrors = Record<string, string>;
|
|
20
20
|
/**
|
|
21
21
|
* Converts a ZodError into form-compatible errors matching
|
package/dist/zod.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../src/zod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAI5B;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,CAAC,EAAE,CAAC;AAEb,eAAO,MAAM,iBAAiB,GAC3B,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,MAC7B,MAAM,OAAO,EAAE,eAAe,MAAM,KAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAWhD,CAAC;AAcJ,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzC;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,CAAC,CAAC,QAAQ,KAAG,UAW1D,CAAC"}
|