{"version":3,"sources":["../../../src/api/junctions.ts"],"sourcesContent":["import type { Pipe, PipeInput, PipeOutput } from './base'\nimport { merge as differMerge } from '../utils/differ'\nimport { getRandomValue, wrapInTryCatch } from '../utils/functions'\nimport { JSONRedacted } from '../utils/types'\nimport { compileNested, context, define, schema, standard, validate } from './base/pipes'\n\nexport const or = <T extends Pipe<any, any>[]>(branches: T) => {\n\tconst validatedVarname = `validated_${getRandomValue()}`\n\tconst errorsVarname = `errors_${getRandomValue()}`\n\treturn standard<PipeInput<T[number]>, PipeOutput<T[number]>>(\n\t\t({ input }, opts) =>\n\t\t\tbranches.length === 0\n\t\t\t\t? []\n\t\t\t\t: [\n\t\t\t\t\t\t`const ${errorsVarname} = []`,\n\t\t\t\t\t\t`let ${validatedVarname}`,\n\t\t\t\t\t\t...branches\n\t\t\t\t\t\t\t.map((branch, idx) => (lines: string[]) => [\n\t\t\t\t\t\t\t\t`${validatedVarname} = ${input}`,\n\t\t\t\t\t\t\t\t...compileNested({\n\t\t\t\t\t\t\t\t\topts: { ...opts, failEarly: true },\n\t\t\t\t\t\t\t\t\tpipe: branch,\n\t\t\t\t\t\t\t\t\tinput: validatedVarname,\n\t\t\t\t\t\t\t\t\terrorType: 'assign',\n\t\t\t\t\t\t\t\t\tkey: validatedVarname,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t`if (${validatedVarname} instanceof PipeError) {`,\n\t\t\t\t\t\t\t\t`\t${errorsVarname}.push(PipeError.path(${idx}, '${validatedVarname}', ${validatedVarname}))`,\n\t\t\t\t\t\t\t\t...lines.map((l) => `\t${l}`),\n\t\t\t\t\t\t\t\tidx === branches.length - 1 ? `\t${opts.wrapError.format(`PipeError.rootFrom(${errorsVarname})`)}` : '',\n\t\t\t\t\t\t\t\t`}`,\n\t\t\t\t\t\t\t\t`else ${input} = ${validatedVarname}`,\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t.reduceRight<string[]>((acc, cur) => cur(acc), []),\n\t\t\t\t\t\topts.wrapError(`${input} instanceof PipeError`, input),\n\t\t\t\t\t],\n\t\t{\n\t\t\tschema: () => ({ oneOf: branches.map((branch) => schema(branch)) }),\n\t\t},\n\t)\n}\n\nexport const merge = <T1 extends Pipe<any, any>, T2 extends Pipe<any, any>>(branch1: T1, branch2: T2) => {\n\tconst inputVarname = `input_${getRandomValue()}`\n\treturn standard<PipeInput<T1> & PipeInput<T2>, PipeOutput<T1> & PipeOutput<T2>>(\n\t\t({ input, context }, opts) => [\n\t\t\t`let ${inputVarname}A = ${input}`,\n\t\t\t`let ${inputVarname}B = ${input}`,\n\t\t\t...compileNested({ opts, pipe: branch1, input: `${inputVarname}A` }),\n\t\t\topts.wrapError(`${inputVarname}A instanceof PipeError`, `${inputVarname}A`),\n\t\t\t...compileNested({ opts, pipe: branch2, input: `${inputVarname}B` }),\n\t\t\topts.wrapError(`${inputVarname}B instanceof PipeError`, `${inputVarname}B`),\n\t\t\t`${input} = ${context}.differMerge(${inputVarname}A, ${inputVarname}B)`,\n\t\t],\n\t\t{\n\t\t\tcontext: { differMerge },\n\t\t\tschema: () => ({ allOf: [schema(branch1), schema(branch2)] }),\n\t\t},\n\t)\n}\n\nexport const discriminate = <T extends Record<PropertyKey, Pipe<any, any>>>(\n\tdiscriminator: (val: PipeInput<T[keyof T]>) => PropertyKey,\n\tbranches: T,\n\terr = 'doesnt match any of the schema',\n) =>\n\tstandard<PipeInput<T[keyof T]>, PipeOutput<T[keyof T]>>(\n\t\t({ input, context, path }, opts) => [\n\t\t\t`switch (${context}.wrapInTryCatch(() => ${context}.discriminator(${input}))) {`,\n\t\t\t...Object.entries(branches).flatMap(([key, branch]) => [\n\t\t\t\t`\tcase ('${key}'): {`,\n\t\t\t\t...compileNested({ opts, pipe: branch, input }).map((l) => `\t\t${l}`),\n\t\t\t\t`\t\tbreak`,\n\t\t\t\t`\t}`,\n\t\t\t]),\n\t\t\t`\tdefault: ${opts.wrapError.format(`PipeError.root(\"${err}\", ${input}, ${path})`)}`,\n\t\t\t`}`,\n\t\t],\n\t\t{\n\t\t\tcontext: { wrapInTryCatch, discriminator },\n\t\t\tschema: () => ({ oneOf: Object.values(branches).map((s) => schema(s)) }),\n\t\t},\n\t)\n\nexport const fromJson = <T extends Pipe<any, any>>(branch: T) => {\n\tconst validatedVarname = `validated_${getRandomValue()}`\n\treturn standard<PipeInput<T>, PipeOutput<T>>(\n\t\t({ input, context }, opts) => [\n\t\t\t`let ${validatedVarname} = ${input}`,\n\t\t\t...compileNested({ opts, pipe: branch, input: validatedVarname, errorType: 'assign' }),\n\t\t\t`if (${validatedVarname} instanceof PipeError) {`,\n\t\t\topts.wrapError(`${input}?.constructor?.name !== 'String'`, validatedVarname),\n\t\t\t`\t${validatedVarname} = ${context}.wrapInTryCatch(() => JSON.parse(${input}), ${validatedVarname})`,\n\t\t\topts.wrapError(`${validatedVarname} instanceof PipeError`, validatedVarname),\n\t\t\t...compileNested({ opts, pipe: branch, input: validatedVarname, errorType: 'assign' }).map((l) => `\t${l}`),\n\t\t\topts.wrapError(`${validatedVarname} instanceof PipeError`, validatedVarname),\n\t\t\t`}`,\n\t\t\t`${input} = ${validatedVarname}`,\n\t\t],\n\t\t{\n\t\t\tcontext: { ...context(branch), wrapInTryCatch },\n\t\t\tschema: branch.schema,\n\t\t},\n\t)\n}\n\ntype JSONRedactable<T> = T extends JSONRedacted<infer U> ? U : T\n\nexport const jsonRedacted = <T extends Pipe<any, any>>(branch: T) =>\n\tstandard<PipeInput<T>, JSONRedacted<JSONRedactable<PipeOutput<T>>>>(\n\t\t({ input, context }, opts) => [\n\t\t\t...compileNested({ pipe: branch, input, opts }),\n\t\t\t`${input} = ${context}.JSONRedacted.from(${input})`,\n\t\t],\n\t\t{\n\t\t\tschema: () => ({}),\n\t\t\tcontext: { ...context(branch), jsonRedacted: true, JSONRedacted },\n\t\t},\n\t)\n\nexport const lazy = <T extends Pipe<any, any>>(pipeFn: () => T) =>\n\tdefine<PipeInput<T>, PipeOutput<T>>(\n\t\t(input) => {\n\t\t\tconst result = validate(pipeFn(), input)\n\t\t\treturn result.valid ? result.value : result.error\n\t\t},\n\t\t{\n\t\t\tschema: () => schema(pipeFn()),\n\t\t},\n\t)\n\nexport const recursive = <T extends Pipe<any, any>>(pipeFn: () => T, $refId: string) => {\n\tconst fnVarname = `fn_${getRandomValue()}`\n\tlet compiledBefore = false\n\tlet schemedBefore = false\n\treturn standard<PipeInput<T>, PipeOutput<T>>(\n\t\t({ input }, opts) => {\n\t\t\tconst common = [`${input} = ${fnVarname}(${input})`, opts.wrapError(`${input} instanceof PipeError`, input)]\n\t\t\tcompiledBefore = !compiledBefore\n\t\t\tif (!compiledBefore) return common\n\t\t\treturn [\n\t\t\t\t`function ${fnVarname}(node) {`,\n\t\t\t\t...compileNested({ opts: { ...opts, failEarly: true }, pipe: pipeFn(), input: 'node', errorType: 'return' }).map(\n\t\t\t\t\t(l) => `\t${l}`,\n\t\t\t\t),\n\t\t\t\t`\treturn node`,\n\t\t\t\t'}',\n\t\t\t\t...common,\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tschema: () => {\n\t\t\t\tschemedBefore = !schemedBefore\n\t\t\t\tif (!schemedBefore) return { $refId }\n\t\t\t\treturn schema(pipeFn(), { $refId })\n\t\t\t},\n\t\t},\n\t)\n}\n"],"mappings":"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","names":["differMerge","getRandomValue","wrapInTryCatch","JSONRedacted","compileNested","context","define","schema","standard","validate","or","branches","validatedVarname","errorsVarname","input","opts","branch","idx","lines","l","acc","cur","merge","branch1","branch2","inputVarname","discriminate","discriminator","err","path","key","s","fromJson","jsonRedacted","lazy","pipeFn","result","recursive","$refId","fnVarname","compiledBefore","schemedBefore","common"]}