@strapi/utils
Version:
Shared utilities for the Strapi packages
1 lines • 8.42 kB
Source Map (JSON)
{"version":3,"file":"yup.mjs","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","constructor","type","setLocale","notType","options","originalValue","isCast","printValue"],"mappings":"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"}