PepsRyuu / nollup

Rollup compatible development bundler for fast rebuilds and HMR.
MIT License
488 stars 28 forks source link

Source maps don't work in the worker? #166

Closed charlag closed 3 years ago

charlag commented 3 years ago

Hi again! It might be a problem with my configuration but I can't get source maps to work with a worker, neither FF nor Chrome.

git clone git@github.com:tutao/nollup-bug.git
cd nollup-bug
git switch source-map-error
npm i
node make
# open url printed to the console or  python -m SimpleHTTPServer 9001 and open localhost:9000/build/index.html

Screenshot from 2020-12-08 17-42-22

no matter which files are imported in worker part, none of them are visible under "nollup://" nor can be found.

Please excuse me if it's my fault but so far it seemed that nollup ignores sourceMap value which I pass so I don't think I have much control.

PepsRyuu commented 3 years ago

Hi! :D

Is source-map-error a private branch? Can't seem to find it. :)

charlag commented 3 years ago

Sorry, I forgot to push it. Now it should be there. Works with any worker code that is processed somehow (by default it gives source map via URL I think)

PepsRyuu commented 3 years ago

There seems to be almost no information online about Workers and source maps. I have honestly no idea why //#sourceMappingURL is not working inside a worker, it seems like it should.

Is there any examples of this working with other tools or anything? I could be mistaken, but this might just be a browser devtools issue, quite possible they just haven't implemented source maps for workers.

charlag commented 3 years ago

You can try our main repo: https://github.com/tutao/tutanota on master it's still homebrew build system with just calling babel and inline source maps and it works? I also couldn't find more info so I couldn't be more helpful but I thought it might have to do something with nollup:// scheme.

