import {generate, LineArg} from "./generator"; import * as sources from "./Source"; export function generateCheckStringFormat (src : sources.StringFormatSourceRaw) { generate({ checkName : src.name, generated : src.generated, imports : [ { alias : "StringCheck", path : "../sync/check/string" }, { alias : "check", path : src.generated ? `../generated/sync/check/${src.name}` : `../sync/check/${src.name}` } ], writeDirectory : "sync/check/string-format", lineCallback : (args : LineArg) : string[] => { const resultLines : string[] = []; resultLines.push(`export type ${args.functionName}StringResult = StringCheck.StringErrorCode|${args.functionRet.replace("undefined|", "").replace("|undefined", "")};`); resultLines.push(`export function check${args.functionName}String${args.genericArg} (${args.functionArg}) : undefined|${args.functionName}StringResult {`); resultLines.push(` return StringCheck.checkStringPredicate(mixed, (str) => {`); resultLines.push(` const toCheck = ${src.cast}(str);`); if (args.functionArgNames.length == 1) { resultLines.push(` const error = check.check${args.functionName}(toCheck);`); } else { const argNames = [...args.functionArgNames]; argNames[0] = "toCheck"; resultLines.push(` const error = check.check${args.functionName}(${argNames.join(", ")});`); } resultLines.push(` if (error !== undefined) {`); resultLines.push(` return error;`); resultLines.push(` }`); resultLines.push(` return undefined;`); resultLines.push(` });`); resultLines.push(`}`); return resultLines; }, }) }