From 7b437947474ace04b2cbd5178457af79be85a0b6 Mon Sep 17 00:00:00 2001 From: PoseidonEnergy Date: Mon, 13 Jul 2026 16:47:12 -0500 Subject: [PATCH 1/2] dump build files into a "dist" folder instead of next to package.json --- typescript/rapier-compat/fix_raw_file.sh | 4 +- typescript/rapier-compat/gen_src.sh | 17 ++- typescript/rapier-compat/rollup.config.js | 135 ++++++++++--------- typescript/rapier-compat/src2d/init.ts | 4 +- typescript/rapier-compat/src2d/raw.ts | 2 +- typescript/rapier-compat/src3d/init.ts | 4 +- typescript/rapier-compat/src3d/raw.ts | 2 +- typescript/rapier-compat/tsconfig.pkg2d.json | 3 +- typescript/rapier-compat/tsconfig.pkg3d.json | 3 +- 9 files changed, 91 insertions(+), 83 deletions(-) diff --git a/typescript/rapier-compat/fix_raw_file.sh b/typescript/rapier-compat/fix_raw_file.sh index 8f146a54e..3daaf81cd 100644 --- a/typescript/rapier-compat/fix_raw_file.sh +++ b/typescript/rapier-compat/fix_raw_file.sh @@ -9,6 +9,6 @@ do # whatever the feature variant (-deterministic/-simd) of the build. dimension="${feature%%-*}" -echo 'export * from "'"./rapier_wasm$dimension"'"' > builds/${feature}/pkg/raw.d.ts +echo "export * from \"./rapier_wasm${dimension}\";" > "builds/${feature}/pkg/dist/raw.d.ts" -done; \ No newline at end of file +done; diff --git a/typescript/rapier-compat/gen_src.sh b/typescript/rapier-compat/gen_src.sh index 24ccc4418..e746b3f05 100755 --- a/typescript/rapier-compat/gen_src.sh +++ b/typescript/rapier-compat/gen_src.sh @@ -40,19 +40,22 @@ do feature="${1}d-${2}"; fi - mkdir -p ./builds/${feature}/pkg/ + pkg_dir="./builds/${feature}/pkg" + dist_dir="${pkg_dir}/dist" - cp ./builds/${feature}/wasm-build/rapier_wasm* ./builds/${feature}/pkg/ - cp -r ./gen${dimension}d ./builds/${feature}/ + mkdir -p "${dist_dir}" + + cp ./builds/${feature}/wasm-build/rapier_wasm* "${dist_dir}/" + cp -r "./gen${dimension}d" "./builds/${feature}/" # copy tsconfig, as they contain paths - cp ./tsconfig.common.json ./tsconfig.json ./builds/${feature}/ - cp ./tsconfig.pkg${dimension}d.json ./builds/${feature}/tsconfig.pkg.json + cp ./tsconfig.common.json ./tsconfig.json "./builds/${feature}/" + cp "./tsconfig.pkg${dimension}d.json" "./builds/${feature}/tsconfig.pkg.json" # "import.meta" causes Babel to choke, but the code path is never taken so just remove it. - sed -i.bak 's/import.meta.url/""/g' ./builds/${feature}/pkg/rapier_wasm${dimension}d.js + sed -i.bak 's/import.meta.url/""/g' "${dist_dir}/rapier_wasm${dimension}d.js" # Clean up backup files. - find ./builds/${feature}/pkg/ -type f -name '*.bak' | xargs rm + find "${dist_dir}" -type f -name '*.bak' -delete done diff --git a/typescript/rapier-compat/rollup.config.js b/typescript/rapier-compat/rollup.config.js index d127c6714..88f95db1a 100644 --- a/typescript/rapier-compat/rollup.config.js +++ b/typescript/rapier-compat/rollup.config.js @@ -7,73 +7,76 @@ import {base64} from "rollup-plugin-base64"; import copy from "rollup-plugin-copy"; import filesize from "rollup-plugin-filesize"; -const config = (dim, features_postfix) => ({ - input: `builds/${features_postfix}/gen${dim}/rapier.ts`, - output: [ - { - file: `builds/${features_postfix}/pkg/rapier.mjs`, - format: "es", - sourcemap: true, - exports: "named", - }, - { - file: `builds/${features_postfix}/pkg/rapier.cjs`, - format: "cjs", - sourcemap: true, - exports: "named", - }, - ], - plugins: [ - copy({ - targets: [ - { - src: `builds/${features_postfix}/wasm-build/package.json`, - dest: `builds/${features_postfix}/pkg/`, - transform(content) { - let config = JSON.parse(content.toString()); - config.name = `@dimforge/rapier${features_postfix}-compat`; - config.description += - " Compatibility package with inlined webassembly as base64."; - config.types = "rapier.d.ts"; - config.main = "rapier.cjs"; - config.module = "rapier.mjs"; - config.exports = { - ".": { - types: "./rapier.d.ts", - require: "./rapier.cjs", - import: "./rapier.mjs", - }, - }; - // delete config.module; - config.files = ["*"]; - return JSON.stringify(config, undefined, 2); +const config = (dim, features_postfix) => { + const pkgDir = `builds/${features_postfix}/pkg`; + const distDir = `${pkgDir}/dist`; + return { + input: `builds/${features_postfix}/gen${dim}/rapier.ts`, + output: [ + { + file: `${distDir}/rapier.mjs`, + format: "es", + sourcemap: true, + exports: "named", + }, + { + file: `${distDir}/rapier.cjs`, + format: "cjs", + sourcemap: true, + exports: "named", + }, + ], + plugins: [ + copy({ + targets: [ + { + src: `builds/${features_postfix}/wasm-build/package.json`, + dest: pkgDir, + transform(content) { + let config = JSON.parse(content.toString()); + config.name = `@dimforge/rapier${features_postfix}-compat`; + config.description += + " Compatibility package with inlined webassembly as base64."; + config.types = "dist/rapier.d.ts"; + config.main = "dist/rapier.cjs"; + config.module = "dist/rapier.mjs"; + config.exports = { + ".": { + types: "./dist/rapier.d.ts", + require: "./dist/rapier.cjs", + import: "./dist/rapier.mjs", + }, + }; + // delete config.module; + config.files = ["dist"]; + return JSON.stringify(config, undefined, 2); + }, }, - }, - { - src: `../rapier${features_postfix}/LICENSE`, - dest: `builds/${features_postfix}/pkg`, - }, - { - src: `../rapier${features_postfix}/README.md`, - dest: `builds/${features_postfix}/pkg`, - }, - ], - }), - base64({include: "**/*.wasm"}), - terser(), - nodeResolve(), - commonjs(), - typescript({ - tsconfig: path.resolve( - __dirname, - `builds/${features_postfix}/tsconfig.pkg.json`, - ), - sourceMap: true, - inlineSources: true, - }), - filesize(), - ], -}); + { + src: `../rapier${features_postfix}/LICENSE`, + dest: pkgDir, + }, + { + src: `../rapier${features_postfix}/README.md`, + dest: pkgDir, + }, + ], + }), + base64({include: "**/*.wasm"}), + nodeResolve(), + commonjs(), + typescript({ + tsconfig: path.resolve( + __dirname, + `builds/${features_postfix}/tsconfig.pkg.json`, + ), + sourceMap: true, + inlineSources: true, + }), + filesize(), + ], + }; +}; export default [ config("2d", "2d"), diff --git a/typescript/rapier-compat/src2d/init.ts b/typescript/rapier-compat/src2d/init.ts index 7add6604f..c400df18b 100644 --- a/typescript/rapier-compat/src2d/init.ts +++ b/typescript/rapier-compat/src2d/init.ts @@ -1,6 +1,6 @@ // @ts-ignore -import wasmBase64 from "../pkg/rapier_wasm2d_bg.wasm"; -import wasmInit from "../pkg/rapier_wasm2d"; +import wasmBase64 from "../pkg/dist/rapier_wasm2d_bg.wasm"; +import wasmInit from "../pkg/dist/rapier_wasm2d"; import base64 from "base64-js"; /** diff --git a/typescript/rapier-compat/src2d/raw.ts b/typescript/rapier-compat/src2d/raw.ts index 4eadaffad..a1821e533 100644 --- a/typescript/rapier-compat/src2d/raw.ts +++ b/typescript/rapier-compat/src2d/raw.ts @@ -1 +1 @@ -export * from "../pkg/rapier_wasm2d"; +export * from "../pkg/dist/rapier_wasm2d"; diff --git a/typescript/rapier-compat/src3d/init.ts b/typescript/rapier-compat/src3d/init.ts index cc143df67..9753fbc90 100644 --- a/typescript/rapier-compat/src3d/init.ts +++ b/typescript/rapier-compat/src3d/init.ts @@ -1,6 +1,6 @@ // @ts-ignore -import wasmBase64 from "../pkg/rapier_wasm3d_bg.wasm"; -import wasmInit from "../pkg/rapier_wasm3d"; +import wasmBase64 from "../pkg/dist/rapier_wasm3d_bg.wasm"; +import wasmInit from "../pkg/dist/rapier_wasm3d"; import base64 from "base64-js"; /** diff --git a/typescript/rapier-compat/src3d/raw.ts b/typescript/rapier-compat/src3d/raw.ts index b123ae6b3..e5d1ea60c 100644 --- a/typescript/rapier-compat/src3d/raw.ts +++ b/typescript/rapier-compat/src3d/raw.ts @@ -1 +1 @@ -export * from "../pkg/rapier_wasm3d"; +export * from "../pkg/dist/rapier_wasm3d"; diff --git a/typescript/rapier-compat/tsconfig.pkg2d.json b/typescript/rapier-compat/tsconfig.pkg2d.json index 77349ed25..47937c518 100644 --- a/typescript/rapier-compat/tsconfig.pkg2d.json +++ b/typescript/rapier-compat/tsconfig.pkg2d.json @@ -2,7 +2,8 @@ "extends": "./tsconfig.common.json", "compilerOptions": { "rootDir": "./gen2d", - "outDir": "./2d" + "outDir": "./pkg/dist", + "declarationDir": "./pkg/dist" }, "files": ["./gen2d/rapier.ts"] } diff --git a/typescript/rapier-compat/tsconfig.pkg3d.json b/typescript/rapier-compat/tsconfig.pkg3d.json index 3d7323e88..7e98ddd06 100644 --- a/typescript/rapier-compat/tsconfig.pkg3d.json +++ b/typescript/rapier-compat/tsconfig.pkg3d.json @@ -2,7 +2,8 @@ "extends": "./tsconfig.common.json", "compilerOptions": { "rootDir": "./gen3d", - "outDir": "." + "outDir": "./pkg/dist", + "declarationDir": "./pkg/dist" }, "files": ["./gen3d/rapier.ts"] } From 21fb9e687da684bbeee4c3e9bfc3fd4374de106f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Crozet?= Date: Sat, 8 Aug 2026 17:07:15 +0200 Subject: [PATCH 2/2] chore: update the rollup config --- .github/workflows/typescript-bindings.yml | 4 ++-- typescript/CHANGELOG.md | 5 +++++ typescript/rapier-compat/build-rust.sh | 10 +++++----- typescript/rapier-compat/rollup.config.js | 9 +++++++-- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/.github/workflows/typescript-bindings.yml b/.github/workflows/typescript-bindings.yml index 9036dce82..416bdae7d 100644 --- a/.github/workflows/typescript-bindings.yml +++ b/.github/workflows/typescript-bindings.yml @@ -148,12 +148,12 @@ jobs: # Check simd for compat builds - name: Check 2d simd compat build run: | - if ! wasm-objdump -d rapier-compat/builds/2d-simd/pkg/rapier_wasm2d_bg.wasm | grep :\\sfd ; then + if ! wasm-objdump -d rapier-compat/builds/2d-simd/pkg/dist/rapier_wasm2d_bg.wasm | grep :\\sfd ; then >&2 echo "ERROR: 2d simd compat build does not include simd opcode prefix." && exit 1; fi - name: Check 3d simd compat build run: | - if ! wasm-objdump -d rapier-compat/builds/3d-simd/pkg/rapier_wasm3d_bg.wasm | grep :\\sfd ; then + if ! wasm-objdump -d rapier-compat/builds/3d-simd/pkg/dist/rapier_wasm3d_bg.wasm | grep :\\sfd ; then >&2 echo "ERROR: 3d simd compat build does not include simd opcode prefix." && exit 1; fi # Upload diff --git a/typescript/CHANGELOG.md b/typescript/CHANGELOG.md index b0f4f4060..9b4668f69 100644 --- a/typescript/CHANGELOG.md +++ b/typescript/CHANGELOG.md @@ -2,6 +2,11 @@ ### Breaking changes +- The files of the `-compat` packages moved from the package root into `dist/` + (`dist/rapier.mjs`, `dist/rapier.cjs`, `dist/rapier.d.ts`). Imports resolved through + the package entry (bundlers, `+esm` CDN URLs) are unaffected; pinned CDN URLs or deep + imports referencing the old root-level files must add the `dist/` segment. + - Removed `IntegrationParameters.minIslandSize`: awake bodies are now solved as a single active set, so there is no island size to tune. - `NarrowPhase.contactPair` takes the `RigidBodySet` as its third argument. Solver diff --git a/typescript/rapier-compat/build-rust.sh b/typescript/rapier-compat/build-rust.sh index b413b0590..8cf207435 100755 --- a/typescript/rapier-compat/build-rust.sh +++ b/typescript/rapier-compat/build-rust.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh help() @@ -17,14 +17,14 @@ do esac done -if [[ -z "$dimension" ]]; then +if [ -z "$dimension" ]; then help; exit 2; fi -if [[ -z "$feature" ]]; then +if [ -z "$feature" ]; then help; exit 3; fi -if [[ $feature == "non-deterministic" ]]; then +if [ "$feature" = "non-deterministic" ]; then feature_postfix="" else feature_postfix="-${feature}" @@ -41,7 +41,7 @@ fi # Working dir in wasm-pack is the project root so we need that "../../" -if [[ $feature == "simd" ]]; then +if [ "$feature" = "simd" ]; then export additional_rustflags='-C target-feature=+simd128' else export additional_rustflags='' diff --git a/typescript/rapier-compat/rollup.config.js b/typescript/rapier-compat/rollup.config.js index 88f95db1a..7b01dcfa1 100644 --- a/typescript/rapier-compat/rollup.config.js +++ b/typescript/rapier-compat/rollup.config.js @@ -49,20 +49,25 @@ const config = (dim, features_postfix) => { }; // delete config.module; config.files = ["dist"]; + // The base manifest's `sideEffects: ["./*.js"]` matches + // nothing (the bundles are .cjs/.mjs), which bundlers already + // treat as "no side effects"; say so explicitly. + config.sideEffects = false; return JSON.stringify(config, undefined, 2); }, }, { - src: `../rapier${features_postfix}/LICENSE`, + src: `../builds/rapier${features_postfix}/LICENSE`, dest: pkgDir, }, { - src: `../rapier${features_postfix}/README.md`, + src: `../builds/rapier${features_postfix}/README.md`, dest: pkgDir, }, ], }), base64({include: "**/*.wasm"}), + terser(), nodeResolve(), commonjs(), typescript({