47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { warn } from 'vue';
 | |
| import { fromPairs } from 'lodash-unified';
 | |
| import { isObject, hasOwn } from '@vue/shared';
 | |
| 
 | |
| const epPropKey = "__epPropKey";
 | |
| const definePropType = (val) => val;
 | |
| const isEpProp = (val) => isObject(val) && !!val[epPropKey];
 | |
| const buildProp = (prop, key) => {
 | |
|   if (!isObject(prop) || isEpProp(prop))
 | |
|     return prop;
 | |
|   const { values, required, default: defaultValue, type, validator } = prop;
 | |
|   const _validator = values || validator ? (val) => {
 | |
|     let valid = false;
 | |
|     let allowedValues = [];
 | |
|     if (values) {
 | |
|       allowedValues = Array.from(values);
 | |
|       if (hasOwn(prop, "default")) {
 | |
|         allowedValues.push(defaultValue);
 | |
|       }
 | |
|       valid || (valid = allowedValues.includes(val));
 | |
|     }
 | |
|     if (validator)
 | |
|       valid || (valid = validator(val));
 | |
|     if (!valid && allowedValues.length > 0) {
 | |
|       const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(", ");
 | |
|       warn(`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`);
 | |
|     }
 | |
|     return valid;
 | |
|   } : void 0;
 | |
|   const epProp = {
 | |
|     type,
 | |
|     required: !!required,
 | |
|     validator: _validator,
 | |
|     [epPropKey]: true
 | |
|   };
 | |
|   if (hasOwn(prop, "default"))
 | |
|     epProp.default = defaultValue;
 | |
|   return epProp;
 | |
| };
 | |
| const buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [
 | |
|   key,
 | |
|   buildProp(option, key)
 | |
| ]));
 | |
| 
 | |
| export { buildProp, buildProps, definePropType, epPropKey, isEpProp };
 | |
| //# sourceMappingURL=runtime.mjs.map
 |