UNPKG

vue-types

Version:
1 lines 37.2 kB
{"version":3,"file":"vue-types.cjs","sources":["../node_modules/is-plain-object/dist/is-plain-object.mjs","../src/config.ts","../src/utils.ts","../src/validators/native.ts","../src/validators/custom.ts","../src/validators/oneof.ts","../src/validators/oneoftype.ts","../src/validators/arrayof.ts","../src/validators/instanceof.ts","../src/validators/objectof.ts","../src/validators/shape.ts","../src/index.ts","../src/sensibles.ts","../src/index.cjs.ts"],"sourcesContent":["/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nfunction isObject(o) {\n return Object.prototype.toString.call(o) === '[object Object]';\n}\n\nfunction isPlainObject(o) {\n var ctor,prot;\n\n if (isObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (ctor === undefined) return true;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\n\nexport { isPlainObject };\n","export const config = {\n silent: false,\n}\n","import { isPlainObject as _isPlainObject } from 'is-plain-object'\nimport { config } from './config'\nimport {\n VueTypeDef,\n VueTypeValidableDef,\n VueProp,\n InferType,\n PropOptions,\n} from './types'\n\nconst ObjProto = Object.prototype\nconst toString = ObjProto.toString\nexport const hasOwn = ObjProto.hasOwnProperty\n\nconst FN_MATCH_REGEXP = /^\\s*function (\\w+)/\n\n// https://github.com/vuejs/vue/blob/dev/src/core/util/props.js#L177\nexport function getType(\n fn: VueProp<any> | (() => any) | (new (...args: any[]) => any),\n): string {\n const type = (fn as VueProp<any>)?.type ?? fn\n if (type) {\n const match = type.toString().match(FN_MATCH_REGEXP)\n return match ? match[1] : ''\n }\n return ''\n}\n\nexport function getNativeType(value: any): string {\n if (value === null || value === undefined) return ''\n const match = value.constructor.toString().match(FN_MATCH_REGEXP)\n return match ? match[1] : ''\n}\n\ntype PlainObject = { [key: string]: any }\nexport const isPlainObject = _isPlainObject as (obj: any) => obj is PlainObject\n\n/**\n * No-op function\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport function noop() {}\n\n/**\n * A function that returns its first argument\n *\n * @param arg - Any argument\n */\nexport const identity = (arg: any) => arg\n\nlet warn: (msg: string) => string | void = identity\n\nif (process.env.NODE_ENV !== 'production') {\n const hasConsole = typeof console !== 'undefined'\n warn = hasConsole\n ? function warn(msg) {\n // eslint-disable-next-line no-console\n config.silent === false && console.warn(`[VueTypes warn]: ${msg}`)\n }\n : identity\n}\n\nexport { warn }\n\n/**\n * Checks for a own property in an object\n *\n * @param {object} obj - Object\n * @param {string} prop - Property to check\n */\nexport const has = <T extends any, U extends keyof T>(obj: T, prop: U) =>\n hasOwn.call(obj, prop)\n\n/**\n * Determines whether the passed value is an integer. Uses `Number.isInteger` if available\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n * @param {*} value - The value to be tested for being an integer.\n * @returns {boolean}\n */\nexport const isInteger =\n Number.isInteger ||\n function isInteger(value: unknown): value is number {\n return (\n typeof value === 'number' &&\n isFinite(value) &&\n Math.floor(value) === value\n )\n }\n\n/**\n * Determines whether the passed value is an Array.\n *\n * @param {*} value - The value to be tested for being an array.\n * @returns {boolean}\n */\nexport const isArray =\n Array.isArray ||\n function isArray(value): value is any[] {\n return toString.call(value) === '[object Array]'\n }\n\n/**\n * Checks if a value is a function\n *\n * @param {any} value - Value to check\n * @returns {boolean}\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport const isFunction = (value: unknown): value is Function =>\n toString.call(value) === '[object Function]'\n\n/**\n * Checks if the passed-in value is a VueTypes type\n * @param value - The value to check\n */\nexport const isVueTypeDef = <T>(\n value: any,\n): value is VueTypeDef<T> | VueTypeValidableDef<T> =>\n isPlainObject(value) && has(value, '_vueTypes_name')\n\n/**\n * Checks if the passed-in value is a Vue prop definition object or a VueTypes type\n * @param value - The value to check\n */\nexport const isComplexType = <T>(value: any): value is VueProp<T> =>\n isPlainObject(value) &&\n (has(value, 'type') ||\n ['_vueTypes_name', 'validator', 'default', 'required'].some((k) =>\n has(value, k),\n ))\n\nexport interface WrappedFn {\n (...args: any[]): any\n __original: (...args: any[]) => any\n}\n\n/**\n * Binds a function to a context and saves a reference to the original.\n *\n * @param fn - Target function\n * @param ctx - New function context\n */\nexport function bindTo(fn: (...args: any[]) => any, ctx: any): WrappedFn {\n return Object.defineProperty(fn.bind(ctx), '__original', {\n value: fn,\n })\n}\n\n/**\n * Returns the original function bounded with `bindTo`. If the passed-in function\n * has not be bound, the function itself will be returned instead.\n *\n * @param fn - Function to unwrap\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function unwrap<T extends WrappedFn | Function>(fn: T) {\n return (fn as WrappedFn).__original ?? fn\n}\n\n/**\n * Validates a given value against a prop type object.\n *\n * If `silent` is `false` (default) will return a boolean. If it is set to `true`\n * it will return `true` on success or a string error message on failure\n *\n * @param {Object|*} type - Type to use for validation. Either a type object or a constructor\n * @param {*} value - Value to check\n * @param {boolean} silent - Silence warnings\n */\nexport function validateType<T, U>(\n type: T,\n value: U,\n silent = false,\n): string | boolean {\n let typeToCheck: { [key: string]: any }\n let valid = true\n let expectedType = ''\n if (!isPlainObject(type)) {\n typeToCheck = { type }\n } else {\n typeToCheck = type\n }\n const namePrefix = isVueTypeDef(typeToCheck)\n ? typeToCheck._vueTypes_name + ' - '\n : ''\n\n if (isComplexType(typeToCheck) && typeToCheck.type !== null) {\n if (typeToCheck.type === undefined || typeToCheck.type === true) {\n return valid\n }\n if (!typeToCheck.required && value === undefined) {\n return valid\n }\n if (isArray(typeToCheck.type)) {\n valid = typeToCheck.type.some(\n (type: any) => validateType(type, value, true) === true,\n )\n expectedType = typeToCheck.type\n .map((type: any) => getType(type))\n .join(' or ')\n } else {\n expectedType = getType(typeToCheck)\n\n if (expectedType === 'Array') {\n valid = isArray(value)\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value)\n } else if (\n expectedType === 'String' ||\n expectedType === 'Number' ||\n expectedType === 'Boolean' ||\n expectedType === 'Function'\n ) {\n valid = getNativeType(value) === expectedType\n } else {\n valid = value instanceof typeToCheck.type\n }\n }\n }\n\n if (!valid) {\n const msg = `${namePrefix}value \"${value}\" should be of type \"${expectedType}\"`\n if (silent === false) {\n warn(msg)\n return false\n }\n return msg\n }\n\n if (has(typeToCheck, 'validator') && isFunction(typeToCheck.validator)) {\n const oldWarn = warn\n const warnLog = []\n warn = (msg) => {\n warnLog.push(msg)\n }\n\n valid = typeToCheck.validator(value)\n warn = oldWarn\n\n if (!valid) {\n const msg = (warnLog.length > 1 ? '* ' : '') + warnLog.join('\\n* ')\n warnLog.length = 0\n if (silent === false) {\n warn(msg)\n return valid\n }\n return msg\n }\n }\n return valid\n}\n\n/**\n * Adds `isRequired` and `def` modifiers to an object\n *\n * @param {string} name - Type internal name\n * @param {object} obj - Object to enhance\n */\nexport function toType<T = any>(name: string, obj: PropOptions<T>) {\n const type: VueTypeDef<T> = Object.defineProperties(obj, {\n _vueTypes_name: {\n value: name,\n writable: true,\n },\n isRequired: {\n get() {\n this.required = true\n return this\n },\n },\n def: {\n value(def?: any) {\n if (def === undefined) {\n if (has(this, 'default')) {\n delete this.default\n }\n return this\n }\n if (!isFunction(def) && validateType(this, def, true) !== true) {\n warn(`${this._vueTypes_name} - invalid default value: \"${def}\"`)\n return this\n }\n if (isArray(def)) {\n this.default = () => [...def]\n } else if (isPlainObject(def)) {\n this.default = () => Object.assign({}, def)\n } else {\n this.default = def\n }\n return this\n },\n },\n })\n\n const { validator } = type\n if (isFunction(validator)) {\n type.validator = bindTo(validator, type)\n }\n\n return type\n}\n\n/**\n * Like `toType` but also adds the `validate()` method to the type object\n *\n * @param {string} name - Type internal name\n * @param {object} obj - Object to enhance\n */\nexport function toValidableType<T = any>(name: string, obj: PropOptions<T>) {\n const type = toType<T>(name, obj)\n return Object.defineProperty(type, 'validate', {\n value(fn: (value: T) => boolean) {\n if (isFunction(this.validator)) {\n warn(\n `${\n this._vueTypes_name\n } - calling .validate() will overwrite the current custom validator function. Validator info:\\n${JSON.stringify(\n this,\n )}`,\n )\n }\n this.validator = bindTo(fn, this)\n return this\n },\n }) as VueTypeValidableDef<T>\n}\n\n/**\n * Clones an object preserving all of it's own keys.\n *\n * @param obj - Object to clone\n */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function clone<T extends object>(obj: T): T {\n const descriptors = {} as { [P in keyof T]: any }\n Object.getOwnPropertyNames(obj).forEach((key) => {\n descriptors[key as keyof T] = Object.getOwnPropertyDescriptor(obj, key)\n })\n return Object.defineProperties({}, descriptors)\n}\n\n/**\n * Return a new VueTypes type using another type as base.\n *\n * Properties in the `props` object will overwrite those defined in the source one\n * expect for the `validator` function. In that case both functions will be executed in series.\n *\n * @param name - Name of the new type\n * @param source - Source type\n * @param props - Custom type properties\n */\nexport function fromType<T extends VueTypeDef<any>>(name: string, source: T): T\nexport function fromType<\n T extends VueTypeDef<any>,\n V extends PropOptions<InferType<T>>\n>(name: string, source: T, props: V): Omit<T, keyof V> & V\nexport function fromType<\n T extends VueTypeDef<any>,\n V extends PropOptions<InferType<T>>\n>(name: string, source: T, props?: V) {\n // 1. create an exact copy of the source type\n const copy = clone(source)\n\n // 2. give it a new name\n copy._vueTypes_name = name\n\n if (!isPlainObject(props)) {\n return copy\n }\n const { validator, ...rest } = props\n\n // 3. compose the validator function\n // with the one on the source (if present)\n // and ensure it is bound to the copy\n if (isFunction(validator)) {\n let { validator: prevValidator } = copy\n\n if (prevValidator) {\n prevValidator = unwrap(prevValidator)\n }\n\n copy.validator = bindTo(\n prevValidator\n ? function (this: T, value: any) {\n return (\n prevValidator.call(this, value) && validator.call(this, value)\n )\n }\n : validator,\n copy,\n )\n }\n // 4. overwrite the rest, if present\n return Object.assign(copy, rest as V)\n}\n\nexport function indent(string: string) {\n return string.replace(/^(?!\\s*$)/gm, ' ')\n}\n","import { toType, toValidableType, isInteger } from '../utils'\nimport { PropType } from '../types'\n\nexport const any = () => toValidableType('any', {})\n\nexport const func = <T extends (...args: any[]) => any>() =>\n toValidableType<T>('function', {\n type: Function as PropType<T>,\n })\n\nexport const bool = () =>\n toValidableType('boolean', {\n type: Boolean,\n })\n\nexport const string = () =>\n toValidableType('string', {\n type: String,\n })\n\nexport const number = () =>\n toValidableType('number', {\n type: Number,\n })\n\nexport const array = <T>() =>\n toValidableType<T[]>('array', {\n type: Array,\n })\n\nexport const object = <T extends { [key: string]: any }>() =>\n toValidableType<T>('object', {\n type: Object,\n })\n\nexport const integer = () =>\n toType('integer', {\n type: Number,\n validator(value) {\n return isInteger(value)\n },\n })\n\nexport const symbol = () =>\n toType<symbol>('symbol', {\n validator(value) {\n return typeof value === 'symbol'\n },\n })\n","import { toType, warn } from '../utils'\nimport { ValidatorFunction, VueTypeDef } from '../types'\n\nexport default function custom<T>(\n validatorFn: ValidatorFunction<T>,\n warnMsg = 'custom validation failed',\n) {\n if (typeof validatorFn !== 'function') {\n throw new TypeError(\n '[VueTypes error]: You must provide a function as argument',\n )\n }\n\n return toType<T>(validatorFn.name || '<<anonymous function>>', {\n validator(this: VueTypeDef<T>, value: T) {\n const valid = validatorFn(value)\n if (!valid) warn(`${this._vueTypes_name} - ${warnMsg}`)\n return valid\n },\n })\n}\n","import { Prop } from '../types'\nimport { toType, warn, isArray } from '../utils'\n\nexport default function oneOf<T extends readonly any[]>(arr: T) {\n if (!isArray(arr)) {\n throw new TypeError(\n '[VueTypes error]: You must provide an array as argument.',\n )\n }\n const msg = `oneOf - value should be one of \"${arr.join('\", \"')}\".`\n const allowedTypes = arr.reduce((ret, v) => {\n if (v !== null && v !== undefined) {\n const constr = (v as any).constructor\n ret.indexOf(constr) === -1 && ret.push(constr)\n }\n return ret\n }, [] as Prop<T[number]>[])\n\n return toType<T[number]>('oneOf', {\n type: allowedTypes.length > 0 ? allowedTypes : undefined,\n validator(value) {\n const valid = arr.indexOf(value) !== -1\n if (!valid) warn(msg)\n return valid\n },\n })\n}\n","import { Prop, VueProp, InferType, PropType } from '../types'\nimport {\n isArray,\n isComplexType,\n isVueTypeDef,\n isFunction,\n toType,\n validateType,\n warn,\n indent,\n} from '../utils'\n\nexport default function oneOfType<\n U extends VueProp<any> | Prop<any>,\n V = InferType<U>\n>(arr: U[]) {\n if (!isArray(arr)) {\n throw new TypeError(\n '[VueTypes error]: You must provide an array as argument',\n )\n }\n\n let hasCustomValidators = false\n\n let nativeChecks: Prop<V>[] = []\n\n for (let i = 0; i < arr.length; i += 1) {\n const type = arr[i]\n if (isComplexType<V>(type)) {\n if (\n isVueTypeDef<V>(type) &&\n type._vueTypes_name === 'oneOf' &&\n type.type\n ) {\n nativeChecks = nativeChecks.concat(type.type as PropType<V>)\n continue\n }\n if (isFunction(type.validator)) {\n hasCustomValidators = true\n }\n if (type.type !== true && type.type) {\n nativeChecks = nativeChecks.concat(type.type)\n continue\n }\n }\n nativeChecks.push(type as Prop<V>)\n }\n\n // filter duplicates\n nativeChecks = nativeChecks.filter((t, i) => nativeChecks.indexOf(t) === i)\n\n if (!hasCustomValidators) {\n // we got just native objects (ie: Array, Object)\n // delegate to Vue native prop check\n return toType<V>('oneOfType', {\n type: nativeChecks,\n })\n }\n\n return toType<V>('oneOfType', {\n type: nativeChecks,\n validator(value) {\n const err: string[] = []\n const valid = arr.some((type) => {\n const t =\n isVueTypeDef(type) && type._vueTypes_name === 'oneOf'\n ? type.type || null\n : type\n const res = validateType(t, value, true)\n if (typeof res === 'string') {\n err.push(res)\n }\n return res === true\n })\n if (!valid) {\n warn(\n `oneOfType - provided value does not match any of the ${\n err.length\n } passed-in validators:\\n${indent(err.join('\\n'))}`,\n )\n }\n\n return valid\n },\n })\n}\n","import { Prop, VueProp, InferType } from '../types'\nimport { toType, validateType, warn, indent } from '../utils'\n\nexport default function arrayOf<T extends VueProp<any> | Prop<any>>(type: T) {\n return toType<InferType<T>[]>('arrayOf', {\n type: Array,\n validator(values: any[]) {\n let vResult: string | boolean\n const valid = values.every((value) => {\n vResult = validateType(type, value, true)\n return vResult === true\n })\n if (!valid) {\n warn(`arrayOf - value validation error:\\n${indent(vResult as string)}`)\n }\n return valid\n },\n })\n}\n","import { toType } from '../utils'\nimport { Constructor } from '../types'\n\nexport default function instanceOf<C extends Constructor>(\n instanceConstructor: C,\n) {\n return toType<InstanceType<C>>('instanceOf', {\n type: instanceConstructor,\n })\n}\n","import { Prop, VueProp, InferType } from '../types'\nimport { toType, validateType, warn, indent } from '../utils'\n\nexport default function objectOf<T extends VueProp<any> | Prop<any>>(type: T) {\n return toType<{ [key: string]: InferType<T> }>('objectOf', {\n type: Object,\n validator(obj) {\n let vResult: string | boolean\n const valid = Object.keys(obj).every((key) => {\n vResult = validateType(type, obj[key], true)\n return vResult === true\n })\n\n if (!valid) {\n warn(`objectOf - value validation error:\\n${indent(vResult as string)}`)\n }\n return valid\n },\n })\n}\n","import { Prop, VueProp, VueTypeShape, VueTypeLooseShape } from '../types'\nimport { toType, validateType, warn, isPlainObject, indent } from '../utils'\n\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport default function shape<T extends object>(\n obj: { [K in keyof T]: Prop<T[K]> | VueProp<T[K]> },\n): VueTypeShape<T> {\n const keys = Object.keys(obj)\n const requiredKeys = keys.filter((key) => !!(obj as any)[key]?.required)\n\n const type = toType('shape', {\n type: Object,\n validator(this: VueTypeShape<T> | VueTypeLooseShape<T>, value) {\n if (!isPlainObject(value)) {\n return false\n }\n const valueKeys = Object.keys(value)\n\n // check for required keys (if any)\n if (\n requiredKeys.length > 0 &&\n requiredKeys.some((req) => valueKeys.indexOf(req) === -1)\n ) {\n const missing = requiredKeys.filter(\n (req) => valueKeys.indexOf(req) === -1,\n )\n if (missing.length === 1) {\n warn(`shape - required property \"${missing[0]}\" is not defined.`)\n } else {\n warn(\n `shape - required properties \"${missing.join(\n '\", \"',\n )}\" are not defined.`,\n )\n }\n\n return false\n }\n\n return valueKeys.every((key) => {\n if (keys.indexOf(key) === -1) {\n if ((this as VueTypeLooseShape<T>)._vueTypes_isLoose === true)\n return true\n warn(\n `shape - shape definition does not include a \"${key}\" property. Allowed keys: \"${keys.join(\n '\", \"',\n )}\".`,\n )\n return false\n }\n const type = (obj as any)[key]\n const valid = validateType(type, value[key], true)\n if (typeof valid === 'string') {\n warn(`shape - \"${key}\" property validation error:\\n ${indent(valid)}`)\n }\n return valid === true\n })\n },\n }) as VueTypeShape<T>\n\n Object.defineProperty(type, '_vueTypes_isLoose', {\n writable: true,\n value: false,\n })\n\n Object.defineProperty(type, 'loose', {\n get() {\n this._vueTypes_isLoose = true\n return this\n },\n })\n\n return type\n}\n","import {\n toType,\n toValidableType,\n validateType,\n isArray,\n isVueTypeDef,\n has,\n fromType,\n} from './utils'\n\nimport {\n VueTypesDefaults,\n ExtendProps,\n VueTypeDef,\n VueTypeValidableDef,\n VueTypeShape,\n VueTypeLooseShape,\n} from './types'\nimport { typeDefaults } from './sensibles'\nimport { PropOptions } from './types'\n\nimport {\n any,\n func,\n bool,\n string,\n number,\n array,\n integer,\n symbol,\n object,\n} from './validators/native'\nimport custom from './validators/custom'\nimport oneOf from './validators/oneof'\nimport oneOfType from './validators/oneoftype'\nimport arrayOf from './validators/arrayof'\nimport instanceOf from './validators/instanceof'\nimport objectOf from './validators/objectof'\nimport shape from './validators/shape'\nimport { config } from './config'\n\nconst BaseVueTypes = /*#__PURE__*/ (() =>\n class BaseVueTypes {\n static defaults: Partial<VueTypesDefaults> = {}\n\n static sensibleDefaults: Partial<VueTypesDefaults> | boolean\n\n static config = config\n\n static get any() {\n return any()\n }\n static get func() {\n return func().def(this.defaults.func)\n }\n static get bool() {\n return bool().def(this.defaults.bool)\n }\n static get string() {\n return string().def(this.defaults.string)\n }\n static get number() {\n return number().def(this.defaults.number)\n }\n static get array() {\n return array().def(this.defaults.array)\n }\n static get object() {\n return object().def(this.defaults.object)\n }\n static get integer() {\n return integer().def(this.defaults.integer)\n }\n static get symbol() {\n return symbol()\n }\n\n static readonly custom = custom\n static readonly oneOf = oneOf\n static readonly instanceOf = instanceOf\n static readonly oneOfType = oneOfType\n static readonly arrayOf = arrayOf\n static readonly objectOf = objectOf\n static readonly shape = shape\n\n static extend<T>(props: ExtendProps | ExtendProps[]): T {\n if (isArray(props)) {\n props.forEach((p) => this.extend(p))\n return this as any\n }\n\n const { name, validate = false, getter = false, ...opts } = props\n\n if (has(this, name as any)) {\n throw new TypeError(`[VueTypes error]: Type \"${name}\" already defined`)\n }\n\n const { type } = opts\n if (isVueTypeDef(type)) {\n // we are using as base type a vue-type object\n\n // detach the original type\n // we are going to inherit the parent data.\n delete opts.type\n\n if (getter) {\n return Object.defineProperty(this, name, {\n get: () => fromType(name, type, opts as Omit<ExtendProps, 'type'>),\n })\n }\n return Object.defineProperty(this, name, {\n value(...args: unknown[]) {\n const t = fromType(name, type, opts as Omit<ExtendProps, 'type'>)\n if (t.validator) {\n t.validator = t.validator.bind(t, ...args)\n }\n return t\n },\n })\n }\n\n let descriptor: PropertyDescriptor\n if (getter) {\n descriptor = {\n get() {\n const typeOptions = Object.assign({}, opts as PropOptions<T>)\n if (validate) {\n return toValidableType<T>(name, typeOptions)\n }\n return toType<T>(name, typeOptions)\n },\n enumerable: true,\n }\n } else {\n descriptor = {\n value(...args: T[]) {\n const typeOptions = Object.assign({}, opts as PropOptions<T>)\n let ret: VueTypeDef<T>\n if (validate) {\n ret = toValidableType<T>(name, typeOptions)\n } else {\n ret = toType<T>(name, typeOptions)\n }\n\n if (typeOptions.validator) {\n ret.validator = typeOptions.validator.bind(ret, ...args)\n }\n return ret\n },\n enumerable: true,\n }\n }\n\n return Object.defineProperty(this, name, descriptor)\n }\n\n static utils = {\n validate<T, U>(value: T, type: U) {\n return validateType<U, T>(type, value, true) === true\n },\n toType<T = unknown>(\n name: string,\n obj: PropOptions<T>,\n validable = false,\n ): VueTypeDef<T> | VueTypeValidableDef<T> {\n return validable ? toValidableType<T>(name, obj) : toType<T>(name, obj)\n },\n }\n })()\n\nfunction createTypes(defs: Partial<VueTypesDefaults> = typeDefaults()) {\n return class extends BaseVueTypes {\n static defaults: Partial<VueTypesDefaults> = { ...defs }\n\n static get sensibleDefaults() {\n return { ...this.defaults }\n }\n\n static set sensibleDefaults(v: boolean | Partial<VueTypesDefaults>) {\n if (v === false) {\n this.defaults = {}\n return\n }\n if (v === true) {\n this.defaults = { ...defs }\n return\n }\n this.defaults = { ...v }\n }\n }\n}\n\nexport default class VueTypes /*#__PURE__*/ extends createTypes() {}\n\nexport {\n any,\n func,\n bool,\n string,\n number,\n array,\n integer,\n symbol,\n object,\n custom,\n oneOf,\n oneOfType,\n arrayOf,\n instanceOf,\n objectOf,\n shape,\n createTypes,\n toType,\n toValidableType,\n validateType,\n fromType,\n config,\n}\n\nexport type VueTypesInterface = ReturnType<typeof createTypes>\nexport type { VueTypeDef, VueTypeValidableDef, VueTypeShape, VueTypeLooseShape }\n","import { VueTypesDefaults } from './types'\n\nexport const typeDefaults = (): VueTypesDefaults => ({\n func: () => undefined,\n bool: true,\n string: '',\n number: 0,\n array: () => [],\n object: () => ({}),\n integer: 0,\n})\n","import VueTypes from './index'\nObject.defineProperty(exports, '__esModule', {\n value: true,\n})\n\nexport default VueTypes\n\nexport * from './index'\n"],"names":["isObject","o","Object","prototype","toString","call","config","silent","ObjProto","hasOwn","hasOwnProperty","FN_MATCH_REGEXP","getType","fn","type","match","isPlainObject","ctor","prot","undefined","constructor","identity","arg","warn","process","env","NODE_ENV","hasConsole","console","msg","has","obj","prop","isInteger","Number","value","isFinite","Math","floor","isArray","Array","isFunction","isVueTypeDef","isComplexType","some","k","bindTo","ctx","defineProperty","bind","validateType","typeToCheck","valid","expectedType","namePrefix","_vueTypes_name","required","map","join","getNativeType","validator","oldWarn","warnLog","push","length","toType","name","defineProperties","writable","isRequired","get","this","def","assign","toValidableType","JSON","stringify","fromType","source","props","descriptors","copy","getOwnPropertyNames","forEach","key","getOwnPropertyDescriptor","rest","prevValidator","__original","indent","string","replace","any","func","Function","bool","Boolean","String","number","array","object","integer","symbol","custom","validatorFn","warnMsg","TypeError","oneOf","arr","allowedTypes","reduce","ret","v","constr","indexOf","oneOfType","hasCustomValidators","nativeChecks","i","concat","filter","t","err","res","arrayOf","values","vResult","every","instanceOf","instanceConstructor","objectOf","keys","shape","requiredKeys","_obj$key","valueKeys","req","missing","_this","_vueTypes_isLoose","BaseVueTypes","extend","p","validate","getter","opts","descriptor","typeOptions","enumerable","defaults","_a","validable","createTypes","defs","VueTypes","exports"],"mappings":"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"}