diff --git a/example/electron-app/package.json b/example/electron-app/package.json index 49e5fe9..1ec21eb 100644 --- a/example/electron-app/package.json +++ b/example/electron-app/package.json @@ -26,7 +26,7 @@ "start:web": "cross-env NODE_ENV=development webpack-dev-server -c ./webpack.config.ts" }, "dependencies": { - "electron-rpc-api": "5.0.0", + "electron-rpc-api": "5.1.0-beta3", "rxjs": "6.5.2", "sanitize-html": "1.20.1", "tcp-ping": "0.1.1" diff --git a/example/electron-app/yarn.lock b/example/electron-app/yarn.lock index 6a17173..e541e22 100644 --- a/example/electron-app/yarn.lock +++ b/example/electron-app/yarn.lock @@ -302,9 +302,9 @@ integrity sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ== "@types/node@^10.12.18": - version "10.14.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.6.tgz#9cbfcb62c50947217f4d88d4d274cc40c22625a9" - integrity sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg== + version "10.14.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.7.tgz#1854f0a9aa8d2cd6818d607b3d091346c6730362" + integrity sha512-on4MmIDgHXiuJDELPk1NFaKVUxxCFr37tm8E9yN6rAiF5Pzp/9bBfBHkoexqRiY+hk/Z04EJU9kKEb59YqJ82A== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -549,7 +549,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.4, accepts@~1.3.5: +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== @@ -953,21 +953,21 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -body-parser@1.18.3: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: - bytes "3.0.0" + bytes "3.1.0" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" + http-errors "1.7.2" + iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" bonjour@^3.5.0: version "3.5.0" @@ -1192,6 +1192,11 @@ bytes@3.0.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + cacache@^11.3.2: version "11.3.2" resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.2.tgz#2d81e308e3d258ca38125b676b98b2ac9ce69bfa" @@ -1596,10 +1601,12 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" content-type@~1.0.4: version "1.0.4" @@ -1618,10 +1625,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== copy-concurrently@^1.0.0: version "1.0.5" @@ -2224,13 +2231,14 @@ electron-publish@20.40.0: lazy-val "^1.0.4" mime "^2.4.1" -electron-rpc-api@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/electron-rpc-api/-/electron-rpc-api-5.0.0.tgz#24d5ea76826392c394b45212430292853ff1f5f3" - integrity sha512-45DigCRYjhFkJf4yVkhXTZ4CZ60y4N/TVxF2UK4f//fU/UvAFCIcd68xavrHjdEkaChLWxgxBgQYBdFCayesCw== +electron-rpc-api@5.1.0-beta3: + version "5.1.0-beta3" + resolved "https://registry.yarnpkg.com/electron-rpc-api/-/electron-rpc-api-5.1.0-beta3.tgz#afa6f1903e938dbd78d0f34cafb3e1ce8451b5a7" + integrity sha512-1hIzwZ1M/wmlBYYiaqMdx8d8+WI5P0xOGMYOaYGvwjRA42/rxGnw/G9VFIinASQ53HMnKtFFgy/Eb0vZ2HJp9Q== dependencies: - pubsub-to-rpc-api "^5.0.0" + pubsub-to-rpc-api "^5.1.0-beta4" tslib "^1.9.2" + uuid-browser "^3.1.0" electron@4.2.0: version "4.2.0" @@ -2546,38 +2554,38 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: homedir-polyfill "^1.0.1" express@^4.16.4: - version "4.16.4" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" - integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== + version "4.17.0" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.0.tgz#288af62228a73f4c8ea2990ba3b791bb87cd4438" + integrity sha512-1Z7/t3Z5ZnBG252gKUPyItc4xdeaA0X934ca2ewckAsVsw9EG71i++ZHZPYnus8g/s5Bty8IMpSVEuRkmwwPRQ== dependencies: - accepts "~1.3.5" + accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.18.3" - content-disposition "0.5.2" + body-parser "1.19.0" + content-disposition "0.5.3" content-type "~1.0.4" - cookie "0.3.1" + cookie "0.4.0" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.1.1" + finalhandler "~1.1.2" fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" - parseurl "~1.3.2" + parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.4" - qs "6.5.2" - range-parser "~1.2.0" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" safe-buffer "5.1.2" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" @@ -2650,9 +2658,9 @@ fast-deep-equal@^2.0.1: integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-glob@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295" - integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w== + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.1.2" @@ -2734,17 +2742,17 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" + parseurl "~1.3.3" + statuses "~1.5.0" unpipe "~1.0.0" find-cache-dir@^2.0.0: @@ -2913,9 +2921,9 @@ fs-extra@^7.0.1: universalify "^0.1.0" fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" + integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== dependencies: minipass "^2.2.1" @@ -3342,7 +3350,18 @@ http-deceiver@^1.2.7: resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: +http-errors@1.7.2, http-errors@~1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= @@ -3406,14 +3425,7 @@ husky@2.3.0: run-node "^1.0.0" slash "^3.0.0" -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4580,10 +4592,10 @@ mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: dependencies: mime-db "1.40.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.1, mime@^2.4.2: version "2.4.3" @@ -4708,7 +4720,7 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.1, ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== @@ -4732,9 +4744,9 @@ mute-stream@0.0.7: integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.12.1, nan@^2.13.2: - version "2.13.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" - integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== nanomatch@^1.2.9: version "1.2.13" @@ -5295,7 +5307,7 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= -parseurl@~1.3.2: +parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -5597,7 +5609,7 @@ protochain@^1.0.5: resolved "https://registry.yarnpkg.com/protochain/-/protochain-1.0.5.tgz#991c407e99de264aadf8f81504b5e7faf7bfa260" integrity sha1-mRxAfpneJkqt+PgVBLXn+ve/omA= -proxy-addr@~2.0.4: +proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== @@ -5632,10 +5644,10 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" -pubsub-to-rpc-api@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pubsub-to-rpc-api/-/pubsub-to-rpc-api-5.0.0.tgz#78cd98ea5f326681f085ae8a94810d2cb4423c79" - integrity sha512-S2dmqZw3iSxgCR4eMh1Bm6AVp0ZSVNbEddwSyIzyK+9SGYcmOyd0xy44h/Qa7R9fn3L80yCaEszK4GfpHM3fRQ== +pubsub-to-rpc-api@^5.1.0-beta4: + version "5.1.0-beta4" + resolved "https://registry.yarnpkg.com/pubsub-to-rpc-api/-/pubsub-to-rpc-api-5.1.0-beta4.tgz#0b48d2e7342f50f59e9da41ba986e67b6db8dafd" + integrity sha512-8U60CdToAivwm/6y6cvJqBoUqUw0IgiGnv5JnlMjg1y6LR3i0ndupo9w8TCD0i8E+A31ll5fqp37xG/Ltt1Png== dependencies: deserialize-error "^0.0.3" jsan "^3.1.13" @@ -5688,7 +5700,12 @@ q@1.x: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qs@6.5.2, qs@~6.5.2: +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== @@ -5732,19 +5749,19 @@ randomfill@^1.0.3: randombytes "^2.0.5" safe-buffer "^5.1.0" -range-parser@^1.2.1, range-parser@~1.2.0: +range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" unpipe "1.0.0" rc@^1.0.1, rc@^1.1.6, rc@^1.2.1, rc@^1.2.7: @@ -6005,9 +6022,9 @@ resolve-url@^0.2.1: integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@^1.10.0, resolve@^1.3.2, resolve@^1.8.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" - integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.0.tgz#4014870ba296176b86343d50b60f3b50609ce232" + integrity sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw== dependencies: path-parse "^1.0.6" @@ -6193,10 +6210,10 @@ semver@~5.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" depd "~1.1.2" @@ -6205,12 +6222,12 @@ send@0.16.2: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" + range-parser "~1.2.1" + statuses "~1.5.0" serialize-javascript@^1.7.0: version "1.7.0" @@ -6237,15 +6254,15 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" + parseurl "~1.3.3" + send "0.17.1" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -6282,6 +6299,11 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -6581,16 +6603,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - stdout-stream@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" @@ -6961,6 +6978,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + topo@3.x.x: version "3.0.3" resolved "https://registry.yarnpkg.com/topo/-/topo-3.0.3.tgz#d5a67fb2e69307ebeeb08402ec2a2a6f5f7ad95c" @@ -7131,7 +7153,7 @@ type-fest@^0.4.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== -type-is@~1.6.16: +type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== diff --git a/package.json b/package.json index 34293d4..11dffbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "electron-rpc-api", - "version": "5.1.0-beta2", + "version": "5.1.0-beta3", "description": "Wrapper around the Electron's IPC for building type-safe API based RPC-like and reactive interactions", "author": "Vladimir Yakovlev (https://github.com/vladimiry)", "license": "MIT", @@ -45,7 +45,7 @@ "rxjs": "^6.5.2" }, "dependencies": { - "pubsub-to-rpc-api": "^5.1.0-beta3", + "pubsub-to-rpc-api": "^5.1.0-beta4", "tslib": "^1.9.2", "uuid-browser": "^3.1.0" }, @@ -68,7 +68,9 @@ "ts-node": "^8.0.2", "tsconfig-paths": "^3.8.0", "tslint": "^5.13.1", + "tslint-consistent-codestyle": "^1.15.1", + "tslint-eslint-rules": "^5.4.0", "tslint-rules-bunch": "^0.0.7", - "typescript": "^3.3.3333" + "typescript": "^3.4.5" } } diff --git a/src/lib/ipc-main-api-service.ts b/src/lib/ipc-main-api-service.ts index 22b40bb..a9dd38c 100644 --- a/src/lib/ipc-main-api-service.ts +++ b/src/lib/ipc-main-api-service.ts @@ -2,10 +2,11 @@ import * as Lib from "pubsub-to-rpc-api"; import {IpcMain, IpcMessageEvent, IpcRenderer} from "electron"; import * as PM from "./private/model"; +import {curryOwnFunctionMembers} from "./private/util"; import {requireIpcMain, requireIpcRenderer} from "./private/electron-require"; // TODO infer from Electron.IpcMain["on"] listener arguments -type ACA = [IpcMessageEvent, ...PM.Any[]]; +type DefACA = [IpcMessageEvent, ...PM.Any[]]; type IpcMainEventEmittersCache = Pick; type IpcRendererEventEmittersCache = Pick; @@ -13,29 +14,24 @@ type IpcRendererEventEmittersCache = Pick(); const ipcRendererEventEmittersCache = new WeakMap(); -export const createIpcMainApiService: >( - input: Lib.Model.CreateServiceInput, -) => { +export function createIpcMainApiService, ACA2 extends DefACA = DefACA>( + createServiceArg: Lib.Model.CreateServiceInput, +): { register: ( - actions: PM.Arguments["register"]>[0], + actions: PM.Arguments["register"]>[0], options?: { ipcMain?: IpcMainEventEmittersCache; logger?: Lib.Model.Logger; }, - ) => ReturnType["register"]>; + ) => ReturnType["register"]>; client: ( - arg?: { + clientOptions?: { ipcRenderer?: IpcRendererEventEmittersCache; - options?: Lib.Model.CallOptions; + options?: PM.Omit>, "onEventResolver">; }, - ) => ReturnType["caller"]>; -} = (...createServiceArgs) => { - const baseService: Readonly> - = Lib.createService<(typeof createServiceArgs[0])["apiDefinition"], ACA>(...createServiceArgs); - - const clientOnEventResolver: Lib.Model.ClientOnEventResolver = (...[/* event */, payload]) => { - return {payload}; - }; + ) => ReturnType["caller"]>; +} { + const baseService = Lib.createService(createServiceArg); return { register(actions, options) { @@ -58,36 +54,44 @@ export const createIpcMainApiService: >( return em; })() ); - const onEventResolver: Lib.Model.ProviderOnEventResolver<[IpcMessageEvent, ...PM.Any[]]> = ({sender}, payload) => { - return { - payload, - emitter: { - emit: (...args) => { - if (!sender.isDestroyed()) { - return sender.send(...args); - } - if (logger) { - logger.warn(`[${PM.MODULE_NAME}]`, `Object has been destroyed: "sender"`); - } - }, - }, - }; - }; return baseService.register( - actions as PM.Any, // TODO get rid of typecasting + actions, cachedEm, { - onEventResolver, + onEventResolver: (...[{sender}, payload]) => { + return { + payload, + emitter: { + emit: (...args) => { + if (!sender.isDestroyed()) { + return sender.send(...args); + } + if (logger) { + logger.warn(`[${PM.MODULE_NAME}]`, `Object has been destroyed: "sender"`); + } + }, + }, + }; + }, logger, }, ); }, - client(arg) { - const { + client( + { ipcRenderer = requireIpcRenderer(), - options = {timeoutMs: PM.ONE_SECOND_MS * 3}, - } = arg || {} as Exclude; + options: { + timeoutMs = PM.BASE_TIMEOUT_MS, + logger: _logger_ = createServiceArg.logger || PM.LOG_STUB, // tslint:disable-line:variable-name + ...callOptions + } = {}, + }: { + ipcRenderer?: IpcRendererEventEmittersCache; + options?: PM.Omit>, "onEventResolver">; + } = {}, + ) { + const logger = curryOwnFunctionMembers(_logger_, `[${PM.MODULE_NAME}]`, "createIpcMainApiService() [client]"); const cachedEm: Lib.Model.CombinedEventEmitter = ( ipcRendererEventEmittersCache.get(ipcRenderer) || @@ -105,9 +109,19 @@ export const createIpcMainApiService: >( ); return baseService.caller( - {emitter: cachedEm, listener: cachedEm}, - {onEventResolver: clientOnEventResolver, ...options}, + { + emitter: cachedEm, + listener: cachedEm, + }, + { + ...callOptions, + timeoutMs, + logger, + onEventResolver: (...[/* event */, payload]) => { + return {payload}; + }, + }, ); }, }; -}; +} diff --git a/src/lib/private/model.ts b/src/lib/private/model.ts index 5a06307..c0341d1 100644 --- a/src/lib/private/model.ts +++ b/src/lib/private/model.ts @@ -12,10 +12,14 @@ export type Unpacked = T extends Observable ? U3 : T; +export type Omit = Pick>; + export const MODULE_NAME = "electron-rpc-api"; export const ONE_SECOND_MS = 1000; +export const BASE_TIMEOUT_MS = ONE_SECOND_MS * 3; + export const EMPTY_FN: Lib.Model.LoggerFn = () => {}; // tslint:disable-line:no-empty export const LOG_STUB: Readonly = { diff --git a/src/lib/webview-api-service.ts b/src/lib/webview-api-service.ts index 429d5c1..8457fee 100644 --- a/src/lib/webview-api-service.ts +++ b/src/lib/webview-api-service.ts @@ -6,6 +6,9 @@ import * as PM from "./private/model"; import {curryOwnFunctionMembers} from "./private/util"; import {requireIpcRenderer} from "./private/electron-require"; +// TODO infer as PM.Arguments<(PM.Arguments)[1]> (listener is currently defined by Electron as a raw function) +type ACA2 = [IpcMessageEvent, ...PM.Any[]]; // used by "pubsub-to-rpc-api" like Lib.Model.ActionContext + type RegisterApiIpcRenderer = Pick; const ipcRendererEventEmittersCache = new WeakMap(); @@ -13,37 +16,33 @@ const webViewTagEventEmittersCache = new WeakMap = ({args: [payload]}) => { - // first argument of the IpcMessageEvent.args is the needed payload - return {payload}; -}; - -export const createWebViewApiService: >( - createServiceInput: Lib.Model.CreateServiceInput, -) => { + +export function createWebViewApiService>( + createServiceArg: Lib.Model.CreateServiceInput, +): { register: ( - actions: PM.Arguments["register"]>[0], - options?: { - ipcRenderer?: RegisterApiIpcRenderer; - logger?: Lib.Model.Logger; - }, - ) => ReturnType["register"]>; + actions: PM.Arguments["register"]>[0], + options?: Lib.Model.CreateServiceRegisterOptions & { ipcRenderer?: RegisterApiIpcRenderer; }, + ) => ReturnType["register"]>; client: ( webView: WebviewTag, - arg?: { options?: Lib.Model.CallOptions }, - ) => ReturnType["caller"]>; -} = (createServiceInput) => { - const clientLogger = createServiceInput.logger - ? curryOwnFunctionMembers(createServiceInput.logger, `[${PM.MODULE_NAME}]`, "createWebViewApiService()", "client()") - : PM.LOG_STUB; - const baseService: Readonly> = Lib.createService(createServiceInput); + params?: { options?: Partial> }, + ) => ReturnType["caller"]>; +} { + const baseService = Lib.createService(createServiceArg); + const clientIpcMessageOnEventResolver: Lib.Model.ClientOnEventResolver = (ipcMessageEvent) => { + const [payload] = ipcMessageEvent.args; + return {payload}; + }; return { - register(actions, options) { - const { - ipcRenderer = requireIpcRenderer(), + register( + actions, + { logger, - } = options || {} as Exclude; + ipcRenderer = requireIpcRenderer(), + }: Lib.Model.CreateServiceRegisterOptions & { ipcRenderer?: RegisterApiIpcRenderer; } = {}, + ) { const cachedEm: Lib.Model.CombinedEventEmitter = ( ipcRendererEventEmittersCache.get(ipcRenderer) || @@ -74,19 +73,30 @@ export const createWebViewApiService: >( }, ); }, - client(webView, params) { - const {options} = params || {} as Exclude; + client( + webView, + { + options: { + timeoutMs = PM.BASE_TIMEOUT_MS, + logger: _logger_ = createServiceArg.logger || PM.LOG_STUB, // tslint:disable-line:variable-name + ...callOptions + } = {}, + }: { + options?: Partial>; + } = {}, + ) { + const logger = curryOwnFunctionMembers(_logger_, `[${PM.MODULE_NAME}]`, "createWebViewApiService() [client]"); const cachedEm: Lib.Model.CombinedEventEmitter = ( webViewTagEventEmittersCache.get(webView) || (() => { - type IpcMessageListener = (ipcMessageEvent: IpcMessageEvent) => void; - type IpcMessageListenerBundleProp = Readonly<{ uid: ReturnType; created: Date; originalEventName: PM.Arguments[0]; - actual: [typeof clientIpcMessageEventName, IpcMessageListener]; + actualListener: [ + typeof clientIpcMessageEventName, + (...args: PM.Arguments) => void]; }>; interface IpcMessageListenerBundlePropAware { @@ -99,7 +109,7 @@ export const createWebViewApiService: >( uid: uuid.v4(), created: new Date(), originalEventName, - actual: [ + actualListener: [ clientIpcMessageEventName, (ipcMessageEvent) => { if (ipcMessageEvent.channel !== originalEventName) { @@ -110,7 +120,7 @@ export const createWebViewApiService: >( ], }; - webView.addEventListener(...ipcMessageListenerBundle.actual); + webView.addEventListener(...ipcMessageListenerBundle.actualListener); // TODO consider keeping actual listeners in a WeakMap // link actual listener to the original listener, so we then could remove the actual listener @@ -118,7 +128,14 @@ export const createWebViewApiService: >( (originalListener as IpcMessageListenerBundlePropAware)[clientIpcMessageListenerBundleProp] = ipcMessageListenerBundle; - clientLogger.debug(`em: addEventListener(), uid=${ipcMessageListenerBundle.uid}`); + logger.debug( + `[cache] add event listener`, + JSON.stringify({ + originalEventName, + uid: ipcMessageListenerBundle.uid, + created: ipcMessageListenerBundle.created, + }), + ); return em; }, @@ -134,24 +151,28 @@ export const createWebViewApiService: >( return em; } + const logData = JSON.stringify({ + originalEventName, + uid: ipcMessageListenerBundle.uid, + created: ipcMessageListenerBundle.created, + }); + if (webView.isConnected) { - webView.removeEventListener(...ipcMessageListenerBundle.actual); + webView.removeEventListener(...ipcMessageListenerBundle.actualListener); + logger.warn(`[cache] remove event listener`, logData); } else { - clientLogger.warn(`em: skip "webView.removeEventListener()" since "webView" is not attached to the DOM`); + logger.warn(`[cache] remove event listener: skipped since "webView" is not attached to the DOM`, logData); } delete ipcMessageListenerBundlePropAware[clientIpcMessageListenerBundleProp]; - const {uid, created} = ipcMessageListenerBundle; - clientLogger.debug(`em: removeEventListener(), uid=${uid}, created=${created}`); - return em; }, emit: (...args) => { if (webView.isConnected) { webView.send(...args); } else { - clientLogger.warn(`em: skip "webView.send()" since "webView" is not attached to the DOM`); + logger.warn(`"webView.send()" call skipped since "webView" is not attached to the DOM`); } }, }; @@ -164,8 +185,11 @@ export const createWebViewApiService: >( return baseService.caller( {emitter: cachedEm, listener: cachedEm}, - options, + { + ...callOptions, + timeoutMs, + }, ); }, }; -}; +} diff --git a/test/api.spec.ts b/test/api.spec.ts index 7ed567e..bfb08b8 100644 --- a/test/api.spec.ts +++ b/test/api.spec.ts @@ -1,8 +1,8 @@ import * as sinon from "sinon"; import anyTest, {TestInterface} from "ava"; +import * as PM from "lib/private/model"; import {ActionType, ScanService} from "lib"; -import {Any, Unpacked} from "lib/private/model"; import {rewiremock} from "./rewiremock"; const test = anyTest as TestInterface; @@ -19,7 +19,7 @@ test("createIpcMainApiService", async (t) => { const {createIpcMainApiService: createIpcMainApiServiceMocked} = await rewiremock.around( () => import("lib"), (mock) => { - mock(() => import("lib/private/electron-require")).with(t.context.mocks["lib/private/electron-require"] as Any); + mock(() => import("lib/private/electron-require")).with(t.context.mocks["lib/private/electron-require"] as PM.Any); mock(() => import("pubsub-to-rpc-api")).with(t.context.mocks["pubsub-to-rpc-api"]); }, ); @@ -38,14 +38,14 @@ test("createIpcMainApiService", async (t) => { t.true(registerSpy.notCalled); apiService.register(actions); t.is(1, registerSpy.callCount); - t.true((registerSpy.calledWith as Any)(actions)); + t.true((registerSpy.calledWith as PM.Any)(actions)); t.true(ipcMain.on.bind.calledWithExactly(ipcMain)); t.true(ipcMain.emit.bind.calledWithExactly(ipcMain)); t.true(ipcMain.removeListener.bind.calledWithExactly(ipcMain)); // register with custom ipcMain const {requireIpcMain: ipcMainOption} = (await buildMocks())._mockData["lib/private/electron-require"]; - apiService.register(actions, {ipcMain: ipcMainOption} as Any); + apiService.register(actions, {ipcMain: ipcMainOption} as PM.Any); t.is(2, registerSpy.callCount); t.true(ipcMainOption.on.bind.calledWithExactly(ipcMainOption)); t.true(ipcMainOption.emit.bind.calledWithExactly(ipcMainOption)); @@ -63,7 +63,7 @@ test("createIpcMainApiService", async (t) => { // client with custom ipcRenderer const {requireIpcRenderer: ipcRendererOption} = (await buildMocks())._mockData["lib/private/electron-require"]; - apiService.client({ipcRenderer: ipcRendererOption} as Any); + apiService.client({ipcRenderer: ipcRendererOption} as PM.Any); t.is(2, callerSpy.callCount); t.true(ipcRendererOption.removeListener.bind.calledWithExactly(ipcRendererOption)); t.true(ipcRendererOption.send.bind.calledWithExactly(ipcRendererOption)); @@ -73,7 +73,7 @@ test.serial("createWebViewApiService", async (t) => { const {createWebViewApiService: createWebViewApiServiceMocked} = await rewiremock.around( () => import("lib"), (mock) => { - mock(() => import("lib/private/electron-require")).with(t.context.mocks["lib/private/electron-require"] as Any); + mock(() => import("lib/private/electron-require")).with(t.context.mocks["lib/private/electron-require"] as PM.Any); mock(() => import("pubsub-to-rpc-api")).with(t.context.mocks["pubsub-to-rpc-api"]); }, ); @@ -96,14 +96,14 @@ test.serial("createWebViewApiService", async (t) => { t.true(ipcRenderer.sendToHost.bind.notCalled); apiService.register(actions); t.is(1, registerSpy.callCount); - t.true((registerSpy.calledWithExactly as Any)(actions)); + t.true((registerSpy.calledWithExactly as PM.Any)(actions)); t.true(ipcRenderer.on.bind.calledWithExactly(ipcRenderer)); t.true(ipcRenderer.removeListener.bind.calledWithExactly(ipcRenderer)); t.true(ipcRenderer.sendToHost.bind.calledWithExactly(ipcRenderer)); // register with custom ipcRenderer const {requireIpcRenderer: ipcRendererOption} = (await buildMocks())._mockData["lib/private/electron-require"]; - apiService.register(actions, {ipcRenderer: ipcRendererOption} as Any); + apiService.register(actions, {ipcRenderer: ipcRendererOption} as PM.Any); t.is(2, registerSpy.callCount); t.true(ipcRendererOption.removeListener.bind.calledWithExactly(ipcRendererOption)); @@ -112,13 +112,13 @@ test.serial("createWebViewApiService", async (t) => { // client t.true(callerSpy.notCalled); - apiService.client(webView as Any); + apiService.client(webView as PM.Any); t.is(1, callerSpy.callCount); // t.true(webView.send.bind.calledWithExactly(webView)); }); interface TestContext { - mocks: Unpacked>; + mocks: PM.Unpacked>; } function emptyFn() {} // tslint:disable-line:no-empty diff --git a/tslint-extending/tslint-consistent-codestyle.json b/tslint-extending/tslint-consistent-codestyle.json new file mode 100644 index 0000000..8641771 --- /dev/null +++ b/tslint-extending/tslint-consistent-codestyle.json @@ -0,0 +1,16 @@ +{ + "rulesDirectory": [ + "./../node_modules/tslint-consistent-codestyle/rules" + ], + "rules": { + "early-exit": [ + true + ], + "no-collapsible-if": [ + true + ], + "no-unnecessary-else": [ + true + ] + } +} diff --git a/tslint-extending/tslint-eslint-rules.json b/tslint-extending/tslint-eslint-rules.json new file mode 100644 index 0000000..c505dfc --- /dev/null +++ b/tslint-extending/tslint-eslint-rules.json @@ -0,0 +1,11 @@ +{ + "rulesDirectory": [ + "./../node_modules/tslint-eslint-rules/dist/rules" + ], + "rules": { + "object-curly-spacing": [ + true, + "never" + ] + } +} diff --git a/tslint.json b/tslint.json index d95d912..f2b31df 100644 --- a/tslint.json +++ b/tslint.json @@ -1,5 +1,9 @@ { - "extends": "./node_modules/tslint/lib/configs/recommended", + "extends": [ + "./node_modules/tslint/lib/configs/recommended", + "./tslint-extending/tslint-eslint-rules.json", + "./tslint-extending/tslint-consistent-codestyle.json" + ], "rules": { "max-line-length": [ true, diff --git a/yarn.lock b/yarn.lock index f9b835e..18eeba5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -337,6 +337,25 @@ resolved "https://registry.yarnpkg.com/@email-securely-app/import-sort-style/-/import-sort-style-0.1.0.tgz#cc5d3b6da7d18d363367396d8f667b304bff3cae" integrity sha512-ukbwbJJIadsLGA/DI05vq6p/ckK0uHwCkn+Vs/pk45OSXNqPKSdhDr/Qats0J9MrYZkk500qkI1TH3r/FTpe0Q== +"@fimbul/bifrost@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@fimbul/bifrost/-/bifrost-0.17.0.tgz#f0383ba7e40992e3193dc87e2ddfde2ad62a9cf4" + integrity sha512-gVTkJAOef5HtN6LPmrtt5fAUmBywwlgmObsU3FBhPoNeXPLaIl2zywXkJEtvvVLQnaFmtff3x+wIj5lHRCDE3Q== + dependencies: + "@fimbul/ymir" "^0.17.0" + get-caller-file "^2.0.0" + tslib "^1.8.1" + tsutils "^3.5.0" + +"@fimbul/ymir@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@fimbul/ymir/-/ymir-0.17.0.tgz#4f28389b9f804d1cd202e11983af1743488b7815" + integrity sha512-xMXM9KTXRLHLVS6dnX1JhHNEkmWHcAVCQ/4+DA1KKwC/AFnGHzu/7QfQttEPgw3xplT+ILf9e3i64jrFwB3JtA== + dependencies: + inversify "^5.0.0" + reflect-metadata "^0.1.12" + tslib "^1.8.1" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -416,9 +435,9 @@ integrity sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA== "@types/node@^10.12.18": - version "10.14.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.6.tgz#9cbfcb62c50947217f4d88d4d274cc40c22625a9" - integrity sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg== + version "10.14.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.7.tgz#1854f0a9aa8d2cd6818d607b3d091346c6730362" + integrity sha512-on4MmIDgHXiuJDELPk1NFaKVUxxCFr37tm8E9yN6rAiF5Pzp/9bBfBHkoexqRiY+hk/Z04EJU9kKEb59YqJ82A== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1666,6 +1685,14 @@ dir-glob@^2.0.0, dir-glob@^2.2.2: dependencies: path-type "^3.0.0" +doctrine@0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" + integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= + dependencies: + esutils "^1.1.6" + isarray "0.0.1" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -1928,6 +1955,11 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= +esutils@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" + integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= + esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -2066,9 +2098,9 @@ fast-diff@^1.1.2: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^2.2.6: - version "2.2.6" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295" - integrity sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w== + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" "@nodelib/fs.stat" "^1.1.2" @@ -2285,6 +2317,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-own-enumerable-property-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" @@ -2773,6 +2810,11 @@ install-peers@^1.0.2: dependencies: executioner "^2.0.1" +inversify@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/inversify/-/inversify-5.0.1.tgz#500d709b1434896ce5a0d58915c4a4210e34fb6e" + integrity sha512-Ieh06s48WnEYGcqHepdsJUIJUXpwH5o5vodAX+DK2JA/gjy4EbEcQZxw+uFfzysmKjiLXGYwNG3qDZsKVMcINQ== + invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -4490,10 +4532,10 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" -pubsub-to-rpc-api@^5.1.0-beta3: - version "5.1.0-beta3" - resolved "https://registry.yarnpkg.com/pubsub-to-rpc-api/-/pubsub-to-rpc-api-5.1.0-beta3.tgz#06d70ef5c0d9f96a653c6ddd65ef0b163d10d2c8" - integrity sha512-w+fLyTWERgjYHjqFapyzbSLf1DwCfKuDMHFk7V7+eQibbICTLxh+Q8JOE9TeiVdp7BcRtK59jvd4fk6e16lbaw== +pubsub-to-rpc-api@^5.1.0-beta4: + version "5.1.0-beta4" + resolved "https://registry.yarnpkg.com/pubsub-to-rpc-api/-/pubsub-to-rpc-api-5.1.0-beta4.tgz#0b48d2e7342f50f59e9da41ba986e67b6db8dafd" + integrity sha512-8U60CdToAivwm/6y6cvJqBoUqUw0IgiGnv5JnlMjg1y6LR3i0ndupo9w8TCD0i8E+A31ll5fqp37xG/Ltt1Png== dependencies: deserialize-error "^0.0.3" jsan "^3.1.13" @@ -4661,6 +4703,11 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" +reflect-metadata@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + regenerate-unicode-properties@^8.0.2: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -5587,11 +5634,34 @@ tsconfig-paths@^3.8.0: minimist "^1.2.0" strip-bom "^3.0.0" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.2, tslib@^1.9.3: +tslib@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" + integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== + +tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.2, tslib@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== +tslint-consistent-codestyle@^1.15.1: + version "1.15.1" + resolved "https://registry.yarnpkg.com/tslint-consistent-codestyle/-/tslint-consistent-codestyle-1.15.1.tgz#a0c5cd5a5860d40b659c490d8013c5732e02af8c" + integrity sha512-38Y3Dz4zcABe/PlPAQSGNEWPGVq0OzcIQR7SEU6dNujp/SgvhxhJOhIhI9gY4r0I3/TNtvVQwARWor9O9LPZWg== + dependencies: + "@fimbul/bifrost" "^0.17.0" + tslib "^1.7.1" + tsutils "^2.29.0" + +tslint-eslint-rules@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5" + integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== + dependencies: + doctrine "0.7.2" + tslib "1.9.0" + tsutils "^3.0.0" + tslint-rules-bunch@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/tslint-rules-bunch/-/tslint-rules-bunch-0.0.7.tgz#da832e237b3626ce04dc3e726463829e4b37004f" @@ -5627,7 +5697,7 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" -tsutils@^3.5.2: +tsutils@^3.0.0, tsutils@^3.5.0, tsutils@^3.5.2: version "3.10.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.10.0.tgz#6f1c95c94606e098592b0dff06590cf9659227d6" integrity sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q== @@ -5678,7 +5748,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.2.4, typescript@^3.3.3333: +typescript@^3.2.4, typescript@^3.4.5: version "3.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99" integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==