diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml index a48f1752a0d..782f9835f01 100644 --- a/.github/ISSUE_TEMPLATE/bug.yaml +++ b/.github/ISSUE_TEMPLATE/bug.yaml @@ -52,7 +52,7 @@ body: id: system-info attributes: label: System Info - description: Output of `npx envinfo --system --npmPackages '{vite,@builder.io/*}' --binaries --browsers` + description: Output of `npx envinfo --system --npmPackages '{vite,undici,@builder.io/*}' --binaries --browsers` render: shell placeholder: System, Binaries, Browsers validations: diff --git a/packages/create-qwik/create-interactive.ts b/packages/create-qwik/create-interactive.ts index 3f07ec6cc2a..4f24599e891 100644 --- a/packages/create-qwik/create-interactive.ts +++ b/packages/create-qwik/create-interactive.ts @@ -10,7 +10,6 @@ import { getPackageManager } from '../qwik/src/cli/utils/utils'; import { loadIntegrations } from '../qwik/src/cli/utils/integrations'; export async function runCreateInteractiveCli() { - checkNodeVersion(); console.log(``); console.clear(); console.log(``); @@ -141,24 +140,3 @@ export async function runCreateInteractiveCli() { return result; } - -function checkNodeVersion() { - const version = process.version; - const [majorVersion, minorVersion] = version.replace('v', '').split('.'); - if (Number(majorVersion) < 16) { - console.error( - color.red( - `Qwik requires Node.js 16.8 or higher. You are currently running Node.js ${version}.` - ) - ); - process.exit(1); - } else if (Number(majorVersion) === 16) { - if (Number(minorVersion) < 8) { - console.warn( - color.yellow( - `Node.js 16.8 or higher is recommended. You are currently running Node.js ${version}.` - ) - ); - } - } -} diff --git a/packages/create-qwik/index.ts b/packages/create-qwik/index.ts index e2163b4ea95..776cbd8781a 100644 --- a/packages/create-qwik/index.ts +++ b/packages/create-qwik/index.ts @@ -1,8 +1,11 @@ import { createApp, runCreateCli } from './create-app'; import { panic } from '../qwik/src/cli/utils/utils'; import { runCreateInteractiveCli } from './create-interactive'; +import color from 'kleur'; export async function runCli() { + checkNodeVersion(); + try { const args = process.argv.slice(2); @@ -18,4 +21,25 @@ export async function runCli() { } } +function checkNodeVersion() { + const version = process.version; + const [majorVersion, minorVersion] = version.replace('v', '').split('.'); + if (Number(majorVersion) < 16) { + console.error( + color.red( + `Qwik requires Node.js 16.8 or higher. You are currently running Node.js ${version}.` + ) + ); + process.exit(1); + } else if (Number(majorVersion) === 16) { + if (Number(minorVersion) < 8) { + console.warn( + color.yellow( + `Node.js 16.8 or higher is recommended. You are currently running Node.js ${version}.` + ) + ); + } + } +} + export { createApp, runCreateCli, runCreateInteractiveCli }; diff --git a/packages/qwik-city/middleware/node/http.ts b/packages/qwik-city/middleware/node/http.ts index 0e1649cd284..177beba752c 100644 --- a/packages/qwik-city/middleware/node/http.ts +++ b/packages/qwik-city/middleware/node/http.ts @@ -16,8 +16,6 @@ export async function fromNodeHttp( res: ServerResponse, mode: ServerRequestMode ) { - const { Request, Headers } = await import('undici'); - const requestHeaders = new Headers(); const nodeRequestHeaders = req.headers; for (const key in nodeRequestHeaders) { @@ -41,7 +39,7 @@ export async function fromNodeHttp( const serverRequestEv: ServerRequestEvent = { mode, url, - request: new Request(url.href, { + request: new (Request as any)(url.href, { method: req.method, headers: requestHeaders, body, diff --git a/packages/qwik-city/middleware/node/node-fetch.ts b/packages/qwik-city/middleware/node/node-fetch.ts index c06ae2c4f9e..39de58c4365 100644 --- a/packages/qwik-city/middleware/node/node-fetch.ts +++ b/packages/qwik-city/middleware/node/node-fetch.ts @@ -5,8 +5,8 @@ export async function patchGlobalFetch() { typeof process !== 'undefined' && process.versions.node ) { - const { fetch, Headers, Request, Response, FormData } = await import('undici'); if (!globalThis.fetch) { + const { fetch, Headers, Request, Response, FormData } = await import('undici'); globalThis.fetch = fetch as any; globalThis.Headers = Headers as any; globalThis.Request = Request as any; diff --git a/packages/qwik/package.json b/packages/qwik/package.json index 322fda8bdda..db24b275c0a 100644 --- a/packages/qwik/package.json +++ b/packages/qwik/package.json @@ -158,6 +158,6 @@ "Builder.io" ], "engines": { - "node": ">=16" + "node": ">=16.8.0" } } diff --git a/scripts/package-json.ts b/scripts/package-json.ts index 977672370ad..7659389614c 100644 --- a/scripts/package-json.ts +++ b/scripts/package-json.ts @@ -21,7 +21,7 @@ export async function generatePackageJson(config: BuildConfig) { qwik: './qwik.cjs', }, type: 'module', - dependencies: { + peerDependencies: { undici: '^5.14.0', }, exports: { diff --git a/starters/dev-server.ts b/starters/dev-server.ts index 8b1387d351f..b77ccdf7927 100644 --- a/starters/dev-server.ts +++ b/starters/dev-server.ts @@ -340,8 +340,8 @@ async function patchGlobalFetch() { typeof process !== 'undefined' && process.versions.node ) { - const { fetch, Headers, Request, Response, FormData } = await import('undici'); if (!globalThis.fetch) { + const { fetch, Headers, Request, Response, FormData } = await import('undici'); globalThis.fetch = fetch as any; globalThis.Headers = Headers as any; globalThis.Request = Request as any; diff --git a/tsm.cjs b/tsm.cjs index cfa94e6d704..76d26482ec4 100644 --- a/tsm.cjs +++ b/tsm.cjs @@ -9,8 +9,8 @@ if ( typeof process !== 'undefined' && process.versions.node ) { - const { fetch, Headers, Request, Response, FormData } = require('undici'); if (!globalThis.fetch) { + const { fetch, Headers, Request, Response, FormData } = require('undici'); globalThis.fetch = fetch; globalThis.Headers = Headers; globalThis.Request = Request;