{"version":3,"file":"index.min.mjs","sources":["../../node_modules/object-path-operator/dist/es2018/index.mjs","../../src/async-proxy.ts"],"sourcesContent":["/**\n * Get object property by path.\n *\n * @static\n * @param {Object} obj - target\n * @param {string[]} path - path\n * @return {Object} return property\n * @example\n * const obj = {\n *   key: ['value']\n * }\n *\n * getProp(obj, ['key', 0]) // value\n */\nfunction getProp(obj, path) {\n    let temp = obj;\n    for (let i = 0; i < path.length; ++i) {\n        temp = temp[path[i]];\n    }\n    return temp;\n}\n\n/**\n * Set object property by path.\n *\n * @static\n * @param {Object} obj - target\n * @param {string[]} path - path\n * @param {Object} value - value\n * @return {boolean} return true\n * @example\n * const obj = {\n *   key: ['value']\n * }\n *\n * setProp(obj, ['key', 0], 'new-value') // true\n * obj.key // ['new-value']\n */\nfunction setProp(obj, path, value) {\n    if (path.length === 0)\n        throw new Error('Cannot assign target object itself');\n    let temp = obj;\n    for (let i = 0; i < path.length; ++i) {\n        if (i === path.length - 1) {\n            temp[path[i]] = value;\n        }\n        else {\n            temp = temp[path[i]];\n        }\n    }\n    return true;\n}\n\n/**\n * Remove object property by path.\n *\n * @static\n * @param {Object} obj - target\n * @param {string[]} path - path\n * @return {boolean} return true\n * @example\n * const obj = {\n *   key: ['value']\n * }\n * removeProp(obj, ['key', 0]) //true\n * obj.key // []\n */\nfunction removeProp(obj, path) {\n    if (path.length === 0)\n        throw new Error('Cannot remove target object itself');\n    let temp = obj;\n    for (let i = 0; i < path.length; ++i) {\n        if (i === path.length - 1) {\n            delete temp[path[i]];\n        }\n        else {\n            temp = temp[path[i]];\n        }\n    }\n    return true;\n}\n\nexport { getProp, removeProp, setProp };\n//# sourceMappingURL=index.mjs.map\n","import { setProp, getProp, removeProp } from 'object-path-operator'\n\nexport interface AsyncProxyHandler<T> {\n  get?(target: T, path: PropertyKey[]/*, receiver: any*/): Promise<any>\n  apply?(target: T, path: PropertyKey[], thisArg: any, argArray?: any): Promise<any>\n  set?(target: T, path: PropertyKey[], value: any/*, receiver: any*/): Promise<void>\n  construct?(target: T, path: PropertyKey[], argArray: any, newTarget?: any): Promise<object>\n  getPrototypeOf?(target: T, path: PropertyKey[]): Promise<object | null>\n  setPrototypeOf?(target: T, path: PropertyKey[], v: any): Promise<void>\n  deleteProperty?(target: T, path: PropertyKey[]): Promise<void>\n  defineProperty?(target: T, path: PropertyKey[], p: PropertyKey, attributes: PropertyDescriptor): Promise<void>\n}\n\ninterface StrongAsyncProxyHandler<T> extends AsyncProxyHandler<T> {\n  get(target: T, path: PropertyKey[]/*, receiver: any*/): Promise<any>\n  apply(target: T, path: PropertyKey[], thisArg: any, argArray?: any): Promise<any>\n  set(target: T, path: PropertyKey[], value: any/*, receiver: any*/): Promise<void>\n  construct(target: T, path: PropertyKey[], argArray: any, newTarget?: any): Promise<object>\n  getPrototypeOf(target: T, path: PropertyKey[]): Promise<object | null>\n  setPrototypeOf(target: T, path: PropertyKey[], v: any): Promise<void>\n  deleteProperty(target: T, path: PropertyKey[]): Promise<void>\n  defineProperty(target: T, path: PropertyKey[], p: PropertyKey, attributes: PropertyDescriptor): Promise<void>\n}\n\n/**\n * Create a Proxy to asynchronous operate object.\n *\n * @param {Object} [target = {}] - Target object\n * @param {Object} [handlers = {}] - Async Proxy handlers\n * @param {function(target: Object, path: string[]): Promise<any>} handlers.get - \"get\" handler\n * @param {function(target: Object, path: string[], caller: Object, args: any[]): Promsie<any>} handlers.apply - \"apply\" handler\n * @param {function(target: Object, path: string[], value: any): void} handlers.set - \"set\" handler\n * @param {function(target: Object, path: string[]): void} handlers.deleteProperty - \"deleteProperty\" handler\n * @param {function(target: Object, path: string[], args: any[]): Promise<any>} handlers.construct - \"construct\" handler\n * @param {function(target: Object, path: string[], prototype: Object): void} handlers.setPrototypeOf - \"setPrototypeOf\" handler\n * @param {function(target: Object, path: string[]): Promise<any>} handlers.getPrototypeOf - \"getPrototypeOf\" handler\n * @param {function(target: Object, path: string[], prop: string, descriptor: Object): void} handlers.defineProperty - \"defineProperty\" handler\n * @return {Proxy} Async Proxy\n */\nexport function createAsyncProxy<T extends object>(target: T = Object.create(null), asyncProxyHandlers: AsyncProxyHandler<T> = Object.create(null)) {\n  class CallableObject extends Function {}\n\n  const handlers: StrongAsyncProxyHandler<T> = {\n    async get(target: T, path: PropertyKey[]): Promise<any> {\n      return getProp(target, path)\n    }\n  , async apply(target: T, path: PropertyKey[], caller: any, args: any[]): Promise<any> {\n      return Reflect.apply(getProp(target, path) as Function, caller, args)\n    }\n  , async set(target: T, path: PropertyKey[], value: any): Promise<void> {\n      setProp(target, path, value) // The return value will be ignored\n    }\n  , async deleteProperty(target: T, path: PropertyKey[]): Promise<void> {\n      removeProp(target, path) // The return value will be ignored\n    }\n  , async construct(target: T, path: PropertyKey[], args: any): Promise<any> {\n      return Reflect.construct(getProp(target, path) as Function, args)\n    }\n  , async setPrototypeOf(target: T, path: PropertyKey[], prototype: any): Promise<void> {\n      Reflect.setPrototypeOf(getProp(target, path) as object, prototype) // The return value will be ignored\n    }\n  , async getPrototypeOf(target: T, path: PropertyKey[]): Promise<object | null> {\n      return Reflect.getPrototypeOf(getProp(target, path) as object)\n    }\n  , async defineProperty(target: T, path: PropertyKey[], prop: PropertyKey, descriptor: PropertyDescriptor): Promise<void> {\n      Reflect.defineProperty(getProp(target, path) as object, prop, descriptor) // The return value will be ignored\n    }\n  , ...asyncProxyHandlers\n  }\n\n  function wrapper(path: PropertyKey[] = []): any {\n    return new Proxy(new CallableObject(), {\n      get(_, prop) {\n        switch (prop) {\n          case 'then':\n          case 'catch':\n          case 'finally':\n            const finalPromise = (async () => await handlers.get(target, path))()\n            return finalPromise[prop].bind(finalPromise)\n          default:\n            return wrapper([...path, prop])\n        }\n      }\n    , apply(_, caller, args) {\n        return handlers.apply(target, path, caller, args)\n      }\n    , set(_, prop, value) {\n        handlers.set(target, [...path, prop], value)\n        return true\n      }\n    , deleteProperty(_, prop) {\n        handlers.deleteProperty(target, [...path, prop])\n        return true\n      }\n    , construct(_, args) {\n        return handlers.construct(target, path, args)\n      }\n    , setPrototypeOf(_, prototype) {\n        handlers.setPrototypeOf(target, path, prototype)\n        return true\n      }\n    , getPrototypeOf(_) {\n        return handlers.getPrototypeOf(target, path)\n      }\n    , defineProperty(_, prop, descriptor) {\n        handlers.defineProperty(target, path, prop, descriptor)\n        return true\n      }\n    , has(_, prop) {\n        throw Error('Async proxy does not support \"has\" handler.')\n      }\n    , getOwnPropertyDescriptor(_, prop) {\n        throw Error('Async proxy does not support \"getOwnPropertyDescriptor\" handler.')\n      }\n    , ownKeys(_) {\n        throw Error('Async proxy does not support \"ownKeys\" handler.')\n      }\n    , preventExtensions(_) {\n        throw Error('Async proxy does not support \"preventExtensions\" handler.')\n      }\n    , isExtensible(_) {\n        throw Error('Async proxy does not support \"isExtensible\" handler.')\n      }\n    })\n  }\n\n  return wrapper()\n}\n\nexport default createAsyncProxy\n"],"names":["getProp","obj","path","temp","i","length","createAsyncProxy","target","Object","create","asyncProxyHandlers","CallableObject","Function","handlers","get","apply","caller","args","Reflect","[object Object]","value","Error","setProp","removeProp","construct","prototype","setPrototypeOf","getPrototypeOf","prop","descriptor","defineProperty","wrapper","Proxy","_","finalPromise","bind","set","deleteProperty"],"mappings":"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"}