{"/home/runner/work/node-decoy/node-decoy/source/Domain/Decoy.ts":{"path":"/home/runner/work/node-decoy/node-decoy/source/Domain/Decoy.ts","statementMap":{"0":{"start":{"line":2,"column":16},"end":{"line":10,"column":1}},"1":{"start":{"line":3,"column":28},"end":{"line":3,"column":110}},"2":{"start":{"line":3,"column":91},"end":{"line":3,"column":106}},"3":{"start":{"line":4,"column":4},"end":{"line":9,"column":7}},"4":{"start":{"line":5,"column":36},"end":{"line":5,"column":97}},"5":{"start":{"line":5,"column":42},"end":{"line":5,"column":70}},"6":{"start":{"line":5,"column":85},"end":{"line":5,"column":95}},"7":{"start":{"line":6,"column":35},"end":{"line":6,"column":100}},"8":{"start":{"line":6,"column":41},"end":{"line":6,"column":73}},"9":{"start":{"line":6,"column":88},"end":{"line":6,"column":98}},"10":{"start":{"line":7,"column":32},"end":{"line":7,"column":116}},"11":{"start":{"line":8,"column":8},"end":{"line":8,"column":78}},"12":{"start":{"line":11,"column":0},"end":{"line":11,"column":62}},"13":{"start":{"line":12,"column":0},"end":{"line":12,"column":136}},"14":{"start":{"line":13,"column":19},"end":{"line":13,"column":47}},"15":{"start":{"line":14,"column":15},"end":{"line":14,"column":32}},"16":{"start":{"line":15,"column":16},"end":{"line":15,"column":29}},"17":{"start":{"line":26,"column":19},"end":{"line":26,"column":21}},"18":{"start":{"line":27,"column":17},"end":{"line":27,"column":122}},"19":{"start":{"line":27,"column":45},"end":{"line":27,"column":100}},"20":{"start":{"line":28,"column":18},"end":{"line":28,"column":41}},"21":{"start":{"line":29,"column":4},"end":{"line":29,"column":49}},"22":{"start":{"line":30,"column":4},"end":{"line":30,"column":17}},"23":{"start":{"line":32,"column":0},"end":{"line":32,"column":24}},"24":{"start":{"line":41,"column":4},"end":{"line":41,"column":39}},"25":{"start":{"line":43,"column":0},"end":{"line":43,"column":28}},"26":{"start":{"line":45,"column":4},"end":{"line":45,"column":30}},"27":{"start":{"line":47,"column":0},"end":{"line":47,"column":26}},"28":{"start":{"line":58,"column":4},"end":{"line":72,"column":7}},"29":{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},"30":{"start":{"line":60,"column":12},"end":{"line":60,"column":59}},"31":{"start":{"line":62,"column":24},"end":{"line":62,"column":42}},"32":{"start":{"line":63,"column":8},"end":{"line":67,"column":9}},"33":{"start":{"line":64,"column":28},"end":{"line":64,"column":74}},"34":{"start":{"line":64,"column":49},"end":{"line":64,"column":73}},"35":{"start":{"line":65,"column":12},"end":{"line":65,"column":138}},"36":{"start":{"line":65,"column":51},"end":{"line":65,"column":135}},"37":{"start":{"line":66,"column":12},"end":{"line":66,"column":34}},"38":{"start":{"line":68,"column":8},"end":{"line":68,"column":30}},"39":{"start":{"line":69,"column":35},"end":{"line":69,"column":42}},"40":{"start":{"line":70,"column":8},"end":{"line":70,"column":76}},"41":{"start":{"line":70,"column":49},"end":{"line":70,"column":73}},"42":{"start":{"line":71,"column":8},"end":{"line":71,"column":22}},"43":{"start":{"line":83,"column":4},"end":{"line":86,"column":7}},"44":{"start":{"line":84,"column":8},"end":{"line":84,"column":30}},"45":{"start":{"line":85,"column":8},"end":{"line":85,"column":34}},"46":{"start":{"line":88,"column":0},"end":{"line":88,"column":22}},"47":{"start":{"line":99,"column":4},"end":{"line":99,"column":62}},"48":{"start":{"line":99,"column":41},"end":{"line":99,"column":54}},"49":{"start":{"line":101,"column":0},"end":{"line":101,"column":24}},"50":{"start":{"line":112,"column":4},"end":{"line":112,"column":64}},"51":{"start":{"line":112,"column":41},"end":{"line":112,"column":56}},"52":{"start":{"line":114,"column":0},"end":{"line":114,"column":28}},"53":{"start":{"line":125,"column":4},"end":{"line":130,"column":5}},"54":{"start":{"line":126,"column":33},"end":{"line":126,"column":51}},"55":{"start":{"line":127,"column":8},"end":{"line":129,"column":80}},"56":{"start":{"line":128,"column":33},"end":{"line":128,"column":109}},"57":{"start":{"line":129,"column":58},"end":{"line":129,"column":78}},"58":{"start":{"line":131,"column":4},"end":{"line":131,"column":17}},"59":{"start":{"line":133,"column":0},"end":{"line":133,"column":36}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":44},"end":{"line":2,"column":45}},"loc":{"start":{"line":2,"column":89},"end":{"line":10,"column":1}},"line":2},"1":{"name":"adopt","decl":{"start":{"line":3,"column":13},"end":{"line":3,"column":18}},"loc":{"start":{"line":3,"column":26},"end":{"line":3,"column":112}},"line":3},"2":{"name":"(anonymous_2)","decl":{"start":{"line":3,"column":70},"end":{"line":3,"column":71}},"loc":{"start":{"line":3,"column":89},"end":{"line":3,"column":108}},"line":3},"3":{"name":"(anonymous_3)","decl":{"start":{"line":4,"column":36},"end":{"line":4,"column":37}},"loc":{"start":{"line":4,"column":63},"end":{"line":9,"column":5}},"line":4},"4":{"name":"fulfilled","decl":{"start":{"line":5,"column":17},"end":{"line":5,"column":26}},"loc":{"start":{"line":5,"column":34},"end":{"line":5,"column":99}},"line":5},"5":{"name":"rejected","decl":{"start":{"line":6,"column":17},"end":{"line":6,"column":25}},"loc":{"start":{"line":6,"column":33},"end":{"line":6,"column":102}},"line":6},"6":{"name":"step","decl":{"start":{"line":7,"column":17},"end":{"line":7,"column":21}},"loc":{"start":{"line":7,"column":30},"end":{"line":7,"column":118}},"line":7},"7":{"name":"create","decl":{"start":{"line":25,"column":9},"end":{"line":25,"column":15}},"loc":{"start":{"line":25,"column":45},"end":{"line":31,"column":1}},"line":25},"8":{"name":"(anonymous_8)","decl":{"start":{"line":27,"column":38},"end":{"line":27,"column":39}},"loc":{"start":{"line":27,"column":45},"end":{"line":27,"column":100}},"line":27},"9":{"name":"checksum","decl":{"start":{"line":40,"column":9},"end":{"line":40,"column":17}},"loc":{"start":{"line":40,"column":25},"end":{"line":42,"column":1}},"line":40},"10":{"name":"isDecoy","decl":{"start":{"line":44,"column":9},"end":{"line":44,"column":16}},"loc":{"start":{"line":44,"column":24},"end":{"line":46,"column":1}},"line":44},"11":{"name":"traverse","decl":{"start":{"line":57,"column":9},"end":{"line":57,"column":17}},"loc":{"start":{"line":57,"column":39},"end":{"line":73,"column":1}},"line":57},"12":{"name":"(anonymous_12)","decl":{"start":{"line":58,"column":43},"end":{"line":58,"column":44}},"loc":{"start":{"line":58,"column":56},"end":{"line":72,"column":5}},"line":58},"13":{"name":"(anonymous_13)","decl":{"start":{"line":64,"column":40},"end":{"line":64,"column":41}},"loc":{"start":{"line":64,"column":49},"end":{"line":64,"column":73}},"line":64},"14":{"name":"(anonymous_14)","decl":{"start":{"line":65,"column":42},"end":{"line":65,"column":43}},"loc":{"start":{"line":65,"column":51},"end":{"line":65,"column":135}},"line":65},"15":{"name":"(anonymous_15)","decl":{"start":{"line":70,"column":37},"end":{"line":70,"column":38}},"loc":{"start":{"line":70,"column":49},"end":{"line":70,"column":73}},"line":70},"16":{"name":"purge","decl":{"start":{"line":82,"column":9},"end":{"line":82,"column":14}},"loc":{"start":{"line":82,"column":22},"end":{"line":87,"column":1}},"line":82},"17":{"name":"(anonymous_17)","decl":{"start":{"line":83,"column":27},"end":{"line":83,"column":28}},"loc":{"start":{"line":83,"column":40},"end":{"line":86,"column":5}},"line":83},"18":{"name":"commit","decl":{"start":{"line":98,"column":9},"end":{"line":98,"column":15}},"loc":{"start":{"line":98,"column":32},"end":{"line":100,"column":1}},"line":98},"19":{"name":"(anonymous_19)","decl":{"start":{"line":99,"column":27},"end":{"line":99,"column":28}},"loc":{"start":{"line":99,"column":41},"end":{"line":99,"column":54}},"line":99},"20":{"name":"rollback","decl":{"start":{"line":111,"column":9},"end":{"line":111,"column":17}},"loc":{"start":{"line":111,"column":34},"end":{"line":113,"column":1}},"line":111},"21":{"name":"(anonymous_21)","decl":{"start":{"line":112,"column":27},"end":{"line":112,"column":28}},"loc":{"start":{"line":112,"column":41},"end":{"line":112,"column":56}},"line":112},"22":{"name":"hasMutations","decl":{"start":{"line":124,"column":9},"end":{"line":124,"column":21}},"loc":{"start":{"line":124,"column":38},"end":{"line":132,"column":1}},"line":124},"23":{"name":"(anonymous_23)","decl":{"start":{"line":128,"column":24},"end":{"line":128,"column":25}},"loc":{"start":{"line":128,"column":33},"end":{"line":128,"column":109}},"line":128},"24":{"name":"(anonymous_24)","decl":{"start":{"line":129,"column":46},"end":{"line":129,"column":47}},"loc":{"start":{"line":129,"column":58},"end":{"line":129,"column":78}},"line":129}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":16},"end":{"line":10,"column":1}},"type":"binary-expr","locations":[{"start":{"line":2,"column":17},"end":{"line":2,"column":21}},{"start":{"line":2,"column":25},"end":{"line":2,"column":39}},{"start":{"line":2,"column":44},"end":{"line":10,"column":1}}],"line":2},"1":{"loc":{"start":{"line":3,"column":35},"end":{"line":3,"column":109}},"type":"cond-expr","locations":[{"start":{"line":3,"column":56},"end":{"line":3,"column":61}},{"start":{"line":3,"column":64},"end":{"line":3,"column":109}}],"line":3},"2":{"loc":{"start":{"line":4,"column":16},"end":{"line":4,"column":34}},"type":"binary-expr","locations":[{"start":{"line":4,"column":16},"end":{"line":4,"column":17}},{"start":{"line":4,"column":22},"end":{"line":4,"column":33}}],"line":4},"3":{"loc":{"start":{"line":7,"column":32},"end":{"line":7,"column":115}},"type":"cond-expr","locations":[{"start":{"line":7,"column":46},"end":{"line":7,"column":67}},{"start":{"line":7,"column":70},"end":{"line":7,"column":115}}],"line":7},"4":{"loc":{"start":{"line":8,"column":51},"end":{"line":8,"column":67}},"type":"binary-expr","locations":[{"start":{"line":8,"column":51},"end":{"line":8,"column":61}},{"start":{"line":8,"column":65},"end":{"line":8,"column":67}}],"line":8},"5":{"loc":{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},"type":"if","locations":[{"start":{"line":59,"column":8},"end":{"line":61,"column":9}},{"start":{"line":59,"column":8},"end":{"line":61,"column":9}}],"line":59},"6":{"loc":{"start":{"line":63,"column":8},"end":{"line":67,"column":9}},"type":"if","locations":[{"start":{"line":63,"column":8},"end":{"line":67,"column":9}},{"start":{"line":63,"column":8},"end":{"line":67,"column":9}}],"line":63},"7":{"loc":{"start":{"line":63,"column":12},"end":{"line":63,"column":67}},"type":"cond-expr","locations":[{"start":{"line":63,"column":47},"end":{"line":63,"column":53}},{"start":{"line":63,"column":56},"end":{"line":63,"column":67}}],"line":63},"8":{"loc":{"start":{"line":63,"column":12},"end":{"line":63,"column":44}},"type":"binary-expr","locations":[{"start":{"line":63,"column":12},"end":{"line":63,"column":25}},{"start":{"line":63,"column":29},"end":{"line":63,"column":44}}],"line":63},"9":{"loc":{"start":{"line":65,"column":51},"end":{"line":65,"column":135}},"type":"cond-expr","locations":[{"start":{"line":65,"column":73},"end":{"line":65,"column":101}},{"start":{"line":65,"column":104},"end":{"line":65,"column":135}}],"line":65},"10":{"loc":{"start":{"line":125,"column":4},"end":{"line":130,"column":5}},"type":"if","locations":[{"start":{"line":125,"column":4},"end":{"line":130,"column":5}},{"start":{"line":125,"column":4},"end":{"line":130,"column":5}}],"line":125},"11":{"loc":{"start":{"line":127,"column":15},"end":{"line":129,"column":79}},"type":"cond-expr","locations":[{"start":{"line":128,"column":14},"end":{"line":128,"column":110}},{"start":{"line":129,"column":14},"end":{"line":129,"column":79}}],"line":127},"12":{"loc":{"start":{"line":128,"column":33},"end":{"line":128,"column":109}},"type":"binary-expr","locations":[{"start":{"line":128,"column":33},"end":{"line":128,"column":56}},{"start":{"line":128,"column":61},"end":{"line":128,"column":80}},{"start":{"line":128,"column":84},"end":{"line":128,"column":108}}],"line":128},"13":{"loc":{"start":{"line":129,"column":14},"end":{"line":129,"column":79}},"type":"binary-expr","locations":[{"start":{"line":129,"column":14},"end":{"line":129,"column":30}},{"start":{"line":129,"column":34},"end":{"line":129,"column":79}}],"line":129}},"s":{"0":1,"1":159,"2":76,"3":91,"4":159,"5":159,"6":0,"7":0,"8":0,"9":0,"10":242,"11":91,"12":1,"13":1,"14":1,"15":1,"16":1,"17":53,"18":53,"19":27,"20":53,"21":53,"22":53,"23":1,"24":28,"25":1,"26":454,"27":1,"28":91,"29":91,"30":8,"31":83,"32":83,"33":7,"34":9,"35":7,"36":5,"37":7,"38":76,"39":76,"40":76,"41":43,"42":76,"43":5,"44":2,"45":2,"46":1,"47":28,"48":62,"49":1,"50":11,"51":13,"52":1,"53":294,"54":255,"55":255,"56":63,"57":95,"58":39,"59":1},"f":{"0":91,"1":159,"2":76,"3":91,"4":159,"5":0,"6":242,"7":53,"8":27,"9":28,"10":454,"11":91,"12":91,"13":9,"14":5,"15":43,"16":5,"17":2,"18":28,"19":62,"20":11,"21":13,"22":294,"23":63,"24":95},"b":{"0":[1,1,1],"1":[83,76],"2":[91,91],"3":[83,159],"4":[91,91],"5":[8,83],"6":[7,76],"7":[49,34],"8":[83,83],"9":[4,1],"10":[255,39],"11":[63,192],"12":[63,54,15],"13":[192,148]},"inputSourceMap":{"version":3,"file":"/home/runner/work/node-decoy/node-decoy/source/Domain/Decoy.ts","sources":["/home/runner/work/node-decoy/node-decoy/source/Domain/Decoy.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAAyC;AACzC,iCAAmC;AAQnC,MAAM,OAAO,GAA4C,IAAI,OAAO,EAAE,CAAC;AAEvE;;;;;;;;GAQG;AACH,SAAgB,MAAM,CAA4B,MAAS,EAAE,mBAA6B;IACtF,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,gBAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAChH,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7C,OAAiB,KAAK,CAAC;AAC3B,CAAC;AARD,wBAQC;AAED;;;;;;GAMG;AACH,SAAgB,QAAQ,CAAC,KAAoB;IACzC,OAAO,IAAA,eAAI,EAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAFD,4BAEC;AAED,SAAgB,OAAO,CAA4B,KAAU;IACzD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAFD,0BAEC;AAED;;;;;;;;GAQG;AACH,SAAe,QAAQ,CAAmB,KAAe,EAAE,MAAgH,EAAE,IAAqB;;QAC9L,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;SAClD;QAED,MAAM,OAAO,GAAe,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE/C,IAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/D,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAI,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,EAAmB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAElJ,OAAO,OAAO,CAAC,MAAM,CAAC;SACzB;QAED,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAEtB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QACnC,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAgB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAEnF,OAAO,MAAM,CAAC;IAClB,CAAC;CAAA;AAED;;;;;;;GAOG;AACH,SAAgB,KAAK,CAA4B,KAAe;IAC5D,OAAO,QAAQ,CACX,KAAK,EACL,CAAC,OAAO,EAAE,EAAE;QACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,CAAC,CACJ,CAAC;AACN,CAAC;AARD,sBAQC;AAED;;;;;;;;GAQG;AACH,SAAgB,MAAM,CAA4B,KAAe,EAAE,GAAG,IAAoB;IACtF,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;AAC9D,CAAC;AAFD,wBAEC;AAED;;;;;;;;GAQG;AACH,SAAgB,QAAQ,CAA4B,KAAe,EAAE,GAAG,IAAoB;IACxF,OAAO,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAC;AAChE,CAAC;AAFD,4BAEC;AAED;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAA4B,KAAe,EAAE,GAAG,IAAoB;IAC5F,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;QAChB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAe,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,MAAM;YACd,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAA2B,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,CAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/H,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;KAC1E;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAVD,oCAUC","sourcesContent":["import { hash } from \"@konfirm/checksum\";\nimport { DecoyTrap } from \"./Trap\";\n\nexport type Decoy<T extends object> = T;\ntype Decoyed<T extends object> = {\n    target: T;\n    trap: DecoyTrap;\n    linked: Array<Decoy<object>>;\n};\nconst storage: WeakMap<Decoy<object>, Decoyed<object>> = new WeakMap();\n\n/**\n * Create a new Decoy\n *\n * @export\n * @template T\n * @param {T} target\n * @param {boolean} [onlyLastKeyMutation]\n * @return {*}  {Decoy<T>}\n */\nexport function create<T extends object = object>(target: T, onlyLastKeyMutation?: boolean): Decoy<T> {\n    const linked: Array<Decoy<object>> = [];\n    const trap = new DecoyTrap((t) => linked[linked.push(create(t, onlyLastKeyMutation)) - 1], onlyLastKeyMutation);\n    const proxy = new Proxy(target, trap);\n\n    storage.set(proxy, { target, trap, linked });\n\n    return <Decoy<T>>proxy;\n}\n\n/**\n * Calculate the checksum of given Decoy\n *\n * @export\n * @param {Decoy<object>} proxy\n * @return {*}  {string}\n */\nexport function checksum(proxy: Decoy<object>): string {\n    return hash(proxy);\n}\n\nexport function isDecoy<T extends object = object>(input: any): input is Decoy<T> {\n    return storage.has(input);\n}\n\n/**\n * Traverse the Decoy and its linked Decoys executing the provided action\n *\n * @template T\n * @param {Decoy<T>} decoy\n * @param {((decoyed: Decoyed<object>, filter?: { [key: string | symbol]: string | symbol }) => void | Promise<void>)} action\n * @param {Array<keyof T>} [keys]\n * @return {*}  {Promise<T>}\n */\nasync function traverse<T extends object>(decoy: Decoy<T>, action: (decoyed: Decoyed<object>, filter?: { [key: string | symbol]: string | symbol }) => void | Promise<void>, keys?: Array<keyof T>): Promise<T> {\n    if (!isDecoy(decoy)) {\n        throw new Error(`Not a known Decoy: ${decoy}`);\n    }\n\n    const decoyed = <Decoyed<T>>storage.get(decoy);\n\n    if (keys?.length) {\n        const mutated = keys.filter((key) => hasMutations(decoy, key));\n        await Promise.all(mutated.map((key) => isDecoy(decoy[key]) ? traverse(<T>decoy[key], action) : action(decoyed, { [key]: <string | symbol>key })));\n\n        return decoyed.target;\n    }\n\n    await action(decoyed);\n\n    const { linked, target } = decoyed;\n    await Promise.all(linked.map((linked) => traverse<typeof linked>(linked, action)));\n\n    return target;\n}\n\n/**\n * Purge a Decoy and its linked Decoys\n *\n * @export\n * @template T\n * @param {Decoy<T>} decoy\n * @return {*}  {Promise<T>}\n */\nexport function purge<T extends object = object>(decoy: Decoy<T>): Promise<T> {\n    return traverse(\n        decoy,\n        (decoyed) => {\n            storage.delete(decoy);\n            decoyed.linked.length = 0;\n        }\n    );\n}\n\n/**\n * Commit the mutations to the decoyed object\n *\n * @export\n * @template T\n * @param {Decoy<T>} decoy\n * @param {...Array<keyof T>} keys\n * @return {*}  {Promise<T>}\n */\nexport function commit<T extends object = object>(decoy: Decoy<T>, ...keys: Array<keyof T>): Promise<T> {\n    return traverse(decoy, ({ trap }) => trap.commit(), keys);\n}\n\n/**\n * Roll back the mutations on the Decoy\n *\n * @export\n * @template T\n * @param {Decoy<T>} decoy\n * @param {...Array<keyof T>} keys\n * @return {*}  {Promise<T>}\n */\nexport function rollback<T extends object = object>(decoy: Decoy<T>, ...keys: Array<keyof T>): Promise<T> {\n    return traverse(decoy, ({ trap }) => trap.rollback(), keys);\n}\n\n/**\n * Check whether the Decoy has mutations\n *\n * @export\n * @template T\n * @param {Decoy<T>} decoy\n * @param {...Array<keyof T>} keys\n * @return {*}  {boolean}\n */\nexport function hasMutations<T extends object = object>(decoy: Decoy<T>, ...keys: Array<keyof T>): boolean {\n    if (isDecoy(decoy)) {\n        const { trap, linked } = <Decoyed<T>>storage.get(decoy);\n\n        return keys.length\n            ? keys.some((key) => trap.count(<{ key: string | symbol }>{ key }) > 0 || (isDecoy(decoy[key]) && hasMutations(<T>decoy[key])))\n            : trap.count() > 0 || linked.some((linked) => hasMutations(linked))\n    }\n\n    return false;\n}"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"bdac96c299c0263647c316a8939d98cf9fce0964","contentHash":"8e27f696b232085d76f83263d92c997598371aa1a59f98bab19a42ed325f4a3e"},"/home/runner/work/node-decoy/node-decoy/source/Domain/Trap.ts":{"path":"/home/runner/work/node-decoy/node-decoy/source/Domain/Trap.ts","statementMap":{"0":{"start":{"line":2,"column":0},"end":{"line":2,"column":62}},"1":{"start":{"line":3,"column":0},"end":{"line":3,"column":27}},"2":{"start":{"line":4,"column":15},"end":{"line":4,"column":39}},"3":{"start":{"line":5,"column":16},"end":{"line":5,"column":29}},"4":{"start":{"line":8,"column":8},"end":{"line":8,"column":35}},"5":{"start":{"line":9,"column":8},"end":{"line":9,"column":62}},"6":{"start":{"line":12,"column":29},"end":{"line":12,"column":46}},"7":{"start":{"line":13,"column":23},"end":{"line":13,"column":38}},"8":{"start":{"line":14,"column":8},"end":{"line":14,"column":68}},"9":{"start":{"line":15,"column":8},"end":{"line":15,"column":22}},"10":{"start":{"line":18,"column":26},"end":{"line":18,"column":43}},"11":{"start":{"line":19,"column":8},"end":{"line":21,"column":9}},"12":{"start":{"line":20,"column":12},"end":{"line":20,"column":40}},"13":{"start":{"line":22,"column":20},"end":{"line":22,"column":36}},"14":{"start":{"line":23,"column":8},"end":{"line":25,"column":9}},"15":{"start":{"line":24,"column":12},"end":{"line":24,"column":50}},"16":{"start":{"line":26,"column":8},"end":{"line":26,"column":31}},"17":{"start":{"line":29,"column":8},"end":{"line":31,"column":9}},"18":{"start":{"line":30,"column":12},"end":{"line":30,"column":59}},"19":{"start":{"line":32,"column":22},"end":{"line":32,"column":44}},"20":{"start":{"line":33,"column":8},"end":{"line":33,"column":79}},"21":{"start":{"line":36,"column":0},"end":{"line":36,"column":30}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":7,"column":4},"end":{"line":7,"column":5}},"loc":{"start":{"line":7,"column":55},"end":{"line":10,"column":5}},"line":7},"1":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":4},"end":{"line":11,"column":5}},"loc":{"start":{"line":11,"column":20},"end":{"line":16,"column":5}},"line":11},"2":{"name":"(anonymous_2)","decl":{"start":{"line":17,"column":4},"end":{"line":17,"column":5}},"loc":{"start":{"line":17,"column":25},"end":{"line":27,"column":5}},"line":17},"3":{"name":"(anonymous_3)","decl":{"start":{"line":28,"column":4},"end":{"line":28,"column":5}},"loc":{"start":{"line":28,"column":21},"end":{"line":34,"column":5}},"line":28}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":26},"end":{"line":7,"column":53}},"type":"default-arg","locations":[{"start":{"line":7,"column":48},"end":{"line":7,"column":53}}],"line":7},"1":{"loc":{"start":{"line":19,"column":8},"end":{"line":21,"column":9}},"type":"if","locations":[{"start":{"line":19,"column":8},"end":{"line":21,"column":9}},{"start":{"line":19,"column":8},"end":{"line":21,"column":9}}],"line":19},"2":{"loc":{"start":{"line":23,"column":8},"end":{"line":25,"column":9}},"type":"if","locations":[{"start":{"line":23,"column":8},"end":{"line":25,"column":9}},{"start":{"line":23,"column":8},"end":{"line":25,"column":9}}],"line":23},"3":{"loc":{"start":{"line":29,"column":8},"end":{"line":31,"column":9}},"type":"if","locations":[{"start":{"line":29,"column":8},"end":{"line":31,"column":9}},{"start":{"line":29,"column":8},"end":{"line":31,"column":9}}],"line":29},"4":{"loc":{"start":{"line":29,"column":12},"end":{"line":29,"column":55}},"type":"binary-expr","locations":[{"start":{"line":29,"column":12},"end":{"line":29,"column":38}},{"start":{"line":29,"column":42},"end":{"line":29,"column":55}}],"line":29},"5":{"loc":{"start":{"line":33,"column":16},"end":{"line":33,"column":77}},"type":"cond-expr","locations":[{"start":{"line":33,"column":44},"end":{"line":33,"column":69}},{"start":{"line":33,"column":72},"end":{"line":33,"column":77}}],"line":33}},"s":{"0":1,"1":1,"2":1,"3":1,"4":53,"5":53,"6":27,"7":27,"8":27,"9":27,"10":247,"11":247,"12":27,"13":247,"14":247,"15":27,"16":247,"17":1823,"18":8,"19":1815,"20":1815,"21":1},"f":{"0":53,"1":27,"2":247,"3":1823},"b":{"0":[42],"1":[27,220],"2":[27,220],"3":[8,1815],"4":[1823,9],"5":[247,1568]},"inputSourceMap":{"version":3,"file":"/home/runner/work/node-decoy/node-decoy/source/Domain/Trap.ts","sources":["/home/runner/work/node-decoy/node-decoy/source/Domain/Trap.ts"],"names":[],"mappings":";;;AAAA,wCAAqC;AAMrC,MAAM,OAAO,GAAgC,IAAI,OAAO,EAAE,CAAC;AAE3D,MAAa,SAAU,SAAQ,WAAI;IAC/B,YAAY,QAAkB,EAAE,sBAA+B,KAAK;QAChE,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE3B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CAA4B,KAAQ;QACxC,MAAM,EAAE,QAAQ,EAAE,GAAY,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/B,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAE5D,OAAO,MAAkB,CAAC;IAC9B,CAAC;IAED,KAAK,CAA4B,MAAW,EAAE,KAAU;QACpD,MAAM,EAAE,KAAK,EAAE,GAAY,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACnB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;SAC/B;QACD,MAAM,GAAG,GAA+B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAEzD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YAClB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;SACzC;QAED,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,CAAa,CAAC;IACvC,CAAC;IAED,GAAG,CAAyD,MAAS,EAAE,GAAM;QACzE,IAAI,GAAG,KAAK,MAAM,CAAC,WAAW,IAAI,GAAG,IAAI,MAAM,EAAE;YAC7C,OAAa,MAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACzD;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,GAAsB,CAAC,CAAC;QAExD,OAAa,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjF,CAAC;CACJ;AAxCD,8BAwCC","sourcesContent":["import { Trap } from \"@konfirm/trap\";\n\ntype Proxy<T> = T;\ntype Delegate<T extends object = object> = (target: T) => Proxy<T>;\ntype Trapped<T extends object = object> = { delegate: Delegate<T>, cache: WeakMap<object, Map<object, Proxy<T>>> };\n\nconst storage: WeakMap<DecoyTrap, Trapped> = new WeakMap();\n\nexport class DecoyTrap extends Trap {\n    constructor(delegate: Delegate, onlyLastKeyMutation: boolean = false) {\n        super(onlyLastKeyMutation);\n\n        storage.set(this, { delegate, cache: new WeakMap() });\n    }\n\n    delegate<T extends object = object>(value: T): Proxy<T> {\n        const { delegate } = <Trapped>storage.get(this);\n        const result = delegate(value);\n\n        Object.setPrototypeOf(result, Object.getPrototypeOf(value));\n\n        return result as Proxy<T>;\n    }\n\n    cache<T extends object = object>(target: any, value: any): Proxy<T> {\n        const { cache } = <Trapped>storage.get(this);\n\n        if (!cache.has(value)) {\n            cache.set(value, new Map());\n        }\n        const map = <Map<object, Proxy<object>>>cache.get(value);\n\n        if (!map.has(target)) {\n            map.set(target, this.delegate(value));\n        }\n\n        return map.get(target) as Proxy<T>;\n    }\n\n    get<T extends object = object, K extends keyof T = keyof T>(target: T, key: K): T[K] {\n        if (key === Symbol.toPrimitive && key in target) {\n            return (<any>target)[Symbol.toPrimitive].bind(target);\n        }\n\n        const value = super.get(target, key as string | symbol);\n\n        return <T[K]>(typeof value === 'object' ? this.cache(target, value) : value);\n    }\n}"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a62d434958ade7fc6b6161232428a26e68548055","contentHash":"7d5e52dd3f195ab765f4fa884959314f3156aac167e58e58efd6f95546ec26de"},"/home/runner/work/node-decoy/node-decoy/source/main.ts":{"path":"/home/runner/work/node-decoy/node-decoy/source/main.ts","statementMap":{"0":{"start":{"line":2,"column":22},"end":{"line":12,"column":3}},"1":{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},"2":{"start":{"line":3,"column":26},"end":{"line":3,"column":33}},"3":{"start":{"line":4,"column":15},"end":{"line":4,"column":52}},"4":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"5":{"start":{"line":6,"column":6},"end":{"line":6,"column":68}},"6":{"start":{"line":6,"column":51},"end":{"line":6,"column":63}},"7":{"start":{"line":8,"column":4},"end":{"line":8,"column":39}},"8":{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},"9":{"start":{"line":10,"column":26},"end":{"line":10,"column":33}},"10":{"start":{"line":11,"column":4},"end":{"line":11,"column":17}},"11":{"start":{"line":13,"column":19},"end":{"line":15,"column":1}},"12":{"start":{"line":14,"column":4},"end":{"line":14,"column":126}},"13":{"start":{"line":14,"column":21},"end":{"line":14,"column":126}},"14":{"start":{"line":14,"column":95},"end":{"line":14,"column":126}},"15":{"start":{"line":16,"column":0},"end":{"line":16,"column":62}},"16":{"start":{"line":17,"column":0},"end":{"line":17,"column":49}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":74},"end":{"line":2,"column":75}},"loc":{"start":{"line":2,"column":96},"end":{"line":9,"column":1}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":6,"column":38},"end":{"line":6,"column":39}},"loc":{"start":{"line":6,"column":49},"end":{"line":6,"column":65}},"line":6},"2":{"name":"(anonymous_2)","decl":{"start":{"line":9,"column":6},"end":{"line":9,"column":7}},"loc":{"start":{"line":9,"column":28},"end":{"line":12,"column":1}},"line":9},"3":{"name":"(anonymous_3)","decl":{"start":{"line":13,"column":50},"end":{"line":13,"column":51}},"loc":{"start":{"line":13,"column":71},"end":{"line":15,"column":1}},"line":13}},"branchMap":{"0":{"loc":{"start":{"line":2,"column":22},"end":{"line":12,"column":3}},"type":"binary-expr","locations":[{"start":{"line":2,"column":23},"end":{"line":2,"column":27}},{"start":{"line":2,"column":31},"end":{"line":2,"column":51}},{"start":{"line":2,"column":57},"end":{"line":12,"column":2}}],"line":2},"1":{"loc":{"start":{"line":2,"column":57},"end":{"line":12,"column":2}},"type":"cond-expr","locations":[{"start":{"line":2,"column":74},"end":{"line":9,"column":1}},{"start":{"line":9,"column":6},"end":{"line":12,"column":1}}],"line":2},"2":{"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},"type":"if","locations":[{"start":{"line":3,"column":4},"end":{"line":3,"column":33}},{"start":{"line":3,"column":4},"end":{"line":3,"column":33}}],"line":3},"3":{"loc":{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},"type":"if","locations":[{"start":{"line":5,"column":4},"end":{"line":7,"column":5}},{"start":{"line":5,"column":4},"end":{"line":7,"column":5}}],"line":5},"4":{"loc":{"start":{"line":5,"column":8},"end":{"line":5,"column":85}},"type":"binary-expr","locations":[{"start":{"line":5,"column":8},"end":{"line":5,"column":13}},{"start":{"line":5,"column":18},"end":{"line":5,"column":84}}],"line":5},"5":{"loc":{"start":{"line":5,"column":18},"end":{"line":5,"column":84}},"type":"cond-expr","locations":[{"start":{"line":5,"column":34},"end":{"line":5,"column":47}},{"start":{"line":5,"column":50},"end":{"line":5,"column":84}}],"line":5},"6":{"loc":{"start":{"line":5,"column":50},"end":{"line":5,"column":84}},"type":"binary-expr","locations":[{"start":{"line":5,"column":50},"end":{"line":5,"column":63}},{"start":{"line":5,"column":67},"end":{"line":5,"column":84}}],"line":5},"7":{"loc":{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},"type":"if","locations":[{"start":{"line":10,"column":4},"end":{"line":10,"column":33}},{"start":{"line":10,"column":4},"end":{"line":10,"column":33}}],"line":10},"8":{"loc":{"start":{"line":13,"column":19},"end":{"line":15,"column":1}},"type":"binary-expr","locations":[{"start":{"line":13,"column":20},"end":{"line":13,"column":24}},{"start":{"line":13,"column":28},"end":{"line":13,"column":45}},{"start":{"line":13,"column":50},"end":{"line":15,"column":1}}],"line":13},"9":{"loc":{"start":{"line":14,"column":21},"end":{"line":14,"column":126}},"type":"if","locations":[{"start":{"line":14,"column":21},"end":{"line":14,"column":126}},{"start":{"line":14,"column":21},"end":{"line":14,"column":126}}],"line":14},"10":{"loc":{"start":{"line":14,"column":25},"end":{"line":14,"column":93}},"type":"binary-expr","locations":[{"start":{"line":14,"column":25},"end":{"line":14,"column":40}},{"start":{"line":14,"column":44},"end":{"line":14,"column":93}}],"line":14}},"s":{"0":1,"1":7,"2":7,"3":7,"4":7,"5":7,"6":43,"7":7,"8":0,"9":0,"10":0,"11":1,"12":1,"13":7,"14":7,"15":1,"16":1},"f":{"0":7,"1":43,"2":0,"3":1},"b":{"0":[1,1,1],"1":[1,0],"2":[7,0],"3":[7,0],"4":[7,7],"5":[0,7],"6":[7,0],"7":[0,0],"8":[1,1,1],"9":[7,0],"10":[7,7]},"inputSourceMap":{"version":3,"file":"/home/runner/work/node-decoy/node-decoy/source/main.ts","sources":["/home/runner/work/node-decoy/node-decoy/source/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B","sourcesContent":["export * from './Domain/Decoy';\n"]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"a96dc55520c51db1ce49d1d7dfdcf306532e993d","contentHash":"83c46c2c884527774f37614f208c3a49b0e3e2c33ea6d5b358e373359e104fb0"}}