From 03bdef50a5414604e7ae5da13ccdce1ac238d120 Mon Sep 17 00:00:00 2001 From: truemiller Date: Mon, 30 Sep 2024 22:44:45 +0100 Subject: [PATCH] fix: yolo --- electron/.eslintrc.json | 20 +++++-- electron/jsconfig.json | 2 +- electron/main.js | 50 +++++++--------- electron/ports.js | 7 --- electron/processes.js | 10 ++-- electron/store.js | 2 + frontend/package.json | 6 +- frontend/yarn.lock | 6 +- package.json | 4 +- yarn.lock | 126 ++++++++++++++++++++-------------------- 10 files changed, 115 insertions(+), 118 deletions(-) diff --git a/electron/.eslintrc.json b/electron/.eslintrc.json index 1aca62fc4..559106d7c 100644 --- a/electron/.eslintrc.json +++ b/electron/.eslintrc.json @@ -1,7 +1,12 @@ { - "extends": ["eslint:recommended", "plugin:prettier/recommended"], - "plugins": ["prettier"], - "ignorePatterns": [".next/"], + "extends": [ + "eslint:recommended", + "plugin:prettier/recommended" + ], + "plugins": [ + "prettier" + ], + // "ignorePatterns": [".next/"], "rules": { "prettier/prettier": [ "error", @@ -11,7 +16,12 @@ "singleQuote": true } ], - "no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }] + "no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "^_" + } + ] }, "parserOptions": { "ecmaVersion": "latest", @@ -21,4 +31,4 @@ "node": true, "es6": true } -} +} \ No newline at end of file diff --git a/electron/jsconfig.json b/electron/jsconfig.json index 04c510d33..8fca21cb7 100644 --- a/electron/jsconfig.json +++ b/electron/jsconfig.json @@ -15,7 +15,7 @@ "exclude": [ "node_modules", "**/node_modules/*", - "main.js" // You mentioned fixing this in the future + // "main.js" // You mentioned fixing this in the future ] } \ No newline at end of file diff --git a/electron/main.js b/electron/main.js index 41f23a28f..6070a8b54 100644 --- a/electron/main.js +++ b/electron/main.js @@ -10,7 +10,7 @@ const { spawn } = require('child_process'); const path = require('path'); const fs = require('fs'); const os = require('os'); -const { default: next } = require('next'); +const next = require('next'); const http = require('http'); const AdmZip = require('adm-zip'); @@ -73,6 +73,12 @@ let tray = null; let operateDaemon, operateDaemonPid, nextAppProcess, nextAppProcessPid; +// @ts-ignore - Workaround for the missing type definitions +const nextApp = next({ + dev: false, + dir: path.join(__dirname), +}); + const getActiveWindow = () => splashWindow ?? mainWindow; function showNotification(title, body) { @@ -314,21 +320,7 @@ async function launchDaemonDev() { async function launchNextApp() { logger.electron('Launching Next App'); - const nextApp = next({ - dev: false, - dir: path.join(__dirname), - port: appConfig.ports.prod.next, - // env: { - // GNOSIS_RPC: - // process.env.NODE_ENV === 'production' - // ? process.env.FORK_URL - // : process.env.DEV_RPC, - // NEXT_PUBLIC_BACKEND_PORT: - // process.env.NODE_ENV === 'production' - // ? appConfig.ports.prod.operate - // : appConfig.ports.dev.operate, - // }, - }); + logger.electron('Preparing Next App'); await nextApp.prepare(); @@ -351,15 +343,15 @@ async function launchNextApp() { async function launchNextAppDev() { await new Promise(function (resolve, _reject) { - process.env.NEXT_PUBLIC_BACKEND_PORT = appConfig.ports.dev.operate; // must set next env var to connect to backend + process.env.NEXT_PUBLIC_BACKEND_PORT = `${appConfig.ports.dev.operate}`; // must set next env var to connect to backend nextAppProcess = spawn( 'yarn', - ['dev:frontend', '--port', appConfig.ports.dev.next], + ['dev:frontend', '--port', `${appConfig.ports.dev.next}`], { shell: true, env: { ...process.env, - NEXT_PUBLIC_BACKEND_PORT: appConfig.ports.dev.operate, + NEXT_PUBLIC_BACKEND_PORT: `${appConfig.ports.dev.operate}`, }, }, ); @@ -439,19 +431,20 @@ ipcMain.on('check', async function (event, _argument) { await launchNextAppDev(); } else { event.sender.send('response', 'Starting Pearl Daemon'); - // await launchDaemon(); - + await launchDaemon(); event.sender.send('response', 'Starting Frontend Server'); const frontendPortAvailable = await isPortAvailable( appConfig.ports.prod.next, ); if (!frontendPortAvailable) { appConfig.ports.prod.next = await findAvailablePort({ - ...PORT_RANGE, + startPort: PORT_RANGE.startPort, + endPort: PORT_RANGE.endPort, excludePorts: [appConfig.ports.prod.operate], }); } - await launchNextApp(); + await launchNextApp().catch((e) => logger.electron(JSON.stringify(e))); + logger.electron('Frontend server started'); } event.sender.send('response', 'Launching App'); @@ -535,11 +528,12 @@ ipcMain.on('open-path', (_, filePath) => { * If the file path does not exist, it returns null. * If no file path is provided, it sanitizes the provided data directly. * The sanitized log data is then written to the destination path. - * @param {Object} options - The options for sanitizing logs. - * @param {string} options.name - The name of the log file. - * @param {string} options.filePath - The file path to read the log data from. - * @param {string} options.data - The log data to sanitize if no file path is provided. - * @param {string} options.destPath - The destination path where the logs should be stored after sanitization. + * @param {{ + * name: string, + * filePath?: string, + * data?: string, + * destPath?: string, + * }} options - The options for sanitizing logs. * @returns {string|null} - The file path of the sanitized log data, or null if the file path does not exist. */ function sanitizeLogs({ diff --git a/electron/ports.js b/electron/ports.js index d01697ca0..0bcb87987 100644 --- a/electron/ports.js +++ b/electron/ports.js @@ -1,13 +1,6 @@ const net = require('net'); const { ERROR_ADDRESS_IN_USE } = require('./constants'); -/** - * Finds an available port within the specified range, excluding specified ports. - * @param {number} startPort - The start of the port range. - * @param {number} endPort - The end of the port range. - * @param {Array} excludePorts - An array of ports to be skipped. - * @returns {Promise} The first available port found within the range that's not excluded. - */ function findAvailablePort({ startPort, endPort, excludePorts = [] }) { return new Promise((resolve, reject) => { let currentPort = startPort; diff --git a/electron/processes.js b/electron/processes.js index faaa9266f..e472df4f8 100644 --- a/electron/processes.js +++ b/electron/processes.js @@ -16,15 +16,15 @@ function killProcesses(pid) { // Array of PIDs to kill, starting with the children const pidsToKill = children.map((p) => p.PID); - logger.info("Pids to kill " + JSON.stringify(pidsToKill)); + logger.info('Pids to kill ' + JSON.stringify(pidsToKill)); const killCommand = isWindows ? windowsKillCommand : unixKillCommand; let errors = []; for (const ppid of pidsToKill) { - logger.info("kill: " + ppid); + logger.info('kill: ' + ppid); exec(`${killCommand} ${ppid}`, (err) => { - logger.error("Pids to kill error:" + err); + logger.error('Pids to kill error:' + err); if ( err?.message?.includes(isWindows ? 'not found' : 'No such process') ) { @@ -36,9 +36,7 @@ function killProcesses(pid) { if (errors.length === 0) { reject(errors); - - - } else resolve(); + } else resolve(); }); }); } diff --git a/electron/store.js b/electron/store.js index d953d13f6..4aae857de 100644 --- a/electron/store.js +++ b/electron/store.js @@ -1,3 +1,4 @@ +//@ts-check const Store = require('electron-store'); const { logger } = require('./logger'); @@ -49,6 +50,7 @@ const migrations = { * @returns {Promise} - A promise that resolves once the store is set up. */ const setupStore = async (ipcMain, mainWindow) => { + logger.electron('Setting up Electron store'); const store = new Store({ schema, migrations, diff --git a/frontend/package.json b/frontend/package.json index 1abd8c263..2ff6aeac8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -8,10 +8,10 @@ "ethers": "5.7.2", "ethers-multicall": "^0.2.3", "lodash": "^4.17.21", - "next": "^14.2.3", - "react": "^18.3.1", + "next": "==14.2.3", + "react": "==18.3.1", "react-canvas-confetti": "1.2.1", - "react-dom": "^18.3.1", + "react-dom": "==18.3.1", "sass": "^1.72.0", "styled-components": "^6.1.8", "usehooks-ts": "^2.14.0" diff --git a/frontend/yarn.lock b/frontend/yarn.lock index a477fcaef..ce01536d6 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -4564,7 +4564,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -next@^14.2.3: +next@==14.2.3: version "14.2.3" resolved "https://registry.yarnpkg.com/next/-/next-14.2.3.tgz#f117dd5d5f20c307e7b8e4f9c1c97d961008925d" integrity sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A== @@ -5300,7 +5300,7 @@ react-canvas-confetti@1.2.1: "@types/canvas-confetti" "1.4.0" canvas-confetti "1.4.0" -react-dom@^18.3.1: +react-dom@==18.3.1: version "18.3.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -5323,7 +5323,7 @@ react-is@^18.0.0, react-is@^18.2.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -react@^18.3.1: +react@==18.3.1: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== diff --git a/package.json b/package.json index 38f5b344e..831c7fbeb 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "ethers": "5.7.2", "ethers-multicall": "^0.2.3", "lodash": "^4.17.21", - "next": "^14.2.3", + "next": "==14.2.3", "ps-tree": "^1.2.0", "react": "^18.3.1", "react-dom": "^18.3.1", @@ -24,6 +24,7 @@ "styled-components": "^6.1.8", "sudo-prompt": "9.2.1", "usehooks-ts": "^2.14.0", + "net": "^1.0.2", "winston": "^3.13.0" }, "devDependencies": { @@ -35,7 +36,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", "hardhat": "==2.17.1", - "net": "^1.0.2", "prettier": "^3.2.5" }, "main": "electron/main.js", diff --git a/yarn.lock b/yarn.lock index a4a23f43a..5265bfe9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -680,55 +680,55 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@next/env@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.4.tgz#5546813dc4f809884a37d257b254a5ce1b0248d7" - integrity sha512-3EtkY5VDkuV2+lNmKlbkibIJxcO4oIHEhBWne6PaAp+76J9KoSsGvNikp6ivzAT8dhhBMYrm6op2pS1ApG0Hzg== - -"@next/swc-darwin-arm64@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.4.tgz#da9f04c34a3d5f0b8401ed745768420e4a604036" - integrity sha512-AH3mO4JlFUqsYcwFUHb1wAKlebHU/Hv2u2kb1pAuRanDZ7pD/A/KPD98RHZmwsJpdHQwfEc/06mgpSzwrJYnNg== - -"@next/swc-darwin-x64@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.4.tgz#46dedb29ec5503bf171a72a3ecb8aac6e738e9d6" - integrity sha512-QVadW73sWIO6E2VroyUjuAxhWLZWEpiFqHdZdoQ/AMpN9YWGuHV8t2rChr0ahy+irKX5mlDU7OY68k3n4tAZTg== - -"@next/swc-linux-arm64-gnu@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.4.tgz#c9697ab9eb422bd1d7ffd0eb0779cc2aefa9d4a1" - integrity sha512-KT6GUrb3oyCfcfJ+WliXuJnD6pCpZiosx2X3k66HLR+DMoilRb76LpWPGb4tZprawTtcnyrv75ElD6VncVamUQ== - -"@next/swc-linux-arm64-musl@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.4.tgz#cbbceb2008571c743b5a310a488d2e166d200a75" - integrity sha512-Alv8/XGSs/ytwQcbCHwze1HmiIkIVhDHYLjczSVrf0Wi2MvKn/blt7+S6FJitj3yTlMwMxII1gIJ9WepI4aZ/A== - -"@next/swc-linux-x64-gnu@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.4.tgz#d79184223f857bacffb92f643cb2943a43632568" - integrity sha512-ze0ShQDBPCqxLImzw4sCdfnB3lRmN3qGMB2GWDRlq5Wqy4G36pxtNOo2usu/Nm9+V2Rh/QQnrRc2l94kYFXO6Q== - -"@next/swc-linux-x64-musl@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.4.tgz#6b6c3e5ac02ca5e63394d280ec8ee607491902df" - integrity sha512-8dwC0UJoc6fC7PX70csdaznVMNr16hQrTDAMPvLPloazlcaWfdPogq+UpZX6Drqb1OBlwowz8iG7WR0Tzk/diQ== - -"@next/swc-win32-arm64-msvc@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.4.tgz#dbad3906e870dba84c5883d9d4c4838472e0697f" - integrity sha512-jxyg67NbEWkDyvM+O8UDbPAyYRZqGLQDTPwvrBBeOSyVWW/jFQkQKQ70JDqDSYg1ZDdl+E3nkbFbq8xM8E9x8A== - -"@next/swc-win32-ia32-msvc@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.4.tgz#6074529b91ba49132922ce89a2e16d25d2ec235d" - integrity sha512-twrmN753hjXRdcrZmZttb/m5xaCBFa48Dt3FbeEItpJArxriYDunWxJn+QFXdJ3hPkm4u7CKxncVvnmgQMY1ag== - -"@next/swc-win32-x64-msvc@14.2.4": - version "14.2.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.4.tgz#e65a1c6539a671f97bb86d5183d6e3a1733c29c7" - integrity sha512-tkLrjBzqFTP8DVrAAQmZelEahfR9OxWpFR++vAI9FBhCiIxtwHwBHC23SBHCTURBtwB4kc/x44imVOnkKGNVGg== +"@next/env@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.3.tgz#d6def29d1c763c0afb397343a15a82e7d92353a0" + integrity sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA== + +"@next/swc-darwin-arm64@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz#db1a05eb88c0224089b815ad10ac128ec79c2cdb" + integrity sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A== + +"@next/swc-darwin-x64@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz#a3f8af05b5f9a52ac3082e66ac29e125ab1d7b9c" + integrity sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA== + +"@next/swc-linux-arm64-gnu@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz#4e63f43879285b52554bfd39e6e0cc78a9b27bbf" + integrity sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA== + +"@next/swc-linux-arm64-musl@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz#ebdaed26214448b1e6f2c3e8b3cd29bfba387990" + integrity sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw== + +"@next/swc-linux-x64-gnu@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz#19e3bcc137c3b582a1ab867106817e5c90a20593" + integrity sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w== + +"@next/swc-linux-x64-musl@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz#794a539b98e064169cf0ff7741b2a4fb16adec7d" + integrity sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ== + +"@next/swc-win32-arm64-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz#eda9fa0fbf1ff9113e87ac2668ee67ce9e5add5a" + integrity sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A== + +"@next/swc-win32-ia32-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz#7c1190e3f640ab16580c6bdbd7d0e766b9920457" + integrity sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw== + +"@next/swc-win32-x64-msvc@14.2.3": + version "14.2.3" + resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz#2be4e39ee25bfbd85be78eea17c0e7751dc4323c" + integrity sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA== "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" @@ -3956,12 +3956,12 @@ net@^1.0.2: resolved "https://registry.yarnpkg.com/net/-/net-1.0.2.tgz#d1757ec9a7fb2371d83cf4755ce3e27e10829388" integrity sha512-kbhcj2SVVR4caaVnGLJKmlk2+f+oLkjqdKeQlmUtz6nGzOpbcobwVIeSURNgraV/v3tlmGIX82OcPCl0K6RbHQ== -next@^14.2.3: - version "14.2.4" - resolved "https://registry.yarnpkg.com/next/-/next-14.2.4.tgz#ef66c39c71e2d8ad0a3caa0383c8933f4663e4d1" - integrity sha512-R8/V7vugY+822rsQGQCjoLhMuC9oFj9SOi4Cl4b2wjDrseD0LRZ10W7R6Czo4w9ZznVSshKjuIomsRjvm9EKJQ== +next@==14.2.3: + version "14.2.3" + resolved "https://registry.yarnpkg.com/next/-/next-14.2.3.tgz#f117dd5d5f20c307e7b8e4f9c1c97d961008925d" + integrity sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A== dependencies: - "@next/env" "14.2.4" + "@next/env" "14.2.3" "@swc/helpers" "0.5.5" busboy "1.6.0" caniuse-lite "^1.0.30001579" @@ -3969,15 +3969,15 @@ next@^14.2.3: postcss "8.4.31" styled-jsx "5.1.1" optionalDependencies: - "@next/swc-darwin-arm64" "14.2.4" - "@next/swc-darwin-x64" "14.2.4" - "@next/swc-linux-arm64-gnu" "14.2.4" - "@next/swc-linux-arm64-musl" "14.2.4" - "@next/swc-linux-x64-gnu" "14.2.4" - "@next/swc-linux-x64-musl" "14.2.4" - "@next/swc-win32-arm64-msvc" "14.2.4" - "@next/swc-win32-ia32-msvc" "14.2.4" - "@next/swc-win32-x64-msvc" "14.2.4" + "@next/swc-darwin-arm64" "14.2.3" + "@next/swc-darwin-x64" "14.2.3" + "@next/swc-linux-arm64-gnu" "14.2.3" + "@next/swc-linux-arm64-musl" "14.2.3" + "@next/swc-linux-x64-gnu" "14.2.3" + "@next/swc-linux-x64-musl" "14.2.3" + "@next/swc-win32-arm64-msvc" "14.2.3" + "@next/swc-win32-ia32-msvc" "14.2.3" + "@next/swc-win32-x64-msvc" "14.2.3" node-addon-api@^1.6.3: version "1.7.2"