(or you can open https://mail.tutanota.com) Screenshot from 2020-12-08 18-23-33

PepsRyuu commented 3 years ago

The deployed app is using external source map files. nollup:/// works fine when using //#sourceURL, Set a breakpoint in the worker, and run the following in the console:

eval('console.log("worker!");\
//# sourceURL=nollup:///hello');

image

So it's probably something to do with sourceMappingURL not allowing inline source maps inside a worker, or it doesn't like data URIs...

charlag commented 3 years ago

Hm debug build or the app from repo I mentioned above uses inline source maps but what you've shown is very interesting too...

charlag commented 3 years ago

For that build I mentioned, we don't use eval. That's one big difference I can think of. Here's what source map looks like:

//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldvcmtlckltcGwuanMiXSwibmFtZXMiOlsic2VsZiIsIkxvZ2dlciIsIldvcmtlckltcGwiLCJicm93c2VyRGF0YSIsIlByb2dyYW1taW5nRXJyb3IiLCJ3b3JrZXJTY29wZSIsIl9xdWV1ZSIsIlF1ZXVlIiwibmF0aXZlQXBwIiwic2V0V29ya2VyUXVldWUiLCJfbmV3RW50cm9weSIsIl9sYXN0RW50cm9weVVwZGF0ZSIsIkRhdGUiLCJnZXRUaW1lIiwic2V0Q29tbWFuZHMiLCJ0ZXN0RWNobyIsIm1lc3NhZ2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1zZyIsImFyZ3MiLCJ0ZXN0RXJyb3IiLCJlcnJvclR5cGVzIiwiQ3J5cHRvRXJyb3IiLCJOb3RBdXRoZW50aWNhdGVkRXJyb3IiLCJFcnJvclR5cGUiLCJlcnJvclR5cGUiLCJyZWplY3QiLCJnZW5lcmF0ZVNpZ251cEtleXMiLCJsb2NhdG9yIiwiY3VzdG9tZXIiLCJhcHBseSIsInNpZ251cCIsImNyZWF0ZUNvbnRhY3RGb3JtVXNlckdyb3VwRGF0YSIsImNyZWF0ZUNvbnRhY3RGb3JtVXNlciIsImNyZWF0ZVNlc3Npb24iLCJsb2dpbiIsImNyZWF0ZUV4dGVybmFsU2Vzc2lvbiIsImxvYWRFeHRlcm5hbFBhc3N3b3JkQ2hhbm5lbHMiLCJzZW5kRXh0ZXJuYWxQYXNzd29yZFNtcyIsInJlc2V0IiwicmVzdW1lU2Vzc2lvbiIsImRlbGV0ZVNlc3Npb24iLCJjaGFuZ2VQYXNzd29yZCIsImRlbGV0ZUFjY291bnQiLCJjcmVhdGVNYWlsRm9sZGVyIiwibWFpbCIsImNyZWF0ZU1haWxEcmFmdCIsImNyZWF0ZURyYWZ0IiwidXBkYXRlTWFpbERyYWZ0IiwidXBkYXRlRHJhZnQiLCJzZW5kTWFpbERyYWZ0Iiwic2VuZERyYWZ0IiwicmVhZEF2YWlsYWJsZUN1c3RvbWVyU3RvcmFnZSIsInJlYWRVc2VkQ3VzdG9tZXJTdG9yYWdlIiwicmVzdFJlcXVlc3QiLCJPYmplY3QiLCJhc3NpZ24iLCJjcmVhdGVBdXRoSGVhZGVycyIsInJlc3RDbGllbnQiLCJyZXF1ZXN0IiwiZW50aXR5UmVxdWVzdCIsImNhY2hlIiwic2VydmljZVJlcXVlc3QiLCJfc2VydmljZSIsImRvd25sb2FkRmlsZUNvbnRlbnQiLCJmaWxlIiwiZG93bmxvYWRGaWxlQ29udGVudE5hdGl2ZSIsImFkZE1haWxBbGlhcyIsIm1haWxBZGRyZXNzIiwic2V0TWFpbEFsaWFzU3RhdHVzIiwiaXNNYWlsQWRkcmVzc0F2YWlsYWJsZSIsImdldEFsaWFzQ291bnRlcnMiLCJjaGFuZ2VVc2VyUGFzc3dvcmQiLCJ1c2VyTWFuYWdlbWVudCIsImNoYW5nZUFkbWluRmxhZyIsInVwZGF0ZUFkbWluc2hpcCIsInN3aXRjaEZyZWVUb1ByZW1pdW1Hcm91cCIsInN3aXRjaFByZW1pdW1Ub0ZyZWVHcm91cCIsInVwZGF0ZVBheW1lbnREYXRhIiwiZG93bmxvYWRJbnZvaWNlIiwicmVhZFVzZWRVc2VyU3RvcmFnZSIsImRlbGV0ZVVzZXIiLCJnZXRQcmljZSIsImJvb2tpbmdGYWNhZGUiLCJnZXRDdXJyZW50UHJpY2UiLCJsb2FkQ3VzdG9tZXJTZXJ2ZXJQcm9wZXJ0aWVzIiwiYWRkU3BhbVJ1bGUiLCJlZGl0U3BhbVJ1bGUiLCJjcmVhdGVVc2VyIiwicmVhZFVzZWRHcm91cFN0b3JhZ2UiLCJncm91cE1hbmFnZW1lbnQiLCJjcmVhdGVNYWlsR3JvdXAiLCJjcmVhdGVMb2NhbEFkbWluR3JvdXAiLCJhZGRVc2VyVG9Hcm91cCIsInJlbW92ZVVzZXJGcm9tR3JvdXAiLCJkZWFjdGl2YXRlR3JvdXAiLCJsb2FkQ29udGFjdEZvcm1CeVBhdGgiLCJsb2FkQ29udGFjdEZvcm0iLCJhZGREb21haW4iLCJyZW1vdmVEb21haW4iLCJzZXRDYXRjaEFsbEdyb3VwIiwidXBsb2FkQ2VydGlmaWNhdGUiLCJkZWxldGVDZXJ0aWZpY2F0ZSIsImdlbmVyYXRlVG90cFNlY3JldCIsImdldFRvdHBWZXJpZmllciIsInRoZW4iLCJ0b3RwIiwiZ2VuZXJhdGVTZWNyZXQiLCJnZW5lcmF0ZVRvdHBDb2RlIiwiZ2VuZXJhdGVUb3RwIiwic2VhcmNoIiwiZW5hYmxlTWFpbEluZGV4aW5nIiwiaW5kZXhlciIsImRpc2FibGVNYWlsSW5kZXhpbmciLCJleHRlbmRNYWlsSW5kZXgiLCJjYW5jZWxNYWlsSW5kZXhpbmciLCJyZWFkQ291bnRlclZhbHVlIiwiY291bnRlcnMiLCJjYW5jZWxDcmVhdGVTZXNzaW9uIiwiZW50cm9weSIsImFkZEVudHJvcHkiLCJ0cnlSZWNvbm5lY3RFdmVudEJ1cyIsImV2ZW50QnVzQ2xpZW50IiwidHJ5UmVjb25uZWN0IiwiZ2VuZXJhdGVTc2VQdXNoSWRlbnRpZmVyIiwiZGVjcnlwdFVzZXJQYXNzd29yZCIsImNsb3NlRXZlbnRCdXMiLCJjbG9zZSIsImdldE1vcmVTZWFyY2hSZXN1bHRzIiwicmV0dXJuIiwiZ2V0UmVjb3ZlcnlDb2RlIiwiZ2V0UmVjb3ZlckNvZGUiLCJjcmVhdGVSZWNvdmVyeUNvZGUiLCJyZWNvdmVyTG9naW4iLCJyZXNldFNlY29uZEZhY3RvcnMiLCJ0YWtlT3ZlckRlbGV0ZWRBZGRyZXNzIiwicmVzZXRTZXNzaW9uIiwiY3JlYXRlQ2FsZW5kYXJFdmVudCIsImNhbGVuZGFyIiwidXBkYXRlQ2FsZW5kYXJFdmVudCIsInJlc29sdmVTZXNzaW9uS2V5Iiwic2siLCJhZGRDYWxlbmRhciIsInNjaGVkdWxlQWxhcm1zRm9yTmV3RGV2aWNlIiwibG9hZEFsYXJtRXZlbnRzIiwiZ2V0RG9tYWluVmFsaWRhdGlvblJlY29yZCIsInZpc2liaWxpdHlDaGFuZ2UiLCJvblZpc2liaWxpdHlDaGFuZ2VkIiwiZ2V0TG9nIiwiZ2xvYmFsIiwibG9nZ2VyIiwiZ2V0RW50cmllcyIsInNlbmRHcm91cEludml0YXRpb24iLCJzaGFyZSIsImFjY2VwdEdyb3VwSW52aXRhdGlvbiIsInJlamVjdEdyb3VwSW52aXRhdGlvbiIsImNoZWNrTWFpbEZvclBoaXNoaW5nIiwiZ2V0RXZlbnRCeVVpZCIsIm9uUG9zc2libHlVbmhhbmRsZWRSZWplY3Rpb24iLCJzZW5kRXJyb3IiLCJlIiwib25lcnJvciIsInNvdXJjZSIsImxpbmVubyIsImNvbG5vIiwiZXJyb3IiLCJjb25zb2xlIiwiRXJyb3IiLCJlcnIiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwiZmlsZU5hbWUiLCJUb3RwVmVyaWZpZXIiLCJyYW5kb20iLCJyZWR1Y2UiLCJzdW0iLCJ2YWx1ZSIsIm5vdyIsInN0b3JlRW50cm9weSIsImRhdGEiLCJldmVudE93bmVyR3JvdXBJZCIsInBvc3RNZXNzYWdlIiwiUmVxdWVzdCIsInByb2dyZXNzUGVyY2VudGFnZSIsImZyb21DYWxsYmFjayIsInNldFRpbWVvdXQiLCJjYiIsInN0YXRlIiwibG9nIiwidXBkYXRlIiwidG90YWxXb3JrIiwicmVmZXJlbmNlIiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7Ozs7QUFLQSx3RDs7OztBQUlBOztBQUVBLElBQUksT0FBT0EsSUFBUCxLQUFnQixXQUFwQixFQUFpQztBQUNoQyxrQ0FBb0JBLElBQXBCLEVBQTBCLElBQUlDLGNBQUosRUFBMUI7QUFDQSxDOztBQUVZQyxVLFdBQUFBLFU7Ozs7OztBQU1aLHFCQUFZRixJQUFaLEVBQStDRyxXQUEvQyxFQUF5RTtBQUN4RSxNQUFJQSxlQUFlLElBQW5CLEVBQXlCO0FBQ3hCLFNBQU0sSUFBSUMsa0NBQUosQ0FBcUIsMkJBQXJCLENBQU47QUFDQTtBQUNELE1BQU1DLGNBQWNMLElBQXBCO0FBQ0EsT0FBS00sTUFBTCxHQUFjLElBQUlDLHFCQUFKLENBQVVGLFdBQVYsQ0FBZDtBQUNBRywyQkFBVUMsY0FBVixDQUF5QixLQUFLSCxNQUE5QjtBQUNBLE9BQUtJLFdBQUwsR0FBbUIsQ0FBQyxDQUFwQjtBQUNBLE9BQUtDLGtCQUFMLEdBQTBCLElBQUlDLElBQUosR0FBV0MsT0FBWCxFQUExQjs7QUFFQSxrQ0FBWSxJQUFaLEVB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cyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5pbXBvcnQge2Vycm9yVG9PYmosIFF1ZXVlLCBSZXF1ZXN0fSBmcm9tIFwiLi4vY29tbW9uL1dvcmtlclByb3RvY29sXCJcbmltcG9ydCB7Q3J5cHRvRXJyb3J9IGZyb20gXCIuLi9jb21tb24vZXJyb3IvQ3J5cHRvRXJyb3JcIlxuaW1wb3J0IHtib29raW5nRmFjYWRlfSBmcm9tIFwiLi9mYWNhZGVzL0Jvb2tpbmdGYWNhZGVcIlxuaW1wb3J0IHtOb3RBdXRoZW50aWNhdGVkRXJyb3J9IGZyb20gXCIuLi9jb21tb24vZXJyb3IvUmVzdEVycm9yXCJcbmltcG9ydCB7UHJvZ3JhbW1pbmdFcnJvcn0gZnJvbSBcIi4uL2NvbW1vbi9lcnJvci9Qcm9ncmFtbWluZ0Vycm9yXCJcbmltcG9ydCB7aW5pdExvY2F0b3IsIGxvY2F0b3IsIHJlc2V0TG9jYXRvcn0gZnJvbSBcIi4vV29ya2VyTG9jYXRvclwiXG5pbXBvcnQge19zZXJ2aWNlfSBmcm9tIFwiLi9yZXN0L1NlcnZpY2VSZXN0Q2xpZW50XCJcbmltcG9ydCB7cmFuZG9tfSBmcm9tIFwiLi9jcnlwdG8vUmFuZG9taXplclwiXG5pbXBvcnQge2Fzc2VydFdvcmtlck9yTm9kZSwgaXNNYWluT3JOb2RlfSBmcm9tIFwiLi4vRW52XCJcbmltcG9ydCB7bmF0aXZlQXBwfSBmcm9tIFwiLi4vLi4vbmF0aXZlL05hdGl2ZVdyYXBwZXJcIlxuaW1wb3J0IHtUb3RwVmVyaWZpZXJ9IGZyb20gXCIuL2NyeXB0by9Ub3RwVmVyaWZpZXJcIlxuaW1wb3J0IHR5cGUge0VudHJvcHlTcmNFbnVtfSBmcm9tIFwiLi4vY29tbW9uL1R1dGFub3RhQ29uc3RhbnRzXCJcbmltcG9ydCB7bG9hZENvbnRhY3RGb3JtfSBmcm9tIFwiLi9mYWNhZGVzL0NvbnRhY3RGb3JtRmFjYWRlXCJcbmltcG9ydCB7a2V5VG9CYXNlNjR9IGZyb20gXCIuL2NyeXB0by9DcnlwdG9VdGlsc1wiXG5pbXBvcnQge2FlczI1NlJhbmRvbUtleX0gZnJvbSBcIi4vY3J5cHRvL0Flc1wiXG5pbXBvcnQgdHlwZSB7QnJvd3NlckRhdGF9IGZyb20gXCIuLi8uLi9taXNjL0NsaWVudENvbnN0YW50c1wiXG5pbXBvcnQgdHlwZSB7SW5mb01lc3NhZ2V9IGZyb20gXCIuLi9jb21tb24vQ29tbW9uVHlwZXNcIlxuaW1wb3J0IHtyZXNvbHZlU2Vzc2lvbktleX0gZnJvbSBcIi4vY3J5cHRvL0NyeXB0b0ZhY2FkZVwiXG5pbXBvcnQge0xvZ2dlciwgcmVwbGFjZU5hdGl2ZUxvZ2dlcn0gZnJvbSBcIi4uL2NvbW1vbi9Mb2dnZXJcIlxuaW1wb3J0IHtkb3duY2FzdH0gZnJvbSBcIi4uL2NvbW1vbi91dGlscy9VdGlsc1wiXG5pbXBvcnQgdHlwZSB7Q29udGFjdEZvcm1BY2NvdW50UmV0dXJufSBmcm9tIFwiLi4vZW50aXRpZXMvdHV0YW5vdGEvQ29udGFjdEZvcm1BY2NvdW50UmV0dXJuXCJcbmltcG9ydCB0eXBlIHtQYXltZW50RGF0YVNlcnZpY2VQdXRSZXR1cm59IGZyb20gXCIuLi9lbnRpdGllcy9zeXMvUGF5bWVudERhdGFTZXJ2aWNlUHV0UmV0dXJuXCJcbmltcG9ydCB0eXBlIHtFbnRpdHlVcGRhdGV9IGZyb20gXCIuLi9lbnRpdGllcy9zeXMvRW50aXR5VXBkYXRlXCJcbmltcG9ydCB0eXBlIHtXZWJzb2NrZXRDb3VudGVyRGF0YX0gZnJvbSBcIi4uL2VudGl0aWVzL3N5cy9XZWJzb2NrZXRDb3VudGVyRGF0YVwiXG5pbXBvcnQge0xhenlMb2FkZWR9IGZyb20gXCIuLi9jb21tb24vdXRpbHMvTGF6eUxvYWRlZFwiXG5pbXBvcnQgdHlwZSB7UHJvZ3Jlc3NNb25pdG9ySWR9IGZyb20gXCIuLi9jb21tb24vdXRpbHMvUHJvZ3Jlc3NNb25pdG9yXCI7XG5pbXBvcnQgdHlwZSB7V2Vic29ja2V0TGVhZGVyU3RhdHVzfSBmcm9tIFwiLi4vZW50aXRpZXMvc3lzL1dlYnNvY2tldExlYWRlclN0YXR1c1wiXG5cbmFzc2VydFdvcmtlck9yTm9kZSgpXG5cbmlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRyZXBsYWNlTmF0aXZlTG9nZ2VyKHNlbGYsIG5ldyBMb2dnZXIoKSlcbn1cblxuZXhwb3J0IGNsYXNzIFdvcmtlckltcGwge1xuXG5cdF9xdWV1ZTogUXVldWU7XG5cdF9uZXdFbnRyb3B5OiBudW1iZXI7XG5cdF9sYXN0RW50cm9weVVwZGF0ZTogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKHNlbGY6ID9EZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSwgYnJvd3NlckRhdGE6IEJyb3dzZXJEYXRhKSB7XG5cdFx0aWYgKGJyb3dzZXJEYXRhID09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBQcm9ncmFtbWluZ0Vycm9yKFwiQnJvd3NlcmRhdGEgaXMgbm90IHBhc3NlZFwiKVxuXHRcdH1cblx0XHRjb25zdCB3b3JrZXJTY29wZSA9IHNlbGZcblx0XHR0aGlzLl9xdWV1ZSA9IG5ldyBRdWV1ZSh3b3JrZXJTY29wZSlcblx0XHRuYXRpdmVBcHAuc2V0V29ya2VyUXVldWUodGhpcy5fcXVldWUpXG5cdFx0dGhpcy5fbmV3RW50cm9weSA9IC0xXG5cdFx0dGhpcy5fbGFzdEVudHJvcHlVcGRhdGUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuXG5cdFx0aW5pdExvY2F0b3IodGhpcywgYnJvd3NlckRhdGEpO1xuXG5cdFx0dGhpcy5fcXVldWUuc2V0Q29tbWFuZHMoe1xuXHRcdFx0dGVzdEVjaG86IChtZXNzYWdlOiBhbnkpID0+IFByb21pc2UucmVzb2x2ZSh7bXNnOiBcIj4+PiBcIiArIG1lc3NhZ2UuYXJnc1swXS5tc2d9KSxcblx0XHRcdHRlc3RFcnJvcjogKG1lc3NhZ2U6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBlcnJvclR5cGVzID0ge1xuXHRcdFx0XHRcdFByb2dyYW1taW5nRXJyb3IsXG5cdFx0XHRcdFx0Q3J5cHRvRXJyb3IsXG5cdFx0XHRcdFx0Tm90QXV0aGVudGljYXRlZEVycm9yXG5cdFx0XHRcdH1cblx0XHRcdFx0bGV0IEVycm9yVHlwZSA9IGVycm9yVHlwZXNbbWVzc2FnZS5hcmdzWzBdLmVycm9yVHlwZV1cblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclR5cGUoYHd0ZjogJHttZXNzYWdlLmFyZ3NbMF0uZXJyb3JUeXBlfWApKVxuXHRcdFx0fSxcblx0XHRcdGdlbmVyYXRlU2lnbnVwS2V5czogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuY3VzdG9tZXIuZ2VuZXJhdGVTaWdudXBLZXlzLmFwcGx5KGxvY2F0b3IuY3VzdG9tZXIsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRzaWdudXA6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmN1c3RvbWVyLnNpZ251cC5hcHBseShsb2NhdG9yLmN1c3RvbWVyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Y3JlYXRlQ29udGFjdEZvcm1Vc2VyR3JvdXBEYXRhOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jdXN0b21lci5jcmVhdGVDb250YWN0Rm9ybVVzZXJHcm91cERhdGEuYXBwbHkobG9jYXRvci5jdXN0b21lciwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGNyZWF0ZUNvbnRhY3RGb3JtVXNlcjogKG1lc3NhZ2U6IFJlcXVlc3QpOiBQcm9taXNlPENvbnRhY3RGb3JtQWNjb3VudFJldHVybj4gPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jdXN0b21lci5jcmVhdGVDb250YWN0Rm9ybVVzZXIuYXBwbHkobG9jYXRvci5jdXN0b21lciwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGNyZWF0ZVNlc3Npb246IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmxvZ2luLmNyZWF0ZVNlc3Npb24uYXBwbHkobG9jYXRvci5sb2dpbiwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGNyZWF0ZUV4dGVybmFsU2Vzc2lvbjogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IubG9naW4uY3JlYXRlRXh0ZXJuYWxTZXNzaW9uLmFwcGx5KGxvY2F0b3IubG9naW4sIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRsb2FkRXh0ZXJuYWxQYXNzd29yZENoYW5uZWxzOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5sb2dpbi5sb2FkRXh0ZXJuYWxQYXNzd29yZENoYW5uZWxzLmFwcGx5KGxvY2F0b3IubG9naW4sIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRzZW5kRXh0ZXJuYWxQYXNzd29yZFNtczogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IubG9naW4uc2VuZEV4dGVybmFsUGFzc3dvcmRTbXMuYXBwbHkobG9jYXRvci5sb2dpbiwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHJlc2V0OiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gcmVzZXRMb2NhdG9yKClcblx0XHRcdH0sXG5cdFx0XHRyZXN1bWVTZXNzaW9uOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5sb2dpbi5yZXN1bWVTZXNzaW9uLmFwcGx5KGxvY2F0b3IubG9naW4sIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRkZWxldGVTZXNzaW9uOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5sb2dpbi5kZWxldGVTZXNzaW9uLmFwcGx5KGxvY2F0b3IubG9naW4sIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRjaGFuZ2VQYXNzd29yZDogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IubG9naW4uY2hhbmdlUGFzc3dvcmQuYXBwbHkobG9jYXRvci5sb2dpbiwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGRlbGV0ZUFjY291bnQ6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmxvZ2luLmRlbGV0ZUFjY291bnQuYXBwbHkobG9jYXRvci5sb2dpbiwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGNyZWF0ZU1haWxGb2xkZXI6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLm1haWwuY3JlYXRlTWFpbEZvbGRlci5hcHBseShsb2NhdG9yLm1haWwsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRjcmVhdGVNYWlsRHJhZnQ6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLm1haWwuY3JlYXRlRHJhZnQuYXBwbHkobG9jYXRvci5tYWlsLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0dXBkYXRlTWFpbERyYWZ0OiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5tYWlsLnVwZGF0ZURyYWZ0LmFwcGx5KGxvY2F0b3IubWFpbCwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHNlbmRNYWlsRHJhZnQ6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLm1haWwuc2VuZERyYWZ0LmFwcGx5KGxvY2F0b3IubWFpbCwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHJlYWRBdmFpbGFibGVDdXN0b21lclN0b3JhZ2U6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmN1c3RvbWVyLnJlYWRBdmFpbGFibGVDdXN0b21lclN0b3JhZ2UuYXBwbHkobG9jYXRvci5jdXN0b21lciwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHJlYWRVc2VkQ3VzdG9tZXJTdG9yYWdlOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jdXN0b21lci5yZWFkVXNlZEN1c3RvbWVyU3RvcmFnZS5hcHBseShsb2NhdG9yLmN1c3RvbWVyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0cmVzdFJlcXVlc3Q6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdG1lc3NhZ2UuYXJnc1szXSA9IE9iamVjdC5hc3NpZ24obG9jYXRvci5sb2dpbi5jcmVhdGVBdXRoSGVhZGVycygpLCBtZXNzYWdlLmFyZ3NbM10pXG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLnJlc3RDbGllbnQucmVxdWVzdC5hcHBseShsb2NhdG9yLnJlc3RDbGllbnQsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRlbnRpdHlSZXF1ZXN0OiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jYWNoZS5lbnRpdHlSZXF1ZXN0LmFwcGx5KGxvY2F0b3IuY2FjaGUsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRzZXJ2aWNlUmVxdWVzdDogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIF9zZXJ2aWNlLmFwcGx5KG51bGwsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRkb3dubG9hZEZpbGVDb250ZW50OiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5maWxlLmRvd25sb2FkRmlsZUNvbnRlbnQuYXBwbHkobG9jYXRvci5maWxlLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0ZG93bmxvYWRGaWxlQ29udGVudE5hdGl2ZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuZmlsZS5kb3dubG9hZEZpbGVDb250ZW50TmF0aXZlLmFwcGx5KGxvY2F0b3IuZmlsZSwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGFkZE1haWxBbGlhczogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IubWFpbEFkZHJlc3MuYWRkTWFpbEFsaWFzLmFwcGx5KGxvY2F0b3IubWFpbEFkZHJlc3MsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRzZXRNYWlsQWxpYXNTdGF0dXM6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLm1haWxBZGRyZXNzLnNldE1haWxBbGlhc1N0YXR1cy5hcHBseShsb2NhdG9yLm1haWxBZGRyZXNzLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0aXNNYWlsQWRkcmVzc0F2YWlsYWJsZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IubWFpbEFkZHJlc3MuaXNNYWlsQWRkcmVzc0F2YWlsYWJsZS5hcHBseShsb2NhdG9yLm1haWxBZGRyZXNzLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Z2V0QWxpYXNDb3VudGVyczogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IubWFpbEFkZHJlc3MuZ2V0QWxpYXNDb3VudGVycy5hcHBseShsb2NhdG9yLm1haWxBZGRyZXNzLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Y2hhbmdlVXNlclBhc3N3b3JkOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci51c2VyTWFuYWdlbWVudC5jaGFuZ2VVc2VyUGFzc3dvcmQuYXBwbHkobG9jYXRvci51c2VyTWFuYWdlbWVudCwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGNoYW5nZUFkbWluRmxhZzogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IudXNlck1hbmFnZW1lbnQuY2hhbmdlQWRtaW5GbGFnLmFwcGx5KGxvY2F0b3IudXNlck1hbmFnZW1lbnQsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHR1cGRhdGVBZG1pbnNoaXA6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLnVzZXJNYW5hZ2VtZW50LnVwZGF0ZUFkbWluc2hpcC5hcHBseShsb2NhdG9yLnVzZXJNYW5hZ2VtZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0c3dpdGNoRnJlZVRvUHJlbWl1bUdyb3VwKG1lc3NhZ2U6IFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuY3VzdG9tZXIuc3dpdGNoRnJlZVRvUHJlbWl1bUdyb3VwLmFwcGx5KGxvY2F0b3IuY3VzdG9tZXIsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRzd2l0Y2hQcmVtaXVtVG9GcmVlR3JvdXAobWVzc2FnZTogUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jdXN0b21lci5zd2l0Y2hQcmVtaXVtVG9GcmVlR3JvdXAuYXBwbHkobG9jYXRvci5jdXN0b21lciwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHVwZGF0ZVBheW1lbnREYXRhKG1lc3NhZ2U6IFJlcXVlc3QpOiBQcm9taXNlPFBheW1lbnREYXRhU2VydmljZVB1dFJldHVybj4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jdXN0b21lci51cGRhdGVQYXltZW50RGF0YS5hcHBseShsb2NhdG9yLmN1c3RvbWVyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0ZG93bmxvYWRJbnZvaWNlKG1lc3NhZ2U6IFJlcXVlc3QpOiBQcm9taXNlPERhdGFGaWxlPiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmN1c3RvbWVyLmRvd25sb2FkSW52b2ljZS5hcHBseShsb2NhdG9yLmN1c3RvbWVyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0cmVhZFVzZWRVc2VyU3RvcmFnZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IudXNlck1hbmFnZW1lbnQucmVhZFVzZWRVc2VyU3RvcmFnZS5hcHBseShsb2NhdG9yLnVzZXJNYW5hZ2VtZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0ZGVsZXRlVXNlcjogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IudXNlck1hbmFnZW1lbnQuZGVsZXRlVXNlci5hcHBseShsb2NhdG9yLnVzZXJNYW5hZ2VtZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Z2V0UHJpY2U6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBib29raW5nRmFjYWRlLmdldFByaWNlLmFwcGx5KGJvb2tpbmdGYWNhZGUsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRnZXRDdXJyZW50UHJpY2U6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBib29raW5nRmFjYWRlLmdldEN1cnJlbnRQcmljZSgpXG5cdFx0XHR9LFxuXG5cdFx0XHRsb2FkQ3VzdG9tZXJTZXJ2ZXJQcm9wZXJ0aWVzOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jdXN0b21lci5sb2FkQ3VzdG9tZXJTZXJ2ZXJQcm9wZXJ0aWVzLmFwcGx5KGxvY2F0b3IuY3VzdG9tZXIsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRhZGRTcGFtUnVsZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuY3VzdG9tZXIuYWRkU3BhbVJ1bGUoLi4ubWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGVkaXRTcGFtUnVsZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuY3VzdG9tZXIuZWRpdFNwYW1SdWxlKC4uLm1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRjcmVhdGVVc2VyOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci51c2VyTWFuYWdlbWVudC5jcmVhdGVVc2VyLmFwcGx5KGxvY2F0b3IudXNlck1hbmFnZW1lbnQsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRyZWFkVXNlZEdyb3VwU3RvcmFnZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuZ3JvdXBNYW5hZ2VtZW50LnJlYWRVc2VkR3JvdXBTdG9yYWdlLmFwcGx5KGxvY2F0b3IuZ3JvdXBNYW5hZ2VtZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Y3JlYXRlTWFpbEdyb3VwOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5ncm91cE1hbmFnZW1lbnQuY3JlYXRlTWFpbEdyb3VwLmFwcGx5KGxvY2F0b3IuZ3JvdXBNYW5hZ2VtZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Y3JlYXRlTG9jYWxBZG1pbkdyb3VwOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5ncm91cE1hbmFnZW1lbnQuY3JlYXRlTG9jYWxBZG1pbkdyb3VwLmFwcGx5KGxvY2F0b3IuZ3JvdXBNYW5hZ2VtZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0YWRkVXNlclRvR3JvdXA6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmdyb3VwTWFuYWdlbWVudC5hZGRVc2VyVG9Hcm91cC5hcHBseShsb2NhdG9yLmdyb3VwTWFuYWdlbWVudCwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHJlbW92ZVVzZXJGcm9tR3JvdXA6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmdyb3VwTWFuYWdlbWVudC5yZW1vdmVVc2VyRnJvbUdyb3VwLmFwcGx5KGxvY2F0b3IuZ3JvdXBNYW5hZ2VtZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0ZGVhY3RpdmF0ZUdyb3VwOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5ncm91cE1hbmFnZW1lbnQuZGVhY3RpdmF0ZUdyb3VwLmFwcGx5KGxvY2F0b3IuZ3JvdXBNYW5hZ2VtZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0bG9hZENvbnRhY3RGb3JtQnlQYXRoOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9hZENvbnRhY3RGb3JtLmFwcGx5KG51bGwsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRhZGREb21haW46IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmN1c3RvbWVyLmFkZERvbWFpbi5hcHBseShsb2NhdG9yLmN1c3RvbWVyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0cmVtb3ZlRG9tYWluOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jdXN0b21lci5yZW1vdmVEb21haW4uYXBwbHkobG9jYXRvci5jdXN0b21lciwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHNldENhdGNoQWxsR3JvdXA6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmN1c3RvbWVyLnNldENhdGNoQWxsR3JvdXAuYXBwbHkobG9jYXRvci5jdXN0b21lciwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHVwbG9hZENlcnRpZmljYXRlOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jdXN0b21lci51cGxvYWRDZXJ0aWZpY2F0ZS5hcHBseShsb2NhdG9yLmN1c3RvbWVyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0ZGVsZXRlQ2VydGlmaWNhdGU6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmN1c3RvbWVyLmRlbGV0ZUNlcnRpZmljYXRlLmFwcGx5KGxvY2F0b3IuY3VzdG9tZXIsIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRnZW5lcmF0ZVRvdHBTZWNyZXQ6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRvdHBWZXJpZmllcigpLnRoZW4odG90cCA9PiB0b3RwLmdlbmVyYXRlU2VjcmV0LmFwcGx5KHRvdHAsIG1lc3NhZ2UuYXJncykpXG5cdFx0XHR9LFxuXHRcdFx0Z2VuZXJhdGVUb3RwQ29kZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VG90cFZlcmlmaWVyKCkudGhlbih0b3RwID0+IHRvdHAuZ2VuZXJhdGVUb3RwLmFwcGx5KHRvdHAsIG1lc3NhZ2UuYXJncykpXG5cdFx0XHR9LFxuXHRcdFx0c2VhcmNoOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5zZWFyY2guc2VhcmNoLmFwcGx5KGxvY2F0b3Iuc2VhcmNoLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0ZW5hYmxlTWFpbEluZGV4aW5nOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5pbmRleGVyLmVuYWJsZU1haWxJbmRleGluZygpXG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZU1haWxJbmRleGluZzogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuaW5kZXhlci5kaXNhYmxlTWFpbEluZGV4aW5nKClcblx0XHRcdH0sXG5cblx0XHRcdGV4dGVuZE1haWxJbmRleDogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuaW5kZXhlci5leHRlbmRNYWlsSW5kZXguYXBwbHkobG9jYXRvci5pbmRleGVyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Y2FuY2VsTWFpbEluZGV4aW5nOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5pbmRleGVyLmNhbmNlbE1haWxJbmRleGluZygpXG5cdFx0XHR9LFxuXHRcdFx0cmVhZENvdW50ZXJWYWx1ZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuY291bnRlcnMucmVhZENvdW50ZXJWYWx1ZS5hcHBseShsb2NhdG9yLmNvdW50ZXJzLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Y2FuY2VsQ3JlYXRlU2Vzc2lvbjogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0bG9jYXRvci5sb2dpbi5jYW5jZWxDcmVhdGVTZXNzaW9uKClcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHR9LFxuXHRcdFx0ZW50cm9weTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYWRkRW50cm9weShtZXNzYWdlLmFyZ3NbMF0pXG5cdFx0XHR9LFxuXHRcdFx0dHJ5UmVjb25uZWN0RXZlbnRCdXMobWVzc2FnZTogUmVxdWVzdCkge1xuXHRcdFx0XHRsb2NhdG9yLmV2ZW50QnVzQ2xpZW50LnRyeVJlY29ubmVjdC5hcHBseShsb2NhdG9yLmV2ZW50QnVzQ2xpZW50LCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuXHRcdFx0fSxcblx0XHRcdGdlbmVyYXRlU3NlUHVzaElkZW50aWZlcjogKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGtleVRvQmFzZTY0KGFlczI1NlJhbmRvbUtleSgpKSlcblx0XHRcdH0sXG5cdFx0XHRkZWNyeXB0VXNlclBhc3N3b3JkOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5sb2dpbi5kZWNyeXB0VXNlclBhc3N3b3JkLmFwcGx5KGxvY2F0b3IubG9naW4sIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRjbG9zZUV2ZW50QnVzOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRsb2NhdG9yLmV2ZW50QnVzQ2xpZW50LmNsb3NlKG1lc3NhZ2UuYXJnc1swXSlcblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG5cdFx0XHR9LFxuXHRcdFx0Z2V0TW9yZVNlYXJjaFJlc3VsdHM6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLnNlYXJjaC5nZXRNb3JlU2VhcmNoUmVzdWx0cy5hcHBseShsb2NhdG9yLnNlYXJjaCwgbWVzc2FnZS5hcmdzKS5yZXR1cm4obWVzc2FnZS5hcmdzWzBdKVxuXHRcdFx0fSxcblx0XHRcdGdldFJlY292ZXJ5Q29kZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IubG9naW4uZ2V0UmVjb3ZlckNvZGUuYXBwbHkobG9jYXRvci5sb2dpbiwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGNyZWF0ZVJlY292ZXJ5Q29kZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IubG9naW4uY3JlYXRlUmVjb3ZlcnlDb2RlLmFwcGx5KGxvY2F0b3IubG9naW4sIG1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRyZWNvdmVyTG9naW46IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmxvZ2luLnJlY292ZXJMb2dpbi5hcHBseShsb2NhdG9yLmxvZ2luLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0cmVzZXRTZWNvbmRGYWN0b3JzOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5sb2dpbi5yZXNldFNlY29uZEZhY3RvcnMuYXBwbHkobG9jYXRvci5sb2dpbiwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHRha2VPdmVyRGVsZXRlZEFkZHJlc3M6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmxvZ2luLnRha2VPdmVyRGVsZXRlZEFkZHJlc3MuYXBwbHkobG9jYXRvci5sb2dpbiwgbWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdHJlc2V0U2Vzc2lvbjogKCkgPT4gbG9jYXRvci5sb2dpbi5yZXNldCgpLFxuXHRcdFx0Y3JlYXRlQ2FsZW5kYXJFdmVudDogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuY2FsZW5kYXIuY3JlYXRlQ2FsZW5kYXJFdmVudC5hcHBseShsb2NhdG9yLmNhbGVuZGFyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0dXBkYXRlQ2FsZW5kYXJFdmVudDogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuY2FsZW5kYXIudXBkYXRlQ2FsZW5kYXJFdmVudC5hcHBseShsb2NhdG9yLmNhbGVuZGFyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0cmVzb2x2ZVNlc3Npb25LZXk6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiByZXNvbHZlU2Vzc2lvbktleS5hcHBseShudWxsLCBtZXNzYWdlLmFyZ3MpLnRoZW4oc2sgPT4gc2sgPyBrZXlUb0Jhc2U2NChzaykgOiBudWxsKVxuXHRcdFx0fSxcblx0XHRcdGFkZENhbGVuZGFyOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jYWxlbmRhci5hZGRDYWxlbmRhci5hcHBseShsb2NhdG9yLmNhbGVuZGFyLCBtZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0c2NoZWR1bGVBbGFybXNGb3JOZXdEZXZpY2U6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmNhbGVuZGFyLnNjaGVkdWxlQWxhcm1zRm9yTmV3RGV2aWNlKC4uLm1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRsb2FkQWxhcm1FdmVudHM6IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLmNhbGVuZGFyLmxvYWRBbGFybUV2ZW50cyguLi5tZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0Z2V0RG9tYWluVmFsaWRhdGlvblJlY29yZDogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0cmV0dXJuIGxvY2F0b3IuY3VzdG9tZXIuZ2V0RG9tYWluVmFsaWRhdGlvblJlY29yZCguLi5tZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0dmlzaWJpbGl0eUNoYW5nZTogKG1lc3NhZ2U6IFJlcXVlc3QpID0+IHtcblx0XHRcdFx0bG9jYXRvci5pbmRleGVyLm9uVmlzaWJpbGl0eUNoYW5nZWQoLi4ubWVzc2FnZS5hcmdzKVxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcblx0XHRcdH0sXG5cdFx0XHRnZXRMb2c6ICgpID0+IHtcblx0XHRcdFx0Y29uc3QgZ2xvYmFsID0gZG93bmNhc3Qoc2VsZilcblx0XHRcdFx0aWYgKGdsb2JhbC5sb2dnZXIpIHtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGdsb2JhbC5sb2dnZXIuZ2V0RW50cmllcygpKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRzZW5kR3JvdXBJbnZpdGF0aW9uOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5zaGFyZS5zZW5kR3JvdXBJbnZpdGF0aW9uKC4uLm1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRhY2NlcHRHcm91cEludml0YXRpb246IChtZXNzYWdlOiBSZXF1ZXN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBsb2NhdG9yLnNoYXJlLmFjY2VwdEdyb3VwSW52aXRhdGlvbiguLi5tZXNzYWdlLmFyZ3MpXG5cdFx0XHR9LFxuXHRcdFx0cmVqZWN0R3JvdXBJbnZpdGF0aW9uOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5zaGFyZS5yZWplY3RHcm91cEludml0YXRpb24oLi4ubWVzc2FnZS5hcmdzKVxuXHRcdFx0fSxcblx0XHRcdGNoZWNrTWFpbEZvclBoaXNoaW5nOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5tYWlsLmNoZWNrTWFpbEZvclBoaXNoaW5nKC4uLm1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0XHRnZXRFdmVudEJ5VWlkOiAobWVzc2FnZTogUmVxdWVzdCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbG9jYXRvci5jYWxlbmRhci5nZXRFdmVudEJ5VWlkKC4uLm1lc3NhZ2UuYXJncylcblx0XHRcdH0sXG5cdFx0fSlcblxuXHRcdC8vIG9ubHkgcmVnaXN0ZXIgb25jYXVnaHQgZXJyb3IgaGFuZGxlciBpZiB3ZSBhcmUgaW4gdGhlICpyZWFsKiB3b3JrZXIgc2NvcGVcblx0XHQvLyBPdGhlcndpc2UgdW5jYXVnaHQgZXJyb3IgaGFuZGxlciBtaWdodCBlbmQgdXAgaW4gYW4gaW5maW5pdGUgbG9vcCBmb3IgdGVzdCBjYXNlcy5cblx0XHRpZiAod29ya2VyU2NvcGUgJiYgIWlzTWFpbk9yTm9kZSgpKSB7XG5cdFx0XHRQcm9taXNlLm9uUG9zc2libHlVbmhhbmRsZWRSZWplY3Rpb24oZSA9PiB7XG5cdFx0XHRcdHRoaXMuc2VuZEVycm9yKGUpXG5cdFx0XHR9KVxuXG5cdFx0XHR3b3JrZXJTY29wZS5vbmVycm9yID0gKGU6IHN0cmluZyB8IEV2ZW50LCBzb3VyY2UsIGxpbmVubywgY29sbm8sIGVycm9yKSA9PiB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJ3b3JrZXJJbXBsLm9uZXJyb3JcIiwgZSwgc291cmNlLCBsaW5lbm8sIGNvbG5vLCBlcnJvcilcblx0XHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdFx0XHR0aGlzLnNlbmRFcnJvcihlcnJvcilcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBlcnIgPSBuZXcgRXJyb3IoZSlcblx0XHRcdFx0XHRlcnIubGluZU51bWJlciA9IGxpbmVub1xuXHRcdFx0XHRcdGVyci5jb2x1bW5OdW1iZXIgPSBjb2xub1xuXHRcdFx0XHRcdGVyci5maWxlTmFtZSA9IHNvdXJjZVxuXHRcdFx0XHRcdHRoaXMuc2VuZEVycm9yKGVycilcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldFRvdHBWZXJpZmllcigpOiBQcm9taXNlPFRvdHBWZXJpZmllcj4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IFRvdHBWZXJpZmllcigpKVxuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgZW50cm9weSB0byB0aGUgcmFuZG9taXplci4gVXBkYXRlZCB0aGUgc3RvcmVkIGVudHJvcHkgZm9yIGEgdXNlciB3aGVuIGVub3VnaCBlbnRyb3B5IGhhcyBiZWVuIGNvbGxlY3RlZC5cblx0ICogQHBhcmFtIGVudHJvcHlcblx0ICogQHJldHVybnMge1Byb21pc2UuPHZvaWQ+fVxuXHQgKi9cblx0YWRkRW50cm9weShlbnRyb3B5OiB7c291cmNlOiBFbnRyb3B5U3JjRW51bSwgZW50cm9weTogbnVtYmVyLCBkYXRhOiBudW1iZXJ9W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHJhbmRvbS5hZGRFbnRyb3B5KGVudHJvcHkpXG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRoaXMuX25ld0VudHJvcHkgPSB0aGlzLl9uZXdFbnRyb3B5ICsgZW50cm9weS5yZWR1Y2UoKHN1bSwgdmFsdWUpID0+IHZhbHVlLmVudHJvcHkgKyBzdW0sIDApXG5cdFx0XHRsZXQgbm93ID0gbmV3IERhdGUoKS5nZXRUaW1lKClcblx0XHRcdGlmICh0aGlzLl9uZXdFbnRyb3B5ID4gNTAwMCAmJiAobm93IC0gdGhpcy5fbGFzdEVudHJvcHlVcGRhdGUpID4gMTAwMCAqIDYwICogNSkge1xuXHRcdFx0XHR0aGlzLl9sYXN0RW50cm9weVVwZGF0ZSA9IG5vd1xuXHRcdFx0XHR0aGlzLl9uZXdFbnRyb3B5ID0gMFxuXHRcdFx0XHRsb2NhdG9yLmxvZ2luLnN0b3JlRW50cm9weSgpXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZW50aXR5RXZlbnRzUmVjZWl2ZWQoZGF0YTogRW50aXR5VXBkYXRlW10sIGV2ZW50T3duZXJHcm91cElkOiBJZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9xdWV1ZS5wb3N0TWVzc2FnZShuZXcgUmVxdWVzdChcImVudGl0eUV2ZW50XCIsIFtkYXRhLCBldmVudE93bmVyR3JvdXBJZF0pKVxuXHR9XG5cblx0c2VuZEVycm9yKGU6IEVycm9yKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3F1ZXVlLnBvc3RNZXNzYWdlKG5ldyBSZXF1ZXN0KFwiZXJyb3JcIiwgW2Vycm9yVG9PYmooZSldKSlcblx0fVxuXG5cdHNlbmRQcm9ncmVzcyhwcm9ncmVzc1BlcmNlbnRhZ2U6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9xdWV1ZS5wb3N0TWVzc2FnZShuZXcgUmVxdWVzdChcInByb2dyZXNzXCIsIFtwcm9ncmVzc1BlcmNlbnRhZ2VdKSkudGhlbigoKSA9PiB7XG5cdFx0XHQvLyB0aGUgd29ya2VyIHNvbWV0aW1lcyBkb2VzIG5vdCBzZW5kIHRoZSByZXF1ZXN0IGlmIGl0IGRvZXMgbm90IGdldCB0aW1lXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5mcm9tQ2FsbGJhY2soY2IgPT4ge1xuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRjYigpXG5cdFx0XHRcdH0sIDApXG5cdFx0XHR9KVxuXHRcdH0pXG5cdH1cblxuXHRzZW5kSW5kZXhTdGF0ZShzdGF0ZTogU2VhcmNoSW5kZXhTdGF0ZUluZm8pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcXVldWUucG9zdE1lc3NhZ2UobmV3IFJlcXVlc3QoXCJ1cGRhdGVJbmRleFN0YXRlXCIsIFtzdGF0ZV0pKVxuXHR9XG5cblx0dXBkYXRlV2ViU29ja2V0U3RhdGUoc3RhdGU6IFdzQ29ubmVjdGlvblN0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc29sZS5sb2coXCJ3cyBkaXNwbGF5ZWQgc3RhdGU6IFwiLCBzdGF0ZSlcblx0XHRyZXR1cm4gdGhpcy5fcXVldWUucG9zdE1lc3NhZ2UobmV3IFJlcXVlc3QoXCJ1cGRhdGVXZWJTb2NrZXRTdGF0ZVwiLCBbc3RhdGVdKSlcblx0fVxuXG5cdHVwZGF0ZUNvdW50ZXIodXBkYXRlOiBXZWJzb2NrZXRDb3VudGVyRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9xdWV1ZS5wb3N0TWVzc2FnZShuZXcgUmVxdWVzdChcImNvdW50ZXJVcGRhdGVcIiwgW3VwZGF0ZV0pKVxuXHR9XG5cblx0aW5mb01lc3NhZ2UobWVzc2FnZTogSW5mb01lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fcXVldWUucG9zdE1lc3NhZ2UobmV3IFJlcXVlc3QoXCJpbmZvTWVzc2FnZVwiLCBbbWVzc2FnZV0pKVxuXHR9XG5cblx0Y3JlYXRlUHJvZ3Jlc3NNb25pdG9yKHRvdGFsV29yazogbnVtYmVyKTogUHJvbWlzZTxQcm9ncmVzc01vbml0b3JJZD4ge1xuXHRcdHJldHVybiB0aGlzLl9xdWV1ZS5wb3N0TWVzc2FnZShuZXcgUmVxdWVzdChcImNyZWF0ZVByb2dyZXNzTW9uaXRvclwiLCBbdG90YWxXb3JrXSkpXG5cdH1cblxuXHRwcm9ncmVzc1dvcmtEb25lKHJlZmVyZW5jZTogUHJvZ3Jlc3NNb25pdG9ySWQsIHRvdGFsV29yazogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIHRoaXMuX3F1ZXVlLnBvc3RNZXNzYWdlKG5ldyBSZXF1ZXN0KFwicHJvZ3Jlc3NXb3JrRG9uZVwiLCBbcmVmZXJlbmNlLCB0b3RhbFdvcmtdKSlcblx0fVxuXG5cdHVwZGF0ZUxlYWRlclN0YXR1cyhzdGF0dXM6IFdlYnNvY2tldExlYWRlclN0YXR1cyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLl9xdWV1ZS5wb3N0TWVzc2FnZShuZXcgUmVxdWVzdChcInVwZGF0ZUxlYWRlclN0YXR1c1wiLCBbc3RhdHVzXSkpXG5cdH1cblxufVxuXG5cbiJdfQ==

and here it is decoded:

source map ```json { "sourcesContent": [ "// @flow import {errorToObj, Queue, Request} from \"../common/WorkerProtocol\" import {CryptoError} from \"../common/error/CryptoError\" import {bookingFacade} from \"./facades/BookingFacade\" import {NotAuthenticatedError} from \"../common/error/RestError\" import {ProgrammingError} from \"../common/error/ProgrammingError\" import {initLocator, locator, resetLocator} from \"./WorkerLocator\" import {_service} from \"./rest/ServiceRestClient\" import {random} from \"./crypto/Randomizer\" import {assertWorkerOrNode, isMainOrNode} from \"../Env\" import {nativeApp} from \"../../native/NativeWrapper\" import {TotpVerifier} from \"./crypto/TotpVerifier\" import type {EntropySrcEnum} from \"../common/TutanotaConstants\" import {loadContactForm} from \"./facades/ContactFormFacade\" import {keyToBase64} from \"./crypto/CryptoUtils\" import {aes256RandomKey} from \"./crypto/Aes\" import type {BrowserData} from \"../../misc/ClientConstants\" import type {InfoMessage} from \"../common/CommonTypes\" import {resolveSessionKey} from \"./crypto/CryptoFacade\" import {Logger, replaceNativeLogger} from \"../common/Logger\" import {downcast} from \"../common/utils/Utils\" import type {ContactFormAccountReturn} from \"../entities/tutanota/ContactFormAccountReturn\" import type {PaymentDataServicePutReturn} from \"../entities/sys/PaymentDataServicePutReturn\" import type {EntityUpdate} from \"../entities/sys/EntityUpdate\" import type {WebsocketCounterData} from \"../entities/sys/WebsocketCounterData\" import {LazyLoaded} from \"../common/utils/LazyLoaded\" import type {ProgressMonitorId} from \"../common/utils/ProgressMonitor\"; import type {WebsocketLeaderStatus} from \"../entities/sys/WebsocketLeaderStatus\" assertWorkerOrNode() if (typeof self !== \"undefined\") { replaceNativeLogger(self, new Logger()) } export class WorkerImpl { _queue: Queue; _newEntropy: number; _lastEntropyUpdate: number; constructor(self: ?DedicatedWorkerGlobalScope, browserData: BrowserData) { if (browserData == null) { throw new ProgrammingError(\"Browserdata is not passed\") } const workerScope = self this._queue = new Queue(workerScope) nativeApp.setWorkerQueue(this._queue) this._newEntropy = -1 this._lastEntropyUpdate = new Date().getTime() initLocator(this, browserData); this._queue.setCommands({ testEcho: (message: any) => Promise.resolve({msg: \">>> \" + message.args[0].msg}), testError: (message: any) => { const errorTypes = { ProgrammingError, CryptoError, NotAuthenticatedError } let ErrorType = errorTypes[message.args[0].errorType] return Promise.reject(new ErrorType(`wtf: ${message.args[0].errorType}`)) }, generateSignupKeys: (message: Request) => { return locator.customer.generateSignupKeys.apply(locator.customer, message.args) }, signup: (message: Request) => { return locator.customer.signup.apply(locator.customer, message.args) }, createContactFormUserGroupData: (message: Request) => { return locator.customer.createContactFormUserGroupData.apply(locator.customer, message.args) }, createContactFormUser: (message: Request): Promise => { return locator.customer.createContactFormUser.apply(locator.customer, message.args) }, createSession: (message: Request) => { return locator.login.createSession.apply(locator.login, message.args) }, createExternalSession: (message: Request) => { return locator.login.createExternalSession.apply(locator.login, message.args) }, loadExternalPasswordChannels: (message: Request) => { return locator.login.loadExternalPasswordChannels.apply(locator.login, message.args) }, sendExternalPasswordSms: (message: Request) => { return locator.login.sendExternalPasswordSms.apply(locator.login, message.args) }, reset: (message: Request) => { return resetLocator() }, resumeSession: (message: Request) => { return locator.login.resumeSession.apply(locator.login, message.args) }, deleteSession: (message: Request) => { return locator.login.deleteSession.apply(locator.login, message.args) }, changePassword: (message: Request) => { return locator.login.changePassword.apply(locator.login, message.args) }, deleteAccount: (message: Request) => { return locator.login.deleteAccount.apply(locator.login, message.args) }, createMailFolder: (message: Request) => { return locator.mail.createMailFolder.apply(locator.mail, message.args) }, createMailDraft: (message: Request) => { return locator.mail.createDraft.apply(locator.mail, message.args) }, updateMailDraft: (message: Request) => { return locator.mail.updateDraft.apply(locator.mail, message.args) }, sendMailDraft: (message: Request) => { return locator.mail.sendDraft.apply(locator.mail, message.args) }, readAvailableCustomerStorage: (message: Request) => { return locator.customer.readAvailableCustomerStorage.apply(locator.customer, message.args) }, readUsedCustomerStorage: (message: Request) => { return locator.customer.readUsedCustomerStorage.apply(locator.customer, message.args) }, restRequest: (message: Request) => { message.args[3] = Object.assign(locator.login.createAuthHeaders(), message.args[3]) return locator.restClient.request.apply(locator.restClient, message.args) }, entityRequest: (message: Request) => { return locator.cache.entityRequest.apply(locator.cache, message.args) }, serviceRequest: (message: Request) => { return _service.apply(null, message.args) }, downloadFileContent: (message: Request) => { return locator.file.downloadFileContent.apply(locator.file, message.args) }, downloadFileContentNative: (message: Request) => { return locator.file.downloadFileContentNative.apply(locator.file, message.args) }, addMailAlias: (message: Request) => { return locator.mailAddress.addMailAlias.apply(locator.mailAddress, message.args) }, setMailAliasStatus: (message: Request) => { return locator.mailAddress.setMailAliasStatus.apply(locator.mailAddress, message.args) }, isMailAddressAvailable: (message: Request) => { return locator.mailAddress.isMailAddressAvailable.apply(locator.mailAddress, message.args) }, getAliasCounters: (message: Request) => { return locator.mailAddress.getAliasCounters.apply(locator.mailAddress, message.args) }, changeUserPassword: (message: Request) => { return locator.userManagement.changeUserPassword.apply(locator.userManagement, message.args) }, changeAdminFlag: (message: Request) => { return locator.userManagement.changeAdminFlag.apply(locator.userManagement, message.args) }, updateAdminship: (message: Request) => { return locator.userManagement.updateAdminship.apply(locator.userManagement, message.args) }, switchFreeToPremiumGroup(message: Request): Promise { return locator.customer.switchFreeToPremiumGroup.apply(locator.customer, message.args) }, switchPremiumToFreeGroup(message: Request): Promise { return locator.customer.switchPremiumToFreeGroup.apply(locator.customer, message.args) }, updatePaymentData(message: Request): Promise { return locator.customer.updatePaymentData.apply(locator.customer, message.args) }, downloadInvoice(message: Request): Promise { return locator.customer.downloadInvoice.apply(locator.customer, message.args) }, readUsedUserStorage: (message: Request) => { return locator.userManagement.readUsedUserStorage.apply(locator.userManagement, message.args) }, deleteUser: (message: Request) => { return locator.userManagement.deleteUser.apply(locator.userManagement, message.args) }, getPrice: (message: Request) => { return bookingFacade.getPrice.apply(bookingFacade, message.args) }, getCurrentPrice: (message: Request) => { return bookingFacade.getCurrentPrice() }, loadCustomerServerProperties: (message: Request) => { return locator.customer.loadCustomerServerProperties.apply(locator.customer, message.args) }, addSpamRule: (message: Request) => { return locator.customer.addSpamRule(...message.args) }, editSpamRule: (message: Request) => { return locator.customer.editSpamRule(...message.args) }, createUser: (message: Request) => { return locator.userManagement.createUser.apply(locator.userManagement, message.args) }, readUsedGroupStorage: (message: Request) => { return locator.groupManagement.readUsedGroupStorage.apply(locator.groupManagement, message.args) }, createMailGroup: (message: Request) => { return locator.groupManagement.createMailGroup.apply(locator.groupManagement, message.args) }, createLocalAdminGroup: (message: Request) => { return locator.groupManagement.createLocalAdminGroup.apply(locator.groupManagement, message.args) }, addUserToGroup: (message: Request) => { return locator.groupManagement.addUserToGroup.apply(locator.groupManagement, message.args) }, removeUserFromGroup: (message: Request) => { return locator.groupManagement.removeUserFromGroup.apply(locator.groupManagement, message.args) }, deactivateGroup: (message: Request) => { return locator.groupManagement.deactivateGroup.apply(locator.groupManagement, message.args) }, loadContactFormByPath: (message: Request) => { return loadContactForm.apply(null, message.args) }, addDomain: (message: Request) => { return locator.customer.addDomain.apply(locator.customer, message.args) }, removeDomain: (message: Request) => { return locator.customer.removeDomain.apply(locator.customer, message.args) }, setCatchAllGroup: (message: Request) => { return locator.customer.setCatchAllGroup.apply(locator.customer, message.args) }, uploadCertificate: (message: Request) => { return locator.customer.uploadCertificate.apply(locator.customer, message.args) }, deleteCertificate: (message: Request) => { return locator.customer.deleteCertificate.apply(locator.customer, message.args) }, generateTotpSecret: (message: Request) => { return this.getTotpVerifier().then(totp => totp.generateSecret.apply(totp, message.args)) }, generateTotpCode: (message: Request) => { return this.getTotpVerifier().then(totp => totp.generateTotp.apply(totp, message.args)) }, search: (message: Request) => { return locator.search.search.apply(locator.search, message.args) }, enableMailIndexing: (message: Request) => { return locator.indexer.enableMailIndexing() }, disableMailIndexing: (message: Request) => { return locator.indexer.disableMailIndexing() }, extendMailIndex: (message: Request) => { return locator.indexer.extendMailIndex.apply(locator.indexer, message.args) }, cancelMailIndexing: (message: Request) => { return locator.indexer.cancelMailIndexing() }, readCounterValue: (message: Request) => { return locator.counters.readCounterValue.apply(locator.counters, message.args) }, cancelCreateSession: (message: Request) => { locator.login.cancelCreateSession() return Promise.resolve() }, entropy: (message: Request) => { return this.addEntropy(message.args[0]) }, tryReconnectEventBus(message: Request) { locator.eventBusClient.tryReconnect.apply(locator.eventBusClient, message.args) return Promise.resolve() }, generateSsePushIdentifer: () => { return Promise.resolve(keyToBase64(aes256RandomKey())) }, decryptUserPassword: (message: Request) => { return locator.login.decryptUserPassword.apply(locator.login, message.args) }, closeEventBus: (message: Request) => { locator.eventBusClient.close(message.args[0]) return Promise.resolve() }, getMoreSearchResults: (message: Request) => { return locator.search.getMoreSearchResults.apply(locator.search, message.args).return(message.args[0]) }, getRecoveryCode: (message: Request) => { return locator.login.getRecoverCode.apply(locator.login, message.args) }, createRecoveryCode: (message: Request) => { return locator.login.createRecoveryCode.apply(locator.login, message.args) }, recoverLogin: (message: Request) => { return locator.login.recoverLogin.apply(locator.login, message.args) }, resetSecondFactors: (message: Request) => { return locator.login.resetSecondFactors.apply(locator.login, message.args) }, takeOverDeletedAddress: (message: Request) => { return locator.login.takeOverDeletedAddress.apply(locator.login, message.args) }, resetSession: () => locator.login.reset(), createCalendarEvent: (message: Request) => { return locator.calendar.createCalendarEvent.apply(locator.calendar, message.args) }, updateCalendarEvent: (message: Request) => { return locator.calendar.updateCalendarEvent.apply(locator.calendar, message.args) }, resolveSessionKey: (message: Request) => { return resolveSessionKey.apply(null, message.args).then(sk => sk ? keyToBase64(sk) : null) }, addCalendar: (message: Request) => { return locator.calendar.addCalendar.apply(locator.calendar, message.args) }, scheduleAlarmsForNewDevice: (message: Request) => { return locator.calendar.scheduleAlarmsForNewDevice(...message.args) }, loadAlarmEvents: (message: Request) => { return locator.calendar.loadAlarmEvents(...message.args) }, getDomainValidationRecord: (message: Request) => { return locator.customer.getDomainValidationRecord(...message.args) }, visibilityChange: (message: Request) => { locator.indexer.onVisibilityChanged(...message.args) return Promise.resolve() }, getLog: () => { const global = downcast(self) if (global.logger) { return Promise.resolve(global.logger.getEntries()) } else { return Promise.resolve([]) } }, sendGroupInvitation: (message: Request) => { return locator.share.sendGroupInvitation(...message.args) }, acceptGroupInvitation: (message: Request) => { return locator.share.acceptGroupInvitation(...message.args) }, rejectGroupInvitation: (message: Request) => { return locator.share.rejectGroupInvitation(...message.args) }, checkMailForPhishing: (message: Request) => { return locator.mail.checkMailForPhishing(...message.args) }, getEventByUid: (message: Request) => { return locator.calendar.getEventByUid(...message.args) }, }) // only register oncaught error handler if we are in the *real* worker scope // Otherwise uncaught error handler might end up in an infinite loop for test cases. if (workerScope && !isMainOrNode()) { Promise.onPossiblyUnhandledRejection(e => { this.sendError(e) }) workerScope.onerror = (e: string | Event, source, lineno, colno, error) => { console.error(\"workerImpl.onerror\", e, source, lineno, colno, error) if (error instanceof Error) { this.sendError(error) } else { const err = new Error(e) err.lineNumber = lineno err.columnNumber = colno err.fileName = source this.sendError(err) } return true } } } getTotpVerifier(): Promise { return Promise.resolve(new TotpVerifier()) } /** * Adds entropy to the randomizer. Updated the stored entropy for a user when enough entropy has been collected. * @param entropy * @returns {Promise.} */ addEntropy(entropy: {source: EntropySrcEnum, entropy: number, data: number}[]): Promise { try { return random.addEntropy(entropy) } finally { this._newEntropy = this._newEntropy + entropy.reduce((sum, value) => value.entropy + sum, 0) let now = new Date().getTime() if (this._newEntropy > 5000 && (now - this._lastEntropyUpdate) > 1000 * 60 * 5) { this._lastEntropyUpdate = now this._newEntropy = 0 locator.login.storeEntropy() } } } entityEventsReceived(data: EntityUpdate[], eventOwnerGroupId: Id): Promise { return this._queue.postMessage(new Request(\"entityEvent\", [data, eventOwnerGroupId])) } sendError(e: Error): Promise { return this._queue.postMessage(new Request(\"error\", [errorToObj(e)])) } sendProgress(progressPercentage: number): Promise { return this._queue.postMessage(new Request(\"progress\", [progressPercentage])).then(() => { // the worker sometimes does not send the request if it does not get time return Promise.fromCallback(cb => { setTimeout(() => { cb() }, 0) }) }) } sendIndexState(state: SearchIndexStateInfo): Promise { return this._queue.postMessage(new Request(\"updateIndexState\", [state])) } updateWebSocketState(state: WsConnectionState): Promise { console.log(\"ws displayed state: \", state) return this._queue.postMessage(new Request(\"updateWebSocketState\", [state])) } updateCounter(update: WebsocketCounterData): Promise { return this._queue.postMessage(new Request(\"counterUpdate\", [update])) } infoMessage(message: InfoMessage): Promise { return this._queue.postMessage(new Request(\"infoMessage\", [message])) } createProgressMonitor(totalWork: number): Promise { return this._queue.postMessage(new Request(\"createProgressMonitor\", [totalWork])) } progressWorkDone(reference: ProgressMonitorId, totalWork: number): Promise { return this._queue.postMessage(new Request(\"progressWorkDone\", [reference, totalWork])) } updateLeaderStatus(status: WebsocketLeaderStatus): Promise { return this._queue.postMessage(new Request(\"updateLeaderStatus\", [status])) } } " ], "file": "WorkerImpl.js", "mappings": "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", "names": [ "self", "Logger", "WorkerImpl", "browserData", "ProgrammingError", "workerScope", "_queue", "Queue", "nativeApp", "setWorkerQueue", "_newEntropy", "_lastEntropyUpdate", "Date", "getTime", "setCommands", "testEcho", "message", "Promise", "resolve", "msg", "args", "testError", "errorTypes", "CryptoError", "NotAuthenticatedError", "ErrorType", "errorType", "reject", "generateSignupKeys", "locator", "customer", "apply", "signup", "createContactFormUserGroupData", "createContactFormUser", "createSession", "login", "createExternalSession", "loadExternalPasswordChannels", "sendExternalPasswordSms", "reset", "resumeSession", "deleteSession", "changePassword", "deleteAccount", "createMailFolder", "mail", "createMailDraft", "createDraft", "updateMailDraft", "updateDraft", "sendMailDraft", "sendDraft", "readAvailableCustomerStorage", "readUsedCustomerStorage", "restRequest", "Object", "assign", "createAuthHeaders", "restClient", "request", "entityRequest", "cache", "serviceRequest", "_service", "downloadFileContent", "file", "downloadFileContentNative", "addMailAlias", "mailAddress", "setMailAliasStatus", "isMailAddressAvailable", "getAliasCounters", "changeUserPassword", "userManagement", "changeAdminFlag", "updateAdminship", "switchFreeToPremiumGroup", "switchPremiumToFreeGroup", "updatePaymentData", "downloadInvoice", "readUsedUserStorage", "deleteUser", "getPrice", "bookingFacade", "getCurrentPrice", "loadCustomerServerProperties", "addSpamRule", "editSpamRule", "createUser", "readUsedGroupStorage", "groupManagement", "createMailGroup", "createLocalAdminGroup", "addUserToGroup", "removeUserFromGroup", "deactivateGroup", "loadContactFormByPath", "loadContactForm", "addDomain", "removeDomain", "setCatchAllGroup", "uploadCertificate", "deleteCertificate", "generateTotpSecret", "getTotpVerifier", "then", "totp", "generateSecret", "generateTotpCode", "generateTotp", "search", "enableMailIndexing", "indexer", "disableMailIndexing", "extendMailIndex", "cancelMailIndexing", "readCounterValue", "counters", "cancelCreateSession", "entropy", "addEntropy", "tryReconnectEventBus", "eventBusClient", "tryReconnect", "generateSsePushIdentifer", "decryptUserPassword", "closeEventBus", "close", "getMoreSearchResults", "return", "getRecoveryCode", "getRecoverCode", "createRecoveryCode", "recoverLogin", "resetSecondFactors", "takeOverDeletedAddress", "resetSession", "createCalendarEvent", "calendar", "updateCalendarEvent", "resolveSessionKey", "sk", "addCalendar", "scheduleAlarmsForNewDevice", "loadAlarmEvents", "getDomainValidationRecord", "visibilityChange", "onVisibilityChanged", "getLog", "global", "logger", "getEntries", "sendGroupInvitation", "share", "acceptGroupInvitation", "rejectGroupInvitation", "checkMailForPhishing", "getEventByUid", "onPossiblyUnhandledRejection", "sendError", "e", "onerror", "source", "lineno", "colno", "error", "console", "Error", "err", "lineNumber", "columnNumber", "fileName", "TotpVerifier", "random", "reduce", "sum", "value", "now", "storeEntropy", "data", "eventOwnerGroupId", "postMessage", "Request", "progressPercentage", "fromCallback", "setTimeout", "cb", "state", "log", "update", "totalWork", "reference", "status" ], "sources": [ "WorkerImpl.js" ], "version": 3 } ```
charlag commented 3 years ago

Yup, it seems ot be eval, if I replace build/worker.js in the project above with just

console.log("worker!");
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndvcmtlci5qcyJdLCJuYW1lcyI6WyJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiQUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksU0FBWiIsInNvdXJjZXNDb250ZW50IjpbImNvbnNvbGUubG9nKFwid29ya2VyIVwiKSJdLCJmaWxlIjoiL2hvbWUvaXZrL2Rldi9ub2xsdXAtYnVnL3dvcmtlci5qcyIsInNvdXJjZVJvb3QiOiJub2xsdXA6Ly8vIn0=

then it works

:thinking:

Either browser does not support eval + source map in workers or something is not escaped somehow but then it shouldn't break only in the worker

charlag commented 3 years ago

I've made a test with Webpack and it works there with eval-source-map Screenshot from 2020-12-09 09-59-25

or just eval Screenshot from 2020-12-09 10-01-55

PepsRyuu commented 3 years ago

So with Webpack eval inline source maps work fine?

What's the difference between Nollup's generated map and Webpack's then I wonder...

charlag commented 3 years ago

here's webpack vs nollup

{"version":3,"file":"./src/worker.js.js","sources":["webpack://test-webpack/./src/worker.js?dd00"],"sourcesContent":["console.log(\"worker\")\n"],"mappings":"AAAA;","sourceRoot":""}

{"version":3,"sources":["worker.js"],"names":["console","log"],"mappings":"AAAAA,OAAO,CAACC,GAAR,CAAY,SAAZ","sourcesContent":["console.log(\"worker!\")"],"file":"/home/ivk/dev/nollup-bug/worker.js","sourceRoot":"nollup:///"}

EDIT: that's after I removed double source map URL which was there for some reason for webpack

PepsRyuu commented 3 years ago

I tried modifying CodeGenerator.js to try mimic what Webpack is outputting, and that doesn't work. I'm really stumped on this one.

if (map) {
        map.sourceRoot = '';
        map.sources[map.sources.length - 1] = sourcePath;
        map.file = './src/' + map.sources[0] + '.js';
        map.sources = map.sources.map(p => 'webpack://test-webpack/./src/' + p);

        code += `\\\n${ConvertSourceMap.fromObject(map).toComment()}`;
    } else {
        code += `\\\n//# sourceURL=${sourcePath}`;
    }
charlag commented 3 years ago

I think adding //# sourceURL=nollup-int:///worker.js manually worked for me?

charlag commented 3 years ago

Screenshot from 2020-12-09 11-04-38

PepsRyuu commented 3 years ago

Are you able to modify CodeGenerator.js and reproduce?

charlag commented 3 years ago

Let me try

charlag commented 3 years ago

Like so:

        code += `\\n${ConvertSourceMap.fromObject(map).toComment()}\\n//# sourceURL=nollup-int://${filePath}`;

EDIT: remove double .js

charlag commented 3 years ago

(notice slashes difference, it was broken I think)

PepsRyuu commented 3 years ago

Nicely done! I don't understand why this works, but adding it doesn't seem to break anything as far as I can tell. Will need to do some testing on this further and see if it impacts anything else. Would appreciate it if you could do the same from your end on your full project and see if locally making the modification to Nollup ensures none of your source maps are broken.

PepsRyuu commented 3 years ago

code += `\\\n${ConvertSourceMap.fromObject(map).toComment()}\\n//# sourceURL=nollup-int://${filePath}`;

Keep the three slashes at the beginning, because it addresses a few issues regarding source code comments. :)

