diff --git a/.changeset/twenty-cameras-sneeze.md b/.changeset/twenty-cameras-sneeze.md new file mode 100644 index 0000000000..948f417454 --- /dev/null +++ b/.changeset/twenty-cameras-sneeze.md @@ -0,0 +1,5 @@ +--- +"@lynx-js/rspeedy": patch +--- + +Fix error "'wmic' is not recognized as an internal or external command" diff --git a/packages/rspeedy/core/package.json b/packages/rspeedy/core/package.json index bcee7d39ff..0283a83898 100644 --- a/packages/rspeedy/core/package.json +++ b/packages/rspeedy/core/package.json @@ -62,7 +62,6 @@ "@rsdoctor/rspack-plugin": "^0.4.13", "chokidar": "^4.0.3", "commander": "^13.1.0", - "default-gateway": "^7.2.2", "exit-hook": "^4.0.0", "ipaddr.js": "^2.2.0", "javascript-stringify": "^2.1.0", @@ -75,7 +74,6 @@ "@lynx-js/vitest-setup": "workspace:*", "@rollup/plugin-typescript": "^12.1.2", "@rsbuild/webpack": "1.2.3", - "@types/default-gateway": "^7.2.2", "eventemitter3": "^5.0.1", "type-fest": "^4.37.0", "vitest": "^3.0.7", diff --git a/packages/rspeedy/core/src/plugins/dev.plugin.ts b/packages/rspeedy/core/src/plugins/dev.plugin.ts index 4274e87fbe..7c56f17510 100644 --- a/packages/rspeedy/core/src/plugins/dev.plugin.ts +++ b/packages/rspeedy/core/src/plugins/dev.plugin.ts @@ -133,50 +133,55 @@ export function pluginDev( } } -export async function findIp(family: 'v4' | 'v6'): Promise { +export async function findIp( + family: 'v4' | 'v6', + isInternal = false, +): Promise { const [ - { default: defaultGateway }, { default: ipaddr }, os, ] = await Promise.all([ - import('default-gateway'), - import('ipaddr.js'), import('node:os'), ]) - const gateway = await (async () => { - if (family === 'v4') { - const { gateway } = await defaultGateway.gateway4async() - return gateway - } else { - const { gateway } = await defaultGateway.gateway6async() - return gateway - } - })() - const gatewayIp = ipaddr.parse(gateway) - - // Look for the matching interface in all local interfaces. - for (const addresses of Object.values(os.networkInterfaces())) { - if (!addresses) { - continue - } - - for (const { cidr, internal } of addresses) { - if (!cidr || internal) { - continue + + let host: string | undefined + + Object.values(os.networkInterfaces()) + .flatMap((networks) => networks ?? []) + .filter((network) => { + if (!network || !network.address) { + return false } - const net = ipaddr.parseCIDR(cidr) + if (network.family !== `IP${family}`) { + return false + } - if ( - net[0] - && net[0].kind() === gatewayIp.kind() - && gatewayIp.match(net) - ) { - return net[0].toString() + if (network.internal !== isInternal) { + return false } - } + + if (family === 'v6') { + const range = ipaddr.parse(network.address).range() + + if (range !== 'ipv4Mapped' && range !== 'uniqueLocal') { + return false + } + } + + return network.address + }) + .forEach((network) => { + host = network.address + if (host.includes(':')) { + host = `[${host}]` + } + }) + + if (!host) { + throw new Error(`No valid IP found`) } - throw new Error(`No valid IP found for the default gateway ${gateway}`) + return host } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d5d39f9d0f..172e1a8a01 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -261,9 +261,6 @@ importers: commander: specifier: ^13.1.0 version: 13.1.0 - default-gateway: - specifier: ^7.2.2 - version: 7.2.2 exit-hook: specifier: ^4.0.0 version: 4.0.0 @@ -295,9 +292,6 @@ importers: '@rsbuild/webpack': specifier: 1.2.3 version: 1.2.3(@rsbuild/core@1.2.15)(@rspack/core@1.2.7(@swc/helpers@0.5.15)) - '@types/default-gateway': - specifier: ^7.2.2 - version: 7.2.2 eventemitter3: specifier: ^5.0.1 version: 5.0.1 @@ -2423,9 +2417,6 @@ packages: '@types/css-tree@2.3.10': resolution: {integrity: sha512-WcaBazJ84RxABvRttQjjFWgTcHvZR9jGr0Y3hccPkHjFyk/a3N8EuxjKr+QfrwjoM5b1yI1Uj1i7EzOAAwBwag==} - '@types/default-gateway@7.2.2': - resolution: {integrity: sha512-35C93fYQlnLKLASkMPoxRvok4fENwB3By9clRLd2I/08n/XRl0pCdf7EB17K5oMMwZu8NBYA8i66jH5r/LYBKA==} - '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -3452,10 +3443,6 @@ packages: resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} engines: {node: '>= 10'} - default-gateway@7.2.2: - resolution: {integrity: sha512-AD7TrdNNPXRZIGw63dw+lnGmT4v7ggZC5NHNJgAYWm5njrwoze1q5JSAW9YuLy2tjnoLUG/r8FEB93MCh9QJPg==} - engines: {node: '>= 16'} - default-require-extensions@3.0.1: resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} engines: {node: '>=8'} @@ -3875,10 +3862,6 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} @@ -4318,10 +4301,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} @@ -8621,8 +8600,6 @@ snapshots: '@types/css-tree@2.3.10': {} - '@types/default-gateway@7.2.2': {} - '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -9784,10 +9761,6 @@ snapshots: dependencies: execa: 5.1.1 - default-gateway@7.2.2: - dependencies: - execa: 7.2.0 - default-require-extensions@3.0.1: dependencies: strip-bom: 4.0.0 @@ -10344,18 +10317,6 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@7.2.0: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - execa@8.0.1: dependencies: cross-spawn: 7.0.6 @@ -10858,8 +10819,6 @@ snapshots: human-signals@2.1.0: {} - human-signals@4.3.1: {} - human-signals@5.0.0: {} husky@9.1.7: {}