From b4c4dc48fff9a7a376e83d1d3ad4a261cdf50e2f Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Fri, 26 Apr 2019 19:13:32 -0700 Subject: [PATCH] Minify JS build with terser --- lib/web/package.json | 3 ++- lib/web/test/helper.js | 7 +++---- script/build-wasm | 28 ++++++++++++++++++++++------ script/generate-fixtures-wasm | 3 ++- script/serve-docs | 23 +++++++++++++---------- 5 files changed, 42 insertions(+), 22 deletions(-) diff --git a/lib/web/package.json b/lib/web/package.json index c8d6277d..9f0b60bc 100644 --- a/lib/web/package.json +++ b/lib/web/package.json @@ -25,6 +25,7 @@ "homepage": "https://github.com/tree-sitter/tree-sitter#readme", "devDependencies": { "chai": "^4.2.0", - "mocha": "^6.1.4" + "mocha": "^6.1.4", + "terser": "^3.17.0" } } diff --git a/lib/web/test/helper.js b/lib/web/test/helper.js index 7fb36879..6586f247 100644 --- a/lib/web/test/helper.js +++ b/lib/web/test/helper.js @@ -1,9 +1,8 @@ -const Parser = require('../../../target/release/tree-sitter.js'); -const Python = require.resolve('../../../target/scratch/tree-sitter-python.wasm'); -const JavaScript = require.resolve('../../../target/scratch/tree-sitter-javascript.wasm'); +const release = '../../../target/release' +const Parser = require(`${release}/tree-sitter.js`); +const JavaScript = require.resolve(`${release}/tree-sitter-javascript.wasm`); module.exports = Parser.init().then(async () => ({ Parser, JavaScript: await Parser.Language.load(JavaScript), - Python: await Parser.Language.load(Python) })); diff --git a/script/build-wasm b/script/build-wasm index a579ebfe..819c601f 100755 --- a/script/build-wasm +++ b/script/build-wasm @@ -1,15 +1,15 @@ #!/usr/bin/env bash +set -e + export EMCC_FORCE_STDLIBS=libc++ args="-Os" -target_dir="target/release" if [[ "$1" == "--debug" ]]; then - args="-s SAFE_HEAP=1 -O0" - target_dir="target/debug" + args="-s ASSERTIONS=1 SAFE_HEAP=1 -O0" fi -mkdir -p $target_dir +mkdir -p target/scratch target/release docker run \ --rm \ @@ -21,7 +21,6 @@ docker run \ -s WASM=1 \ -s ALLOW_MEMORY_GROWTH \ -s MAIN_MODULE=1 \ - -s ASSERTIONS=1 \ -s EXPORT_ALL=1 \ $args \ -std=c99 \ @@ -34,4 +33,21 @@ docker run \ --post-js lib/web/binding.js \ lib/src/lib.c \ lib/web/binding.c \ - -o $target_dir/tree-sitter.js + -o target/scratch/tree-sitter.js + +if [ ! -d lib/web/node_modules/terser ]; then + ( + cd lib/web + npm install + ) +fi + +lib/web/node_modules/.bin/terser \ + --compress \ + --mangle \ + --keep-fnames \ + --keep-classnames \ + -- target/scratch/tree-sitter.js \ + > target/release/tree-sitter.js + +mv target/scratch/tree-sitter.wasm target/release/tree-sitter.wasm diff --git a/script/generate-fixtures-wasm b/script/generate-fixtures-wasm index 0713de17..cbcf88bd 100755 --- a/script/generate-fixtures-wasm +++ b/script/generate-fixtures-wasm @@ -8,6 +8,7 @@ root_dir=$PWD tree_sitter=${root_dir}/target/release/tree-sitter grammars_dir=${root_dir}/test/fixtures/grammars grammar_names=( + c javascript python ) @@ -21,4 +22,4 @@ for grammar_name in ${grammar_names[@]}; do $tree_sitter build-wasm ${grammars_dir}/${grammar_name} done -mv tree-sitter-*.wasm target/scratch/ +mv tree-sitter-*.wasm target/release/ diff --git a/script/serve-docs b/script/serve-docs index 48b9e480..f3a80a15 100755 --- a/script/serve-docs +++ b/script/serve-docs @@ -7,17 +7,20 @@ bundle exec jekyll serve "$@" & bundle exec ruby <