diff --git a/package.json b/package.json index c3b9c2adce..09d4c95155 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,6 @@ "@vitejs/plugin-react": "^5.1.4", "babel-plugin-graphql-tag": "^3.3.0", "concurrently": "^9.2.1", - "esbuild": "^0.27.3", "eslint": "^9.39.4", "eslint-config-ndla": "^6.0.14-alpha.0", "jsdom": "^28.1.0", @@ -126,6 +125,7 @@ "oxfmt": "^0.36.0", "postcss": "^8.5.8", "postcss-preset-env": "^11.2.0", + "rolldown": "^1.0.0-rc.8", "tsx": "^4.21.0", "typescript": "^5.9.3", "typescript-eslint": "^8.56.1", diff --git a/scripts/build-server.mjs b/scripts/build-server.mjs index d614f60943..3822a0d928 100644 --- a/scripts/build-server.mjs +++ b/scripts/build-server.mjs @@ -6,26 +6,16 @@ * */ -import * as esbuild from "esbuild"; +import { build } from "rolldown"; -await esbuild.build({ - entryPoints: ["src/server.ts"], - bundle: true, - format: "esm", +await build({ + input: "src/server.ts", platform: "node", - target: "esnext", - ignoreAnnotations: true, - sourcemap: true, - sourcesContent: false, external: ["vite"], - outfile: "build/server.js", - // Vite automatically handles SSR env variables, covering most of our application. - // However, we also need to define it here to cover the small portion of our backend that runs outside of Vite. - define: { - "import.meta.env.SSR": "true", - }, - // Mixing ESM and CJS is still a struggle. This is a workaround for now. - banner: { - js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`, + output: { + file: "build/server.js", + format: "esm", + codeSplitting: false, + sourcemap: true, }, }); diff --git a/yarn.lock b/yarn.lock index 6288524733..246c3bd964 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1151,6 +1151,34 @@ __metadata: languageName: node linkType: hard +"@emnapi/core@npm:^1.7.1": + version: 1.8.1 + resolution: "@emnapi/core@npm:1.8.1" + dependencies: + "@emnapi/wasi-threads": "npm:1.1.0" + tslib: "npm:^2.4.0" + checksum: 10c0/2c242f4b49779bac403e1cbcc98edacdb1c8ad36562408ba9a20663824669e930bc8493be46a2522d9dc946b8d96cd7073970bae914928c7671b5221c85b432e + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.7.1": + version: 1.8.1 + resolution: "@emnapi/runtime@npm:1.8.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/f4929d75e37aafb24da77d2f58816761fe3f826aad2e37fa6d4421dac9060cbd5098eea1ac3c9ecc4526b89deb58153852fa432f87021dc57863f2ff726d713f + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.1.0": + version: 1.1.0 + resolution: "@emnapi/wasi-threads@npm:1.1.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/e6d54bf2b1e64cdd83d2916411e44e579b6ae35d5def0dea61a3c452d9921373044dff32a8b8473ae60c80692bdc39323e98b96a3f3d87ba6886b24dd0ef7ca1 + languageName: node + linkType: hard + "@envelop/core@npm:^5.4.0": version: 5.4.0 resolution: "@envelop/core@npm:5.4.0" @@ -2720,6 +2748,17 @@ __metadata: languageName: node linkType: hard +"@napi-rs/wasm-runtime@npm:^1.1.1": + version: 1.1.1 + resolution: "@napi-rs/wasm-runtime@npm:1.1.1" + dependencies: + "@emnapi/core": "npm:^1.7.1" + "@emnapi/runtime": "npm:^1.7.1" + "@tybys/wasm-util": "npm:^0.10.1" + checksum: 10c0/04d57b67e80736e41fe44674a011878db0a8ad893f4d44abb9d3608debb7c174224cba2796ed5b0c1d367368159f3ca6be45f1c59222f70e32ddc880f803d447 + languageName: node + linkType: hard + "@ndla/article-converter@npm:^10.0.185-alpha.0": version: 10.0.185-alpha.0 resolution: "@ndla/article-converter@npm:10.0.185-alpha.0" @@ -3033,6 +3072,13 @@ __metadata: languageName: node linkType: hard +"@oxc-project/types@npm:=0.115.0": + version: 0.115.0 + resolution: "@oxc-project/types@npm:0.115.0" + checksum: 10c0/47fc31eb3fb3fcf4119955339f92ba2003f9b445834c1a28ed945cd6b9cd833c7ba66fca88aa5277336c2c55df300a593bc67970e544691eceaa486ebe12cb58 + languageName: node + linkType: hard + "@oxfmt/binding-android-arm-eabi@npm:0.36.0": version: 0.36.0 resolution: "@oxfmt/binding-android-arm-eabi@npm:0.36.0" @@ -3430,6 +3476,113 @@ __metadata: languageName: node linkType: hard +"@rolldown/binding-android-arm64@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.8" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.8" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-darwin-x64@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.8" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.8" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.8" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.8" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.8" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.8" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.8" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.8" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.8" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.8" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.8" + dependencies: + "@napi-rs/wasm-runtime": "npm:^1.1.1" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.8" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.8" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rolldown/pluginutils@npm:1.0.0-rc.3": version: 1.0.0-rc.3 resolution: "@rolldown/pluginutils@npm:1.0.0-rc.3" @@ -3437,6 +3590,13 @@ __metadata: languageName: node linkType: hard +"@rolldown/pluginutils@npm:1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "@rolldown/pluginutils@npm:1.0.0-rc.8" + checksum: 10c0/a451e422ec1b5c867231e13c35f8ca9fda50f56340c76ef75e23c2ece0731ca2fe6393854ca874b0ba326421cced705c752cfb8592e8481397d3b23206b1e8ef + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.59.0": version: 4.59.0 resolution: "@rollup/rollup-android-arm-eabi@npm:4.59.0" @@ -3916,6 +4076,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.10.1": + version: 0.10.1 + resolution: "@tybys/wasm-util@npm:0.10.1" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/b255094f293794c6d2289300c5fbcafbb5532a3aed3a5ffd2f8dc1828e639b88d75f6a376dd8f94347a44813fd7a7149d8463477a9a49525c8b2dcaa38c2d1e8 + languageName: node + linkType: hard + "@types/aria-query@npm:^5.0.1": version: 5.0.4 resolution: "@types/aria-query@npm:5.0.4" @@ -7103,7 +7272,7 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.27.0, esbuild@npm:^0.27.3, esbuild@npm:~0.27.0": +"esbuild@npm:^0.27.0, esbuild@npm:~0.27.0": version: 0.27.3 resolution: "esbuild@npm:0.27.3" dependencies: @@ -9807,7 +9976,6 @@ __metadata: babel-plugin-graphql-tag: "npm:^3.3.0" concurrently: "npm:^9.2.1" cross-env: "npm:^10.1.0" - esbuild: "npm:^0.27.3" eslint: "npm:^9.39.4" eslint-config-ndla: "npm:^6.0.14-alpha.0" express: "npm:5.2.1" @@ -9833,6 +10001,7 @@ __metadata: react-hook-form: "npm:^7.53.2" react-i18next: "npm:^16.5.3" react-router: "npm:^7.12.0" + rolldown: "npm:^1.0.0-rc.8" rxjs: "npm:^7.8.2" serialize-javascript: "npm:^7.0.4" sirv: "npm:^3.0.2" @@ -11423,6 +11592,64 @@ __metadata: languageName: node linkType: hard +"rolldown@npm:^1.0.0-rc.8": + version: 1.0.0-rc.8 + resolution: "rolldown@npm:1.0.0-rc.8" + dependencies: + "@oxc-project/types": "npm:=0.115.0" + "@rolldown/binding-android-arm64": "npm:1.0.0-rc.8" + "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.8" + "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.8" + "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.8" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.8" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.8" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.8" + "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0-rc.8" + "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0-rc.8" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.8" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.8" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.8" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.8" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.8" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.8" + "@rolldown/pluginutils": "npm:1.0.0-rc.8" + dependenciesMeta: + "@rolldown/binding-android-arm64": + optional: true + "@rolldown/binding-darwin-arm64": + optional: true + "@rolldown/binding-darwin-x64": + optional: true + "@rolldown/binding-freebsd-x64": + optional: true + "@rolldown/binding-linux-arm-gnueabihf": + optional: true + "@rolldown/binding-linux-arm64-gnu": + optional: true + "@rolldown/binding-linux-arm64-musl": + optional: true + "@rolldown/binding-linux-ppc64-gnu": + optional: true + "@rolldown/binding-linux-s390x-gnu": + optional: true + "@rolldown/binding-linux-x64-gnu": + optional: true + "@rolldown/binding-linux-x64-musl": + optional: true + "@rolldown/binding-openharmony-arm64": + optional: true + "@rolldown/binding-wasm32-wasi": + optional: true + "@rolldown/binding-win32-arm64-msvc": + optional: true + "@rolldown/binding-win32-x64-msvc": + optional: true + bin: + rolldown: bin/cli.mjs + checksum: 10c0/791354cc0248e4cd9c303b311041995a99631f6136bc3f63b080d840caff2519fbdad0ed3594f4667d50101859a887cddd265a5b3795193714e8ec8f3005f261 + languageName: node + linkType: hard + "rollup@npm:^4.43.0": version: 4.59.0 resolution: "rollup@npm:4.59.0"