@muban/muban
Version:
Writing components for server-rendered HTML
35 lines (34 loc) • 2.21 kB
JavaScript
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({}, {}),
};