fexios
Version:
Fetch based HTTP client with similar API to axios for browser and Node.js
1 lines • 3.74 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../src/utils/callable-instance.ts","../../src/utils/deep-merge.ts"],"sourcesContent":["type Func<Args extends unknown[], Return> = (...args: Args) => Return\n\ninterface CallableInstanceConstructor {\n // prettier-ignore\n new <Args extends unknown[], Return>(property: string | symbol):\n Func<Args, Return> & CallableInstance<Args, Return>\n readonly prototype: CallableInstance<any, any>\n}\n\ninterface CallableInstance<Args extends unknown[], Return> extends Function {\n (...args: Args): Return\n}\n\nconst CallableInstanceImpl = function (this: any, property: string | symbol) {\n const proto = this.constructor.prototype\n const func = Reflect.get(proto, property, proto) as Function\n function apply(this: unknown, ...args: unknown[]) {\n return Reflect.apply(func, apply, args)\n }\n Reflect.setPrototypeOf(apply, proto)\n for (const key of Reflect.ownKeys(func)) {\n const desc = Reflect.getOwnPropertyDescriptor(func, key)\n if (desc) Reflect.defineProperty(apply, key, desc)\n }\n return apply\n} as any\nCallableInstanceImpl.prototype = Object.create(Function.prototype)\n\nexport const CallableInstance =\n CallableInstanceImpl as unknown as CallableInstanceConstructor\n","import { clone } from './clone.js'\nimport { isPlainObject } from './isPlainObject.js'\n\nexport function deepMerge<T = any>(\n obj: Partial<T>,\n ...incomes: (Partial<T> | null | undefined)[]\n): T {\n const result: Record<PropertyKey, any> = clone(obj || ({} as T))\n\n for (const inc of incomes) {\n // skip if income is null/undefined\n if (inc == null) continue\n\n for (const key of Reflect.ownKeys(inc)) {\n const nextVal = (inc as any)[key]\n\n // undefined = as is\n if (typeof nextVal === 'undefined') continue\n\n // null = delete property\n if (nextVal === null) {\n delete result[key]\n continue\n }\n\n const prevVal = result[key]\n if (isPlainObject(prevVal) && isPlainObject(nextVal)) {\n // deep merge plain object\n result[key] = deepMerge(prevVal, nextVal)\n } else {\n // overwrite other types (including arrays, Map/Set/Date, etc.: replaced with incoming value)\n result[key] = clone(nextVal)\n }\n }\n }\n\n return result as unknown as T\n}\n"],"names":["clone","isPlainObject"],"mappings":";;;;AAaA,MAAM,oBAAA,GAAuB,SAAqB,QAAA,EAA2B;AAC3E,EAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,CAAY,SAAA;AAC/B,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,UAAU,KAAK,CAAA;AAC/C,EAAA,SAAS,SAAwB,IAAA,EAAiB;AAChD,IAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,EAAO,IAAI,CAAA;AAAA,EACxC;AACA,EAAA,OAAA,CAAQ,cAAA,CAAe,OAAO,KAAK,CAAA;AACnC,EAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAG;AACvC,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,wBAAA,CAAyB,IAAA,EAAM,GAAG,CAAA;AACvD,IAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,cAAA,CAAe,KAAA,EAAO,KAAK,IAAI,CAAA;AAAA,EACnD;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AACA,oBAAA,CAAqB,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA;AAE1D,MAAM,gBAAA,GACX;;AC1BK,SAAS,SAAA,CACd,QACG,OAAA,EACA;AACH,EAAA,MAAM,MAAA,GAAmCA,mBAAA,CAAM,GAAA,IAAQ,EAAQ,CAAA;AAE/D,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AAEzB,IAAA,IAAI,OAAO,IAAA,EAAM;AAEjB,IAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtC,MAAA,MAAM,OAAA,GAAW,IAAY,GAAG,CAAA;AAGhC,MAAA,IAAI,OAAO,YAAY,WAAA,EAAa;AAGpC,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,OAAO,OAAO,GAAG,CAAA;AACjB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAA,GAAU,OAAO,GAAG,CAAA;AAC1B,MAAA,IAAIC,2BAAA,CAAc,OAAO,CAAA,IAAKA,2BAAA,CAAc,OAAO,CAAA,EAAG;AAEpD,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,SAAA,CAAU,OAAA,EAAS,OAAO,CAAA;AAAA,MAC1C,CAAA,MAAO;AAEL,QAAA,MAAA,CAAO,GAAG,CAAA,GAAID,mBAAA,CAAM,OAAO,CAAA;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;;;;;;;;"}