{"version":3,"sources":["../../../src/api/records.ts"],"sourcesContent":["import type { PipeInput, PipeOutput, Pipe } from './base'\nimport { compileNested, context, schema, standard } from './base/pipes'\nimport { getRandomValue } from '../utils/functions'\n\ntype ObjectPipe<T extends Record<string, Pipe<any, any>>> = Pipe<{ [K in keyof T]: PipeInput<T[K]> }, { [K in keyof T]: PipeOutput<T[K]> }>\n\nconst objCompile: (branches: Record<string, Pipe<any, any>>) => Parameters<typeof standard>[0] =\n\t(branches) =>\n\t({ input, path }, opts) => {\n\t\tconst resVarname = `res_${getRandomValue()}`\n\t\tconst errorsVarname = `errors_${getRandomValue()}`\n\t\tconst validatedVarname = `validated_${getRandomValue()}`\n\t\treturn [\n\t\t\topts.wrapError(\n\t\t\t\t`typeof ${input} !== 'object' || ${input} === null || Array.isArray(${input})`,\n\t\t\t\t`PipeError.root('is not an object', ${input}, ${path})`,\n\t\t\t),\n\t\t\t`const ${resVarname} = {}`,\n\t\t\topts.failEarly ? '' : `const ${errorsVarname} = []`,\n\t\t\t`let ${validatedVarname}`,\n\t\t\t...Object.entries(branches).flatMap(([k, branch]) => [\n\t\t\t\t`${validatedVarname} = ${input}['${k}']`,\n\t\t\t\t...compileNested({ opts, pipe: branch, input: validatedVarname, key: k, errorType: 'assign' }),\n\t\t\t\topts.failEarly\n\t\t\t\t\t? opts.wrapError(`${validatedVarname} instanceof PipeError`, validatedVarname)\n\t\t\t\t\t: `if (${validatedVarname} instanceof PipeError) ${errorsVarname}.push(${validatedVarname})`,\n\t\t\t\t`${resVarname}['${k}'] = ${validatedVarname}`,\n\t\t\t]),\n\t\t\topts.failEarly ? '' : opts.wrapError(`${errorsVarname}.length`, `PipeError.rootFrom(${errorsVarname})`),\n\t\t\t`${input} = ${resVarname}`,\n\t\t]\n\t}\n\nexport const object = <T extends Record<string, Pipe<any, any>>>(branches: T) =>\n\tstandard<PipeInput<ObjectPipe<T>>, PipeOutput<ObjectPipe<T>>>(objCompile(branches), {\n\t\tschema: () => ({\n\t\t\ttype: 'object',\n\t\t\tproperties: Object.fromEntries(\n\t\t\t\tObject.entries(branches ?? {})\n\t\t\t\t\t.filter(([_, pipe]) => !context(pipe).jsonRedacted)\n\t\t\t\t\t.map(([key, pipe]) => [key, schema(pipe)]),\n\t\t\t),\n\t\t\trequired: Object.entries(branches ?? {})\n\t\t\t\t.filter(([, pipe]) => !context(pipe).optional && !context(pipe).jsonRedacted)\n\t\t\t\t.map(([key]) => key),\n\t\t\tadditionalProperties: false,\n\t\t}),\n\t\tcontext: { branches },\n\t})\n\nexport const objectPick = <T extends ObjectPipe<Record<string, Pipe<any, any>>>, S extends ReadonlyArray<keyof PipeInput<T> & string>>(\n\tbranch: T,\n\tkeys: S,\n) => {\n\tconst ctx = context(branch)\n\tconst sch = schema(branch)\n\tconst branches = Object.fromEntries(\n\t\tObject.entries((ctx.branches as Record<string, Pipe<any, any>>) ?? {}).filter(([key]) => keys.includes(key as S[number])),\n\t)\n\treturn standard<Pick<PipeInput<T>, S[number]>, Pick<PipeOutput<T>, S[number]>>(objCompile(branches), {\n\t\tschema: () => ({\n\t\t\t...sch,\n\t\t\tproperties: Object.fromEntries(Object.entries(sch.properties ?? {}).filter(([key]) => keys.includes(key as S[number]))),\n\t\t\trequired: (sch.required ?? []).filter((key) => keys.includes(key as S[number])),\n\t\t}),\n\t\tcontext: { ...ctx, branches },\n\t})\n}\n\nexport const objectOmit = <T extends ObjectPipe<Record<string, Pipe<any, any>>>, S extends ReadonlyArray<keyof PipeInput<T> & string>>(\n\tbranch: T,\n\tkeys: S,\n) => {\n\tconst ctx = context(branch)\n\tconst sch = schema(branch)\n\tconst branches = Object.fromEntries(\n\t\tObject.entries((ctx.branches as Record<string, Pipe<any, any>>) ?? {}).filter(([key]) => !keys.includes(key as S[number])),\n\t)\n\treturn standard<Omit<PipeInput<T>, S[number]>, Omit<PipeOutput<T>, S[number]>>(objCompile(branches), {\n\t\tschema: () => ({\n\t\t\t...sch,\n\t\t\tproperties: Object.fromEntries(Object.entries(sch.properties ?? {}).filter(([key]) => !keys.includes(key as S[number]))),\n\t\t\trequired: (sch.required ?? []).filter((key) => !keys.includes(key as S[number])),\n\t\t}),\n\t\tcontext: { ...ctx, branches },\n\t})\n}\n\nexport const record = <K extends Pipe<any, PropertyKey>, V extends Pipe<any, any>>(kPipe: K, vPipe: V) => {\n\tconst kValidatedVarname = `kValidated_${getRandomValue()}`\n\tconst vValidatedVarname = `vValidated_${getRandomValue()}`\n\tconst resVarname = `res_${getRandomValue()}`\n\tconst errorsVarname = `errors_${getRandomValue()}`\n\treturn standard<Record<PipeInput<K>, PipeInput<V>>, Record<PipeOutput<K>, PipeOutput<V>>>(\n\t\t({ input, path }, opts) => [\n\t\t\topts.wrapError(\n\t\t\t\t`typeof ${input} !== 'object' || ${input} === null || Array.isArray(${input})`,\n\t\t\t\t`PipeError.root(['is not an object'], ${input}, ${path})`,\n\t\t\t),\n\t\t\t`const ${resVarname} = {}`,\n\t\t\topts.failEarly ? '' : `const ${errorsVarname} = []`,\n\t\t\t`for (let [k, v] of Object.entries(${input})) {`,\n\t\t\t...[\n\t\t\t\t`let ${kValidatedVarname} = k`,\n\t\t\t\t`let ${vValidatedVarname} = v`,\n\t\t\t\t...compileNested({ opts, pipe: kPipe, input: kValidatedVarname, errorType: 'assign', key: kValidatedVarname }),\n\t\t\t\topts.failEarly\n\t\t\t\t\t? opts.wrapError(\n\t\t\t\t\t\t\t`${kValidatedVarname} instanceof PipeError`,\n\t\t\t\t\t\t\t`PipeError.path(k, '${kValidatedVarname}', ${kValidatedVarname})`,\n\t\t\t\t\t\t)\n\t\t\t\t\t: `\tif (${kValidatedVarname} instanceof PipeError) ${errorsVarname}.push(PipeError.path(k, '${kValidatedVarname}', ${kValidatedVarname}))`,\n\t\t\t\t...compileNested({ opts, pipe: vPipe, input: vValidatedVarname, errorType: 'assign', key: kValidatedVarname }),\n\t\t\t\topts.failEarly\n\t\t\t\t\t? opts.wrapError(\n\t\t\t\t\t\t\t`${vValidatedVarname} instanceof PipeError`,\n\t\t\t\t\t\t\t`PipeError.path(k, '${kValidatedVarname}', ${vValidatedVarname})`,\n\t\t\t\t\t\t)\n\t\t\t\t\t: `\tif (${vValidatedVarname} instanceof PipeError) ${errorsVarname}.push(PipeError.path(k, '${kValidatedVarname}', ${vValidatedVarname}))`,\n\t\t\t\t`\tif (!(${kValidatedVarname} instanceof PipeError) && !(${vValidatedVarname} instanceof PipeError)) ${resVarname}[${kValidatedVarname}] = ${vValidatedVarname};`,\n\t\t\t],\n\t\t\t`}`,\n\t\t\topts.failEarly ? '' : opts.wrapError(`${errorsVarname}.length`, `PipeError.rootFrom(${errorsVarname})`),\n\t\t\t`${input} = ${resVarname}`,\n\t\t],\n\t\t{\n\t\t\tschema: () => ({\n\t\t\t\ttype: 'object',\n\t\t\t\tpropertyNames: schema(kPipe),\n\t\t\t\tadditionalProperties: schema(vPipe),\n\t\t\t}),\n\t\t},\n\t)\n}\n\nexport const asMap = <K extends PropertyKey, V>() =>\n\tstandard<Record<K, V>, Map<K, V>>(({ input }) => [`${input} = new Map(Object.entries(${input}))`])\n"],"mappings":"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","names":["compileNested","context","schema","standard","getRandomValue","objCompile","branches","input","path","opts","resVarname","errorsVarname","validatedVarname","k","branch","object","_","pipe","key","objectPick","keys","ctx","sch","objectOmit","record","kPipe","vPipe","kValidatedVarname","vValidatedVarname","asMap"]}