UNPKG

@muban/muban

Version:

Writing components for server-rendered HTML

35 lines (34 loc) 2.21 kB
const addOptional = (object) => { const optionalObject = Object.assign(Object.assign({}, object), { isOptional: true, missingValue: true }); return Object.assign(Object.assign({}, object), { optional: Object.assign(Object.assign({}, addPredicate(optionalObject)), addSource(optionalObject)), defaultValue: (value) => { const defaultObject = Object.assign(Object.assign({}, object), { isOptional: true, default: value }); return Object.assign(Object.assign({}, addPredicate(defaultObject)), addSource(defaultObject)); } }); }; const addPredicate = (object) => (Object.assign(Object.assign({}, object), { validate: (predicate) => // eslint-disable-next-line @typescript-eslint/no-use-before-define addSource(Object.assign(Object.assign({}, object), { validator: predicate })) })); const addSource = (object) => (Object.assign(Object.assign({}, object), { source: (options) => (Object.assign(Object.assign({}, object), { sourceOptions: options })) })); const addShape = (object) => (Object.assign(Object.assign({}, object), { // eslint-disable-next-line @typescript-eslint/ban-types shape: () => (Object.assign(Object.assign({}, object), { shapeType: true })) })); // eslint-disable-next-line @typescript-eslint/ban-types const createFunction = (type, object) => { const typeObject = Object.assign(Object.assign({}, object), { type }); return Object.assign(Object.assign({}, addShape(typeObject)), { optional: addShape(Object.assign(Object.assign({}, typeObject), { isOptional: true, missingValue: true })) }); }; // eslint-disable-next-line @typescript-eslint/ban-types const generateType = (type, object) => { const typeObject = Object.assign(Object.assign({}, object), { type }); return Object.assign(Object.assign(Object.assign({}, addOptional(typeObject)), addPredicate(typeObject)), addSource(typeObject)); }; export const propType = { string: generateType(String, {}), number: generateType(Number, {}), boolean: generateType(Boolean, {}), date: generateType(Date, {}), object: generateType(Object, {}), array: generateType(Array, {}), func: createFunction(Function, {}), any: generateType({}, {}), };