@synstack/resolved
Version:
Type-safe piping of synchronous or asynchronous values
1 lines • 4.01 kB
Source Map (JSON)
{"version":3,"sources":["../../src/callable/callable.index.ts","../../src/callable/callable.bundle.ts","../../src/callable/callable.lib.ts"],"sourcesContent":["export * as callable from \"./callable.bundle.ts\";\nexport { default } from \"./callable.default.ts\";\nexport { resolveNested } from \"./callable.lib.ts\";\nexport type { Callable, CallableResolvable } from \"./callable.lib.ts\";\n","export { resolveNested } from \"./callable.lib.ts\";\n","import { type Resolvable } from \"../resolvable.lib.ts\";\n\nexport type Callable<T> = T | (() => T);\nexport declare namespace Callable {\n export type Infer<T> = T extends () => infer U ? U : T;\n export type IsPromise<T> = T extends () => infer U\n ? Resolvable.IsPromise<U>\n : Resolvable.IsPromise<T>;\n}\n\nexport type CallableResolvable<T> = Callable<Resolvable<T>>;\n\nexport declare namespace CallableResolvable {\n export type Infer<T> = Resolvable.Infer<Callable.Infer<T>>;\n\n export type IsPromise<T> = Resolvable.IsPromise<Callable.Infer<T>>;\n\n export type Return<T> =\n true extends IsPromise<T> ? Promise<Infer<T>> : Infer<T>;\n\n export type MaybeArray<T> =\n | CallableResolvable<T>\n | Array<CallableResolvable<T>>;\n\n export namespace MaybeArray {\n export type InferExact<T> = T extends readonly any[]\n ? { [K in keyof T]: CallableResolvable.Infer<T[K]> }\n : CallableResolvable.Infer<T>;\n export type Infer<T> = T extends readonly any[]\n ? Array<{ [K in keyof T]: CallableResolvable.Infer<T[K]> }[number]>\n : CallableResolvable.Infer<T>;\n export type IsPromise<T> = T extends readonly any[]\n ? { [K in keyof T]: CallableResolvable.IsPromise<T[K]> }[number]\n : CallableResolvable.IsPromise<T>;\n export type Return<T> =\n true extends IsPromise<T> ? Promise<Infer<T>> : Infer<T>;\n\n export type ArrayOf<T> = Array<MaybeArray<T>>;\n export namespace ArrayOf {\n export type InferExact<T extends readonly any[]> = {\n [K in keyof T]: MaybeArray.InferExact<T[K]>;\n };\n export type Infer<T extends readonly any[]> = Array<\n {\n [K in keyof T]: MaybeArray.Infer<T[K]>;\n }[number]\n >;\n export type IsPromise<T extends readonly any[]> = {\n [K in keyof T]: MaybeArray.IsPromise<T[K]>;\n }[number];\n export type Return<T extends readonly any[]> =\n true extends IsPromise<T> ? Promise<Infer<T>> : Infer<T>;\n }\n }\n}\n\nexport const resolveNested = <T extends readonly any[]>(\n args: T,\n): CallableResolvable.MaybeArray.ArrayOf.Return<T> => {\n // @ts-expect-error - Fix later\n if (args.length === 0) return [];\n\n const unresolvedValues = args.map((v) => {\n if (typeof v === \"function\") return v();\n if (Array.isArray(v))\n return v.map((sv) => (typeof sv === \"function\" ? sv() : sv));\n return v;\n });\n\n const isPromise = unresolvedValues.some((v) => {\n if (v instanceof Promise) return true;\n if (Array.isArray(v)) return v.some((v) => v instanceof Promise);\n return false;\n });\n\n // @ts-expect-error - We know that the values is not a promise\n if (!isPromise) return unresolvedValues;\n\n // @ts-expect-error - We know that the values is a promise\n return Promise.all(\n unresolvedValues.map((v) => (Array.isArray(v) ? Promise.all(v) : v)),\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;;;ACwDO,IAAM,gBAAgB,CAC3B,SACoD;AAEpD,MAAI,KAAK,WAAW,EAAG,QAAO,CAAC;AAE/B,QAAM,mBAAmB,KAAK,IAAI,CAAC,MAAM;AACvC,QAAI,OAAO,MAAM,WAAY,QAAO,EAAE;AACtC,QAAI,MAAM,QAAQ,CAAC;AACjB,aAAO,EAAE,IAAI,CAAC,OAAQ,OAAO,OAAO,aAAa,GAAG,IAAI,EAAG;AAC7D,WAAO;AAAA,EACT,CAAC;AAED,QAAM,YAAY,iBAAiB,KAAK,CAAC,MAAM;AAC7C,QAAI,aAAa,QAAS,QAAO;AACjC,QAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,EAAE,KAAK,CAACA,OAAMA,cAAa,OAAO;AAC/D,WAAO;AAAA,EACT,CAAC;AAGD,MAAI,CAAC,UAAW,QAAO;AAGvB,SAAO,QAAQ;AAAA,IACb,iBAAiB,IAAI,CAAC,MAAO,MAAM,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAE;AAAA,EACrE;AACF;","names":["v"]}