charlag commented 3 years ago

will do! I'm also puzzled by why we must assign sourceURL to it but oh well. I think filePath is not a good choice as Firefox trips and removes all of them if you try to acces it so maybe it should be a relative path instead.

Regarding slashes: it produces this:

                eval('console.log("worker!");\
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndvcmtlci5qcyJdLCJuYW1lcyI6WyJjb25zb2xlIiwibG9nIl0sIm1hcHBpbmdzIjoiQUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVksU0FBWiIsInNvdXJjZXNDb250ZW50IjpbImNvbnNvbGUubG9nKFwid29ya2VyIVwiKSJdLCJmaWxlIjoiL2hvbWUvaXZrL2Rldi9ub2xsdXAtYnVnL3dvcmtlci5qcyIsInNvdXJjZVJvb3QiOiJub2xsdXA6Ly8vIn0=\n//# sourceURL=nollup-int:///home/ivk/dev/nollup-bug/worker.js');

which doesn't look correct but maybe I'm wrong. webpack does it with '\n' inside the string

charlag commented 3 years ago

also it should be triple slash after nollup-int if we are to follow webpack here

PepsRyuu commented 3 years ago

Works fine in Firefox for me?

As yes you're right, mixing up a different issue in my head. The reason for the extra slash is to keep the eval output clean so it's easier to read through. Webpacks puts the entire eval code into a single line, which can cause a crash for the devtools, so by ensuring lines are as minimal as possible it reduces the odds of a crash.

