#!/bin/bash # https://docs.sheetjs.com/docs/demos/engines/chakra OS=$(uname -s) ARCH=$(uname -m) case "$OS" in Darwin|Linux) ;; *) echo "Unsupported OS: $OS"; exit 1 ;; esac case "$ARCH" in x86_64) ARCH="x64" ;; arm64|aarch64) ARCH="arm64" ;; *) echo "Unsupported architecture: $ARCH"; exit 1 ;; esac cd /tmp rm -rf sheetjs-chakra mkdir sheetjs-chakra cd sheetjs-chakra git clone https://github.com/chakra-core/ChakraCore.git cd ChakraCore git checkout 792ee76 cd .. cd ChakraCore case "$OS" in Darwin) BREW_PREFIX=$(brew --prefix) # Check for required commands if ! command -v cmake &> /dev/null; then echo "cmake not found. Please install cmake (e.g., brew install cmake)" exit 1 fi if ! brew list icu4c &> /dev/null; then echo "icu4c not found. Please install icu4c (e.g., brew install icu4c)" exit 1 fi if [ ! -d usr/local/opt ] && [ -d "${BREW_PREFIX}/opt/icu4c" ]; then mkdir -p usr/local/opt ln -sf "${BREW_PREFIX}/opt/icu4c" usr/local/opt/icu4c fi for f in CMakeLists.txt pal/CMakeLists.txt pal/src/CMakeLists.txt lib/wabt/CMakeLists.txt; do if [ -f "$f" ] && grep -q "cmake_minimum_required(VERSION 3.2)" "$f"; then sed -i '' 's/cmake_minimum_required(VERSION 3.2)/cmake_minimum_required(VERSION 4.0)/g' "$f" fi done if [ "$ARCH" = "arm64" ]; then if grep -q "^operator new(" lib/Common/Memory/Allocator.h 2>/dev/null; then sed -i '' ':a;N;$!ba;s/#ifndef __PLACEMENT_NEW_INLINE.*#endif/#include /g' lib/Common/Memory/Allocator.h fi ./build.sh --static --no-icu --test-build -j=8 --no-jit else ./build.sh --static --icu=${BREW_PREFIX}/opt/icu4c/include --test-build -j=8 --system-icu --no-jit fi ;; Linux) # Check for required commands if ! command -v cmake &> /dev/null; then echo "cmake not found. Please install cmake (e.g., sudo apt-get install cmake or sudo pacman -S cmake)" exit 1 fi if ! command -v clang++ &> /dev/null; then echo "clang++ not found. Please install clang (e.g., sudo apt-get install clang or sudo pacman -S clang)" exit 1 fi ./build.sh --static --embed-icu --test-build -j=8 --no-jit ;; esac cd .. curl -L -O https://docs.sheetjs.com/chakra/sheetjs.ch.cpp curl -L -O https://docs.sheetjs.com/chakra/Makefile if [[ "$OS" == "Darwin" && "$ARCH" == "x64" && ! -d /usr/local/opt/icu4c ]]; then sudo mkdir -p /usr/local/opt 2>/dev/null || true sudo ln -sf "${BREW_PREFIX}/opt/icu4c" /usr/local/opt 2>/dev/null || true fi make curl -L -O https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js curl -L -O https://docs.sheetjs.com/pres.numbers ./sheetjs.ch pres.numbers cp ChakraCore/out/Test/ch . node -e "fs.writeFileSync('payload.js', 'var payload = \"' + fs.readFileSync('pres.numbers').toString('base64') + '\";')" cat >global.js <<'EOF' var global = (function(){ return this; }).call(null); EOF cat >chakra.js <<'EOF' var wb = XLSX.read(payload, {type:'base64'}); console.log(XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]])); EOF cat global.js xlsx.full.min.js payload.js chakra.js > xlsx.chakra.js ./ch xlsx.chakra.js