diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 663c4a3..7600404 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -160,6 +160,19 @@ importers: specifier: ^3.3.7 version: 3.3.7(typescript@5.2.2) + test/error-repros/missing-zlib-imports: + dependencies: + fast-zlib: + specifier: ^2.0.1 + version: 2.0.1 + vite-plugin-node-polyfills: + specifier: workspace:* + version: link:../../.. + devDependencies: + vite: + specifier: ^5.0.2 + version: 5.1.0(@types/node@18.18.8) + test/error-repros/vite-scan-buffer-import-error: devDependencies: vite-plugin-node-polyfills: @@ -2710,6 +2723,10 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-zlib@2.0.1: + resolution: {integrity: sha512-DCoYgNagM2Bt1VIpXpdGnRx4LzqJeYG0oh6Nf/7cWo6elTXkFGMw9CrRCYYUIapYNrozYMoyDRflx9mgT3Awyw==} + dev: false + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -4871,7 +4888,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 5.0.2(@types/node@18.18.8) + vite: 5.1.0(@types/node@18.18.8) transitivePeerDependencies: - '@types/node' - less diff --git a/shims/buffer/index.ts b/shims/buffer/index.ts index 4e0c9e4..3bf292b 100644 --- a/shims/buffer/index.ts +++ b/shims/buffer/index.ts @@ -1,5 +1,43 @@ -// eslint-disable-next-line unicorn/prefer-node-protocol, n/no-deprecated-api -import { Buffer, SlowBuffer, kMaxLength } from 'buffer' +import { + Blob, + BlobOptions, + Buffer, + File, + FileOptions, + INSPECT_MAX_BYTES, + // eslint-disable-next-line n/no-deprecated-api + SlowBuffer, + TranscodeEncoding, + atob, + btoa, + constants, + isAscii, + isUtf8, + kMaxLength, + kStringMaxLength, + resolveObjectURL, + transcode, +// eslint-disable-next-line unicorn/prefer-node-protocol +} from 'buffer' + +export { + Blob, + BlobOptions, + Buffer, + File, + FileOptions, + INSPECT_MAX_BYTES, + SlowBuffer, + TranscodeEncoding, + atob, + btoa, + constants, + isAscii, + isUtf8, + kMaxLength, + kStringMaxLength, + resolveObjectURL, + transcode, +} -export { Buffer, SlowBuffer, kMaxLength } export default Buffer diff --git a/test/error-repros/missing-zlib-imports/index.html b/test/error-repros/missing-zlib-imports/index.html new file mode 100644 index 0000000..b412659 --- /dev/null +++ b/test/error-repros/missing-zlib-imports/index.html @@ -0,0 +1,12 @@ + + + + + + missing-zlib-imports + + +
+ + + diff --git a/test/error-repros/missing-zlib-imports/package.json b/test/error-repros/missing-zlib-imports/package.json new file mode 100644 index 0000000..fa7c825 --- /dev/null +++ b/test/error-repros/missing-zlib-imports/package.json @@ -0,0 +1,20 @@ +{ + "name": "missing-zlib-imports", + "type": "module", + "version": "0.0.0", + "private": true, + "scripts": { + "build": "vite build", + "dev": "vite", + "test:e2e": "CI=true run-p test:e2e:*", + "test:e2e:build": "VITE_COMMAND=build WEB_SERVER_COMMAND='vite build && vite preview --port 15176' WEB_SERVER_URL='http://localhost:15176' playwright test", + "test:e2e:dev": "VITE_COMMAND=dev WEB_SERVER_COMMAND='vite dev --port 15175' WEB_SERVER_URL='http://localhost:15175' playwright test" + }, + "dependencies": { + "fast-zlib": "^2.0.1", + "vite-plugin-node-polyfills": "workspace:*" + }, + "devDependencies": { + "vite": "^5.1.1" + } +} diff --git a/test/error-repros/missing-zlib-imports/playwright.config.ts b/test/error-repros/missing-zlib-imports/playwright.config.ts new file mode 100644 index 0000000..c9de5c4 --- /dev/null +++ b/test/error-repros/missing-zlib-imports/playwright.config.ts @@ -0,0 +1,29 @@ +import { defineConfig, devices } from '@playwright/test' + +const webServerCommand = process.env.WEB_SERVER_COMMAND || 'pnpm dev' +const webServerUrl = process.env.WEB_SERVER_URL || 'http://localhost:5173' + +// https://playwright.dev/docs/test-configuration +export default defineConfig({ + forbidOnly: !!process.env.CI, + fullyParallel: true, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + reporter: 'html', + retries: process.env.CI ? 2 : 0, + testDir: './test/e2e', + use: { + baseURL: webServerUrl, + trace: 'on-first-retry', + }, + webServer: { + command: webServerCommand, + stdout: 'ignore', + url: webServerUrl, + }, + workers: process.env.CI ? 1 : undefined, +}) diff --git a/test/error-repros/missing-zlib-imports/src/index.ts b/test/error-repros/missing-zlib-imports/src/index.ts new file mode 100644 index 0000000..74db2ad --- /dev/null +++ b/test/error-repros/missing-zlib-imports/src/index.ts @@ -0,0 +1,4 @@ +import zlib from 'fast-zlib' + +// eslint-disable-next-line no-console +console.log(Object.keys(zlib)) diff --git a/test/error-repros/missing-zlib-imports/test/e2e/main.spec.ts b/test/error-repros/missing-zlib-imports/test/e2e/main.spec.ts new file mode 100644 index 0000000..696f2ef --- /dev/null +++ b/test/error-repros/missing-zlib-imports/test/e2e/main.spec.ts @@ -0,0 +1,27 @@ +import { expect, test } from '@playwright/test' + +test('sets the page title', async ({ page }) => { + await page.goto('/') + + await expect(page).toHaveTitle('missing-zlib-imports') +}) + +test('logs the correct values', async ({ page }) => { + const errors = [] + const logs = [] + + page.on('console', (message) => { + logs.push(message.text()) + }) + + page.on('pageerror', (error) => { + errors.push(error.message) + }) + + await page.goto('/') + + expect(errors).toEqual([]) + expect(logs).toContainEqual( + '[Inflate, Deflate, InflateRaw, DeflateRaw, Gzip, Gunzip, Unzip, BrotliCompress, BrotliDecompress, constants, default]', + ) +}) diff --git a/test/error-repros/missing-zlib-imports/vite.config.ts b/test/error-repros/missing-zlib-imports/vite.config.ts new file mode 100644 index 0000000..e7c529d --- /dev/null +++ b/test/error-repros/missing-zlib-imports/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import { nodePolyfills } from 'vite-plugin-node-polyfills' + +// https://vitejs.dev/config/ +export default defineConfig({ + optimizeDeps: { + force: true, + }, + plugins: [ + nodePolyfills(), + ], +}) diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..2b1650a --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + include: ['**/*.test.ts'], + }, +})