Skip to content

Commit 5dcc147

Browse files
Add compat shims for deprecated files
1 parent 7db68aa commit 5dcc147

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

packages/npm-packages/ruby-3_2-wasm-wasi/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
"scripts": {
1414
"test": "RUBY_NPM_PACKAGE_ROOT=../ruby-3_2-wasm-wasi npm -C ../ruby-wasm-wasi test",
1515
"build:deps": "cd ../ruby-wasm-wasi && npm run build",
16-
"build:static": "../ruby-wasm-wasi/tools/pack-static-files.sh ./dist",
16+
"build:static:wasm": "../ruby-wasm-wasi/tools/pack-static-files.sh ./dist",
17+
"build:static:compat": "../ruby-wasm-wasi/tools/pack-compat-shim.mjs --dist=./dist --pkg=ruby-3_2-wasm-wasi",
18+
"build:static": "npm run build:static:wasm && npm run build:static:compat",
1719
"build:rollup": "rollup -c rollup.config.mjs",
1820
"build": "npm run build:deps && npm run build:static && npm run build:rollup"
1921
},

packages/npm-packages/ruby-head-wasm-wasi/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
"scripts": {
1414
"test": "RUBY_NPM_PACKAGE_ROOT=../ruby-head-wasm-wasi npm -C ../ruby-wasm-wasi test",
1515
"build:deps": "cd ../ruby-wasm-wasi && npm run build",
16-
"build:static": "../ruby-wasm-wasi/tools/pack-static-files.sh ./dist",
16+
"build:static:wasm": "../ruby-wasm-wasi/tools/pack-static-files.sh ./dist",
17+
"build:static:compat": "../ruby-wasm-wasi/tools/pack-compat-shim.mjs --dist=./dist --pkg=ruby-head-wasm-wasi",
18+
"build:static": "npm run build:static:wasm && npm run build:static:compat",
1719
"build:rollup": "rollup -c rollup.config.mjs",
1820
"build": "npm run build:deps && npm run build:static && npm run build:rollup"
1921
},
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#!/usr/bin/env node
2+
3+
import path from 'path';
4+
import fs from 'fs';
5+
6+
const parseArgs = () => {
7+
const args = process.argv.slice(2);
8+
const options = {};
9+
args.forEach((arg) => {
10+
const [key, value] = arg.split('=');
11+
options[key.replace('--', '')] = value;
12+
});
13+
return options;
14+
};
15+
16+
const shimContent = (target, pkg) => {
17+
const suffix = target.split('.').slice(-2).join('.');
18+
const deprecationMessage = (original, replacement) => {
19+
return `DEPRECATED(${pkg}): "${target}" will be moved to "@ruby/wasm-wasi" in the next major release.\n`
20+
+ `Please replace your \\\`${original}\\\` with \\\`${replacement}\\\``;
21+
};
22+
23+
let originalImport = '';
24+
let newImport = '';
25+
switch (suffix) {
26+
case 'cjs.js':
27+
originalImport = `require('${pkg}/dist/${target}');`;
28+
newImport = `require('@ruby/wasm-wasi/dist/${target}');`;
29+
break;
30+
case 'umd.js':
31+
originalImport = `require('${pkg}/dist/${target}');`;
32+
newImport = `require('@ruby/wasm-wasi/dist/${target}');`;
33+
break;
34+
case 'd.ts':
35+
case 'esm.js':
36+
originalImport = `import * from '${pkg}/dist/${target}';`;
37+
newImport = `import * from '@ruby/wasm-wasi/dist/${target}';`;
38+
break;
39+
default:
40+
throw new Error(`Unknown suffix: ${suffix} for target ${target}`);
41+
}
42+
43+
const dirname = path.dirname(new URL(import.meta.url).pathname);
44+
const content = fs.readFileSync(path.join(dirname, '..', 'dist', target), 'utf-8');
45+
if (suffix === 'd.ts') {
46+
return content
47+
}
48+
const deprecation = "\x1b[33m" + deprecationMessage(originalImport, newImport) + "\x1b[0m";
49+
return `console.warn(\`${deprecation}\`);\n\n${content}`;
50+
}
51+
52+
const main = () => {
53+
const targets = [
54+
"bindgen/rb-abi-guest.d.ts",
55+
"bindgen/rb-js-abi-host.d.ts",
56+
"browser.cjs.js",
57+
"browser.d.ts",
58+
"browser.esm.js",
59+
"browser.script.cjs.js",
60+
"browser.script.d.ts",
61+
"browser.script.esm.js",
62+
"browser.script.umd.js",
63+
"browser.umd.js",
64+
"index.cjs.js",
65+
"index.d.ts",
66+
"index.esm.js",
67+
"index.umd.js",
68+
"node.cjs.js",
69+
"node.d.ts",
70+
"node.esm.js",
71+
]
72+
73+
const options = parseArgs();
74+
if (!options.dist || !options.pkg) {
75+
throw new Error('--dist=path and --pkg=name is required');
76+
}
77+
const { dist, pkg } = options
78+
79+
for (const target of targets) {
80+
const shimmed = shimContent(target, pkg);
81+
const distPath = path.join(dist, target);
82+
fs.mkdirSync(path.dirname(distPath), { recursive: true });
83+
fs.writeFileSync(distPath, shimmed);
84+
}
85+
}
86+
87+
main();

0 commit comments

Comments
 (0)