From 6410b1b18419b179cc49487caa9bdbc1743b6aaa Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 15:00:25 +0100 Subject: [PATCH 01/17] feat: generate binary paths for each arch and check them all for executables --- package.json | 2 + pnpm-lock.yaml | 709 ++++++++++++++++++++++++++++++++++++++++++--- src/application.ts | 52 +++- src/types.ts | 5 + 4 files changed, 723 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index bd51e81e1..2734a1c3e 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,7 @@ "read-package-up": "^11.0.0" }, "devDependencies": { + "@electron/packager": "^18.3.2", "@eslint/js": "^9.0.0", "@testing-library/webdriverio": "^3.2.1", "@types/debug": "^4.1.10", @@ -115,6 +116,7 @@ "@wdio/cli": "^8.27.2", "@wdio/globals": "^8.27.2", "@wdio/types": "^8.27.2", + "builder-util": "25.0.0-alpha.6", "cross-env": "^7.0.3", "electron": "^29.3.1", "eslint": "^8.57.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c357f3b4..58f12c36c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,12 +36,15 @@ importers: specifier: ^11.0.0 version: 11.0.0 devDependencies: + '@electron/packager': + specifier: ^18.3.2 + version: 18.3.2 '@eslint/js': specifier: ^9.0.0 version: 9.2.0 '@testing-library/webdriverio': specifier: ^3.2.1 - version: 3.2.1(webdriverio@8.36.1) + version: 3.2.1(webdriverio@8.36.1(encoding@0.1.13)(typescript@5.4.5)) '@types/debug': specifier: ^4.1.10 version: 4.1.12 @@ -56,22 +59,25 @@ importers: version: 20.12.11 '@typescript-eslint/eslint-plugin': specifier: ^7.0.1 - version: 7.9.0(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.0.1 version: 7.9.0(eslint@8.57.0)(typescript@5.4.5) '@vitest/coverage-v8': specifier: ^1.2.0 - version: 1.6.0(vitest@1.6.0) + version: 1.6.0(vitest@1.6.0(@types/node@20.12.11)(jsdom@24.0.0)) '@wdio/cli': specifier: ^8.27.2 - version: 8.36.1(typescript@5.4.5) + version: 8.36.1(encoding@0.1.13)(typescript@5.4.5) '@wdio/globals': specifier: ^8.27.2 - version: 8.36.1(typescript@5.4.5) + version: 8.36.1(encoding@0.1.13)(typescript@5.4.5) '@wdio/types': specifier: ^8.27.2 version: 8.36.1 + builder-util: + specifier: 25.0.0-alpha.6 + version: 25.0.0-alpha.6 cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -86,7 +92,7 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-vitest: specifier: ^0.5.3 - version: 0.5.4(@typescript-eslint/eslint-plugin@7.9.0)(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0) + version: 0.5.4(@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.11)(jsdom@24.0.0)) eslint-plugin-wdio: specifier: ^8.20.0 version: 8.24.12 @@ -95,7 +101,7 @@ importers: version: 29.7.0 expect-webdriverio: specifier: ^4.11.7 - version: 4.13.0(typescript@5.4.5) + version: 4.13.0(encoding@0.1.13)(typescript@5.4.5) globals: specifier: ^15.0.0 version: 15.2.0 @@ -131,10 +137,13 @@ importers: version: 1.6.0(@types/node@20.12.11)(jsdom@24.0.0) webdriverio: specifier: ^8.27.2 - version: 8.36.1(typescript@5.4.5) + version: 8.36.1(encoding@0.1.13)(typescript@5.4.5) packages: + 7zip-bin@5.2.0: + resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -171,10 +180,42 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@electron/asar@3.2.10': + resolution: {integrity: sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==} + engines: {node: '>=10.12.0'} + hasBin: true + '@electron/get@2.0.3': resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} engines: {node: '>=12'} + '@electron/get@3.0.0': + resolution: {integrity: sha512-hLv4BYFiyrNRI+U0Mm2X7RxCCdJLkDUn8GCEp9QJzbLpZRko+UaLlCjOMkj6TEtirNLPyBA7y1SeGfnpOB21aQ==} + engines: {node: '>=14'} + + '@electron/notarize@2.3.2': + resolution: {integrity: sha512-zfayxCe19euNwRycCty1C7lF7snk9YwfRpB5M8GLr1a4ICH63znxaPNAubrMvj0yDvVozqfgsdYpXVUnpWBDpg==} + engines: {node: '>= 10.0.0'} + + '@electron/osx-sign@1.3.0': + resolution: {integrity: sha512-TEXhxlYSDRr9JWK5nWdOv5MtuUdaZ412uxIIEQ0hLt80o0HYWtQJBlW5QmrQDMtebzATaOjKG9UfCzLyA90zWQ==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/packager@18.3.2': + resolution: {integrity: sha512-orjylavppgIh24qkNpWm2B/LQUpCS/YLOoKoU+eMK/hJgIhShLDsusPIQzgUGVwNCichu8/zPAGfdQZXHG0gtw==} + engines: {node: '>= 16.13.0'} + hasBin: true + + '@electron/universal@2.0.1': + resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} + engines: {node: '>=16.4'} + + '@electron/windows-sign@1.1.2': + resolution: {integrity: sha512-eXEiZjDtxW3QORCWfRUarANPRTlH9B6At4jqBZJ0NzokSGutXQUVLPA6WmGpIhDW6w2yCMdHW1EJd1HrXtU5sg==} + engines: {node: '>=14.14'} + hasBin: true + '@esbuild/aix-ppc64@0.20.2': resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} engines: {node: '>=12'} @@ -395,6 +436,10 @@ packages: resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} engines: {node: '>= 0.4'} + '@malept/cross-spawn-promise@2.0.0': + resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} + engines: {node: '>= 12.13.0'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -611,6 +656,10 @@ packages: peerDependencies: webdriverio: '*' + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -823,6 +872,10 @@ packages: resolution: {integrity: sha512-xmgPHU11/o9n2FeRmDFkPRC0okiwA1i2xOcR2c3aSpuk99XkAm9RaMn/6u9LFaqsCpgaVxazcYEGSceO7U4hZA==} engines: {node: ^16.13 || >=18} + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -841,6 +894,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + agent-base@7.1.1: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} @@ -887,6 +944,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + app-builder-bin@4.0.0: + resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} + archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} @@ -940,6 +1000,14 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + author-regex@1.0.0: + resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} + engines: {node: '>=0.8'} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -986,9 +1054,15 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bluebird-lst@1.0.9: + resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==} + bluebird@3.4.7: resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} @@ -1013,12 +1087,22 @@ packages: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + builder-util-runtime@9.2.5-alpha.2: + resolution: {integrity: sha512-/Ln2ddejGj2HNMJ+X66mKHRcOvmRzUO/dSi8t4hSV64J7IA+DE+mqDb+zogIE2gin7p7YwcGiOkKny4nwPPPXg==} + engines: {node: '>=12.0.0'} + + builder-util@25.0.0-alpha.6: + resolution: {integrity: sha512-ghT1XcP6JI926AArlBcPHRRKYCsVWbT/ywnXPwW5X1ani2jmnddPpnwm92xRvCPWGBmeXd2diF69FV5rBJxhRQ==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -1149,10 +1233,18 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} + compare-versions@6.1.0: resolution: {integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==} @@ -1198,6 +1290,9 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} + cross-dirname@0.1.0: + resolution: {integrity: sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==} + cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -1248,6 +1343,14 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -1342,6 +1445,9 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1397,6 +1503,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -1408,6 +1517,9 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1621,6 +1733,14 @@ packages: filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filename-reserved-regex@2.0.0: + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} + + filenamify@4.3.0: + resolution: {integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==} + engines: {node: '>=8'} + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -1629,6 +1749,10 @@ packages: resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} engines: {node: '>=18'} + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -1648,6 +1772,10 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flora-colossus@2.0.0: + resolution: {integrity: sha512-dz4HxH6pOvbUzZpZ/yXhafjbR2I8cenK5xL0KtBFb7U2ADsR+OwXifnxZjij/pZWF775uSCMzWVd+jDik2H2IA==} + engines: {node: '>= 12'} + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -1667,6 +1795,10 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + fs-extra@11.2.0: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} @@ -1675,6 +1807,10 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1701,6 +1837,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + galactus@1.0.0: + resolution: {integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==} + engines: {node: '>= 12'} + geckodriver@4.4.0: resolution: {integrity: sha512-Y/Np2VkAhBkJoFAIY3pKH3rICUcR5rH9VD6EHwh0CqUIh6Opzr/NFwfcQenYfbRT/659R15/35LpA1s6h9wPPg==} engines: {node: ^16.13 || >=18 || >=20} @@ -1721,6 +1861,10 @@ packages: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} + get-package-info@1.0.0: + resolution: {integrity: sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw==} + engines: {node: '>= 4.0'} + get-port@7.1.0: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} @@ -1852,6 +1996,9 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -1866,6 +2013,10 @@ packages: http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -1878,6 +2029,10 @@ packages: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + https-proxy-agent@7.0.4: resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} engines: {node: '>= 14'} @@ -2156,6 +2311,10 @@ packages: isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2265,6 +2424,10 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + junk@3.1.0: + resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} + engines: {node: '>=8'} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2304,6 +2467,10 @@ packages: resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} engines: {node: '>=18.0.0'} + load-json-file@2.0.0: + resolution: {integrity: sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==} + engines: {node: '>=4'} + local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} @@ -2311,6 +2478,10 @@ packages: locate-app@2.4.13: resolution: {integrity: sha512-hnhghqQKQYQP7v9Ls3af03RE23xtJduXmKRnIgZgB1lsqMhdUFV008ZltWHt7b3HxvWF1vhz4MkCfEKPoCjTIg==} + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -2337,6 +2508,9 @@ packages: lodash.flattendeep@4.4.0: resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} @@ -2510,6 +2684,9 @@ packages: moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -2554,6 +2731,9 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@6.0.1: resolution: {integrity: sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2639,6 +2819,10 @@ packages: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -2651,6 +2835,10 @@ packages: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} engines: {node: '>=18'} + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -2659,6 +2847,10 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + pac-proxy-agent@7.0.1: resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} engines: {node: '>= 14'} @@ -2675,6 +2867,14 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-author@2.0.0: + resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} + engines: {node: '>=0.10.0'} + + parse-json@2.2.0: + resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} + engines: {node: '>=0.10.0'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -2696,6 +2896,10 @@ packages: parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2723,6 +2927,10 @@ packages: resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} engines: {node: '>=16 || 14 >=14.17'} + path-type@2.0.0: + resolution: {integrity: sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==} + engines: {node: '>=4'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -2737,6 +2945,10 @@ packages: pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + pe-library@1.0.1: + resolution: {integrity: sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg==} + engines: {node: '>=14', npm: '>=7'} + pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -2752,9 +2964,17 @@ packages: engines: {node: '>=0.10'} hasBin: true + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + pkg-types@1.1.0: resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -2763,6 +2983,11 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postject@1.0.0-alpha.6: + resolution: {integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==} + engines: {node: '>=14.0.0'} + hasBin: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2796,6 +3021,10 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + promise.allsettled@1.0.7: resolution: {integrity: sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA==} engines: {node: '>= 0.4'} @@ -2882,6 +3111,14 @@ packages: resolution: {integrity: sha512-jgmKiS//w2Zs+YbX039CorlkOp8FIVbSAN8r8GJHDsGlmNPXo+VeHkqAwCiQVTTx5/LwLZTcEw59z3DvcLbr0g==} engines: {node: '>=16'} + read-pkg-up@2.0.0: + resolution: {integrity: sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==} + engines: {node: '>=4'} + + read-pkg@2.0.0: + resolution: {integrity: sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==} + engines: {node: '>=4'} + read-pkg@8.1.0: resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} engines: {node: '>=16'} @@ -2943,6 +3180,10 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resedit@2.0.2: + resolution: {integrity: sha512-UKTnq602iVe+W5SyRAQx/WdWMnlDiONfXBLFg/ur4QE4EQQ8eP7Jgm5mNXdK12kKawk1vvXPja2iXKqZiGDW6Q==} + engines: {node: '>=14', npm: '>=7'} + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -2972,6 +3213,10 @@ packages: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -3045,6 +3290,9 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -3060,6 +3308,10 @@ packages: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} engines: {node: '>=12'} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3152,6 +3404,9 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -3185,6 +3440,10 @@ packages: stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stat-mode@1.0.0: + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} + std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} @@ -3240,6 +3499,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -3259,6 +3522,10 @@ packages: strip-literal@2.1.0: resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} + strip-outer@1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} + sumchecker@3.0.1: resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} @@ -3291,6 +3558,9 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + temp-file@3.4.0: + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -3339,6 +3609,10 @@ packages: resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} engines: {node: '>=18'} + trim-repeated@1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} + ts-api-utils@1.3.0: resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} @@ -3678,6 +3952,10 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -3721,6 +3999,8 @@ packages: snapshots: + 7zip-bin@5.2.0: {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -3758,6 +4038,12 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@electron/asar@3.2.10': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.2 + '@electron/get@2.0.3': dependencies: debug: 4.3.4 @@ -3772,6 +4058,85 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/get@3.0.0': + dependencies: + debug: 4.3.4 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + optionalDependencies: + global-agent: 3.0.0 + transitivePeerDependencies: + - supports-color + + '@electron/notarize@2.3.2': + dependencies: + debug: 4.3.4 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/osx-sign@1.3.0': + dependencies: + compare-version: 0.1.2 + debug: 4.3.4 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/packager@18.3.2': + dependencies: + '@electron/asar': 3.2.10 + '@electron/get': 3.0.0 + '@electron/notarize': 2.3.2 + '@electron/osx-sign': 1.3.0 + '@electron/universal': 2.0.1 + '@electron/windows-sign': 1.1.2 + debug: 4.3.4 + extract-zip: 2.0.1 + filenamify: 4.3.0 + fs-extra: 11.2.0 + galactus: 1.0.0 + get-package-info: 1.0.0 + junk: 3.1.0 + parse-author: 2.0.0 + plist: 3.1.0 + resedit: 2.0.2 + resolve: 1.22.8 + semver: 7.6.0 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - supports-color + + '@electron/universal@2.0.1': + dependencies: + '@electron/asar': 3.2.10 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.3.4 + dir-compare: 4.2.0 + fs-extra: 11.2.0 + minimatch: 9.0.4 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/windows-sign@1.1.2': + dependencies: + cross-dirname: 0.1.0 + debug: 4.3.4 + fs-extra: 11.2.0 + minimist: 1.2.8 + postject: 1.0.0-alpha.6 + transitivePeerDependencies: + - supports-color + '@esbuild/aix-ppc64@0.20.2': optional: true @@ -3931,6 +4296,10 @@ snapshots: dependencies: call-bind: 1.0.7 + '@malept/cross-spawn-promise@2.0.0': + dependencies: + cross-spawn: 7.0.3 + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4040,9 +4409,10 @@ snapshots: progress: 2.0.3 proxy-agent: 6.3.0 tar-fs: 3.0.4 - typescript: 5.4.5 unbzip2-stream: 1.4.3 yargs: 17.7.1 + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -4133,12 +4503,14 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/webdriverio@3.2.1(webdriverio@8.36.1)': + '@testing-library/webdriverio@3.2.1(webdriverio@8.36.1(encoding@0.1.13)(typescript@5.4.5))': dependencies: '@babel/runtime': 7.24.5 '@testing-library/dom': 8.20.1 simmerjs: 0.5.6 - webdriverio: 8.36.1(typescript@5.4.5) + webdriverio: 8.36.1(encoding@0.1.13)(typescript@5.4.5) + + '@tootallnate/once@2.0.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -4212,7 +4584,7 @@ snapshots: '@types/node': 20.12.11 optional: true - '@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5) @@ -4225,6 +4597,7 @@ snapshots: ignore: 5.3.1 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -4237,6 +4610,7 @@ snapshots: '@typescript-eslint/visitor-keys': 7.9.0 debug: 4.3.4 eslint: 8.57.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -4258,6 +4632,7 @@ snapshots: debug: 4.3.4 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -4276,6 +4651,7 @@ snapshots: minimatch: 9.0.4 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -4290,6 +4666,7 @@ snapshots: minimatch: 9.0.4 semver: 7.6.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -4331,7 +4708,7 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitest/coverage-v8@1.6.0(vitest@1.6.0)': + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.12.11)(jsdom@24.0.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -4379,12 +4756,12 @@ snapshots: loupe: 2.3.7 pretty-format: 29.7.0 - '@wdio/cli@8.36.1(typescript@5.4.5)': + '@wdio/cli@8.36.1(encoding@0.1.13)(typescript@5.4.5)': dependencies: '@types/node': 20.12.11 '@vitest/snapshot': 1.6.0 '@wdio/config': 8.36.1 - '@wdio/globals': 8.36.1(typescript@5.4.5) + '@wdio/globals': 8.36.1(encoding@0.1.13)(typescript@5.4.5) '@wdio/logger': 8.28.0 '@wdio/protocols': 8.32.0 '@wdio/types': 8.36.1 @@ -4403,7 +4780,7 @@ snapshots: lodash.union: 4.6.0 read-pkg-up: 10.0.0 recursive-readdir: 2.2.3 - webdriverio: 8.36.1(typescript@5.4.5) + webdriverio: 8.36.1(encoding@0.1.13)(typescript@5.4.5) yargs: 17.7.2 transitivePeerDependencies: - bufferutil @@ -4425,10 +4802,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@wdio/globals@8.36.1(typescript@5.4.5)': + '@wdio/globals@8.36.1(encoding@0.1.13)(typescript@5.4.5)': optionalDependencies: - expect-webdriverio: 4.13.0(typescript@5.4.5) - webdriverio: 8.36.1(typescript@5.4.5) + expect-webdriverio: 4.13.0(encoding@0.1.13)(typescript@5.4.5) + webdriverio: 8.36.1(encoding@0.1.13)(typescript@5.4.5) transitivePeerDependencies: - bufferutil - devtools @@ -4472,6 +4849,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@xmldom/xmldom@0.8.10': {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -4484,6 +4863,12 @@ snapshots: acorn@8.11.3: {} + agent-base@6.0.2: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + agent-base@7.1.1: dependencies: debug: 4.3.4 @@ -4528,6 +4913,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + app-builder-bin@4.0.0: {} + archiver-utils@5.0.2: dependencies: glob: 10.3.12 @@ -4601,6 +4988,10 @@ snapshots: asynckit@0.4.0: {} + at-least-node@1.0.0: {} + + author-regex@1.0.0: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 @@ -4648,8 +5039,14 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bluebird-lst@1.0.9: + dependencies: + bluebird: 3.7.2 + bluebird@3.4.7: {} + bluebird@3.7.2: {} + boolean@3.2.0: optional: true @@ -4681,6 +5078,8 @@ snapshots: buffer-crc32@1.0.0: {} + buffer-from@1.1.2: {} + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -4691,6 +5090,34 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builder-util-runtime@9.2.5-alpha.2: + dependencies: + debug: 4.3.4 + sax: 1.3.0 + transitivePeerDependencies: + - supports-color + + builder-util@25.0.0-alpha.6: + dependencies: + 7zip-bin: 5.2.0 + '@types/debug': 4.1.12 + app-builder-bin: 4.0.0 + bluebird-lst: 1.0.9 + builder-util-runtime: 9.2.5-alpha.2 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + fs-extra: 10.1.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-ci: 3.0.1 + js-yaml: 4.1.0 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + transitivePeerDependencies: + - supports-color + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -4832,8 +5259,12 @@ snapshots: commander@11.1.0: {} + commander@5.1.0: {} + commander@9.5.0: {} + compare-version@0.1.2: {} + compare-versions@6.1.0: {} compress-commons@6.0.2: @@ -4871,6 +5302,7 @@ snapshots: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 + optionalDependencies: typescript: 5.4.5 crc-32@1.2.2: {} @@ -4880,13 +5312,15 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.5.2 + cross-dirname@0.1.0: {} + cross-env@7.0.3: dependencies: cross-spawn: 7.0.3 - cross-fetch@4.0.0: + cross-fetch@4.0.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -4935,6 +5369,10 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 + debug@2.6.9: + dependencies: + ms: 2.0.0 + debug@4.3.4: dependencies: ms: 2.1.2 @@ -5026,6 +5464,11 @@ snapshots: diff-sequences@29.6.3: {} + dir-compare@4.2.0: + dependencies: + minimatch: 3.1.2 + p-limit: 3.1.0 + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -5082,6 +5525,11 @@ snapshots: emoji-regex@9.2.2: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -5090,6 +5538,8 @@ snapshots: env-paths@2.2.1: {} + err-code@2.0.3: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -5232,11 +5682,12 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.9.0)(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0): + eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.11)(jsdom@24.0.0)): dependencies: - '@typescript-eslint/eslint-plugin': 7.9.0(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.9.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) vitest: 1.6.0(@types/node@20.12.11)(jsdom@24.0.0) transitivePeerDependencies: - supports-color @@ -5348,16 +5799,16 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - expect-webdriverio@4.13.0(typescript@5.4.5): + expect-webdriverio@4.13.0(encoding@0.1.13)(typescript@5.4.5): dependencies: '@vitest/snapshot': 1.6.0 expect: 29.7.0 jest-matcher-utils: 29.7.0 lodash.isequal: 4.5.0 optionalDependencies: - '@wdio/globals': 8.36.1(typescript@5.4.5) + '@wdio/globals': 8.36.1(encoding@0.1.13)(typescript@5.4.5) '@wdio/logger': 8.28.0 - webdriverio: 8.36.1(typescript@5.4.5) + webdriverio: 8.36.1(encoding@0.1.13)(typescript@5.4.5) transitivePeerDependencies: - bufferutil - devtools @@ -5436,12 +5887,24 @@ snapshots: dependencies: minimatch: 5.1.6 + filename-reserved-regex@2.0.0: {} + + filenamify@4.3.0: + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 find-up-simple@1.0.0: {} + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -5465,6 +5928,13 @@ snapshots: flatted@3.3.1: {} + flora-colossus@2.0.0: + dependencies: + debug: 4.3.4 + fs-extra: 10.1.0 + transitivePeerDependencies: + - supports-color + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -5486,6 +5956,12 @@ snapshots: dependencies: fetch-blob: 3.2.0 + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 @@ -5498,6 +5974,13 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -5523,6 +6006,14 @@ snapshots: functions-have-names@1.2.3: {} + galactus@1.0.0: + dependencies: + debug: 4.3.4 + flora-colossus: 2.0.0 + fs-extra: 10.1.0 + transitivePeerDependencies: + - supports-color + geckodriver@4.4.0: dependencies: '@wdio/logger': 8.28.0 @@ -5550,6 +6041,15 @@ snapshots: has-symbols: 1.0.3 hasown: 2.0.2 + get-package-info@1.0.0: + dependencies: + bluebird: 3.7.2 + debug: 2.6.9 + lodash.get: 4.4.2 + read-pkg-up: 2.0.0 + transitivePeerDependencies: + - supports-color + get-port@7.1.0: {} get-stream@5.2.0: @@ -5728,6 +6228,8 @@ snapshots: dependencies: function-bind: 1.1.2 + hosted-git-info@2.8.9: {} + hosted-git-info@7.0.2: dependencies: lru-cache: 10.2.2 @@ -5740,6 +6242,14 @@ snapshots: http-cache-semantics@4.1.1: {} + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 @@ -5757,6 +6267,13 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.4: dependencies: agent-base: 7.1.1 @@ -6007,6 +6524,8 @@ snapshots: isarray@2.0.5: {} + isbinaryfile@4.0.10: {} + isexe@2.0.0: {} isexe@3.1.1: {} @@ -6157,6 +6676,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + junk@3.1.0: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -6206,6 +6727,13 @@ snapshots: rfdc: 1.3.1 wrap-ansi: 9.0.0 + load-json-file@2.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 2.2.0 + pify: 2.3.0 + strip-bom: 3.0.0 + local-pkg@0.5.0: dependencies: mlly: 1.7.0 @@ -6217,6 +6745,11 @@ snapshots: type-fest: 2.13.0 userhome: 1.0.0 + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -6237,6 +6770,8 @@ snapshots: lodash.flattendeep@4.4.0: {} + lodash.get@4.4.2: {} + lodash.isequal@4.5.0: {} lodash.isfunction@3.0.9: {} @@ -6380,6 +6915,8 @@ snapshots: moment@2.30.1: {} + ms@2.0.0: {} + ms@2.1.2: {} mute-stream@1.0.0: {} @@ -6404,9 +6941,11 @@ snapshots: node-domexception@1.0.0: {} - node-fetch@2.7.0: + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 node-fetch@3.3.2: dependencies: @@ -6414,6 +6953,13 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + normalize-package-data@2.5.0: + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + normalize-package-data@6.0.1: dependencies: hosted-git-info: 7.0.2 @@ -6516,6 +7062,10 @@ snapshots: p-cancelable@3.0.0: {} + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -6528,6 +7078,10 @@ snapshots: dependencies: yocto-queue: 1.0.0 + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -6536,6 +7090,8 @@ snapshots: dependencies: p-limit: 4.0.0 + p-try@1.0.0: {} + pac-proxy-agent@7.0.1: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 @@ -6565,6 +7121,14 @@ snapshots: dependencies: callsites: 3.1.0 + parse-author@2.0.0: + dependencies: + author-regex: 1.0.0 + + parse-json@2.2.0: + dependencies: + error-ex: 1.3.2 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.24.2 @@ -6598,6 +7162,8 @@ snapshots: dependencies: entities: 4.5.0 + path-exists@3.0.0: {} + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -6615,6 +7181,10 @@ snapshots: lru-cache: 10.2.2 minipass: 7.1.0 + path-type@2.0.0: + dependencies: + pify: 2.3.0 + path-type@4.0.0: {} path-type@5.0.0: {} @@ -6623,6 +7193,8 @@ snapshots: pathval@1.1.1: {} + pe-library@1.0.1: {} + pend@1.2.0: {} picocolors@1.0.0: {} @@ -6631,12 +7203,20 @@ snapshots: pidtree@0.6.0: {} + pify@2.3.0: {} + pkg-types@1.1.0: dependencies: confbox: 0.1.7 mlly: 1.7.0 pathe: 1.1.2 + plist@3.1.0: + dependencies: + '@xmldom/xmldom': 0.8.10 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + possible-typed-array-names@1.0.0: {} postcss@8.4.38: @@ -6645,6 +7225,10 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.2.0 + postject@1.0.0-alpha.6: + dependencies: + commander: 9.5.0 + prelude-ls@1.2.1: {} prettier@2.8.1: {} @@ -6669,6 +7253,11 @@ snapshots: progress@2.0.3: {} + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + promise.allsettled@1.0.7: dependencies: array.prototype.map: 1.0.7 @@ -6738,15 +7327,16 @@ snapshots: dependencies: escape-goat: 4.0.0 - puppeteer-core@20.9.0(typescript@5.4.5): + puppeteer-core@20.9.0(encoding@0.1.13)(typescript@5.4.5): dependencies: '@puppeteer/browsers': 1.4.6(typescript@5.4.5) chromium-bidi: 0.4.16(devtools-protocol@0.0.1147663) - cross-fetch: 4.0.0 + cross-fetch: 4.0.0(encoding@0.1.13) debug: 4.3.4 devtools-protocol: 0.0.1147663 - typescript: 5.4.5 ws: 8.13.0 + optionalDependencies: + typescript: 5.4.5 transitivePeerDependencies: - bufferutil - encoding @@ -6786,6 +7376,17 @@ snapshots: read-pkg: 8.1.0 type-fest: 3.13.1 + read-pkg-up@2.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 2.0.0 + + read-pkg@2.0.0: + dependencies: + load-json-file: 2.0.0 + normalize-package-data: 2.5.0 + path-type: 2.0.0 + read-pkg@8.1.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -6895,6 +7496,10 @@ snapshots: requires-port@1.0.0: {} + resedit@2.0.2: + dependencies: + pe-library: 1.0.1 + resolve-alpn@1.2.1: {} resolve-from@4.0.0: {} @@ -6927,6 +7532,8 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + retry@0.12.0: {} + retry@0.13.1: {} reusify@1.0.4: {} @@ -7014,6 +7621,8 @@ snapshots: safer-buffer@2.1.2: {} + sax@1.3.0: {} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -7027,6 +7636,8 @@ snapshots: semver-regex@4.0.5: {} + semver@5.7.2: {} + semver@6.3.1: {} semver@7.6.0: @@ -7127,8 +7738,12 @@ snapshots: source-map-js@1.2.0: {} - source-map@0.6.1: - optional: true + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} spacetrim@0.11.23: {} @@ -7156,6 +7771,8 @@ snapshots: stackback@0.0.2: {} + stat-mode@1.0.0: {} + std-env@3.7.0: {} stdin-discarder@0.2.2: {} @@ -7226,6 +7843,8 @@ snapshots: dependencies: ansi-regex: 6.0.1 + strip-bom@3.0.0: {} + strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} @@ -7238,6 +7857,10 @@ snapshots: dependencies: js-tokens: 9.0.0 + strip-outer@1.0.1: + dependencies: + escape-string-regexp: 1.0.5 + sumchecker@3.0.1: dependencies: debug: 4.3.4 @@ -7281,6 +7904,11 @@ snapshots: fast-fifo: 1.3.2 streamx: 2.16.1 + temp-file@3.4.0: + dependencies: + async-exit-hook: 2.0.1 + fs-extra: 10.1.0 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -7324,6 +7952,10 @@ snapshots: dependencies: punycode: 2.3.1 + trim-repeated@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + ts-api-utils@1.3.0(typescript@5.4.5): dependencies: typescript: 5.4.5 @@ -7483,16 +8115,15 @@ snapshots: vite@5.2.11(@types/node@20.12.11): dependencies: - '@types/node': 20.12.11 esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.17.2 optionalDependencies: + '@types/node': 20.12.11 fsevents: 2.3.3 vitest@1.6.0(@types/node@20.12.11)(jsdom@24.0.0): dependencies: - '@types/node': 20.12.11 '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 '@vitest/snapshot': 1.6.0 @@ -7502,7 +8133,6 @@ snapshots: chai: 4.4.1 debug: 4.3.4 execa: 8.0.1 - jsdom: 24.0.0 local-pkg: 0.5.0 magic-string: 0.30.10 pathe: 1.1.2 @@ -7514,6 +8144,9 @@ snapshots: vite: 5.2.11(@types/node@20.12.11) vite-node: 1.6.0(@types/node@20.12.11) why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 20.12.11 + jsdom: 24.0.0 transitivePeerDependencies: - less - lightningcss @@ -7559,7 +8192,7 @@ snapshots: - supports-color - utf-8-validate - webdriverio@8.36.1(typescript@5.4.5): + webdriverio@8.36.1(encoding@0.1.13)(typescript@5.4.5): dependencies: '@types/node': 20.12.11 '@wdio/config': 8.36.1 @@ -7579,7 +8212,7 @@ snapshots: lodash.clonedeep: 4.5.0 lodash.zip: 4.2.0 minimatch: 9.0.4 - puppeteer-core: 20.9.0(typescript@5.4.5) + puppeteer-core: 20.9.0(encoding@0.1.13)(typescript@5.4.5) query-selector-shadow-dom: 1.0.1 resq: 1.11.0 rgb2hex: 0.2.5 @@ -7701,6 +8334,8 @@ snapshots: xml-name-validator@5.0.0: {} + xmlbuilder@15.1.1: {} + xmlchars@2.2.0: {} y18n@5.0.8: {} diff --git a/src/application.ts b/src/application.ts index 577094804..c1142f71d 100644 --- a/src/application.ts +++ b/src/application.ts @@ -5,7 +5,13 @@ import type { NormalizedReadResult } from 'read-package-up'; import log from './log.js'; import { APP_NAME_DETECTION_ERROR, BUILD_TOOL_DETECTION_ERROR, MULTIPLE_BUILD_TOOLS_ERROR } from './constants.js'; -import type { AppBuildInfo, ElectronBuilderConfig, ElectronForgeConfig } from './types.js'; +import type { + AppBuildInfo, + ElectronBuilderArch, + ElectronBuilderConfig, + ElectronForgeConfig, + ForgeArch, +} from './types.js'; const SupportedPlatform = { darwin: 'darwin', @@ -26,19 +32,26 @@ export async function getBinaryPath(packageJsonPath: string, appBuildInfo: AppBu throw new Error(`Unsupported platform: ${p.platform}`); } - let outDir; + let outDirs: string[]; if (appBuildInfo.isForge) { + // TODO: use allOfficialArchsForPlatformAndVersion + const archs: ForgeArch[] = ['arm64', 'armv7l', 'ia32', 'mips64el', 'universal', 'x64']; // Electron Forge always bundles into an `out` directory - see comment in getBuildToolConfig below - outDir = path.join(path.dirname(packageJsonPath), 'out', `${appBuildInfo.appName}-${p.platform}-${p.arch}`); + outDirs = archs.map((arch) => + path.join(path.dirname(packageJsonPath), 'out', `${appBuildInfo.appName}-${p.platform}-${arch}`), + ); } else { + const archs: ElectronBuilderArch[] = ['arm64', 'armv7l', 'ia32', 'universal', 'x64']; const builderOutDirName = (appBuildInfo.config as ElectronBuilderConfig)?.directories?.output || 'dist'; - const builderOutDirMap = { - darwin: path.join(builderOutDirName, p.arch === 'arm64' ? 'mac-arm64' : 'mac'), + const builderOutDirMap = (arch: ElectronBuilderArch) => ({ + darwin: path.join(builderOutDirName, arch === 'x64' ? 'mac' : `mac-${p.arch}`), linux: path.join(builderOutDirName, 'linux-unpacked'), win32: path.join(builderOutDirName, 'win-unpacked'), - }; - outDir = path.join(path.dirname(packageJsonPath), builderOutDirMap[p.platform as keyof typeof SupportedPlatform]); + }); + outDirs = archs.map((arch) => + path.join(path.dirname(packageJsonPath), builderOutDirMap(arch)[p.platform as keyof typeof SupportedPlatform]), + ); } const binaryPathMap = { @@ -48,7 +61,30 @@ export async function getBinaryPath(packageJsonPath: string, appBuildInfo: AppBu }; const electronBinaryPath = binaryPathMap[p.platform as keyof typeof SupportedPlatform]; - return path.join(outDir, electronBinaryPath); + const binaryPaths = outDirs.map((outDir) => path.join(outDir, electronBinaryPath)); + + // for each path, check if it exists and is executable + const executableBinaryPaths = binaryPaths.filter(async (binaryPath) => { + try { + await fs.access(binaryPath, fs.constants.X_OK); + return true; + } catch (e) { + log.debug(e); + return false; + } + }); + + // no binary case + if (executableBinaryPaths.length === 0) { + throw new Error(`No executable binary found, checked [${binaryPaths.join(', ')}]`); + } + + // multiple binaries case + if (executableBinaryPaths.length > 1) { + log.debug(`Detected multiple app binaries, using the first one: ${executableBinaryPaths[0]}`); + } + + return executableBinaryPaths[0]; } /** diff --git a/src/types.ts b/src/types.ts index 2df49a5e0..359939b91 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,7 @@ import type * as Electron from 'electron'; import type { Mock } from '@vitest/spy'; +import type { OfficialArch } from '@electron/packager'; +import type { ArchType } from 'builder-util'; export type Fn = (...args: unknown[]) => unknown; export type AsyncFn = (...args: unknown[]) => Promise; @@ -175,6 +177,9 @@ export type ElectronForgeConfig = { packagerConfig: { name: string }; }; +export type ElectronBuilderArch = ArchType; +export type ForgeArch = OfficialArch; + export type AppBuildInfo = { appName: string; config: string | ElectronForgeConfig | ElectronBuilderConfig; From b199604fd96b1220410724c4fd07ea4ce54b6c09 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 15:24:19 +0100 Subject: [PATCH 02/17] refactor: use `@electron/packager` func to determine Forge archs --- src/application.ts | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/application.ts b/src/application.ts index c1142f71d..2dd4cecf4 100644 --- a/src/application.ts +++ b/src/application.ts @@ -12,6 +12,7 @@ import type { ElectronForgeConfig, ForgeArch, } from './types.js'; +import { allOfficialArchsForPlatformAndVersion } from '@electron/packager'; const SupportedPlatform = { darwin: 'darwin', @@ -27,7 +28,12 @@ const SupportedPlatform = { * @param p process object (used for testing purposes) * @returns path to the Electron app binary */ -export async function getBinaryPath(packageJsonPath: string, appBuildInfo: AppBuildInfo, p = process) { +export async function getBinaryPath( + packageJsonPath: string, + appBuildInfo: AppBuildInfo, + electronVersion?: string, + p = process, +) { if (!Object.values(SupportedPlatform).includes(p.platform)) { throw new Error(`Unsupported platform: ${p.platform}`); } @@ -35,13 +41,18 @@ export async function getBinaryPath(packageJsonPath: string, appBuildInfo: AppBu let outDirs: string[]; if (appBuildInfo.isForge) { - // TODO: use allOfficialArchsForPlatformAndVersion - const archs: ForgeArch[] = ['arm64', 'armv7l', 'ia32', 'mips64el', 'universal', 'x64']; - // Electron Forge always bundles into an `out` directory - see comment in getBuildToolConfig below + // Forge case + const archs = allOfficialArchsForPlatformAndVersion( + p.platform as keyof typeof SupportedPlatform, + electronVersion, + ) as ForgeArch[]; + + // Electron Forge always bundles into an `out` directory - see comment in getAppBuildInfo below outDirs = archs.map((arch) => path.join(path.dirname(packageJsonPath), 'out', `${appBuildInfo.appName}-${p.platform}-${arch}`), ); } else { + // electron-builder case const archs: ElectronBuilderArch[] = ['arm64', 'armv7l', 'ia32', 'universal', 'x64']; const builderOutDirName = (appBuildInfo.config as ElectronBuilderConfig)?.directories?.output || 'dist'; const builderOutDirMap = (arch: ElectronBuilderArch) => ({ @@ -49,6 +60,7 @@ export async function getBinaryPath(packageJsonPath: string, appBuildInfo: AppBu linux: path.join(builderOutDirName, 'linux-unpacked'), win32: path.join(builderOutDirName, 'win-unpacked'), }); + outDirs = archs.map((arch) => path.join(path.dirname(packageJsonPath), builderOutDirMap(arch)[p.platform as keyof typeof SupportedPlatform]), ); From c6bf00223ec61e30cd88d4db643ba7ad62ad0a33 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 15:50:24 +0100 Subject: [PATCH 03/17] feat: support custom forge output dirs --- package.json | 1 + pnpm-lock.yaml | 539 +++++++++++++++++++++++++++++++++++++++++++++ src/application.ts | 22 +- src/types.ts | 8 +- 4 files changed, 549 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 2734a1c3e..de6b93b1d 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,7 @@ "read-package-up": "^11.0.0" }, "devDependencies": { + "@electron-forge/shared-types": "^7.4.0", "@electron/packager": "^18.3.2", "@eslint/js": "^9.0.0", "@testing-library/webdriverio": "^3.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58f12c36c..d694eaf7f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,6 +36,9 @@ importers: specifier: ^11.0.0 version: 11.0.0 devDependencies: + '@electron-forge/shared-types': + specifier: ^7.4.0 + version: 7.4.0 '@electron/packager': specifier: ^18.3.2 version: 18.3.2 @@ -180,6 +183,14 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@electron-forge/shared-types@7.4.0': + resolution: {integrity: sha512-5Ehy6enUjBaU08odf9u9TOhmOVXlqobzMvKUixtkdAWgV1XZAUJmn+p21xhj0IkO92MQiXMGv66w9pDNjRT8uQ==} + engines: {node: '>= 16.4.0'} + + '@electron-forge/tracer@7.4.0': + resolution: {integrity: sha512-F4jbnDn4yIZjmky1FZ6rgBKTM05AZQQfHkyJW2hdS4pDKJjdKAqWytoZKDi1/S6Cr6tN+DD0TFGD3V0i6HPHYQ==} + engines: {node: '>= 14.17.5'} + '@electron/asar@3.2.10': resolution: {integrity: sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==} engines: {node: '>=10.12.0'} @@ -207,6 +218,11 @@ packages: engines: {node: '>= 16.13.0'} hasBin: true + '@electron/rebuild@3.6.0': + resolution: {integrity: sha512-zF4x3QupRU3uNGaP5X1wjpmcjfw1H87kyqZ00Tc3HvriV+4gmOGuvQjGNkrJuXdsApssdNyVwLsy+TaeTGGcVw==} + engines: {node: '>=12.13.0'} + hasBin: true + '@electron/universal@2.0.1': resolution: {integrity: sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==} engines: {node: '>=16.4'} @@ -376,6 +392,9 @@ packages: resolution: {integrity: sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} @@ -452,6 +471,15 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@npmcli/fs@2.1.2': + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + '@npmcli/move-file@2.0.1': + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + '@octokit/auth-token@4.0.0': resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} engines: {node: '>= 18'} @@ -876,6 +904,9 @@ packages: resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} engines: {node: '>=10.0.0'} + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -902,6 +933,14 @@ packages: resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -912,6 +951,10 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + ansi-escapes@6.2.1: resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} engines: {node: '>=14.16'} @@ -947,6 +990,9 @@ packages: app-builder-bin@4.0.0: resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==} + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} @@ -955,6 +1001,10 @@ packages: resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1111,6 +1161,10 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} + cacache@16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} @@ -1165,6 +1219,14 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chrome-trace-event@1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + chromium-bidi@0.4.16: resolution: {integrity: sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==} peerDependencies: @@ -1174,6 +1236,10 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} @@ -1190,6 +1256,10 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -1222,6 +1292,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -1265,6 +1339,9 @@ packages: resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} engines: {node: '>=12'} + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + convert-hrtime@5.0.0: resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} engines: {node: '>=12'} @@ -1425,6 +1502,9 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} @@ -1432,6 +1512,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} @@ -1681,6 +1765,9 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + exponential-backoff@3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -1811,6 +1898,10 @@ packages: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1841,6 +1932,10 @@ packages: resolution: {integrity: sha512-R1fam6D4CyKQGNlvJne4dkNF+PvUUl7TAJInvTGa9fti9qAv95quQz29GXapA4d8Ec266mJJxFVh82M4GIIGDQ==} engines: {node: '>= 12'} + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + geckodriver@4.4.0: resolution: {integrity: sha512-Y/Np2VkAhBkJoFAIY3pKH3rICUcR5rH9VD6EHwh0CqUIh6Opzr/NFwfcQenYfbRT/659R15/35LpA1s6h9wPPg==} engines: {node: ^16.13 || >=18 || >=20} @@ -1911,6 +2006,10 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + global-agent@3.0.0: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} engines: {node: '>=10.0'} @@ -1992,6 +2091,9 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2045,6 +2147,9 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + husky@9.0.11: resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} engines: {node: '>=18'} @@ -2080,10 +2185,17 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + index-to-position@0.1.2: resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} engines: {node: '>=18'} + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -2205,6 +2317,9 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -2463,6 +2578,10 @@ packages: engines: {node: '>=18.12.0'} hasBin: true + listr2@7.0.2: + resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} + engines: {node: '>=16.0.0'} + listr2@8.0.1: resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} engines: {node: '>=18.0.0'} @@ -2555,6 +2674,10 @@ packages: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} + log-update@5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} @@ -2607,6 +2730,10 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} + make-fetch-happen@10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + matcher@3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} @@ -2664,10 +2791,42 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + minipass@7.1.0: resolution: {integrity: sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + mitt@3.0.0: resolution: {integrity: sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==} @@ -2678,6 +2837,11 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + mlly@1.7.0: resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} @@ -2702,6 +2866,10 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + netmask@2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} @@ -2714,6 +2882,13 @@ packages: resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==} engines: {node: '>= 10.13'} + node-abi@3.62.0: + resolution: {integrity: sha512-CPMcGa+y33xuL1E0TcNIu4YyaZCxnnvkVaEXrsosR3FxN+fV8xvb7Mzpb7IgKler10qeMkE6+Dp8qJhpzdq35g==} + engines: {node: '>=10'} + + node-api-version@0.2.0: + resolution: {integrity: sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==} + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} @@ -2731,6 +2906,16 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-gyp@9.4.1: + resolution: {integrity: sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -2758,6 +2943,10 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + nwsapi@2.2.9: resolution: {integrity: sha512-2f3F0SEEer8bBu0dsNCFF50N0cTThV1nWFYcEYFZttdW0lDAoybv9cQoK7X7/68Z89S7FoRrVjP1LPX4XRf9vg==} @@ -2847,6 +3036,10 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + p-try@1.0.0: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} @@ -3021,6 +3214,14 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + promise-retry@2.0.1: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} @@ -3103,6 +3304,10 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true + read-package-up@11.0.0: resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} engines: {node: '>=18'} @@ -3329,6 +3534,9 @@ packages: resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} engines: {node: '>=10'} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -3392,6 +3600,10 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + socks-proxy-agent@7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + socks-proxy-agent@8.0.3: resolution: {integrity: sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==} engines: {node: '>= 14'} @@ -3433,6 +3645,10 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + ssri@9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -3558,6 +3774,10 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + temp-file@3.4.0: resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} @@ -3702,6 +3922,14 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} + unique-filename@2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + unique-slug@3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -3883,6 +4111,9 @@ packages: engines: {node: '>=8'} hasBin: true + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + widest-line@4.0.1: resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} engines: {node: '>=12'} @@ -4038,6 +4269,20 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@electron-forge/shared-types@7.4.0': + dependencies: + '@electron-forge/tracer': 7.4.0 + '@electron/packager': 18.3.2 + '@electron/rebuild': 3.6.0 + listr2: 7.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + '@electron-forge/tracer@7.4.0': + dependencies: + chrome-trace-event: 1.0.3 + '@electron/asar@3.2.10': dependencies: commander: 5.1.0 @@ -4115,6 +4360,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@electron/rebuild@3.6.0': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + chalk: 4.1.2 + debug: 4.3.4 + detect-libc: 2.0.3 + fs-extra: 10.1.0 + got: 11.8.6 + node-abi: 3.62.0 + node-api-version: 0.2.0 + node-gyp: 9.4.1 + ora: 5.4.1 + read-binary-file-arch: 1.0.6 + semver: 7.6.0 + tar: 6.2.1 + yargs: 17.7.2 + transitivePeerDependencies: + - bluebird + - supports-color + '@electron/universal@2.0.1': dependencies: '@electron/asar': 3.2.10 @@ -4231,6 +4496,8 @@ snapshots: '@eslint/js@9.2.0': {} + '@gar/promisify@1.1.3': {} + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -4312,6 +4579,16 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@npmcli/fs@2.1.2': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.6.0 + + '@npmcli/move-file@2.0.1': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + '@octokit/auth-token@4.0.0': {} '@octokit/core@5.2.0': @@ -4851,6 +5128,8 @@ snapshots: '@xmldom/xmldom@0.8.10': {} + abbrev@1.1.1: {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -4875,6 +5154,15 @@ snapshots: transitivePeerDependencies: - supports-color + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -4890,6 +5178,10 @@ snapshots: dependencies: type-fest: 0.21.3 + ansi-escapes@5.0.0: + dependencies: + type-fest: 1.4.0 + ansi-escapes@6.2.1: {} ansi-regex@5.0.1: {} @@ -4915,6 +5207,8 @@ snapshots: app-builder-bin@4.0.0: {} + aproba@2.0.0: {} + archiver-utils@5.0.2: dependencies: glob: 10.3.12 @@ -4935,6 +5229,11 @@ snapshots: tar-stream: 3.1.7 zip-stream: 6.0.1 + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + argparse@2.0.1: {} aria-query@5.1.3: @@ -5124,6 +5423,29 @@ snapshots: cac@6.7.14: {} + cacache@16.1.3: + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 9.0.1 + tar: 6.2.1 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird + cacheable-lookup@5.0.4: {} cacheable-lookup@7.0.0: {} @@ -5201,6 +5523,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@2.0.0: {} + + chrome-trace-event@1.0.3: {} + chromium-bidi@0.4.16(devtools-protocol@0.0.1147663): dependencies: devtools-protocol: 0.0.1147663 @@ -5208,6 +5534,8 @@ snapshots: ci-info@3.9.0: {} + clean-stack@2.2.0: {} + cli-boxes@3.0.0: {} cli-cursor@3.1.0: @@ -5220,6 +5548,11 @@ snapshots: cli-spinners@2.9.2: {} + cli-truncate@3.1.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 @@ -5251,6 +5584,8 @@ snapshots: color-name@1.1.4: {} + color-support@1.1.3: {} + colorette@2.0.20: {} combined-stream@1.0.8: @@ -5292,6 +5627,8 @@ snapshots: write-file-atomic: 3.0.3 xdg-basedir: 5.1.0 + console-control-strings@1.1.0: {} + convert-hrtime@5.0.0: {} core-util-is@1.0.3: {} @@ -5451,10 +5788,14 @@ snapshots: delayed-stream@1.0.0: {} + delegates@1.0.0: {} + deprecation@2.3.1: {} dequal@2.0.3: {} + detect-libc@2.0.3: {} + detect-node@2.1.0: optional: true @@ -5825,6 +6166,8 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 + exponential-backoff@3.1.1: {} + external-editor@3.1.0: dependencies: chardet: 0.7.0 @@ -5981,6 +6324,10 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.1 + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -6014,6 +6361,17 @@ snapshots: transitivePeerDependencies: - supports-color + gauge@4.0.4: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + geckodriver@4.4.0: dependencies: '@wdio/logger': 8.28.0 @@ -6109,6 +6467,14 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + global-agent@3.0.0: dependencies: boolean: 3.2.0 @@ -6224,6 +6590,8 @@ snapshots: dependencies: has-symbols: 1.0.3 + has-unicode@2.0.1: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -6285,6 +6653,10 @@ snapshots: human-signals@5.0.0: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.2 + husky@9.0.11: {} iconv-lite@0.4.24: @@ -6310,8 +6682,12 @@ snapshots: imurmurhash@0.1.4: {} + indent-string@4.0.0: {} + index-to-position@0.1.2: {} + infer-owner@1.0.4: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -6446,6 +6822,8 @@ snapshots: is-interactive@2.0.0: {} + is-lambda@1.0.1: {} + is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -6718,6 +7096,15 @@ snapshots: transitivePeerDependencies: - supports-color + listr2@7.0.2: + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.3.1 + wrap-ansi: 8.1.0 + listr2@8.0.1: dependencies: cli-truncate: 4.0.0 @@ -6806,6 +7193,14 @@ snapshots: chalk: 5.3.0 is-unicode-supported: 1.3.0 + log-update@5.0.1: + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.0 + wrap-ansi: 8.1.0 + log-update@6.0.0: dependencies: ansi-escapes: 6.2.1 @@ -6852,6 +7247,28 @@ snapshots: dependencies: semver: 7.6.0 + make-fetch-happen@10.2.1: + dependencies: + agentkeepalive: 4.5.0 + cacache: 16.1.3 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 @@ -6896,8 +7313,43 @@ snapshots: minimist@1.2.8: {} + minipass-collect@1.0.2: + dependencies: + minipass: 3.3.6 + + minipass-fetch@2.1.2: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + minipass@7.1.0: {} + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + mitt@3.0.0: {} mkdirp-classic@0.5.3: {} @@ -6906,6 +7358,8 @@ snapshots: dependencies: minimist: 1.2.8 + mkdirp@1.0.4: {} + mlly@1.7.0: dependencies: acorn: 8.11.3 @@ -6925,6 +7379,8 @@ snapshots: natural-compare@1.4.0: {} + negotiator@0.6.3: {} + netmask@2.0.2: {} new-github-release-url@2.0.0: @@ -6939,6 +7395,14 @@ snapshots: transitivePeerDependencies: - supports-color + node-abi@3.62.0: + dependencies: + semver: 7.6.0 + + node-api-version@0.2.0: + dependencies: + semver: 7.6.0 + node-domexception@1.0.0: {} node-fetch@2.7.0(encoding@0.1.13): @@ -6953,6 +7417,27 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + node-gyp@9.4.1: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 10.2.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.6.0 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 @@ -6981,6 +7466,13 @@ snapshots: dependencies: path-key: 4.0.0 + npmlog@6.0.2: + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + nwsapi@2.2.9: {} object-inspect@1.13.1: {} @@ -7090,6 +7582,10 @@ snapshots: dependencies: p-limit: 4.0.0 + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + p-try@1.0.0: {} pac-proxy-agent@7.0.1: @@ -7253,6 +7749,8 @@ snapshots: progress@2.0.3: {} + promise-inflight@1.0.1: {} + promise-retry@2.0.1: dependencies: err-code: 2.0.3 @@ -7364,6 +7862,12 @@ snapshots: react-is@18.3.1: {} + read-binary-file-arch@1.0.6: + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + read-package-up@11.0.0: dependencies: find-up-simple: 1.0.0 @@ -7653,6 +8157,8 @@ snapshots: type-fest: 0.13.1 optional: true + set-blocking@2.0.0: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -7723,6 +8229,14 @@ snapshots: smart-buffer@4.2.0: {} + socks-proxy-agent@7.0.0: + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + socks-proxy-agent@8.0.3: dependencies: agent-base: 7.1.1 @@ -7765,6 +8279,10 @@ snapshots: sprintf-js@1.1.3: {} + ssri@9.0.1: + dependencies: + minipass: 3.3.6 + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -7904,6 +8422,15 @@ snapshots: fast-fifo: 1.3.2 streamx: 2.16.1 + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + temp-file@3.4.0: dependencies: async-exit-hook: 2.0.1 @@ -8041,6 +8568,14 @@ snapshots: unicorn-magic@0.1.0: {} + unique-filename@2.0.1: + dependencies: + unique-slug: 3.0.0 + + unique-slug@3.0.0: + dependencies: + imurmurhash: 0.1.4 + unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 @@ -8281,6 +8816,10 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + widest-line@4.0.1: dependencies: string-width: 5.1.2 diff --git a/src/application.ts b/src/application.ts index 2dd4cecf4..0dad0ae68 100644 --- a/src/application.ts +++ b/src/application.ts @@ -5,13 +5,7 @@ import type { NormalizedReadResult } from 'read-package-up'; import log from './log.js'; import { APP_NAME_DETECTION_ERROR, BUILD_TOOL_DETECTION_ERROR, MULTIPLE_BUILD_TOOLS_ERROR } from './constants.js'; -import type { - AppBuildInfo, - ElectronBuilderArch, - ElectronBuilderConfig, - ElectronForgeConfig, - ForgeArch, -} from './types.js'; +import type { AppBuildInfo, ElectronBuilderArch, ElectronBuilderConfig, ForgeConfig, ForgeArch } from './types.js'; import { allOfficialArchsForPlatformAndVersion } from '@electron/packager'; const SupportedPlatform = { @@ -47,9 +41,9 @@ export async function getBinaryPath( electronVersion, ) as ForgeArch[]; - // Electron Forge always bundles into an `out` directory - see comment in getAppBuildInfo below + const forgeOutDir = (appBuildInfo.config as ForgeConfig)?.outDir || 'out'; outDirs = archs.map((arch) => - path.join(path.dirname(packageJsonPath), 'out', `${appBuildInfo.appName}-${p.platform}-${arch}`), + path.join(path.dirname(packageJsonPath), forgeOutDir, `${appBuildInfo.appName}-${p.platform}-${arch}`), ); } else { // electron-builder case @@ -107,22 +101,18 @@ export async function getBinaryPath( export async function getAppBuildInfo(pkg: NormalizedReadResult): Promise { const forgeDependencyDetected = Object.keys(pkg.packageJson.devDependencies || {}).includes('@electron-forge/cli'); const builderDependencyDetected = Object.keys(pkg.packageJson.devDependencies || {}).includes('electron-builder'); - - // Forge configuration is not currently used to determine the Electron app binary path - // - when custom output directories are supported in Forge we can use this config value for path determination - // - see https://github.com/electron/forge/pull/2714 const forgePackageJsonConfig = pkg.packageJson.config?.forge; const forgeCustomConfigFile = typeof forgePackageJsonConfig === 'string'; const forgeConfigPath = forgeCustomConfigFile ? forgePackageJsonConfig : 'forge.config.js'; const rootDir = path.dirname(pkg.path); - let forgeConfig = forgePackageJsonConfig as ElectronForgeConfig; + let forgeConfig = forgePackageJsonConfig as ForgeConfig; let builderConfig: ElectronBuilderConfig = pkg.packageJson.build; if (!forgePackageJsonConfig || forgeCustomConfigFile) { // if no config or a linked file, attempt to read Forge JS-based config try { log.debug(`Reading Forge config file: ${forgeConfigPath}...`); - forgeConfig = ((await import(path.join(rootDir, forgeConfigPath))) as { default: ElectronForgeConfig }).default; + forgeConfig = ((await import(path.join(rootDir, forgeConfigPath))) as { default: ForgeConfig }).default; } catch (e) { log.debug(e); } @@ -156,7 +146,7 @@ export async function getAppBuildInfo(pkg: NormalizedReadResult): Promise unknown; @@ -172,17 +173,14 @@ export type ElectronBuilderConfig = { directories?: { output?: string }; }; -export type ElectronForgeConfig = { - buildIdentifier: string; - packagerConfig: { name: string }; -}; +export type ForgeConfig = ElectronForgeConfig; export type ElectronBuilderArch = ArchType; export type ForgeArch = OfficialArch; export type AppBuildInfo = { appName: string; - config: string | ElectronForgeConfig | ElectronBuilderConfig; + config: string | ForgeConfig | ElectronBuilderConfig; isBuilder: boolean; isForge: boolean; }; From bc3291eca47611464b6b3efd5781513b9428fd80 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 16:02:29 +0100 Subject: [PATCH 04/17] fix: debug log for build tool conf --- src/application.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/application.ts b/src/application.ts index 0dad0ae68..23bc71839 100644 --- a/src/application.ts +++ b/src/application.ts @@ -141,7 +141,9 @@ export async function getAppBuildInfo(pkg: NormalizedReadResult): Promise Date: Thu, 16 May 2024 16:05:38 +0100 Subject: [PATCH 05/17] refactor: standardise EB nomenclature --- src/application.ts | 12 ++++++------ src/types.ts | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/application.ts b/src/application.ts index 23bc71839..d61702664 100644 --- a/src/application.ts +++ b/src/application.ts @@ -5,7 +5,7 @@ import type { NormalizedReadResult } from 'read-package-up'; import log from './log.js'; import { APP_NAME_DETECTION_ERROR, BUILD_TOOL_DETECTION_ERROR, MULTIPLE_BUILD_TOOLS_ERROR } from './constants.js'; -import type { AppBuildInfo, ElectronBuilderArch, ElectronBuilderConfig, ForgeConfig, ForgeArch } from './types.js'; +import type { AppBuildInfo, BuilderArch, BuilderConfig, ForgeConfig, ForgeArch } from './types.js'; import { allOfficialArchsForPlatformAndVersion } from '@electron/packager'; const SupportedPlatform = { @@ -47,9 +47,9 @@ export async function getBinaryPath( ); } else { // electron-builder case - const archs: ElectronBuilderArch[] = ['arm64', 'armv7l', 'ia32', 'universal', 'x64']; - const builderOutDirName = (appBuildInfo.config as ElectronBuilderConfig)?.directories?.output || 'dist'; - const builderOutDirMap = (arch: ElectronBuilderArch) => ({ + const archs: BuilderArch[] = ['arm64', 'armv7l', 'ia32', 'universal', 'x64']; + const builderOutDirName = (appBuildInfo.config as BuilderConfig)?.directories?.output || 'dist'; + const builderOutDirMap = (arch: BuilderArch) => ({ darwin: path.join(builderOutDirName, arch === 'x64' ? 'mac' : `mac-${p.arch}`), linux: path.join(builderOutDirName, 'linux-unpacked'), win32: path.join(builderOutDirName, 'win-unpacked'), @@ -106,7 +106,7 @@ export async function getAppBuildInfo(pkg: NormalizedReadResult): Promise Date: Thu, 16 May 2024 16:06:16 +0100 Subject: [PATCH 06/17] fix: pass electronVersion through to `getBinaryPath` --- src/launcher.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/launcher.ts b/src/launcher.ts index a4f990c3b..6c92a2d7f 100644 --- a/src/launcher.ts +++ b/src/launcher.ts @@ -70,7 +70,7 @@ export default class ElectronLaunchService implements Services.ServiceInstance { log.debug('No app binary found'); try { const appBuildInfo = await getAppBuildInfo(pkg); - appBinaryPath = await getBinaryPath(pkg.path, appBuildInfo); + appBinaryPath = await getBinaryPath(pkg.path, appBuildInfo, electronVersion); log.debug(`Detected app binary at ${appBinaryPath}`); const appExists = await fileExists(appBinaryPath as PathLike); From f6c2ad7c3c3d1c0bc2fc2cd93e3544df77e9f588 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 16:22:53 +0100 Subject: [PATCH 07/17] fix: log all app binaries in multiple case --- src/application.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/application.ts b/src/application.ts index d61702664..d2c20db9a 100644 --- a/src/application.ts +++ b/src/application.ts @@ -82,12 +82,12 @@ export async function getBinaryPath( // no binary case if (executableBinaryPaths.length === 0) { - throw new Error(`No executable binary found, checked [${binaryPaths.join(', ')}]`); + throw new Error(`No executable binary found, checked: \n[${binaryPaths.join(', \n')}]`); } // multiple binaries case if (executableBinaryPaths.length > 1) { - log.debug(`Detected multiple app binaries, using the first one: ${executableBinaryPaths[0]}`); + log.debug(`Detected multiple app binaries, using the first one: \n${executableBinaryPaths.join(', \n')}`); } return executableBinaryPaths[0]; @@ -141,9 +141,7 @@ export async function getAppBuildInfo(pkg: NormalizedReadResult): Promise Date: Thu, 16 May 2024 16:48:26 +0100 Subject: [PATCH 08/17] fix: rework async filter --- src/application.ts | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/application.ts b/src/application.ts index d2c20db9a..d4e807fc8 100644 --- a/src/application.ts +++ b/src/application.ts @@ -70,22 +70,27 @@ export async function getBinaryPath( const binaryPaths = outDirs.map((outDir) => path.join(outDir, electronBinaryPath)); // for each path, check if it exists and is executable - const executableBinaryPaths = binaryPaths.filter(async (binaryPath) => { - try { - await fs.access(binaryPath, fs.constants.X_OK); - return true; - } catch (e) { - log.debug(e); - return false; - } - }); - - // no binary case + const binaryPathsAccessResults = await Promise.all( + binaryPaths.map(async (binaryPath) => { + try { + await fs.access(binaryPath, fs.constants.X_OK); + return true; + } catch (e) { + log.debug(e); + return false; + } + }), + ); + + // get the list of executable paths + const executableBinaryPaths = binaryPaths.filter((_binaryPath, index) => binaryPathsAccessResults[index]); + + // no executable binary case if (executableBinaryPaths.length === 0) { throw new Error(`No executable binary found, checked: \n[${binaryPaths.join(', \n')}]`); } - // multiple binaries case + // multiple executable binaries case if (executableBinaryPaths.length > 1) { log.debug(`Detected multiple app binaries, using the first one: \n${executableBinaryPaths.join(', \n')}`); } From 0ff28534c42c5cd065064adc689affa6ee6917c8 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 17:18:55 +0100 Subject: [PATCH 09/17] fix: error handling, remove extra fileExists check --- src/launcher.ts | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/src/launcher.ts b/src/launcher.ts index 6c92a2d7f..cf50f7134 100644 --- a/src/launcher.ts +++ b/src/launcher.ts @@ -1,6 +1,4 @@ -import fs from 'node:fs/promises'; import util from 'node:util'; -import type { PathLike } from 'node:fs'; import findVersions from 'find-versions'; import { readPackageUp, type NormalizedReadResult } from 'read-package-up'; @@ -14,14 +12,6 @@ import { getChromiumVersion } from './versions.js'; import { APP_NOT_FOUND_ERROR, CUSTOM_CAPABILITY_NAME } from './constants.js'; import type { ElectronServiceOptions } from './types.js'; -async function fileExists(path: PathLike) { - try { - return (await fs.stat(path)).isFile(); - } catch (e) { - return false; - } -} - export type ElectronServiceCapabilities = Capabilities.RemoteCapabilities & { [CUSTOM_CAPABILITY_NAME]?: ElectronServiceOptions; }; @@ -70,12 +60,12 @@ export default class ElectronLaunchService implements Services.ServiceInstance { log.debug('No app binary found'); try { const appBuildInfo = await getAppBuildInfo(pkg); - appBinaryPath = await getBinaryPath(pkg.path, appBuildInfo, electronVersion); - log.debug(`Detected app binary at ${appBinaryPath}`); - const appExists = await fileExists(appBinaryPath as PathLike); + try { + appBinaryPath = await getBinaryPath(pkg.path, appBuildInfo, electronVersion); - if (!appExists) { + log.debug(`Detected app binary at ${appBinaryPath}`); + } catch (e) { const buildToolName = appBuildInfo.isForge ? 'Electron Forge' : 'electron-builder'; const suggestedCompileCommand = `npx ${ appBuildInfo.isForge ? 'electron-forge make' : 'electron-builder build' From b4e52189855585da891d16b0dacc2ddfcfa62124 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 18:42:52 +0100 Subject: [PATCH 10/17] test: update for new arch approach, add forge custom outdir test --- test/application.spec.ts | 178 ++++++++++++++++++++++++++++++++++----- 1 file changed, 159 insertions(+), 19 deletions(-) diff --git a/test/application.spec.ts b/test/application.spec.ts index dab19295c..ed89c58f6 100644 --- a/test/application.spec.ts +++ b/test/application.spec.ts @@ -1,16 +1,37 @@ import fs from 'node:fs/promises'; import path from 'node:path'; -import { describe, it, expect } from 'vitest'; +import { describe, it, expect, vi, Mock } from 'vitest'; import { getBinaryPath, getAppBuildInfo } from '../src/application.js'; +vi.mock('node:fs/promises', async (importOriginal) => { + const originalFs = await importOriginal(); + + return { + default: { + ...originalFs, + access: vi.fn(), + }, + }; +}); + describe('getBinaryPath', () => { const pkgJSONPath = '/foo/bar/package.json'; - const winProcess = { arch: 'x64', platform: 'win32' } as NodeJS.Process; - const macProcess = { arch: 'arm64', platform: 'darwin' } as NodeJS.Process; - const linuxProcess = { arch: 'arm', platform: 'linux' } as NodeJS.Process; - const unsupportedPlatformProcess = { platform: 'aix', arch: 'mips' } as NodeJS.Process; + const winProcess = { platform: 'win32' } as NodeJS.Process; + const macProcess = { platform: 'darwin' } as NodeJS.Process; + const linuxProcess = { platform: 'linux' } as NodeJS.Process; + const unsupportedPlatformProcess = { platform: 'aix' } as NodeJS.Process; + + function mockBinaryPath(binaryPath: string) { + (fs.access as Mock).mockImplementation((path: string) => { + if (path === binaryPath) { + return Promise.resolve(); + } else { + return Promise.reject(new Error(`ENOENT: no such file or directory, access '${path}' !== '${binaryPath}'`)); + } + }); + } it('should throw an error when provided with an unsupported platform', async () => expect(() => @@ -22,11 +43,32 @@ describe('getBinaryPath', () => { isForge: true, isBuilder: false, }, + '29.3.1', unsupportedPlatformProcess, ), ).rejects.toThrow('Unsupported platform: aix')); - it('should return the expected app path for an Electron Forge setup on Windows', async () => + it('should return the expected app path for a Forge setup with custom output directory', async () => { + const binaryPath = path.join('/foo', 'bar', 'custom-outdir', 'my-app-win32-x64', 'my-app.exe'); + mockBinaryPath(binaryPath); + expect( + await getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: { packagerConfig: { name: 'my-app' }, outDir: 'custom-outdir' }, + isForge: true, + isBuilder: false, + }, + '29.3.1', + winProcess, + ), + ).toBe(binaryPath); + }); + + it('should return the expected app path for a Forge setup on Windows', async () => { + const binaryPath = path.join('/foo', 'bar', 'out', 'my-app-win32-x64', 'my-app.exe'); + mockBinaryPath(binaryPath); expect( await getBinaryPath( pkgJSONPath, @@ -36,11 +78,24 @@ describe('getBinaryPath', () => { isForge: true, isBuilder: false, }, + '29.3.1', winProcess, ), - ).toBe(path.join('/foo', 'bar', 'out', 'my-app-win32-x64', 'my-app.exe'))); + ).toBe(binaryPath); + }); - it('should return the expected app path for an Electron Forge setup on Mac', async () => + it('should return the expected app path for a Forge setup on Arm Mac', async () => { + const binaryPath = path.join( + '/foo', + 'bar', + 'out', + 'my-app-darwin-arm64', + 'my-app.app', + 'Contents', + 'MacOS', + 'my-app', + ); + mockBinaryPath(binaryPath); expect( await getBinaryPath( pkgJSONPath, @@ -50,11 +105,24 @@ describe('getBinaryPath', () => { isForge: true, isBuilder: false, }, + '29.3.1', macProcess, ), - ).toBe(path.join('/foo', 'bar', 'out', 'my-app-darwin-arm64', 'my-app.app', 'Contents', 'MacOS', 'my-app'))); + ).toBe(binaryPath); + }); - it('should return the expected app path for an Electron Forge setup on Linux', async () => + it('should return the expected app path for a Forge setup on Intel Mac', async () => { + const binaryPath = path.join( + '/foo', + 'bar', + 'out', + 'my-app-darwin-x64', + 'my-app.app', + 'Contents', + 'MacOS', + 'my-app', + ); + mockBinaryPath(binaryPath); expect( await getBinaryPath( pkgJSONPath, @@ -64,11 +132,33 @@ describe('getBinaryPath', () => { isForge: true, isBuilder: false, }, + '29.3.1', + macProcess, + ), + ).toBe(binaryPath); + }); + + it('should return the expected app path for a Forge setup on Linux', async () => { + const binaryPath = path.join('/foo', 'bar', 'out', 'my-app-linux-x64', 'my-app'); + mockBinaryPath(binaryPath); + expect( + await getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: 'path/to/forge-config.js', + isForge: true, + isBuilder: false, + }, + '29.3.1', linuxProcess, ), - ).toBe(path.join('/foo', 'bar', 'out', 'my-app-linux-arm', 'my-app'))); + ).toBe(binaryPath); + }); - it('should return the expected app path for an electron-builder setup with custom output directory', async () => + it('should return the expected app path for an electron-builder setup with custom output directory', async () => { + const binaryPath = path.join('/foo', 'bar', 'custom-outdir', 'win-unpacked', 'my-app.exe'); + mockBinaryPath(binaryPath); expect( await getBinaryPath( pkgJSONPath, @@ -78,11 +168,15 @@ describe('getBinaryPath', () => { isForge: false, isBuilder: true, }, + '29.3.1', winProcess, ), - ).toBe(path.join('/foo', 'bar', 'custom-outdir', 'win-unpacked', 'my-app.exe'))); + ).toBe(binaryPath); + }); - it('should return the expected app path for an electron-builder setup on Windows', async () => + it('should return the expected app path for an electron-builder setup on Windows', async () => { + const binaryPath = path.join('/foo', 'bar', 'dist', 'win-unpacked', 'my-app.exe'); + mockBinaryPath(binaryPath); expect( await getBinaryPath( pkgJSONPath, @@ -92,11 +186,51 @@ describe('getBinaryPath', () => { isForge: false, isBuilder: true, }, + '29.3.1', winProcess, ), - ).toBe(path.join('/foo', 'bar', 'dist', 'win-unpacked', 'my-app.exe'))); + ).toBe(binaryPath); + }); + + it('should return the expected app path for an electron-builder setup on Arm Mac', async () => { + const binaryPath = path.join('/foo', 'bar', 'dist', 'mac-arm64', 'my-app.app', 'Contents', 'MacOS', 'my-app'); + mockBinaryPath(binaryPath); + expect( + await getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: { productName: 'my-app' }, + isForge: false, + isBuilder: true, + }, + '29.3.1', + macProcess, + ), + ).toBe(binaryPath); + }); + + it('should return the expected app path for an electron-builder setup on Intel Mac', async () => { + const binaryPath = path.join('/foo', 'bar', 'dist', 'mac', 'my-app.app', 'Contents', 'MacOS', 'my-app'); + mockBinaryPath(binaryPath); + expect( + await getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: { productName: 'my-app' }, + isForge: false, + isBuilder: true, + }, + '29.3.1', + macProcess, + ), + ).toBe(binaryPath); + }); - it('should return the expected app path for an electron-builder setup on Mac', async () => + it('should return the expected app path for an electron-builder setup on Mac (universal arch)', async () => { + const binaryPath = path.join('/foo', 'bar', 'dist', 'mac-universal', 'my-app.app', 'Contents', 'MacOS', 'my-app'); + mockBinaryPath(binaryPath); expect( await getBinaryPath( pkgJSONPath, @@ -106,11 +240,15 @@ describe('getBinaryPath', () => { isForge: false, isBuilder: true, }, + '29.3.1', macProcess, ), - ).toBe(path.join('/foo', 'bar', 'dist', 'mac-arm64', 'my-app.app', 'Contents', 'MacOS', 'my-app'))); + ).toBe(binaryPath); + }); - it('should return the expected app path for an electron-builder setup on Linux', async () => + it('should return the expected app path for an electron-builder setup on Linux', async () => { + const binaryPath = path.join('/foo', 'bar', 'dist', 'linux-unpacked', 'my-app'); + mockBinaryPath(binaryPath); expect( await getBinaryPath( pkgJSONPath, @@ -120,9 +258,11 @@ describe('getBinaryPath', () => { isForge: false, isBuilder: true, }, + '29.3.1', linuxProcess, ), - ).toBe(path.join('/foo', 'bar', 'dist', 'linux-unpacked', 'my-app'))); + ).toBe(binaryPath); + }); }); describe('getBuildToolConfig', () => { From 467378cffbeb1278cdf376b3e0f229b8136965f0 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 18:43:30 +0100 Subject: [PATCH 11/17] fix: use builder arch instead of process --- src/application.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/application.ts b/src/application.ts index d4e807fc8..0ea52ffdc 100644 --- a/src/application.ts +++ b/src/application.ts @@ -50,7 +50,7 @@ export async function getBinaryPath( const archs: BuilderArch[] = ['arm64', 'armv7l', 'ia32', 'universal', 'x64']; const builderOutDirName = (appBuildInfo.config as BuilderConfig)?.directories?.output || 'dist'; const builderOutDirMap = (arch: BuilderArch) => ({ - darwin: path.join(builderOutDirName, arch === 'x64' ? 'mac' : `mac-${p.arch}`), + darwin: path.join(builderOutDirName, arch === 'x64' ? 'mac' : `mac-${arch}`), linux: path.join(builderOutDirName, 'linux-unpacked'), win32: path.join(builderOutDirName, 'win-unpacked'), }); From 8db7fd10311cb10c029388e1d1b96924a4c84f4c Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 19:50:31 +0100 Subject: [PATCH 12/17] test: update launcher tests --- test/launcher.spec.ts | 87 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/test/launcher.spec.ts b/test/launcher.spec.ts index aef303416..2dedb8627 100644 --- a/test/launcher.spec.ts +++ b/test/launcher.spec.ts @@ -1,10 +1,12 @@ import path from 'node:path'; -import { describe, beforeEach, afterEach, it, expect, vi } from 'vitest'; +import { describe, beforeEach, afterEach, it, expect, vi, Mock } from 'vitest'; import nock from 'nock'; import type { Capabilities, Options } from '@wdio/types'; import ElectronLaunchService from '../src/launcher.js'; +import { getAppBuildInfo, getBinaryPath } from '../src/application.js'; +import { BUILD_TOOL_DETECTION_ERROR } from '../src/constants.js'; import { mockProcessProperty, revertProcessProperty } from './helpers.js'; import type { ElectronServiceOptions } from '../src/index.js'; @@ -18,6 +20,15 @@ vi.mock('node:fs/promises', () => ({ }, })); +vi.mock('../src/application.js', () => ({ + getBinaryPath: vi.fn().mockResolvedValue('workspace/my-test-app/dist/my-test-app'), + getAppBuildInfo: vi.fn().mockResolvedValue({ + appName: 'my-test-app', + isForge: true, + config: {}, + }), +})); + beforeEach(async () => { mockProcessProperty('platform', 'darwin'); LaunchService = (await import('../src/launcher.js')).default; @@ -72,10 +83,12 @@ describe('onPrepare', () => { it('should throw an error when appBinaryPath is not specified and no build tool is found', async () => { delete options.appBinaryPath; + (getAppBuildInfo as Mock).mockRejectedValueOnce(new Error(BUILD_TOOL_DETECTION_ERROR)); instance = new LaunchService( options, [] as never, { + rootDir: path.join(process.cwd(), 'test', 'fixtures', 'no-build-tool'), services: [['electron', options]], } as Options.Testrunner, ); @@ -95,6 +108,7 @@ describe('onPrepare', () => { it('should throw an error when the detected app path does not exist for a Forge dependency', async () => { delete options.appBinaryPath; + (getBinaryPath as Mock).mockRejectedValueOnce(new Error('b0rk')); instance = new LaunchService( options, [] as never, @@ -119,6 +133,12 @@ describe('onPrepare', () => { it('should throw an error when the detected app path does not exist for an electron-builder dependency', async () => { delete options.appBinaryPath; + (getBinaryPath as Mock).mockRejectedValueOnce(new Error('b0rk')); + (getAppBuildInfo as Mock).mockResolvedValueOnce({ + appName: 'my-test-app', + isForge: false, + config: {}, + }); instance = new LaunchService( options, [] as never, @@ -333,6 +353,71 @@ describe('onPrepare', () => { }); }); + it('should set the expected capabilities when the detected app path exists for a Forge dependency', async () => { + delete options.appBinaryPath; + (getBinaryPath as Mock).mockResolvedValueOnce('workspace/my-test-app/out/my-test-app'); + instance = new LaunchService( + options, + [] as never, + { + services: [['electron', options]], + rootDir: path.join(process.cwd(), 'test', 'fixtures', 'forge-dependency-inline-config'), + } as Options.Testrunner, + ); + const capabilities: WebdriverIO.Capabilities[] = [ + { + browserName: 'electron', + browserVersion: '26.2.2', + }, + ]; + await instance?.onPrepare({} as never, capabilities); + expect(capabilities[0]).toEqual({ + 'browserName': 'chrome', + 'browserVersion': '116.0.5845.190', + 'goog:chromeOptions': { + args: [], + binary: 'workspace/my-test-app/out/my-test-app', + windowTypes: ['app', 'webview'], + }, + 'wdio:electronServiceOptions': {}, + }); + }); + + it('should set the expected capabilities when the detected app path exists for an electron-builder dependency', async () => { + delete options.appBinaryPath; + (getBinaryPath as Mock).mockResolvedValueOnce('workspace/my-test-app/dist/my-test-app'); + (getAppBuildInfo as Mock).mockResolvedValueOnce({ + appName: 'my-test-app', + isForge: false, + config: {}, + }); + instance = new LaunchService( + options, + [] as never, + { + services: [['electron', options]], + rootDir: path.join(process.cwd(), 'test', 'fixtures', 'builder-dependency-inline-config'), + } as Options.Testrunner, + ); + const capabilities: WebdriverIO.Capabilities[] = [ + { + browserName: 'electron', + browserVersion: '26.2.2', + }, + ]; + await instance?.onPrepare({} as never, capabilities); + expect(capabilities[0]).toEqual({ + 'browserName': 'chrome', + 'browserVersion': '116.0.5845.190', + 'goog:chromeOptions': { + args: [], + binary: 'workspace/my-test-app/dist/my-test-app', + windowTypes: ['app', 'webview'], + }, + 'wdio:electronServiceOptions': {}, + }); + }); + it('should set the expected capabilities when setting custom chromedriverOptions', async () => { instance = new LaunchService( options, From af616a72ad497f42200f2a3c30e1004dbcf386e6 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 20:51:54 +0100 Subject: [PATCH 13/17] fix: use a single outdir for EB non-darwin --- src/application.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/application.ts b/src/application.ts index 0ea52ffdc..16709d7cf 100644 --- a/src/application.ts +++ b/src/application.ts @@ -47,7 +47,6 @@ export async function getBinaryPath( ); } else { // electron-builder case - const archs: BuilderArch[] = ['arm64', 'armv7l', 'ia32', 'universal', 'x64']; const builderOutDirName = (appBuildInfo.config as BuilderConfig)?.directories?.output || 'dist'; const builderOutDirMap = (arch: BuilderArch) => ({ darwin: path.join(builderOutDirName, arch === 'x64' ? 'mac' : `mac-${arch}`), @@ -55,9 +54,19 @@ export async function getBinaryPath( win32: path.join(builderOutDirName, 'win-unpacked'), }); - outDirs = archs.map((arch) => - path.join(path.dirname(packageJsonPath), builderOutDirMap(arch)[p.platform as keyof typeof SupportedPlatform]), - ); + if (p.platform === 'darwin') { + // macOS output dir depends on the arch used + // - we check all of the possible dirs + const archs: BuilderArch[] = ['arm64', 'armv7l', 'ia32', 'universal', 'x64']; + outDirs = archs.map((arch) => + path.join(path.dirname(packageJsonPath), builderOutDirMap(arch)[p.platform as keyof typeof SupportedPlatform]), + ); + } else { + // other platforms have a single output dir which is not dependent on the arch + outDirs = [ + path.join(path.dirname(packageJsonPath), builderOutDirMap('x64')[p.platform as keyof typeof SupportedPlatform]), + ]; + } } const binaryPathMap = { @@ -87,7 +96,7 @@ export async function getBinaryPath( // no executable binary case if (executableBinaryPaths.length === 0) { - throw new Error(`No executable binary found, checked: \n[${binaryPaths.join(', \n')}]`); + throw new Error(`No executable binary found, checked: \n${binaryPaths.join(', \n')}`); } // multiple executable binaries case From 3e1740305c27ca3a2d6b11de155366db30bd6819 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 20:52:45 +0100 Subject: [PATCH 14/17] test: improve application coverage --- test/__snapshots__/application.spec.ts.snap | 17 ++++ test/application.spec.ts | 87 +++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 test/__snapshots__/application.spec.ts.snap diff --git a/test/__snapshots__/application.spec.ts.snap b/test/__snapshots__/application.spec.ts.snap new file mode 100644 index 000000000..0a9e789da --- /dev/null +++ b/test/__snapshots__/application.spec.ts.snap @@ -0,0 +1,17 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`getBinaryPath > should throw an error when no binary is found for a Builder setup on MacOS 1`] = ` +[Error: No executable binary found, checked: +/foo/bar/dist/mac-arm64/my-app.app/Contents/MacOS/my-app, +/foo/bar/dist/mac-armv7l/my-app.app/Contents/MacOS/my-app, +/foo/bar/dist/mac-ia32/my-app.app/Contents/MacOS/my-app, +/foo/bar/dist/mac-universal/my-app.app/Contents/MacOS/my-app, +/foo/bar/dist/mac/my-app.app/Contents/MacOS/my-app] +`; + +exports[`getBinaryPath > should throw an error when no binary is found for a Forge setup 1`] = ` +[Error: No executable binary found, checked: +/foo/bar/out/my-app-win32-ia32/my-app.exe, +/foo/bar/out/my-app-win32-x64/my-app.exe, +/foo/bar/out/my-app-win32-arm64/my-app.exe] +`; diff --git a/test/application.spec.ts b/test/application.spec.ts index ed89c58f6..bf03b57f2 100644 --- a/test/application.spec.ts +++ b/test/application.spec.ts @@ -48,6 +48,93 @@ describe('getBinaryPath', () => { ), ).rejects.toThrow('Unsupported platform: aix')); + it('should throw an error when no binary is found for a Forge setup', async () => { + (fs.access as Mock).mockImplementation(() => Promise.reject(new Error('No such file or directory'))); + await expect( + getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: 'path/to/forge-config.js', + isForge: true, + isBuilder: false, + }, + '29.3.1', + winProcess, + ), + ).rejects.toThrowErrorMatchingSnapshot(); + }); + + it('should throw an error when no binary is found for a Builder setup on MacOS', async () => { + (fs.access as Mock).mockImplementation(() => Promise.reject(new Error('No such file or directory'))); + await expect( + getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: 'path/to/builder-config.js', + isForge: false, + isBuilder: true, + }, + '29.3.1', + macProcess, + ), + ).rejects.toThrowErrorMatchingSnapshot(); + }); + + it('should throw an error when no binary is found for a Builder setup', async () => { + (fs.access as Mock).mockImplementation(() => Promise.reject(new Error('No such file or directory'))); + await expect( + getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: 'path/to/builder-config.js', + isForge: false, + isBuilder: true, + }, + '29.3.1', + winProcess, + ), + ).rejects.toThrow(`No executable binary found, checked: \n/foo/bar/dist/win-unpacked/my-app.exe`); + }); + + it('should return the expected app path for a Forge setup with multiple executable binaries', async () => { + const binaryPath = path.join('/foo', 'bar', 'out', 'my-app-win32-ia32', 'my-app.exe'); + (fs.access as Mock).mockImplementation(() => Promise.resolve()); + expect( + await getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: { packagerConfig: { name: 'my-app' } }, + isForge: true, + isBuilder: false, + }, + '29.3.1', + winProcess, + ), + ).toBe(binaryPath); + }); + + it('should return the expected app path for a Builder setup with multiple executable binaries', async () => { + const binaryPath = path.join('/foo', 'bar', 'dist', 'mac-arm64', 'my-app.app', 'Contents', 'MacOS', 'my-app'); + (fs.access as Mock).mockImplementation(() => Promise.resolve()); + expect( + await getBinaryPath( + pkgJSONPath, + { + appName: 'my-app', + config: { packagerConfig: { name: 'my-app' } }, + isForge: false, + isBuilder: true, + }, + '29.3.1', + macProcess, + ), + ).toBe(binaryPath); + }); + it('should return the expected app path for a Forge setup with custom output directory', async () => { const binaryPath = path.join('/foo', 'bar', 'custom-outdir', 'my-app-win32-x64', 'my-app.exe'); mockBinaryPath(binaryPath); From 5bf1cf9d5721124f18895df3b7c2f19c1e81cb7d Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Thu, 16 May 2024 21:18:12 +0100 Subject: [PATCH 15/17] test: fix error string matching --- test/__snapshots__/application.spec.ts.snap | 17 ----------------- test/application.spec.ts | 19 ++++++++++++++++--- 2 files changed, 16 insertions(+), 20 deletions(-) delete mode 100644 test/__snapshots__/application.spec.ts.snap diff --git a/test/__snapshots__/application.spec.ts.snap b/test/__snapshots__/application.spec.ts.snap deleted file mode 100644 index 0a9e789da..000000000 --- a/test/__snapshots__/application.spec.ts.snap +++ /dev/null @@ -1,17 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`getBinaryPath > should throw an error when no binary is found for a Builder setup on MacOS 1`] = ` -[Error: No executable binary found, checked: -/foo/bar/dist/mac-arm64/my-app.app/Contents/MacOS/my-app, -/foo/bar/dist/mac-armv7l/my-app.app/Contents/MacOS/my-app, -/foo/bar/dist/mac-ia32/my-app.app/Contents/MacOS/my-app, -/foo/bar/dist/mac-universal/my-app.app/Contents/MacOS/my-app, -/foo/bar/dist/mac/my-app.app/Contents/MacOS/my-app] -`; - -exports[`getBinaryPath > should throw an error when no binary is found for a Forge setup 1`] = ` -[Error: No executable binary found, checked: -/foo/bar/out/my-app-win32-ia32/my-app.exe, -/foo/bar/out/my-app-win32-x64/my-app.exe, -/foo/bar/out/my-app-win32-arm64/my-app.exe] -`; diff --git a/test/application.spec.ts b/test/application.spec.ts index bf03b57f2..b390acba7 100644 --- a/test/application.spec.ts +++ b/test/application.spec.ts @@ -49,6 +49,11 @@ describe('getBinaryPath', () => { ).rejects.toThrow('Unsupported platform: aix')); it('should throw an error when no binary is found for a Forge setup', async () => { + const binaryPaths = [ + path.join('/foo', 'bar', 'out', 'my-app-win32-ia32', 'my-app.exe'), + path.join('/foo', 'bar', 'out', 'my-app-win32-x64', 'my-app.exe'), + path.join('/foo', 'bar', 'out', 'my-app-win32-arm64', 'my-app.exe'), + ]; (fs.access as Mock).mockImplementation(() => Promise.reject(new Error('No such file or directory'))); await expect( getBinaryPath( @@ -62,10 +67,17 @@ describe('getBinaryPath', () => { '29.3.1', winProcess, ), - ).rejects.toThrowErrorMatchingSnapshot(); + ).rejects.toThrow(`No executable binary found, checked: \n${binaryPaths.join(', \n')}`); }); it('should throw an error when no binary is found for a Builder setup on MacOS', async () => { + const binaryPaths = [ + path.join('/foo', 'bar', 'dist', 'mac-arm64', 'my-app.app', 'Contents', 'MacOS', 'my-app'), + path.join('/foo', 'bar', 'dist', 'mac-armv7l', 'my-app.app', 'Contents', 'MacOS', 'my-app'), + path.join('/foo', 'bar', 'dist', 'mac-ia32', 'my-app.app', 'Contents', 'MacOS', 'my-app'), + path.join('/foo', 'bar', 'dist', 'mac-universal', 'my-app.app', 'Contents', 'MacOS', 'my-app'), + path.join('/foo', 'bar', 'dist', 'mac', 'my-app.app', 'Contents', 'MacOS', 'my-app'), + ]; (fs.access as Mock).mockImplementation(() => Promise.reject(new Error('No such file or directory'))); await expect( getBinaryPath( @@ -79,10 +91,11 @@ describe('getBinaryPath', () => { '29.3.1', macProcess, ), - ).rejects.toThrowErrorMatchingSnapshot(); + ).rejects.toThrow(`No executable binary found, checked: \n${binaryPaths.join(', \n')}`); }); it('should throw an error when no binary is found for a Builder setup', async () => { + const binaryPath = path.join('/foo', 'bar', 'dist', 'win-unpacked', 'my-app.exe'); (fs.access as Mock).mockImplementation(() => Promise.reject(new Error('No such file or directory'))); await expect( getBinaryPath( @@ -96,7 +109,7 @@ describe('getBinaryPath', () => { '29.3.1', winProcess, ), - ).rejects.toThrow(`No executable binary found, checked: \n/foo/bar/dist/win-unpacked/my-app.exe`); + ).rejects.toThrow(`No executable binary found, checked: \n${binaryPath}`); }); it('should return the expected app path for a Forge setup with multiple executable binaries', async () => { From 5aeafda7b156af94f86517eb4870423a8cd98d64 Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Fri, 17 May 2024 12:49:57 +0100 Subject: [PATCH 16/17] test: add `mac-universal` e2es --- .github/workflows/ci.yml | 10 ++++++++-- example-electron-builder/package.json | 3 +++ example/package.json | 3 +++ package.json | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cf1ad1f85..e7d09ae5e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,9 +38,15 @@ jobs: - name: Run Tests run: | if [ "$RUNNER_OS" == "Linux" ]; then - xvfb-run pnpm run ci + xvfb-run pnpm run ci else - pnpm run ci + pnpm run ci + fi + shell: bash + - name: Run MacOS specific tests + run: | + if [ "$RUNNER_OS" == "macOS" ]; then + pnpm run test:integration:mac-universal fi shell: bash - name: 🐛 Debug Build diff --git a/example-electron-builder/package.json b/example-electron-builder/package.json index 9dc55006a..edde37159 100644 --- a/example-electron-builder/package.json +++ b/example-electron-builder/package.json @@ -8,7 +8,10 @@ "build": "pnpm build:bundle && pnpm build:package", "build:bundle": "tsc && rollup -c rollup.config.js", "build:package": "cp ./src/index.html ./dist && electron-builder -p never", + "build:package:mac-universal": "cp ./src/index.html ./dist && electron-builder -p never -m --universal", + "build:mac-universal": "pnpm build:bundle && pnpm build:package:mac-universal", "ci": "pnpm i && pnpm build && pnpm test", + "ci:mac-universal": "pnpm i && pnpm build:mac-universal && pnpm test", "clean": "pnpm clean:dist && rm -rf ./node_modules pnpm-lock.yaml ./wdio-logs", "clean:dist": "pnpx rimraf ./dist && mkdir -p ./dist", "test": "wdio run ./wdio.conf.ts && pnpm test:multiremote && pnpm test:standalone", diff --git a/example/package.json b/example/package.json index 3f81c1765..ae8891d36 100644 --- a/example/package.json +++ b/example/package.json @@ -8,7 +8,10 @@ "build": "pnpm build:bundle && pnpm build:package", "build:bundle": "tsc && rollup -c rollup.config.js", "build:package": "cp ./src/index.html ./dist && electron-forge package", + "build:package:mac-universal": "cp ./src/index.html ./dist && electron-forge package --platform=darwin --arch=universal", + "build:mac-universal": "pnpm build:bundle && pnpm build:package:mac-universal", "ci": "pnpm i && pnpm build && pnpm test", + "ci:mac-universal": "pnpm i && pnpm build:mac-universal && pnpm test", "clean": "pnpm clean:dist && rm -rf ./node_modules pnpm-lock.yaml ./wdio-logs ./out", "clean:dist": "pnpx rimraf ./dist && mkdir -p ./dist", "test": "wdio run ./wdio.conf.ts && pnpm test:multiremote && pnpm test:standalone", diff --git a/package.json b/package.json index de6b93b1d..34ddf6962 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "test:integration:cjs": "cd example-cjs && pnpm run ci", "test:integration:esm": "cd example && pnpm run ci", "test:integration:electron-builder": "cd example-electron-builder && pnpm run ci", + "test:integration:mac-universal": "cd example && pnpm run ci:mac-universal && cd example-electron-builder && pnpm run ci:mac-universal", "update:all": "pnpm --filter=\\!fixture-\\* --filter=\\!{example*/out/**/*} up -iL", "watch": "pnpm run build:esm --watch" }, From bde6d6becdcc662e6cd10b4b8129f6c0ba5683da Mon Sep 17 00:00:00 2001 From: goosewobbler Date: Fri, 17 May 2024 13:01:25 +0100 Subject: [PATCH 17/17] chore: test EB mac-universal only --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34ddf6962..c5c98d497 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "test:integration:cjs": "cd example-cjs && pnpm run ci", "test:integration:esm": "cd example && pnpm run ci", "test:integration:electron-builder": "cd example-electron-builder && pnpm run ci", - "test:integration:mac-universal": "cd example && pnpm run ci:mac-universal && cd example-electron-builder && pnpm run ci:mac-universal", + "test:integration:mac-universal": "cd example-electron-builder && pnpm run ci:mac-universal", "update:all": "pnpm --filter=\\!fixture-\\* --filter=\\!{example*/out/**/*} up -iL", "watch": "pnpm run build:esm --watch" },