diff --git a/demo/package.json b/demo/package.json index 941e17f8..60b56289 100644 --- a/demo/package.json +++ b/demo/package.json @@ -16,9 +16,13 @@ "postinstall": "pnpm -w build && wxt prepare" }, "dependencies": { - "webextension-polyfill": "^0.10.0" + "webextension-polyfill": "^0.10.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" }, "devDependencies": { + "@types/react": "^18.2.14", + "@types/react-dom": "^18.2.6", "@types/webextension-polyfill": "^0.10.0", "sass": "^1.64.0", "wxt": "workspace:*" diff --git a/demo/src/entrypoints/example-tsx.content.tsx b/demo/src/entrypoints/example-tsx.content.tsx new file mode 100644 index 00000000..e1c694db --- /dev/null +++ b/demo/src/entrypoints/example-tsx.content.tsx @@ -0,0 +1,15 @@ +import ReactDOM from 'react-dom/client'; + +export default defineContentScript({ + matches: [''], + async main() { + const container = document.createElement('div'); + document.body.append(container); + + ReactDOM.createRoot(container).render(); + }, +}); + +function SomeComponent() { + return
Some component
; +} diff --git a/demo/tsconfig.json b/demo/tsconfig.json index a6fe065e..68871e35 100644 --- a/demo/tsconfig.json +++ b/demo/tsconfig.json @@ -1,3 +1,7 @@ { - "extends": ["../tsconfig.base.json", "./.wxt/tsconfig.json"] + "extends": ["../tsconfig.base.json", "./.wxt/tsconfig.json"], + "compilerOptions": { + "allowImportingTsExtensions": true, + "jsx": "react-jsx" + } } diff --git a/e2e/tests/react.test.ts b/e2e/tests/react.test.ts new file mode 100644 index 00000000..bbb66e53 --- /dev/null +++ b/e2e/tests/react.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from 'vitest'; +import { TestProject } from '../utils'; + +describe('React', () => { + it('should prepare and build an project with a tsx entrypoint', async () => { + const project = new TestProject({ + dependencies: { + react: '^18.2.0', + 'react-dom': '^18.2.0', + }, + devDependencies: { + '@types/react': '^18.2.14', + '@types/react-dom': '^18.2.6', + }, + }); + project.addFile( + 'entrypoints/demo.content.tsx', + `import ReactDOM from 'react-dom/client'; + + export default defineContentScript({ + matches: "", + main() { + const container = document.createElement("div"); + document.body.append(container) + const root = ReactDOM.createRoot(container); + root.render(

Hello, world!

); + } + })`, + ); + + await project.build(); + + expect( + await project.fileExists('.output/chrome-mv3/content-scripts/demo.js'), + ).toBe(true); + expect(await project.serializeFile('.output/chrome-mv3/manifest.json')) + .toMatchInlineSnapshot(` + ".output/chrome-mv3/manifest.json + ---------------------------------------- + {\\"manifest_version\\":3,\\"name\\":\\"E2E Extension\\",\\"description\\":\\"Example description\\",\\"version\\":\\"0.0.0\\",\\"version_name\\":\\"0.0.0-test\\",\\"content_scripts\\":[{\\"matches\\":\\"\\",\\"js\\":[\\"content-scripts/demo.js\\"]}]}" + `); + }); +}); diff --git a/e2e/utils.ts b/e2e/utils.ts index 817dbdcf..ee8fe05a 100644 --- a/e2e/utils.ts +++ b/e2e/utils.ts @@ -4,29 +4,33 @@ import glob from 'fast-glob'; import { execaCommand } from 'execa'; import { InlineConfig, UserConfig, build } from '../src'; import { normalizePath } from '../src/core/utils/paths'; +import merge from 'lodash.merge'; export class TestProject { files: Array<[string, string]> = []; config: UserConfig | undefined; readonly root: string; - constructor(root = 'e2e/dist') { + constructor(packageJson: any = {}) { // We can't put each test's project inside e2e/dist directly, otherwise the wxt.config.ts // file is cached and cannot be different between each test. Instead, we add a random ID to the // end to make each test's path unique. const id = Math.random().toString(32).substring(3); - this.root = join(root, id); + this.root = join('e2e/dist', id); this.files.push([ 'package.json', JSON.stringify( - { - name: 'E2E Extension', - description: 'Example description', - version: '0.0.0-test', - dependencies: { - wxt: '../../..', + merge( + { + name: 'E2E Extension', + description: 'Example description', + version: '0.0.0-test', + dependencies: { + wxt: '../../..', + }, }, - }, + packageJson, + ), null, 2, ), diff --git a/package.json b/package.json index e98635fa..c15d9cbe 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "c12": "^1.4.2", "cac": "^6.7.14", "consola": "^3.2.3", + "esbuild": "^0.19.4", "fast-glob": "^3.3.1", "filesize": "^10.0.8", "fs-extra": "^11.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 00a37e3b..0cf573db 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: consola: specifier: ^3.2.3 version: 3.2.3 + esbuild: + specifier: ^0.19.4 + version: 0.19.4 fast-glob: specifier: ^3.3.1 version: 3.3.1 @@ -153,10 +156,22 @@ importers: demo: dependencies: + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) webextension-polyfill: specifier: ^0.10.0 version: 0.10.0 devDependencies: + '@types/react': + specifier: ^18.2.14 + version: 18.2.14 + '@types/react-dom': + specifier: ^18.2.6 + version: 18.2.6 '@types/webextension-polyfill': specifier: ^0.10.0 version: 0.10.0 @@ -459,29 +474,21 @@ packages: get-tsconfig: 4.6.0 dev: true - /@esbuild/android-arm64@0.18.11: - resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - optional: true - /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/android-arm@0.18.11: - resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + /@esbuild/android-arm64@0.19.4: + resolution: {integrity: sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [android] requiresBuild: true + dev: false optional: true /@esbuild/android-arm@0.18.20: @@ -490,15 +497,15 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/android-x64@0.18.11: - resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + /@esbuild/android-arm@0.19.4: + resolution: {integrity: sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==} engines: {node: '>=12'} - cpu: [x64] + cpu: [arm] os: [android] requiresBuild: true + dev: false optional: true /@esbuild/android-x64@0.18.20: @@ -507,15 +514,15 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true - /@esbuild/darwin-arm64@0.18.11: - resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + /@esbuild/android-x64@0.19.4: + resolution: {integrity: sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==} engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] + cpu: [x64] + os: [android] requiresBuild: true + dev: false optional: true /@esbuild/darwin-arm64@0.18.20: @@ -524,15 +531,15 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true - /@esbuild/darwin-x64@0.18.11: - resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + /@esbuild/darwin-arm64@0.19.4: + resolution: {integrity: sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==} engines: {node: '>=12'} - cpu: [x64] + cpu: [arm64] os: [darwin] requiresBuild: true + dev: false optional: true /@esbuild/darwin-x64@0.18.20: @@ -541,15 +548,15 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true - /@esbuild/freebsd-arm64@0.18.11: - resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + /@esbuild/darwin-x64@0.19.4: + resolution: {integrity: sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==} engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] + cpu: [x64] + os: [darwin] requiresBuild: true + dev: false optional: true /@esbuild/freebsd-arm64@0.18.20: @@ -558,15 +565,15 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true - /@esbuild/freebsd-x64@0.18.11: - resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + /@esbuild/freebsd-arm64@0.19.4: + resolution: {integrity: sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==} engines: {node: '>=12'} - cpu: [x64] + cpu: [arm64] os: [freebsd] requiresBuild: true + dev: false optional: true /@esbuild/freebsd-x64@0.18.20: @@ -575,15 +582,15 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true - /@esbuild/linux-arm64@0.18.11: - resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + /@esbuild/freebsd-x64@0.19.4: + resolution: {integrity: sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==} engines: {node: '>=12'} - cpu: [arm64] - os: [linux] + cpu: [x64] + os: [freebsd] requiresBuild: true + dev: false optional: true /@esbuild/linux-arm64@0.18.20: @@ -592,15 +599,15 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-arm@0.18.11: - resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + /@esbuild/linux-arm64@0.19.4: + resolution: {integrity: sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==} engines: {node: '>=12'} - cpu: [arm] + cpu: [arm64] os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/linux-arm@0.18.20: @@ -609,15 +616,15 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-ia32@0.18.11: - resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + /@esbuild/linux-arm@0.19.4: + resolution: {integrity: sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==} engines: {node: '>=12'} - cpu: [ia32] + cpu: [arm] os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/linux-ia32@0.18.20: @@ -626,15 +633,15 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-loong64@0.18.11: - resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + /@esbuild/linux-ia32@0.19.4: + resolution: {integrity: sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==} engines: {node: '>=12'} - cpu: [loong64] + cpu: [ia32] os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/linux-loong64@0.18.20: @@ -643,15 +650,15 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-mips64el@0.18.11: - resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + /@esbuild/linux-loong64@0.19.4: + resolution: {integrity: sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==} engines: {node: '>=12'} - cpu: [mips64el] + cpu: [loong64] os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/linux-mips64el@0.18.20: @@ -660,15 +667,15 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-ppc64@0.18.11: - resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + /@esbuild/linux-mips64el@0.19.4: + resolution: {integrity: sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==} engines: {node: '>=12'} - cpu: [ppc64] + cpu: [mips64el] os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/linux-ppc64@0.18.20: @@ -677,15 +684,15 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-riscv64@0.18.11: - resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + /@esbuild/linux-ppc64@0.19.4: + resolution: {integrity: sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==} engines: {node: '>=12'} - cpu: [riscv64] + cpu: [ppc64] os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/linux-riscv64@0.18.20: @@ -694,15 +701,15 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-s390x@0.18.11: - resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + /@esbuild/linux-riscv64@0.19.4: + resolution: {integrity: sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==} engines: {node: '>=12'} - cpu: [s390x] + cpu: [riscv64] os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/linux-s390x@0.18.20: @@ -711,15 +718,15 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/linux-x64@0.18.11: - resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + /@esbuild/linux-s390x@0.19.4: + resolution: {integrity: sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==} engines: {node: '>=12'} - cpu: [x64] + cpu: [s390x] os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/linux-x64@0.18.20: @@ -728,15 +735,15 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true - /@esbuild/netbsd-x64@0.18.11: - resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + /@esbuild/linux-x64@0.19.4: + resolution: {integrity: sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==} engines: {node: '>=12'} cpu: [x64] - os: [netbsd] + os: [linux] requiresBuild: true + dev: false optional: true /@esbuild/netbsd-x64@0.18.20: @@ -745,15 +752,15 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true - /@esbuild/openbsd-x64@0.18.11: - resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + /@esbuild/netbsd-x64@0.19.4: + resolution: {integrity: sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==} engines: {node: '>=12'} cpu: [x64] - os: [openbsd] + os: [netbsd] requiresBuild: true + dev: false optional: true /@esbuild/openbsd-x64@0.18.20: @@ -762,15 +769,15 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true - /@esbuild/sunos-x64@0.18.11: - resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + /@esbuild/openbsd-x64@0.19.4: + resolution: {integrity: sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==} engines: {node: '>=12'} cpu: [x64] - os: [sunos] + os: [openbsd] requiresBuild: true + dev: false optional: true /@esbuild/sunos-x64@0.18.20: @@ -779,15 +786,15 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true - /@esbuild/win32-arm64@0.18.11: - resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + /@esbuild/sunos-x64@0.19.4: + resolution: {integrity: sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==} engines: {node: '>=12'} - cpu: [arm64] - os: [win32] + cpu: [x64] + os: [sunos] requiresBuild: true + dev: false optional: true /@esbuild/win32-arm64@0.18.20: @@ -796,15 +803,15 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true - /@esbuild/win32-ia32@0.18.11: - resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + /@esbuild/win32-arm64@0.19.4: + resolution: {integrity: sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==} engines: {node: '>=12'} - cpu: [ia32] + cpu: [arm64] os: [win32] requiresBuild: true + dev: false optional: true /@esbuild/win32-ia32@0.18.20: @@ -813,15 +820,15 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true - /@esbuild/win32-x64@0.18.11: - resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + /@esbuild/win32-ia32@0.19.4: + resolution: {integrity: sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==} engines: {node: '>=12'} - cpu: [x64] + cpu: [ia32] os: [win32] requiresBuild: true + dev: false optional: true /@esbuild/win32-x64@0.18.20: @@ -830,7 +837,15 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true + optional: true + + /@esbuild/win32-x64@0.19.4: + resolution: {integrity: sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false optional: true /@faker-js/faker@8.0.2: @@ -1020,6 +1035,28 @@ packages: kleur: 3.0.3 dev: true + /@types/prop-types@15.7.7: + resolution: {integrity: sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==} + dev: true + + /@types/react-dom@18.2.6: + resolution: {integrity: sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==} + dependencies: + '@types/react': 18.2.14 + dev: true + + /@types/react@18.2.14: + resolution: {integrity: sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==} + dependencies: + '@types/prop-types': 15.7.7 + '@types/scheduler': 0.16.4 + csstype: 3.1.2 + dev: true + + /@types/scheduler@0.16.4: + resolution: {integrity: sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==} + dev: true + /@types/web-bluetooth@0.0.17: resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} dev: true @@ -1484,13 +1521,13 @@ packages: ieee754: 1.2.1 dev: false - /bundle-require@4.0.1(esbuild@0.18.11): + /bundle-require@4.0.1(esbuild@0.18.20): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' dependencies: - esbuild: 0.18.11 + esbuild: 0.18.20 load-tsconfig: 0.2.5 dev: true @@ -2015,35 +2052,6 @@ packages: resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} dev: false - /esbuild@0.18.11: - resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.11 - '@esbuild/android-arm64': 0.18.11 - '@esbuild/android-x64': 0.18.11 - '@esbuild/darwin-arm64': 0.18.11 - '@esbuild/darwin-x64': 0.18.11 - '@esbuild/freebsd-arm64': 0.18.11 - '@esbuild/freebsd-x64': 0.18.11 - '@esbuild/linux-arm': 0.18.11 - '@esbuild/linux-arm64': 0.18.11 - '@esbuild/linux-ia32': 0.18.11 - '@esbuild/linux-loong64': 0.18.11 - '@esbuild/linux-mips64el': 0.18.11 - '@esbuild/linux-ppc64': 0.18.11 - '@esbuild/linux-riscv64': 0.18.11 - '@esbuild/linux-s390x': 0.18.11 - '@esbuild/linux-x64': 0.18.11 - '@esbuild/netbsd-x64': 0.18.11 - '@esbuild/openbsd-x64': 0.18.11 - '@esbuild/sunos-x64': 0.18.11 - '@esbuild/win32-arm64': 0.18.11 - '@esbuild/win32-ia32': 0.18.11 - '@esbuild/win32-x64': 0.18.11 - /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -2072,7 +2080,36 @@ packages: '@esbuild/win32-arm64': 0.18.20 '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - dev: true + + /esbuild@0.19.4: + resolution: {integrity: sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.4 + '@esbuild/android-arm64': 0.19.4 + '@esbuild/android-x64': 0.19.4 + '@esbuild/darwin-arm64': 0.19.4 + '@esbuild/darwin-x64': 0.19.4 + '@esbuild/freebsd-arm64': 0.19.4 + '@esbuild/freebsd-x64': 0.19.4 + '@esbuild/linux-arm': 0.19.4 + '@esbuild/linux-arm64': 0.19.4 + '@esbuild/linux-ia32': 0.19.4 + '@esbuild/linux-loong64': 0.19.4 + '@esbuild/linux-mips64el': 0.19.4 + '@esbuild/linux-ppc64': 0.19.4 + '@esbuild/linux-riscv64': 0.19.4 + '@esbuild/linux-s390x': 0.19.4 + '@esbuild/linux-x64': 0.19.4 + '@esbuild/netbsd-x64': 0.19.4 + '@esbuild/openbsd-x64': 0.19.4 + '@esbuild/sunos-x64': 0.19.4 + '@esbuild/win32-arm64': 0.19.4 + '@esbuild/win32-ia32': 0.19.4 + '@esbuild/win32-x64': 0.19.4 + dev: false /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} @@ -3032,6 +3069,13 @@ packages: wrap-ansi: 8.1.0 dev: true + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false + /loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: @@ -3653,10 +3697,27 @@ packages: strip-json-comments: 2.0.1 dev: false + /react-dom@18.2.0(react@18.2.0): + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + dev: false + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false + /read-pkg@3.0.0: resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} engines: {node: '>=4'} @@ -3852,6 +3913,12 @@ packages: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: false + /scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + dependencies: + loose-envify: 1.4.0 + dev: false + /scule@1.0.0: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} dev: false @@ -4312,11 +4379,11 @@ packages: typescript: optional: true dependencies: - bundle-require: 4.0.1(esbuild@0.18.11) + bundle-require: 4.0.1(esbuild@0.18.20) cac: 6.7.14 chokidar: 3.5.3 debug: 4.3.4 - esbuild: 0.18.11 + esbuild: 0.18.20 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 @@ -4542,7 +4609,7 @@ packages: optional: true dependencies: '@types/node': 20.5.9 - esbuild: 0.18.11 + esbuild: 0.18.20 postcss: 8.4.27 rollup: 3.28.0 optionalDependencies: diff --git a/src/core/utils/importEntrypointFile.ts b/src/core/utils/importEntrypointFile.ts index 090249c1..b780a209 100644 --- a/src/core/utils/importEntrypointFile.ts +++ b/src/core/utils/importEntrypointFile.ts @@ -1,12 +1,12 @@ -import createJITI from 'jiti'; +import createJITI, { TransformOptions as JitiTransformOptions } from 'jiti'; import { InternalConfig } from '../types'; import { createUnimport } from 'unimport'; import fs from 'fs-extra'; import { resolve } from 'path'; -import transform from 'jiti/dist/babel'; import { getUnimportOptions } from './auto-imports'; import { removeProjectImportStatements } from './strings'; import { normalizePath } from './paths'; +import { TransformOptions, transformSync } from 'esbuild'; /** * Get the value from the default export of a `path`. @@ -47,6 +47,7 @@ export async function importEntrypointFile( const jiti = createJITI(__filename, { cache: false, + debug: config.debug, esmResolve: true, interopDefault: true, alias: { @@ -55,10 +56,14 @@ export async function importEntrypointFile( 'node_modules/wxt/dist/virtual-modules/fake-browser.js', ), }, + extensions: ['.ts', '.tsx', '.cjs', '.js', '.mjs'], transform(opts) { - if (opts.filename === normalPath) - return transform({ ...opts, source: code }); - else return transform(opts); + const isEntrypoint = opts.filename === normalPath; + return transformSync( + // Use modified source code for entrypoints + isEntrypoint ? code : opts.source, + getEsbuildOptions(opts), + ); }, }); @@ -69,3 +74,12 @@ export async function importEntrypointFile( throw err; } } + +function getEsbuildOptions(opts: JitiTransformOptions): TransformOptions { + const isJsx = opts.filename?.endsWith('x'); + return { + format: 'cjs', + loader: isJsx ? 'tsx' : 'ts', + jsx: isJsx ? 'automatic' : undefined, + }; +}