{"version":3,"file":"index.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":[],"mappings":"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"}