#!/usr/bin/env bash set -euo pipefail shopt -s inherit_errexit # Check for cargo and wasm-bindgen which cargo wasm-bindgen wasm-opt &> /dev/null || { echo "Please install cargo, wasm-bindgen, and wasm-opt! Exiting..." exit 1 } WBG="wasm-bindgen 0.2.99" if ! [[ "$(wasm-bindgen -V)" =~ ^"$WBG" ]]; then echo "Incorrect wasm-bindgen-cli version: '$(wasm-bindgen -V)' != '$WBG'" exit 1 fi if ! [ "${RELEASE:-0}" = "1" ]; then : "${WASMOPTFLAGS:=-g}" : "${FEATURES:=debug}" else : "${WASMOPTFLAGS:=}" : "${FEATURES:=}" fi RUSTFLAGS='-C target-feature=+atomics,+bulk-memory,+simd128 -Zlocation-detail=none -Zfmt-debug=none' cargo build --lib --target wasm32-unknown-unknown -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort --no-default-features --features "$FEATURES" --release wasm-bindgen --target web --out-dir out/ ../target/wasm32-unknown-unknown/release/wasm.wasm sed -i 's/import.meta.url/""/g' out/wasm.js cd ../../ wasm-snip rewriter/wasm/out/wasm_bg.wasm -o rewriter/wasm/out/wasm_snipped.wasm \ -p 'oxc_regular_expression::.*' \ 'oxc_parser::ts::types::::parse_non_array_type' \ 'oxc_parser::ts::statement::::parse_declaration' \ 'oxc_parser::ts::types::::parse_ts_import_type' \ 'oxc_parser::ts::types::::parse_type_operator_or_higher' \ 'oxc_parser::ts::statement::::parse_ts_interface_declaration' \ 'oxc_parser::ts::types::::parse_mapped_type' \ 'oxc_parser::ts::types::::parse_index_signature_declaration' \ 'oxc_parser::ts::statement::::parse_ts_import_equals_declaration' \ 'oxc_parser::ts::types::::parse_type_or_type_predicate' \ 'oxc_parser::ts::statement::::parse_ts_namespace_or_module_declaration_body' \ 'oxc_parser::ts::types::::parse_ts_implements_clause' \ 'oxc_parser::ts::types::::parse_intersection_type_or_higher' \ 'oxc_parser::ts::types::::parse_ts_type_name' \ 'oxc_parser::ts::types::::parse_literal_type_node' \ 'oxc_parser::ts::types::::parse_asserts_type_predicate' \ 'oxc_parser::ts::types::::parse_tuple_element_type' \ 'oxc_parser::ts::types::::parse_type_arguments_of_type_reference' \ 'oxc_parser::ts::types::::parse_ts_call_signature_member' \ 'oxc_parser::ts::types::::is_start_of_type' \ 'oxc_parser::ts::types::::parse_this_type_predicate' \ 'oxc_parser::ts::types::::parse_type_query' \ 'oxc_parser::ts::types::::parse_type_reference' \ 'oxc_parser::ts::types::::parse_type_operator' \ 'oxc_parser::ts::types::::parse_type_literal' \ 'oxc_parser::ts::statement::::is_at_enum_declaration' \ 'oxc_parser::jsx::::parse_jsx_element' \ 'oxc_parser::jsx::::parse_jsx_identifier' \ 'oxc_parser::jsx::::parse_jsx_element_name' \ 'oxc_parser::jsx::::parse_jsx_children' \ 'oxc_parser::jsx::::parse_jsx_fragment' \ 'oxc_parser::jsx::::parse_jsx_expression_container' \ 'oxc_parser::jsx::::parse_jsx_expression' # # these are confirmed to break oxc # 'oxc_parser::ts::types::::parse_ts_type' \ # 'oxc_parser::ts::types::::parse_type_arguments_in_expression' \ # 'oxc_parser::ts::types::::parse_ts_type_parameters' \ # 'oxc_parser::ts::types::::parse_class_element_modifiers' \ # 'oxc_parser::ts::statement::::eat_decorators' \ # 'oxc_parser::ts::statement::::is_nth_at_modifier' \ # 'oxc_parser::ts::types::::try_parse_type_arguments' \ # 'oxc_parser::ts::statement::::is_at_ts_index_signature_member' \ # 'oxc_parser::ts::types::::parse_ts_return_type_annotation' \ # 'oxc_parser::ts::statement::::parse_ts_type_annotation' \ # shellcheck disable=SC2086 time wasm-opt $WASMOPTFLAGS --converge -tnh -O4 --vacuum --dce --enable-threads --enable-bulk-memory --enable-simd rewriter/wasm/out/wasm_snipped.wasm -o rewriter/wasm/out/optimized.wasm mkdir -p dist/ cp rewriter/wasm/out/optimized.wasm dist/scramjet.wasm.wasm { cat < dist/scramjet.wasm.js echo "Rewriter Build Complete!"