Skip to content

Commit 467f83b

Browse files
committed
feat(default): implement binaryen optimization
use dafault global optimization Module#optimize() ```json { optimization: "-O2 and -Os", passes: [ "duplicate-function-elimination", "inlining-optimizing", "remove-unused-module-elements", "memory-packing" ] debug: false //◀️setDebugInfo(false) } ``` default `passes` are from: https://github.com/WebAssembly/binaryen on `src/passes/pass.cpp#L190-L204`
1 parent 1cc90b6 commit 467f83b

File tree

5 files changed

+23
-18
lines changed

5 files changed

+23
-18
lines changed

.eslintrc.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module.exports = {
77
'error',
88
{ singleQuote: true, trailingComma: 'es5', arrowParens: 'always' },
99
],
10-
'prefer-destructuring': ['error', {'object': true, 'array': false}]
10+
'prefer-destructuring': ['error', {'object': true, 'array': false}],
11+
'line-comment-position': ['off'],
1112
},
1213
};

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
},
4646
"dependencies": {
4747
"@webpack-contrib/schema-utils": "^1.0.0-beta.0",
48+
"binaryen": "^48.0.0",
4849
"loader-utils": "^1.1.0"
4950
},
5051
"devDependencies": {

src/index.js

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,28 @@
1+
import assert from 'assert';
2+
13
import { getOptions } from 'loader-utils';
24
import validate from '@webpack-contrib/schema-utils';
5+
import { readBinary, setDebugInfo } from 'binaryen';
36

47
import schema from './options.json';
58

6-
export const raw = false;
9+
export const raw = true;
710

811
export default function loader(source) {
9-
const { version, webpack } = this;
12+
assert(source instanceof Buffer); // ⬅️ verify if the loaded source is binary file
1013

11-
const options = getOptions(this) || {};
14+
const wasmModule = readBinary(source);
15+
const options = getOptions(this) || {}; // ⬅️ empty object for "if-able"
1216

1317
validate({
1418
name: 'binaryen-loader',
15-
schema,
19+
schema, // ⬅ ️validate options using JSON-schema in options.json
1620
target: options,
1721
});
1822

19-
const newSource = `
20-
/**
21-
* Loader API Version: ${version}
22-
* Is this in "webpack mode": ${webpack}
23-
*/
24-
/**
25-
* Original Source From Loader
26-
*/
27-
${source}`;
28-
29-
return `${newSource}`;
23+
// `..|| false` since docs not clear enough about the default value
24+
setDebugInfo(options.debug || false);
25+
wasmModule.optimize();
26+
27+
return wasmModule.emitBinary();
3028
}

src/options.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"type": "object",
33
"properties": {
4-
"name": {
4+
"debug": {
55
"type": "boolean"
66
}
77
},
88
"additionalProperties": false
9-
}
9+
}

0 commit comments

Comments
 (0)