const primitiveDefault = { function: () => ` () => {}`, string: (name) => ` "${name}"`, number: () => ' 42', boolean: () => ' false', object: (name) => ` ${name}`, array: () => ' []', "array.": () => ' ["string"]', "array.": () => ' [{}]', "array.": () => ` ${primitiveDefault.ejsonable( { pre: "[", post: "]", } )}`, // someProp: 'string', num: 42, bool: false, arr: [], obj: {} ejsonable(obj) { let pre, post; if (typeof obj === "string") pre = ""; if (typeof obj === "object") { pre = obj.pre; post = obj.post; } if (pre.length > 1) pre = ""; // if (post.length > 1) post = ""; return ` ${ pre ?? `` }{ num:${primitiveDefault.number()} , someProp:${primitiveDefault.string( "foo" )} }${ post ?? `` }`; }, ejson(pre, post) { return primitiveDefault.ejsonable(pre, post); }, jsoncompatible(pre, post) { return primitiveDefault.ejsonable(pre, post); }, promise: () => ' Promise {}', any: () => ' any', error: (name) => ` Error(${name})`, mongoselector: () => ` MongoSelector`, mongomodifier: () => ` MongoModifier`, iterationcallback: () => ` IterationCallback`, expresshandlerscallback: () => ` ExpressHandlersCallback`, addruntimeconfighookcallback: () => ` addRuntimeConfigHookCallback`, addupdatednotifyhookcallback: () => ` addUpdatedNotifyHookCallback`, 'tracker.computationfunction': () => ` Tracker.ComputationFunction`, computation: () => ` Computation`, func: () => primitiveDefault.function(), 'tracker.computation': () => primitiveDefault.computation(), }; const comma = `,`; const br = ``; const escapeHtml = (str) => { return str.replace(//g, '>'); }; const typeComment = (type) =>{ return `/** @returns ${escapeHtml(type)} */` } const comment = (text = " // this param is optional ") => `${text}`; const line = ({ html, pre, post } = { pre: "", post: "", html: "" }) => `${pre}${html}${post}`; const makePrimitiveHTML = ({ primitive, arr, index, isOptional, name }) => { let n: string = primitive[0], primitiveName = n.toLowerCase(), value; try { value = primitiveDefault[primitiveName](name); } catch (e) { console.error("primitive that we got:", primitive); throw new Error( `primitive ${primitiveName} is not registred in the map, here is the error: ${e}` ); } if (arr.length > 1) return line({ html: value + `${comma}`, pre: index === 0 ? "" : br, post: isOptional ? comment() : "", }); return value + ``; }; export { makePrimitiveHTML, comment, typeComment };