And yes, that's something I noticed too, the absolute path just so happens to add the third slash on *nix systems.

charlag commented 3 years ago

I see! I would do it like

//# sourceURL=nollup-int:///${sourcePath}

I think?

PepsRyuu commented 3 years ago

Will need to test it and see. Should be able to more thoroughly check it out later on this evening. :)

charlag commented 3 years ago

Of course, thanks a lot with assisting on this! Now I can fork it and it's not rush at all

PepsRyuu commented 3 years ago

Released in 0.14.3 🙂

charlag commented 3 years ago

Thanks a lot!

frederikhors commented 3 years ago

I get a lot of warning now with this, why?

I'm using https://github.com/rixo/svelte-template-hot by the amazing @rixo.

image

PepsRyuu commented 3 years ago

Not entirely sure how that's happening as a result of this change. But usually those happen because the library has relative paths to a source map included in the library. Nollup doesn't try to remove those comments. In the case of @urql/core, it has the following inside it:

//# sourceMappingURL=urql-core.mjs.map

I'm not sure how that would have worked before though. As far as I understand, other bundlers like Webpack would still show the same warning message. There's a plugin for this in Webpack, I suppose something similar would be needed here: https://webpack.js.org/loaders/source-map-loader/

frederikhors commented 3 years ago

Are we using https://www.npmjs.com/package/rollup-plugin-sourcemaps, @PepsRyuu?

PepsRyuu commented 3 years ago

That sounds like it would resolve the issue, but that's up the developer to include the plugin in their project.

frederikhors commented 3 years ago

:( @rixo should we add https://www.npmjs.com/package/rollup-plugin-sourcemaps?