UNPKG

@strapi/utils

Version:

Shared utilities for the Strapi packages

1 lines 8.45 kB
{"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","type","setLocale","notType","options","originalValue","isCast","printValue"],"mappings":"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"}