{"version":3,"file":"proceduresFromInstance.cjs","sources":["../../src/proceduresFromInstance.ts"],"sourcesContent":["type AppendDotPathSegment<\n\tTDotPath extends string,\n\tTSegment extends string,\n> = TDotPath extends \"\" ? TSegment : `${TDotPath}.${TSegment}`;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFunction = (...args: any[]) => any;\ntype Primitives =\n\t| null\n\t| undefined\n\t| string\n\t| number\n\t| boolean\n\t| symbol\n\t| bigint\n\t| AnyFunction;\n\ntype AllObjDotPaths<TObj, TDotPath extends string = \"\"> = TObj extends\n\t| Primitives\n\t| unknown[]\n\t? TDotPath\n\t: {\n\t\t\t[P in keyof TObj]: P extends string\n\t\t\t\t?\n\t\t\t\t\t\t| AppendDotPathSegment<TDotPath, P>\n\t\t\t\t\t\t| AllObjDotPaths<TObj[P], AppendDotPathSegment<TDotPath, P>>\n\t\t\t\t: TDotPath;\n\t\t}[keyof TObj];\n\ntype RecursiveOmitNested<\n\tTObj,\n\tTOmitPath extends string,\n\tTDotPath extends string = \"\",\n> = TObj extends Primitives | unknown[]\n\t? TObj\n\t: {\n\t\t\t[P in keyof TObj as P extends string\n\t\t\t\t? AppendDotPathSegment<TDotPath, P> extends TOmitPath\n\t\t\t\t\t? never\n\t\t\t\t\t: P\n\t\t\t\t: never]: P extends string\n\t\t\t\t? RecursiveOmitNested<\n\t\t\t\t\t\tTObj[P],\n\t\t\t\t\t\tTOmitPath,\n\t\t\t\t\t\tAppendDotPathSegment<TDotPath, P>\n\t\t\t\t\t>\n\t\t\t\t: TObj[P];\n\t\t};\n\ntype OnlyProcedures<TProceduresInstance> =\n\tTProceduresInstance extends AnyFunction\n\t\t? TProceduresInstance\n\t\t: {\n\t\t\t\t[P in keyof TProceduresInstance as OnlyProcedures<\n\t\t\t\t\tTProceduresInstance[P]\n\t\t\t\t> extends Exclude<Primitives, AnyFunction> | Record<PropertyKey, never>\n\t\t\t\t\t? never\n\t\t\t\t\t: P]: OnlyProcedures<TProceduresInstance[P]>;\n\t\t\t};\n\ntype _ProceduresFromInstanceConfig = {\n\tomit?: readonly string[];\n};\n\nconst _proceduresFromInstance = <TProceduresInstance>(\n\tproceduresInstance: TProceduresInstance,\n\tconfig: _ProceduresFromInstanceConfig = {},\n\tpath: string[] = [],\n): OnlyProcedures<TProceduresInstance> => {\n\tconst omit: readonly string[] = config.omit ?? [];\n\n\tconst res = {} as OnlyProcedures<TProceduresInstance>;\n\n\tif (proceduresInstance) {\n\t\tconst proto = Object.getPrototypeOf(proceduresInstance);\n\n\t\tconst properties = [\n\t\t\t...Object.getOwnPropertyNames(proceduresInstance),\n\t\t\t...(proto ? Object.getOwnPropertyNames(proto) : []),\n\t\t];\n\n\t\tfor (const key of properties) {\n\t\t\tconst value = proceduresInstance[key as keyof typeof proceduresInstance];\n\n\t\t\tif (key === \"constructor\" || omit.includes([...path, key].join(\".\"))) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (typeof value === \"function\") {\n\t\t\t\tres[key as keyof typeof res] = value.bind(proceduresInstance);\n\t\t\t} else if (typeof value === \"object\") {\n\t\t\t\tres[key as keyof typeof res] = _proceduresFromInstance(value, config, [\n\t\t\t\t\t...path,\n\t\t\t\t\tkey,\n\t\t\t\t]) as (typeof res)[keyof typeof res];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn res;\n};\n\nexport type OmittableProcedures<TProceduresInstance> = AllObjDotPaths<\n\tOnlyProcedures<TProceduresInstance>\n>;\n\nexport type ProceduresFromInstance<\n\tTProceduresInstance,\n\tTOmitPaths extends string = never,\n> = RecursiveOmitNested<OnlyProcedures<TProceduresInstance>, TOmitPaths>;\n\ntype ProceduresFromInstanceConfig<\n\tTProceduresInstance,\n\tTUnknownOmitPaths extends string,\n> = {\n\tomit?: readonly (\n\t\t| TUnknownOmitPaths\n\t\t| OmittableProcedures<TProceduresInstance>\n\t)[];\n};\n\nexport const proceduresFromInstance = <\n\tTProceduresInstance,\n\tTUnknownOmitPaths extends string = never,\n>(\n\tproceduresInstance: TProceduresInstance,\n\tconfig: ProceduresFromInstanceConfig<\n\t\tTProceduresInstance,\n\t\tTUnknownOmitPaths\n\t> = {},\n): ProceduresFromInstance<TProceduresInstance, TUnknownOmitPaths> => {\n\treturn _proceduresFromInstance(\n\t\tproceduresInstance,\n\t\tconfig,\n\t) as ProceduresFromInstance<TProceduresInstance, TUnknownOmitPaths>;\n};\n"],"names":[],"mappings":";;AAgEA,MAAM,0BAA0B,CAC/B,oBACA,SAAwC,CAAA,GACxC,OAAiB,CAAA,MACuB;AAClC,QAAA,OAA0B,OAAO,QAAQ;AAE/C,QAAM,MAAM,CAAA;AAEZ,MAAI,oBAAoB;AACjB,UAAA,QAAQ,OAAO,eAAe,kBAAkB;AAEtD,UAAM,aAAa;AAAA,MAClB,GAAG,OAAO,oBAAoB,kBAAkB;AAAA,MAChD,GAAI,QAAQ,OAAO,oBAAoB,KAAK,IAAI;;AAGjD,eAAW,OAAO,YAAY;AACvB,YAAA,QAAQ,mBAAmB,GAAsC;AAEvE,UAAI,QAAQ,iBAAiB,KAAK,SAAS,CAAC,GAAG,MAAM,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG;AACrE;AAAA,MACA;AAEG,UAAA,OAAO,UAAU,YAAY;AAChC,YAAI,GAAuB,IAAI,MAAM,KAAK,kBAAkB;AAAA,MAAA,WAClD,OAAO,UAAU,UAAU;AACrC,YAAI,GAAuB,IAAI,wBAAwB,OAAO,QAAQ;AAAA,UACrE,GAAG;AAAA,UACH;AAAA,QAAA,CACA;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEM,SAAA;AACR;AAqBO,MAAM,yBAAyB,CAIrC,oBACA,SAGI,OAC+D;AAC5D,SAAA,wBACN,oBACA,MAAM;AAER;;"}