UNPKG

@airtasker/form-schema-compiler

Version:
46 lines (41 loc) 1.22 kB
import defaultTo from "lodash/defaultTo"; import noop from "lodash/noop"; /** * add type compiler here, * a type compiler will be called before and after component compiled. * Type compiler example: * () => { * // for each component will create their own instance of type compiler * // that's means every type compiler for every components is fully independent, shares no context * return { * before: (r) => r, // will be call before component get compile * after: (r) => r, // will be call after compile * } * } * @type {{TextInput: Function, TextArea: Function, RadioButton: Function}} */ const TYPE_COMPILERS = {}; // default dummy type compiler const defaultTypeCompiler = { before: r => r, after: r => r }; /** * Add specific type handle for components. * @param {string} type * @param {object} customTypeCompilers * @param {object} defaultTypeCompilers */ const createTypeCompiler = ( type, customTypeCompilers = {}, defaultTypeCompilers = TYPE_COMPILERS ) => ({ // apply default compiler ...defaultTypeCompiler, ...defaultTo( defaultTo(customTypeCompilers[type], defaultTypeCompilers[type]), noop )() }); export default createTypeCompiler;