darwin-x64 refresh

This commit is contained in:
SheetJS 2025-03-31 22:57:45 -04:00
parent 4ada56688f
commit 255ad00bf4
35 changed files with 354 additions and 207 deletions

@ -300,7 +300,7 @@
<Row>
<Cell ss:StyleID="s20" ss:HRef="/docs/demos/engines/duktape#rust"><Data ss:Type="String">Duktape</Data></Cell>
<Cell><Data ss:Type="String">Rust</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String">✔</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
@ -350,7 +350,7 @@
<Row>
<Cell ss:StyleID="s20" ss:HRef="/docs/demos/engines/v8#python"><Data ss:Type="String">V8</Data></Cell>
<Cell><Data ss:Type="String">Python</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String">✔</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String"></Data></Cell>
@ -370,7 +370,7 @@
<Row>
<Cell ss:StyleID="s20" ss:HRef="/docs/demos/engines/jsc#rust"><Data ss:Type="String">JSC</Data></Cell>
<Cell><Data ss:Type="String">Rust</Data></Cell>
<Cell ss:StyleID="s16"/>
<Cell ss:StyleID="s16"><Data ss:Type="String">✔</Data></Cell>
<Cell ss:StyleID="s16"><Data ss:Type="String">✔</Data></Cell>
<Cell ss:StyleID="s16"/>
<Cell ss:StyleID="s16"/>

@ -121,7 +121,7 @@ This demo was last tested in the following deployments:
| Architecture | BunJS | Date |
|:-------------|:---------|:-----------|
| `darwin-x64` | `1.1.39` | 2024-12-17 |
| `darwin-x64` | `1.2.8` | 2025-03-31 |
| `darwin-arm` | `1.2.7` | 2025-03-30 |
| `win11-x64` | `1.1.42` | 2024-12-22 |
| `win11-arm` | `1.2.3` | 2025-02-23 |

@ -40,7 +40,7 @@ This demo was tested in the following deployments:
| Architecture | JS Engine | Pandas | Python | Date |
|:-------------|:----------------|:-------|:-------|:-----------|
| `darwin-x64` | Duktape `2.7.0` | 2.2.3 | 3.13.1 | 2024-12-31 |
| `darwin-x64` | Duktape `2.7.0` | 2.2.3 | 3.13.1 | 2025-03-31 |
| `darwin-arm` | Duktape `2.7.0` | 2.2.3 | 3.13.2 | 2025-03-30 |
| `win11-x64` | Duktape `2.7.0` | 2.2.3 | 3.11.8 | 2024-12-21 |
| `win11-arm` | Duktape `2.7.0` | 2.2.3 | 3.13.2 | 2025-02-23 |
@ -527,7 +527,7 @@ This demo was tested in the following deployments:
| Architecture | JS Engine | Polars | Python | Date |
|:-------------|:----------------|:--------|:-------|:-----------|
| `darwin-x64` | Duktape `2.7.0` | 1.18.0 | 3.13.1 | 2024-12-31 |
| `darwin-x64` | Duktape `2.7.0` | 1.26.0 | 3.13.1 | 2025-03-31 |
| `darwin-arm` | Duktape `2.7.0` | 1.26.0 | 3.13.2 | 2025-03-30 |
| `win11-x64` | Duktape `2.7.0` | 1.17.1 | 3.11.8 | 2024-12-21 |
| `win11-arm` | Duktape `2.7.0` | 1.23.0 | 3.13.2 | 2025-02-23 |

@ -402,18 +402,18 @@ This demo was tested in the following environments:
| NodeJS | Date | Workarounds |
|:-----------|:-----------|:-------------------------------|
| `0.10.48` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `0.12.18` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `4.9.1` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `6.17.1` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `8.17.0` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `10.24.1` | 2024-06-21 | |
| `12.22.12` | 2024-06-21 | |
| `14.21.3` | 2024-06-21 | |
| `16.20.2` | 2024-06-21 | |
| `18.20.8` | 2025-03-30 | |
| `20.18.0` | 2025-03-30 | |
| `22.14.0` | 2025-03-30 | |
| `0.10.48` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `0.12.18` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `4.9.1` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `6.17.1` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `8.17.0` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `10.24.1` | 2025-03-31 | |
| `12.22.12` | 2025-03-31 | |
| `14.21.3` | 2025-03-31 | |
| `16.20.2` | 2025-03-31 | |
| `18.20.8` | 2025-03-31 | |
| `20.19.0` | 2025-03-31 | |
| `22.14.0` | 2025-03-31 | |
The `NODE_TLS_REJECT_UNAUTHORIZED` workaround sets the value to `'0'`:
@ -444,7 +444,7 @@ If successful, the script will print CSV contents of the test file.
:::caution pass
For older versions of NodeJS, the script will fail due to a certificate error.
For older versions of NodeJS, the script may fail due to a certificate error.
The error can be suppressed by prepending the following line to the script:
```js title="SheetJSHTTPSGet.js (add to top)"
@ -568,20 +568,20 @@ request(url, {encoding: null}, function(err, res, data) {
This demo was tested in the following environments:
| NodeJS | Date | Workarounds |
|:-----------|:-----------|:-------------------------------|
| `0.10.48` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `0.12.18` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `4.9.1` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `6.17.1` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `8.17.0` | 2024-06-21 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `10.24.1` | 2024-06-21 | |
| `12.22.12` | 2024-06-21 | |
| `14.21.3` | 2024-06-21 | |
| `16.20.2` | 2024-06-21 | |
| `18.20.8` | 2025-03-30 | |
| `20.18.0` | 2025-03-30 | |
| `22.14.0` | 2025-03-30 | |
| NodeJS | `request` | Date | Workarounds |
|:-----------|:----------|:-----------|:-------------------------------|
| `0.10.48` | `2.22.0` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `0.12.18` | `2.22.0` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `4.9.1` | `2.22.0` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `6.17.1` | `2.88.2` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `8.17.0` | `2.88.2` | 2025-03-31 | `NODE_TLS_REJECT_UNAUTHORIZED` |
| `10.24.1` | `2.88.2` | 2025-03-31 | |
| `12.22.12` | `2.88.2` | 2025-03-31 | |
| `14.21.3` | `2.88.2` | 2025-03-31 | |
| `16.20.2` | `2.88.2` | 2025-03-31 | |
| `18.20.8` | `2.88.2` | 2025-03-31 | |
| `20.19.0` | `2.88.2` | 2025-03-31 | |
| `22.14.0` | `2.88.2` | 2025-03-31 | |
The `NODE_TLS_REJECT_UNAUTHORIZED` workaround sets the value to `'0'`:
@ -612,7 +612,7 @@ If successful, the script will print CSV contents of the test file.
:::caution pass
For older versions of NodeJS, the script will fail due to a certificate error.
For older versions of NodeJS, the script may fail due to a certificate error.
The error can be suppressed by prepending the following line to the script:
```js title="SheetJSRequest.js (add to top)"
@ -647,13 +647,16 @@ This demo was tested in the following environments:
| NodeJS | Axios | Date |
|:-----------|:-------|:-----------|
| `10.24.1` | 0.28.1 | 2024-06-21 |
| `12.22.12` | 1.7.2 | 2024-06-21 |
| `14.21.3` | 1.7.2 | 2024-06-21 |
| `16.20.2` | 1.7.2 | 2024-06-21 |
| `18.20.8` | 1.8.4 | 2025-03-30 |
| `20.18.0` | 1.8.4 | 2025-03-30 |
| `22.14.0` | 1.8.4 | 2025-03-30 |
| `4.9.1` | 0.22.0 | 2025-03-31 |
| `6.17.1` | 0.22.0 | 2025-03-31 |
| `8.17.0` | 0.28.1 | 2025-03-31 |
| `10.24.1` | 0.28.1 | 2025-03-31 |
| `12.22.12` | 1.8.4 | 2025-03-31 |
| `14.21.3` | 1.8.4 | 2025-03-31 |
| `16.20.2` | 1.8.4 | 2025-03-31 |
| `18.20.8` | 1.8.4 | 2025-03-31 |
| `20.19.0` | 1.8.4 | 2025-03-31 |
| `22.14.0` | 1.8.4 | 2025-03-31 |
:::
@ -694,6 +697,27 @@ node SheetJSAxios.js
If successful, the script will print CSV contents of the test file.
:::caution pass
Legacy NodeJS versions do not support `async` functions. The `async` function
must be manually translated to a `then` chain:
```js title="SheetJSAxios.js (ES5)"
const XLSX = require("xlsx"), axios = require("axios");
var url = 'https://docs.sheetjs.com/pres.numbers';
axios(url, {responseType:'arraybuffer'}).then(function(res) {
/* at this point, res.data is a Buffer */
var wb = XLSX.read(res.data, {type: "buffer"});
/* print the first worksheet to console */
var ws = wb.Sheets[wb.SheetNames[0]];
console.log(XLSX.utils.sheet_to_csv(ws));
});
```
:::
</details>
## Other Platforms

@ -332,7 +332,7 @@ This demo was tested in the following environments:
| Architecture | PhantomJS | Date |
|:-------------|:----------|:-----------|
| `darwin-x64` | `2.1.1` | 2024-12-17 |
| `darwin-x64` | `2.1.1` | 2025-03-31 |
| `win11-x64` | `2.1.1` | 2025-01-19 |
| `linux-x64` | `2.1.1` | 2025-01-07 |

@ -372,7 +372,7 @@ This demo was tested in the following deployments:
| Architecture | DenoDOM | Deno | Date |
|:-------------|:--------|:-------|:-----------|
| `darwin-x64` | 0.1.48 | 2.0.4 | 2024-10-30 |
| `darwin-x64` | 0.1.48 | 2.2.6 | 2025-03-31 |
| `darwin-arm` | 0.1.48 | 2.0.4 | 2024-10-30 |
| `win11-x64` | 0.1.48 | 2.0.4 | 2024-10-30 |
| `win11-arm` | 0.1.48 | 2.2.1 | 2025-02-23 |

@ -239,8 +239,6 @@ This demo was tested in the following environments:
| OS | Device | RN | Dev Platform | Date |
|:-----------|:--------------------|:---------|:-------------|:-----------|
| Android 34 | Pixel 3a | `0.76.5` | `darwin-x64` | 2024-12-31 |
| iOS 18.2 | iPhone 16 Pro | `0.76.5` | `darwin-x64` | 2024-12-31 |
| Android 34 | Pixel 3a | `0.76.8` | `darwin-arm` | 2025-03-26 |
| iOS 18.3 | iPhone 16 Pro | `0.76.8` | `darwin-arm` | 2025-03-26 |
| Android 35 | Pixel 9 | `0.76.5` | `win11-x64` | 2024-12-22 |
@ -1096,8 +1094,6 @@ This demo was tested in the following environments:
| OS | Device | RN | Dev Platform | Date |
|:-----------|:------------------|:---------|:-------------|:-----------|
| Android 34 | Pixel 3a | `0.76.5` | `darwin-x64` | 2024-12-31 |
| iOS 18.2 | iPhone 16 Pro | `0.76.5` | `darwin-x64` | 2024-12-31 |
| Android 34 | Pixel 3a | `0.76.5` | `darwin-arm` | 2025-01-05 |
| iOS 18.2 | iPhone 16 Pro | `0.76.5` | `darwin-arm` | 2025-01-05 |
| Android 35 | Pixel 9 | `0.76.5` | `win11-x64` | 2024-12-22 |

@ -51,8 +51,6 @@ This demo was tested in the following environments:
| OS | Device | CapacitorJS + FS | Dev Platform | Date |
|:-----------|:--------------------|:------------------|:-------------|:-----------|
| Android 35 | Pixel 9 Pro | `6.2.0` / `6.0.3` | `darwin-x64` | 2025-01-19 |
| iOS 18.2 | iPhone 16 Pro Max | `6.2.0` / `6.0.3` | `darwin-x64` | 2025-01-19 |
| Android 34 | Pixel 3a | `7.1.0` / `7.0.0` | `darwin-arm` | 2025-03-30 |
| iOS 18.2 | iPhone 16 Pro Max | `7.1.0` / `7.0.0` | `darwin-arm` | 2025-03-30 |
| Android 35 | Pixel 9 | `6.2.0` / `6.0.2` | `win11-x64` | 2024-12-21 |

@ -50,15 +50,15 @@ This demo was tested in the following environments:
| OS | Device | Dart | Flutter | Date |
|:-----------|:------------------|:--------|:---------|:-----------|
| Android 30 | NVIDIA Shield | `3.4.3` | `3.22.2` | 2024-06-09 |
| iOS 15.1 | iPad Pro | `3.4.3` | `3.22.2` | 2024-06-09 |
| Android 34 | NVIDIA Shield | `3.7.2` | `3.29.2` | 2025-03-31 |
| iOS 15.6 | iPhone 13 Pro Max | `3.7.2` | `3.29.2` | 2025-03-31 |
**Simulators**
| OS | Device | Dart | Flutter | Dev Platform | Date |
|:-----------|:------------------|:--------|:---------|:-------------|:-----------|
| Android 34 | Pixel 3a | `3.4.3` | `3.22.2` | `darwin-x64` | 2024-06-09 |
| iOS 17.5 | iPhone 15 Pro Max | `3.4.3` | `3.22.2` | `darwin-x64` | 2024-06-09 |
| Android 35 | Pixel 9 Pro XL | `3.7.2` | `3.29.2` | `darwin-x64` | 2025-03-31 |
| iOS 18.3 | iPhone 16 Pro Max | `3.7.2` | `3.29.2` | `darwin-x64` | 2025-03-31 |
| Android 35 | Pixel 3a | `3.5.0` | `3.24.0` | `win11-x64` | 2024-08-10 |
:::
@ -236,8 +236,8 @@ Run `flutter doctor` and confirm the following items are checked:
<TabItem value="macos" label="macOS" default>
<pre>
<span {...g}>[✓]</span> Android toolchain - develop for Android devices (Android SDK version 34.0.0)
<span {...g}>[✓]</span> Xcode - develop for iOS and macOS (Xcode 15.4)
<span {...g}>[✓]</span> Android toolchain - develop for Android devices (Android SDK version 36.0.0)
<span {...g}>[✓]</span> Xcode - develop for iOS and macOS (Xcode 16.2)
</pre>
</TabItem>
@ -351,12 +351,17 @@ Click "OK" in each window (3 windows) and restart your computer.
</details>
Run `flutter emulators` and look for `android` and (on macOS only) `ios`
emulators.
List all available emulators:
```bash
flutter emulators
```
<Tabs groupId="os">
<TabItem value="linux" label="Linux">
There should be at least one `android` emulator:
```
Id • Name • Manufacturer • Platform
@ -366,16 +371,20 @@ Pixel_3a_API_35 • Pixel 3a API 35 • Google • android
</TabItem>
<TabItem value="macos" label="macOS">
```
Id • Name • Manufacturer • Platform
There should be at least one `android` emulator and one `ios` simulator:
apple_ios_simulator • iOS Simulator • Apple • ios
Pixel_3a_API_34 • Pixel 3a API 34 • Google • android
```
Id • Name • Manufacturer • Platform
apple_ios_simulator • iOS Simulator • Apple • ios
Pixel_9_Pro_XL_API_35 • Pixel 9 Pro XL API 35 • Google • android
```
</TabItem>
<TabItem value="win" label="Windows">
There should be at least one `android` emulator:
```
Id • Name • Manufacturer • Platform
@ -420,16 +429,18 @@ List the available emulators with `flutter emulators`:
% flutter emulators
2 available emulators:
apple_ios_simulator • iOS Simulator • Apple • ios
Pixel_3a_API_34 • Pixel 3a API 34 • Google • android
^^^^^^^^^^^^^^^--- the first column is the name
Id • Name • Manufacturer • Platform
apple_ios_simulator • iOS Simulator • Apple • ios
Pixel_9_Pro_XL_API_35 • Pixel 9 Pro XL API 35 • Google • android
^^^^^^^^^^^^^^^^^^^^^--- the first column is the name for `emulator avd`
```
The first column shows the name that should be passed to `emulator -avd`. In a
previous test, the name was `Pixel_3a_API_34` and the launch command was:
previous test, the name was `Pixel_9_Pro_XL_API_35` and the launch command was:
```bash
emulator -avd Pixel_3a_API_34
emulator -avd Pixel_9_Pro_XL_API_35
```
:::note pass
@ -439,7 +450,7 @@ On macOS, `~/Library/Android/sdk/emulator/` is the typical location for the
```bash
export PATH="$PATH":~/Library/Android/sdk/emulator
emulator -avd Pixel_3a_API_34
emulator -avd Pixel_9_Pro_XL_API_35
```
:::
@ -634,7 +645,7 @@ flutter -v -d emulator-5554 run
</details>
:::info pass
:::info Troubleshooting
In some demo runs, the build failed with an Android SDK error:
@ -662,6 +673,57 @@ Searching for `minSdkVersion` should reveal the following line:
minSdkVersion 21
```
---
In some demo runs, the build failed with an Android NDK error:
```
Your project is configured with Android NDK 26.3.11579264, but the following plugin(s) depend on a different Android NDK version:
- flutter_js requires Android NDK 27.0.12077973
Fix this issue by using the highest Android NDK version (they are backward compatible).
Add the following to /.../android/app/build.gradle.kts:
android {
ndkVersion = "27.0.12077973"
...
}
```
This was fixed by editing `android/app/build.gradle.kts`.
Searching for `ndkVersion` should reveal the following line:
```text title="android\app\build.gradle.kts"
ndkVersion = flutter.ndkVersion
```
`flutter.ndkVersion` should be replaced with `27.0.12077973`:
```text title="android\app\build.gradle.kts"
ndkVersion = "27.0.12077973"
```
---
In some demo runs, the build failed with an Android namespace error:
```
A problem occurred configuring project ':flutter_js'.
> Could not create an instance of type com.android.build.api.variant.impl.LibraryVariantBuilderImpl.
> Namespace not specified. Specify a namespace in the module's build file: /Users/sheetjs/.pub-cache/hosted/pub.dev/flutter_js-0.8.2/android/build.gradle. See https://d.android.com/r/tools/upgrade-assistant/set-namespace for information about setting the namespace.
```
This affects `flutter_js` version `0.8.2`.
The file (`flutter_js-0.8.2/android/build.gradle`) should be manually edited. In
the `android` block, add a `namespace` field:
```text title="cached flutter_js android/build.gradle (add highlighted line)"
android {
// highlight-next-line
namespace "io.abner.flutter_js"
```
:::
11) Close the Android emulator.
@ -704,6 +766,28 @@ The list should include the device:
flutter build apk --release
```
:::info Troubleshooting
In some demo runs, the build failed with an Android resource error:
```
Execution failed for task ':flutter_js:verifyReleaseResources'.
> A failure occurred while executing com.android.build.gradle.tasks.VerifyLibraryResourcesTask$Action
> Android resource linking failed
ERROR: /private/tmp/sheetjs_flutter/build/flutter_js/intermediates/merged_res/release/mergeReleaseResources/values/values.xml:194: AAPT: error: resource android:attr/lStar not found.
```
The file (`flutter_js-0.8.2/android/build.gradle`) should be manually edited. In
the `android` block, force the `compileSdkVersion` to be `31`:
```text title="cached flutter_js android/build.gradle (add highlighted line)"
android {
// highlight-next-line
compileSdkVersion 31
```
:::
17) Install on the Android device:
```bash
@ -766,6 +850,16 @@ device will ask for permission:
Tap "OK" to continue.
:::info pass
In some test runs, the app requested for local network access:
> "Sheetjs Flutter" would like to find and connect to devices on your local network.
Local network access is not required for the demo. Select "Don't Allow".
:::
:::caution pass
When this demo was last tested, the build failed with an error:

@ -207,8 +207,8 @@ This demo was tested in the following environments:
| OS and Version | Architecture | Electron | Date |
|:---------------|:-------------|:---------|:-----------|
| macOS 15.2 | `darwin-x64` | `33.2.1` | 2024-12-31 |
| macOS 14.5 | `darwin-arm` | `35.1.2` | 2025-03-38 |
| macOS 15.3 | `darwin-x64` | `35.1.2` | 2025-03-31 |
| macOS 14.5 | `darwin-arm` | `35.1.2` | 2025-03-30 |
| Windows 11 | `win11-x64` | `33.2.1` | 2025-02-11 |
| Windows 11 | `win11-arm` | `33.2.1` | 2025-02-23 |
| Linux (HoloOS) | `linux-x64` | `33.2.1` | 2025-01-02 |

@ -121,7 +121,7 @@ This demo was tested in the following environments:
| OS and Version | Architecture | NW.js | Date | Notes |
|:---------------|:-------------|:---------|:-----------|:---------------------|
| macOS 15.2 | `darwin-x64` | `0.94.0` | 2024-12-31 | |
| macOS 15.3.2 | `darwin-x64` | `0.94.0` | 2025-03-31 | |
| macOS 14.5 | `darwin-arm` | `0.94.0` | 2025-03-30 | |
| Windows 11 | `win11-x64` | `0.94.0` | 2024-12-19 | |
| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | |

@ -297,7 +297,7 @@ This demo was tested in the following environments:
| OS and Version | Architecture | Wails | Date |
|:---------------|:-------------|:----------|:-----------|
| macOS 15.2 | `darwin-x64` | `v2.9.2` | 2024-12-31 |
| macOS 15.3.2 | `darwin-x64` | `v2.10.1` | 2025-03-31 |
| macOS 14.5 | `darwin-arm` | `v2.10.1` | 2025-03-30 |
| Windows 11 | `win11-x64` | `v2.9.2` | 2024-12-21 |
| Windows 11 | `win11-arm` | `v2.10` | 2025-02-23 |

@ -353,7 +353,7 @@ This demo was tested in the following environments:
| OS and Version | Architecture | Tauri | Date |
|:---------------|:-------------|:----------|:-----------|
| macOS 15.2 | `darwin-x64` | `v1.6.0` | 2024-12-31 |
| macOS 15.3.2 | `darwin-x64` | `v1.6.0` | 2025-03-31 |
| macOS 14.5 | `darwin-arm` | `v1.6.0` | 2025-03-30 |
| Windows 11 | `win11-x64` | `v1.6.0` | 2024-12-21 |
| Windows 11 | `win11-arm` | `v1.6.0` | 2025-02-23 |

@ -192,7 +192,7 @@ This demo was tested in the following environments:
| OS and Version | Architecture | Server | Client | Date |
|:---------------|:-------------|:---------|:---------|:-----------|
| macOS 15.2 | `darwin-x64` | `5.5.0` | `5.5.0` | 2024-12-31 |
| macOS 15.3.2 | `darwin-x64` | `6.0.0` | `6.0.0` | 2025-03-31 |
| macOS 14.5 | `darwin-arm` | `6.0.0` | `6.0.0` | 2025-03-30 |
| Windows 11 | `win11-x64` | `5.5.0` | `5.5.0` | 2024-12-20 |
| Windows 11 | `win11-arm` | `5.6.0` | `5.6.0` | 2025-02-23 |

@ -50,7 +50,7 @@ This demo was tested in the following environments:
| Windows 11 C# | `win11-x64` | `v0.75.11` | 2024-12-22 |
| Windows 11 C++ | `win11-arm` | `v0.77.2` | 2025-02-23 |
| Windows 11 C# | `win11-arm` | `v0.77.2` | 2025-02-23 |
| MacOS 14.7 | `darwin-x64` | `v0.75.13` | 2024-10-26 |
| MacOS 15.3.2 | `darwin-x64` | `v0.76.7` | 2025-03-31 |
| MacOS 14.5 | `darwin-arm` | `v0.75.16` | 2024-12-22 |
:::
@ -675,26 +675,15 @@ select `pres.xlsx` . The app will refresh and display the data from the file.
## macOS Demo
:::info pass
When the demo was last tested, the official website asserted that the React
Native for macOS required React Native `0.71`.
**The official documentation is out of date.**
There exist official `react-native-macos` releases compatible with RN `0.75`
:::
0) Follow the "Setting up the development environment"[^6] guide in the React
Native documentation for "React Native CLI Quickstart" + "macOS" + "iOS".
### Project Setup
1) Create a new React Native project using React Native `0.75.4`:
1) Create a new React Native project using React Native `0.76.8`:
```bash
npx -y @react-native-community/cli init SheetJSmacOS --version 0.75.4
npx -y @react-native-community/cli init SheetJSmacOS --version 0.76.8
cd SheetJSmacOS
```
@ -714,6 +703,7 @@ scheme is fundamentally different from `react-native`.[^5]
```bash
npx -y react-native-macos-init --no-telemetry
cd macos; pod install; cd ..
```
:::caution pass
@ -827,7 +817,6 @@ A) Copy the highlighted line and paste under `/* Begin PBXBuildFile section */`:
/* Begin PBXBuildFile section */
// highlight-next-line
4717DC6A28CC499A00A9BE56 /* RCTDocumentPicker.m in Sources */ = {isa = PBXBuildFile; fileRef = 4717DC6928CC499A00A9BE56 /* RCTDocumentPicker.m */; };
2C5F4006FF53E87968033016 /* libPods-SheetJSmacOS-macOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CC1DD40D19AD16D57CAA4CB6 /* libPods-SheetJSmacOS-macOS.a */; };
```
:::

@ -29,7 +29,7 @@ This demo was tested by SheetJS users in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `14.0` | 2024-06-05 |
| `darwin-x64` | `14.1` | 2025-03-31 |
| `win11-x64` | `14.0` | 2024-12-19 |
:::
@ -181,12 +181,12 @@ This demo tests the NodeJS external engine and dedicated command line tools.
### NodeJS Engine
0) Install NodeJS. When the demo was tested, version `20.14.0` was installed.
0) Install NodeJS. When the demo was tested, version `20.19.0` was installed.
1) Install dependencies in the Home folder (`~` or `$HOME` or `%HOMEPATH%`):
<CodeBlock language="bash">{`\
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz zeromq@6.1.2`}
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz zeromq@6.4.0`}
</CodeBlock>
2) Open a new Mathematica Notebook and register NodeJS. When the example was

@ -29,7 +29,7 @@ This demo was tested by SheetJS users in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | R2024a | 2024-06-09 |
| `darwin-x64` | R2024b | 2025-03-31 |
| `win11-x64` | R2024b | 2024-12-21 |
:::
@ -235,7 +235,7 @@ run in the macOS Terminal or Windows PowerShell:
<CodeBlock language="bash">{`\
npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz exit-on-epipe commander@2
curl -LO https://docs.sheetjs.com/cli/xlsx-cli.js
npx nexe -t 14.15.3 xlsx-cli.js`}
npx -y nexe -t 14.15.3 xlsx-cli.js`}
</CodeBlock>
2) Download https://docs.sheetjs.com/pres.numbers to the workspace folder:

@ -128,7 +128,7 @@ This demo was tested in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `2.7.0` | 2024-12-31 |
| `darwin-x64` | `2.7.0` | 2025-03-31 |
| `darwin-arm` | `2.7.0` | 2025-02-13 |
| `win11-x64` | `2.7.0` | 2024-12-20 |
| `win11-arm` | `2.7.0` | 2025-02-23 |
@ -405,7 +405,7 @@ This demo was tested in the following deployments:
| Architecture | Version | PHP | Date |
|:-------------|:--------|:---------|:-----------|
| `darwin-x64` | `2.7.0` | `8.4.2` | 2024-12-31 |
| `darwin-x64` | `2.7.0` | `8.4.2` | 2025-03-31 |
| `darwin-arm` | `2.7.0` | `8.4.4` | 2025-02-25 |
| `linux-x64` | `2.7.0` | `8.3.3` | 2024-12-31 |
| `linux-arm` | `2.7.0` | `8.2.26` | 2025-02-15 |
@ -547,7 +547,7 @@ This demo was tested in the following deployments:
| Architecture | Version | Python | Date |
|:-------------|:--------|:---------|:-----------|
| `darwin-x64` | `2.7.0` | `3.13.1` | 2024-12-31 |
| `darwin-x64` | `2.7.0` | `3.13.1` | 2025-03-31 |
| `darwin-arm` | `2.7.0` | `3.12.3` | 2025-03-30 |
| `linux-x64` | `2.7.0` | `3.11.7` | 2024-12-31 |
| `linux-arm` | `2.7.0` | `3.11.2` | 2025-02-15 |
@ -784,7 +784,7 @@ This demo was tested in the following deployments:
| Architecture | Version | Zig | Date |
|:-------------|:--------|:---------|:-----------|
| `darwin-x64` | `2.7.0` | `0.13.0` | 2024-12-31 |
| `darwin-x64` | `2.7.0` | `0.14.0` | 2025-03-31 |
| `darwin-arm` | `2.7.0` | `0.13.0` | 2025-02-13 |
| `win11-x64` | `2.7.0` | `0.13.0` | 2024-12-20 |
| `win11-arm` | `2.7.0` | `0.13.0` | 2025-02-23 |
@ -803,8 +803,8 @@ mkdir sheetjs-zig
cd sheetjs-zig
```
1) Download Zig 0.13.0 from https://ziglang.org/download/ and extract to the
project folder.
1) Download the Zig tarball from https://ziglang.org/download/ and extract to
the project folder.
<Tabs groupId="triple">
<TabItem value="darwin-x64" label="MacOS">
@ -812,7 +812,7 @@ project folder.
For X64 Mac:
```bash
curl -LO https://ziglang.org/download/0.13.0/zig-macos-x86_64-0.13.0.tar.xz
curl -LO https://ziglang.org/download/0.14.0/zig-macos-x86_64-0.14.0.tar.xz
tar -xzf zig-macos-*.tar.xz
```
@ -933,10 +933,8 @@ mv *.js src`}
```zig title="build.zig (add highlighted lines)"
const exe = b.addExecutable(.{
.name = "sheetjs-zig",
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
.name = "sheetjs_zig",
.root_module = exe_mod,
});
// highlight-start
exe.addCSourceFile(.{ .file = b.path("duktape-2.7.0/src/duktape.c"), .flags = &.{ "-std=c99", "-fno-sanitize=undefined" } });
@ -1019,7 +1017,7 @@ This demo was tested in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `2.2.0` | 2024-12-31 |
| `darwin-x64` | `2.2.0` | 2025-03-31 |
| `darwin-arm` | `2.2.0` | 2025-03-30 |
| `linux-x64` | `2.2.0` | 2024-12-31 |
| `linux-arm` | `2.2.0` | 2025-02-15 |
@ -1114,6 +1112,7 @@ This demo was tested in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `2.2.1` | 2025-03-31 |
| `darwin-arm` | `2.2.1` | 2025-03-31 |
:::

@ -146,7 +146,7 @@ This demo was tested in the following deployments:
| V8 Version | Platform | OS Version | Compiler | Date |
|:--------------|:-------------|:--------------|:-----------------|:-----------|
| `13.3.228` | `darwin-x64` | macOS 15.1.1 | `clang 16.0.0` | 2024-12-03 |
| `13.7.5` | `darwin-x64` | macOS 15.3.2 | `clang 16.0.0` | 2025-03-31 |
| `13.5.92` | `darwin-arm` | macOS 14.5 | `clang 16.0.0` | 2025-02-15 |
| `12.7.130` | `win11-x64` | Windows 11 | `CL 19.42.34435` | 2024-12-20 |
| `12.7.130` | `linux-x64` | HoloOS 3.6.20 | `gcc 13.2.1` | 2025-01-02 |
@ -287,7 +287,7 @@ export PATH="/usr/local/lib/depot_tools:$PATH"
```
At this point, it is strongly recommended to add the line to a shell startup
script such as `.bashrc` or `.zshrc`
script such as `.bashrc` or `.zshrc` or `.zprofile`
</TabItem>
<TabItem value="win" label="Windows">
@ -435,11 +435,11 @@ The recommended fix is to delete the referenced folder and re-run `gclient sync`
</Tabs>
5) Checkout the desired version. The following command pulls `13.5.92`:
5) Checkout the desired version. The following command pulls `13.7.5`:
```bash
git checkout tags/13.5.92 -b sample
git checkout tags/13.7.5 -b sample
```
:::caution pass
@ -447,14 +447,14 @@ git checkout tags/13.5.92 -b sample
The official documentation recommends:
```bash
git checkout refs/tags/13.5.92 -b sample -t
git checkout refs/tags/13.7.5 -b sample -t
```
This command failed in local testing:
```
E:\v8\v8>git checkout refs/tags/13.5.92 -b sample -t
fatal: cannot set up tracking information; starting point 'refs/tags/13.5.92' is not a branch
E:\v8\v8>git checkout refs/tags/13.7.5 -b sample -t
fatal: cannot set up tracking information; starting point 'refs/tags/13.7.5' is not a branch
```
:::
@ -471,9 +471,9 @@ tools/dev/v8gen.py x64.release.sample
ninja -C out.gn/x64.release.sample v8_monolith
```
:::danger pass
:::caution pass
**This does not work in newer Python releases due to a breaking change!**
**This may not work in newer Python releases due to a breaking change!**
Python 3.13 removed the `pipes` module from the standard library[^9]. `v8gen.py`
will fail on newer Python releases with the following traceback:
@ -698,7 +698,7 @@ ninja -C out.gn\x64.release.sample v8_monolith
```bash
g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \
-ldl -Lout.gn/x64.release.sample/obj/ -pthread \
-std=c++20 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX
-std=c++20 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX -framework Foundation
./hello_world
```
@ -1279,8 +1279,8 @@ This demo was last tested in the following deployments:
| Architecture | V8 Version | Date |
|:-------------|:--------------|:-----------|
| `darwin-x64` | `12.3.219.12` | 2024-07-16 |
| `darwin-arm` | `12.3.219.12` | 2025-03-30 |
| `darwin-x64` | `13.3.415.23` | 2025-03-31 |
| `darwin-arm` | `13.3.415.23` | 2025-03-31 |
| `win11-x64` | `12.3.219.12` | 2024-12-20 |
| `win11-arm` | `12.3.219.12` | 2025-02-23 |
| `linux-x64` | `12.3.219.12` | 2025-01-10 |
@ -1359,7 +1359,7 @@ dotnet run
4) Add ClearScript to the project:
```bash
dotnet add package Microsoft.ClearScript.Complete --version 7.4.5
dotnet add package Microsoft.ClearScript.Complete --version 7.5.0
```
5) Download the SheetJS standalone script and test file. Move both files to the
@ -1481,6 +1481,7 @@ This demo was last tested in the following deployments:
| Architecture | V8 Version | Python | Date |
|:-------------|:--------------|:---------|:-----------|
| `darwin-x64` | `13.1.201.22` | `3.13.1` | 2025-03-31 |
| `darwin-arm` | `13.0.245.16` | `3.13.0` | 2024-10-20 |
:::

@ -32,7 +32,7 @@ Swift on MacOS supports JavaScriptCore without additional dependencies.
| Architecture | Swift | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `6.0.2` | 2024-12-17 |
| `darwin-x64` | `6.0.3` | 2025-03-31 |
| `darwin-arm` | `6.0.3` | 2025-03-30 |
[**C / C++ Compiled from Source**](#c)
@ -882,6 +882,7 @@ This demo was last tested in the following deployments:
| Architecture | Date |
|:-------------|:-----------|
| `darwin-x64` | 2025-03-31 |
| `darwin-arm` | 2025-03-30 |
:::

@ -163,7 +163,7 @@ This demo was tested in the following deployments:
| Architecture | Jint | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `4.1.0` | 2024-12-17 |
| `darwin-x64` | `4.2.1` | 2025-03-31 |
| `darwin-arm` | `4.2.0` | 2025-02-13 |
| `win11-x64` | `4.1.0` | 2024-12-20 |
| `win11-arm` | `4.2.0` | 2025-02-23 |
@ -248,7 +248,7 @@ dotnet run
```bash
dotnet nuget add source https://www.myget.org/F/jint/api/v3/index.json
dotnet add package Jint --version 4.2.0
dotnet add package Jint --version 4.2.1
```
To verify Jint is installed, replace `Program.cs` with the following:

@ -105,7 +105,7 @@ This demo was tested in the following deployments:
| Architecture | Git Commit | Go version | Date |
|:-------------|:-----------|:-----------|:-----------|
| `darwin-x64` | `79f3a7e` | `1.23.3` | 2024-12-17 |
| `darwin-x64` | `bcd7cc6` | `1.24.1` | 2025-03-31 |
| `darwin-arm` | `5ef83b8` | `1.24.0` | 2025-02-13 |
| `win11-x64` | `79f3a7e` | `1.23.4` | 2024-12-20 |
| `win11-arm` | `5ef83b8` | `1.24.0` | 2025-02-23 |

@ -27,7 +27,7 @@ command-line tool for reading data from files.
:::note pass
Many QuickJS functions are not documented. The explanation was verified against
the latest release (commit `6e2e68f`).
commit `0d7aaed`.
:::
@ -263,14 +263,14 @@ This demo was tested in the following deployments:
| Architecture | Git Commit | Date |
|:-------------|:-----------|:-----------|
| `darwin-x64` | `6e2e68f` | 2024-12-17 |
| `darwin-x64` | `0d7aaed` | 2025-03-31 |
| `darwin-arm` | `6e2e68f` | 2024-12-17 |
| `win11-x64` | `6e2e68f` | 2024-12-19 |
| `win11-arm` | `6e2e68f` | 2025-02-23 |
| `linux-x64` | `6e2e68f` | 2025-01-09 |
| `linux-arm` | `6e2e68f` | 2025-02-15 |
When the demo was tested, `6e2e68f` was the HEAD commit on the `master` branch.
When the demo was tested, `0d7aaed` was the HEAD commit on the `master` branch.
:::
@ -286,7 +286,7 @@ tests were run entirely within Windows Subsystem for Linux.
```bash
git clone https://github.com/bellard/quickjs
cd quickjs
git checkout 6e2e68f
git checkout 0d7aaed
make
cd ..
```
@ -359,9 +359,9 @@ This demo was tested in the following environments:
| Git Commit | Date |
|:-----------|:-----------|
| `6e2e68f` | 2025-01-09 |
| `0d7aaed` | 2025-03-31 |
When the demo was tested, `6e2e68f` was the HEAD commit on the `master` branch.
When the demo was tested, `0d7aaed` was the HEAD commit on the `master` branch.
:::
@ -371,7 +371,7 @@ and build the `quickjs` project:
```bash
git clone https://github.com/bellard/quickjs
cd quickjs
git checkout 6e2e68f
git checkout 0d7aaed
make
cd ..
```

@ -28,7 +28,7 @@ command-line tool for reading data from files.
:::info pass
Many Hermes functions are not documented. The explanation was verified against
commit `d070c74`.
commit `8ef11b4`.
:::
@ -364,7 +364,7 @@ This demo was tested in the following deployments:
| Architecture | Git Commit | Date |
|:-------------|:-----------|:-----------|
| `darwin-x64` | `d070c74` | 2024-12-17 |
| `darwin-x64` | `8ef11b4` | 2025-03-31 |
| `darwin-arm` | `388376f` | 2025-01-13 |
| `linux-x64` | `388376f` | 2024-12-17 |
| `linux-arm` | `388376f` | 2025-02-15 |
@ -439,6 +439,36 @@ curl -LO https://docs.sheetjs.com/hermes/sheetjs-hermes.cpp
make init
```
:::danger pass
In some test runs using CMake 4, the build failed due to CMake issues:
```
CMake Error at CMakeLists.txt:42 (cmake_policy):
Policy CMP0026 may not be set to OLD behavior because this version of CMake
no longer supports it. The policy was introduced in CMake version 3.0.0,
and use of NEW behavior is now required.
```
The referenced line should be removed:
```text title="hermes/CMakeLists.txt (remove highlighted line)
# bundles for Apple platforms.
if (POLICY CMP0026)
// highlight-next-line
cmake_policy(SET CMP0026 OLD) <-- remove this line
endif()
```
After removing the line, remove the `build_release` tool and try again:
```bash
rm -rf build_release
make init
```
:::
:::caution pass
In some test runs, the build failed due to Ninja issues:
@ -817,7 +847,7 @@ This demo was tested in the following deployments:
| Architecture | Hermes | Date |
|:-------------|:---------|:-----------|
| `darwin-x64` | `0.13.0` | 2024-12-17 |
| `darwin-x64` | `0.13.0` | 2025-03-31 |
| `win11-x64` | `0.13.0` | 2024-12-20 |
| `win11-arm` | `0.13.0` | 2025-02-23 |
| `linux-x64` | `0.13.0` | 2024-12-31 |
@ -945,6 +975,6 @@ If successful, the script will print CSV data from the test file.
[^3]: See ["Workbook Object"](/docs/csf/book)
[^4]: See [`sheet_to_csv` in "Utilities"](/docs/api/utilities/csv#csv-output)
[^5]: See [`microsoft/hermes-windows`](https://github.com/microsoft/hermes-windows) on GitHub
[^6]: See ["Dependencies" in "Building and Running"](https://hermesengine.dev/docs/building-and-running/#dependencies) in the Hermes Documentation
[^6]: See ["Dependencies" in "Building and Running"](https://hermesengine.dev/docs/building-and-running/#dependencies) in the Hermes Documentation. If this page redirects to the source repo, [see the following `archive.org` snapshot.](https://web.archive.org/web/20240103234151/http://hermesengine.dev/docs/building-and-running/)
[^7]: See ["Download Python"](https://www.python.org/downloads/) in the Python website. When the demo was last tested, Python 3.11.9 was installed.
[^8]: See [the Visual Studio website](https://visualstudio.microsoft.com/#vs-section) for download links.

@ -87,7 +87,7 @@ This demo was tested in the following deployments:
| Platform | Ruby | ExecJS | Date |
|:-------------|:---------|:---------|:-----------|
| `darwin-x64` | `2.6.10` | `2.10.0` | 2024-12-17 |
| `darwin-x64` | `2.6.10` | `2.10.0` | 2025-03-31 |
| `darwin-arm` | `2.6.10` | `2.10.0` | 2025-02-13 |
| `win11-x64` | `3.3.6` | `2.10.0` | 2024-12-20 |
| `win11-arm` | `3.2.3` | `2.10.0` | 2025-02-23 |

@ -132,7 +132,7 @@ This demo was tested in the following deployments:
| Architecture | Git Commit | Date |
|:-------------|:-----------|:-----------|
| `darwin-x64` | `e26c81f` | 2024-12-17 |
| `darwin-x64` | `36becec` | 2025-03-31 |
| `darwin-arm` | `e26c81f` | 2025-01-13 |
| `win11-x64` | `e26c81f` | 2024-12-19 |
| `win11-arm` | `e26c81f` | 2025-02-23 |
@ -189,7 +189,7 @@ The commands in this demo should be run in "ARM64 Native Tools Command Prompt".
```bash
git clone https://github.com/chakra-core/ChakraCore.git
cd ChakraCore
git checkout e26c81f
git checkout 36becec
cd ..
```
@ -229,6 +229,40 @@ There are known issues with MacOS 15.1 SDK and ChakraCore JIT. These issues did
not affect earlier tests against MacOS 14.5. The current recommendation is to
disable JIT and use the system ICU implementation.
:::
:::info pass
If CMake 4 is installed, the build may fail with CMake errors:
```
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.5 has been removed from CMake.
```
The workaround involves manually editing the `CMakeLists.txt` files. When this
demo was last tested, there were 4 files:
- `CMakeLists.txt`
- `pal/CMakeLists.txt`
- `pal/src/CMakeLists.txt`
- `lib/wabt/CMakeLists.txt`
Each file will have a `cmake_minimum_required` directive. For example, the root
`CMakeLists.txt` file has a minimum version of 3.2:
```text title="CMakeLists.txt (commit 36becec)"
cmake_minimum_required(VERSION 3.2)
```
The version number should be updated to 4.0:
```text title="CMakeLists.txt (edit version number)"
cmake_minimum_required(VERSION 4.0)
```
After updating all four files, the build script will run.
:::
</TabItem>
@ -541,7 +575,7 @@ If successful, the program will print the contents of the first sheet as CSV.
:::note Tested Deployments
This demo was last tested on 2025-01-09 against `ch` commit `e26c81f`.
This demo was last tested on 2025-03-31 against `ch` commit `36becec`.
:::

@ -1,5 +1,6 @@
---
title: Rust + Boa
title: Rusty Sheets with Boa
sidebar_label: Rust + Boa
pagination_prev: demos/bigdata/index
pagination_next: solutions/input
---
@ -29,21 +30,16 @@ for reading data from spreadsheets and generating CSV rows.
A JS context can be constructed in one line:
```rust
use boa_engine::Context;
/* initialize */
let context = &mut Context::default();
let context = &mut boa_engine::Context::default();
```
The following helper function evaluates strings as JS code:
```rust
use std::string::String;
use boa_engine::{Context, Source, JsError};
/* simple wrapper to evaluate code snippets */
fn eval_code(c: &mut Context, code: &str) -> Result<String, JsError> {
let src = Source::from_bytes(code);
fn eval_code(c: &mut boa_engine::Context, code: &str) -> Result<std::string::String, boa_engine::JsError> {
let src = boa_engine::Source::from_bytes(code);
match c.eval(src) {
Ok(res) => { return Ok(res.to_string(c).unwrap().to_std_string_escaped()); }
Err(e) => { return Err(e); }
@ -56,25 +52,13 @@ fn eval_code(c: &mut Context, code: &str) -> Result<String, JsError> {
The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone)
can be parsed and evaluated in a Boa context.
Boa provides a special helper to read source code from a path:
Boa provides a special helper `boa_engine::Source::from_filepath` to read source
code from a path, but it is recommended to inline the SheetJS standalone script
using the `include_str!` macro:
```rust
use std::path::Path;
use std::string::String;
use boa_engine::{js_string, Context, Source, JsError};
/* simple wrapper to evaluate an entire script file */
fn eval_file(c: &mut Context, path: &str) -> Result<String, JsError> {
let src = Source::from_filepath(Path::new(path)).unwrap();
match c.eval(src) {
Ok(res) => { return Ok(res.to_string(c).unwrap().to_std_string_escaped()); }
Err(e) => { return Err(e); }
};
}
// ...
/* load library */
match eval_file(context, "./xlsx.full.min.js") {
match eval_code(context, include_str!("../xlsx.full.min.js")) {
Ok(_res) => {}
Err(e) => { return eprintln!("Uncaught {e}"); }
}
@ -97,10 +81,10 @@ Boa supports `ArrayBuffer` natively. This snippet reads data from a file into
```rust
/* read file */
let data: Vec<u8> = fs::read("pres.xlsx").unwrap();
let array: JsArrayBuffer = JsArrayBuffer::from_byte_block(data, context).unwrap();
let attrs = Attribute::WRITABLE | Attribute::ENUMERABLE | Attribute::CONFIGURABLE;
context.register_global_property(js_string!("buf"), array, attrs);
let data: Vec<u8> = std::fs::read("pres.xlsx").unwrap();
let array: boa_engine::object::builtins::JsArrayBuffer = boa_engine::object::builtins::JsArrayBuffer::from_byte_block(file, context).unwrap();
let attrs = boa_engine::property::Attribute::WRITABLE | boa_engine::property::Attribute::ENUMERABLE | boa_engine::property::Attribute::CONFIGURABLE;
let _ = context.register_global_property(boa_engine::js_string!("buf"), array, attrs);
/* parse with SheetJS */
match eval_code(context, "void (globalThis.wb = XLSX.read(buf))") {
@ -120,7 +104,7 @@ This demo was tested in the following deployments:
| Architecture | Boa | Date |
|:-------------|:---------|:-----------|
| `darwin-x64` | `0.20.0` | 2024-12-17 |
| `darwin-x64` | `0.20.0` | 2025-03-31 |
| `darwin-arm` | `0.20.0` | 2025-02-13 |
| `win11-x64` | `0.20.0` | 2024-12-19 |
| `win11-arm` | `0.20.0` | 2025-02-23 |
@ -177,7 +161,7 @@ curl -L -o src/main.rs https://docs.sheetjs.com/boa/main.rs
5) Build and run the app in release mode:
```bash
cargo run --release
cargo run --release pres.xlsx
```
After a short wait, the contents will be displayed in CSV form.

@ -127,7 +127,7 @@ This demo was tested in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `0.066` | 2024-12-17 |
| `darwin-x64` | `0.066` | 2025-03-31 |
| `darwin-arm` | `0.066` | 2025-02-13 |
| `linux-x64` | `0.066` | 2025-01-10 |
| `linux-arm` | `0.066` | 2025-02-15 |

@ -36,7 +36,7 @@ This demo was tested in the following environments:
| Architecture | Commit | Date |
|:-------------|:----------|:-----------|
| `darwin-x64` | `d2d30df` | 2024-12-17 |
| `darwin-x64` | `5020015` | 2025-03-31 |
| `darwin-arm` | `d2d30df` | 2025-02-13 |
| `win11-x64` | `d2d30df` | 2024-12-19 |
| `win11-arm` | `5020015` | 2025-02-23 |

@ -36,7 +36,7 @@ as [Duktape](/docs/demos/engines/duktape).
:::info pass
Many MuJS functions are not documented. The explanation was verified against
version `1.3.5`.
version `1.3.6`.
:::
@ -322,7 +322,7 @@ This demo was tested in the following deployments:
| Architecture | Version | Date |
|:-------------|:--------|:-----------|
| `darwin-x64` | `1.3.5` | 2024-12-17 |
| `darwin-x64` | `1.3.6` | 2025-03-31 |
| `darwin-arm` | `1.3.5` | 2025-02-13 |
| `win11-x64` | `1.3.5` | 2024-12-19 |
| `win11-arm` | `1.3.5` | 2025-02-23 |
@ -355,9 +355,9 @@ cd sheetjs-mu
2) Build the MuJS shared library from source:
```bash
curl -LO https://mujs.com/downloads/mujs-1.3.5.zip
unzip mujs-1.3.5.zip
cd mujs-1.3.5
curl -LO https://mujs.com/downloads/mujs-1.3.6.zip
unzip mujs-1.3.6.zip
cd mujs-1.3.6
make release
cd ..
```
@ -365,7 +365,7 @@ cd ..
3) Copy the `mujs.h` header file and `libmujs.a` library to the project folder:
```bash
cp mujs-1.3.5/build/release/libmujs.a mujs-1.3.5/mujs.h .
cp mujs-1.3.6/build/release/libmujs.a mujs-1.3.6/mujs.h .
```
4) Download [`SheetJSMu.c`](pathname:///mujs/SheetJSMu.c):

@ -176,7 +176,7 @@ This demo was tested in the following deployments:
| Architecture | Jurassic | Date |
|:-------------|:---------|:-----------|
| `darwin-x64` | `3.2.8` | 2024-12-17 |
| `darwin-x64` | `3.2.9` | 2025-03-31 |
| `darwin-arm` | `3.2.9` | 2025-03-30 |
| `win11-x64` | `3.2.8` | 2024-12-19 |
| `win11-arm` | `3.2.9` | 2025-02-23 |

@ -43,7 +43,7 @@ These instructions were tested on the following platforms:
|:------------------------------|:-------------|:-----------|
| Linux (Steam Deck Holo x64) | `linux-x64` | 2025-01-10 |
| Linux (Debian Linux AArch64) | `linux-arm` | 2025-01-14 |
| MacOS 14.4 (x64) | `darwin-x64` | 2024-07-12 |
| MacOS 15.3 (x64) | `darwin-x64` | 2025-03-31 |
| MacOS 15.2 (ARM64) | `darwin-arm` | 2025-03-07 |
| Windows 10 (x64) + WSL Ubuntu | `win10-x64` | 2024-07-12 |
| Windows 11 (x64) + WSL Ubuntu | `win11-x64` | 2025-01-14 |
@ -255,15 +255,18 @@ are displayed in the `Next steps` section:
```bash
: # zsh
echo >> $HOME/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> $HOME/.zprofile
echo 'if [ -e "/opt/homebrew/bin/brew" ]; then eval "$(/opt/homebrew/bin/brew shellenv)"; fi' >> $HOME/.zprofile
echo 'if [ -e "/usr/local/bin/brew" ]; then eval "$(/usr/local/bin/brew shellenv)"; fi' >> $HOME/.zprofile
: # bash
echo >> $HOME/.bash_profile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> $HOME/.bash_profile
echo 'if [ -e "/opt/homebrew/bin/brew" ]; then eval "$(/opt/homebrew/bin/brew shellenv)"; fi' >> $HOME/.bash_profile
echo 'if [ -e "/usr/local/bin/brew" ]; then eval "$(/usr/local/bin/brew shellenv)"; fi' >> $HOME/.bash_profile
: # other
echo >> $HOME/.profile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> $HOME/.profile
echo 'if [ -e "/opt/homebrew/bin/brew" ]; then eval "$(/opt/homebrew/bin/brew shellenv)"; fi' >> $HOME/.profile
echo 'if [ -e "/usr/local/bin/brew" ]; then eval "$(/usr/local/bin/brew shellenv)"; fi' >> $HOME/.profile
```
C) Close the window, open a new terminal window, and disable analytics:

@ -1,22 +1,8 @@
/*! sheetjs (C) SheetJS -- https://sheetjs.com */
use std::path::Path;
use std::string::String;
use std::fs;
use boa_engine::{js_string, Context, Source, JsError};
use boa_engine::object::builtins::JsArrayBuffer;
use boa_engine::property::Attribute;
fn eval_file(c: &mut Context, path: &str) -> Result<String, JsError> {
let src = Source::from_filepath(Path::new(path)).unwrap();
match c.eval(src) {
Ok(res) => { return Ok(res.to_string(c).unwrap().to_std_string_escaped()); }
Err(e) => { return Err(e); }
};
}
fn eval_code(c: &mut Context, code: &str) -> Result<String, JsError> {
let src = Source::from_bytes(code);
/* simple wrapper to evaluate code snippets */
fn eval_code(c: &mut boa_engine::Context, code: &str) -> Result<std::string::String, boa_engine::JsError> {
let src = boa_engine::Source::from_bytes(code);
match c.eval(src) {
Ok(res) => { return Ok(res.to_string(c).unwrap().to_std_string_escaped()); }
Err(e) => { return Err(e); }
@ -24,10 +10,11 @@ fn eval_code(c: &mut Context, code: &str) -> Result<String, JsError> {
}
fn main() {
let context = &mut Context::default();
/* initialize */
let context = &mut boa_engine::Context::default();
/* load library */
match eval_file(context, "./xlsx.full.min.js") {
match eval_code(context, include_str!("../xlsx.full.min.js")) {
Ok(_res) => {}
Err(e) => { return eprintln!("Uncaught {e}"); }
}
@ -39,10 +26,17 @@ fn main() {
}
/* read file */
let data: Vec<u8> = fs::read("pres.xlsx").unwrap();
let array: JsArrayBuffer = JsArrayBuffer::from_byte_block(data, context).unwrap();
let attrs = Attribute::WRITABLE | Attribute::ENUMERABLE | Attribute::CONFIGURABLE;
let _ = context.register_global_property(js_string!("buf"), array, attrs);
{
let mut iter = std::env::args();
let path: String = iter.nth(1).expect("must specify a file name");
let file: Vec<u8> = std::fs::read(path.clone()).unwrap();
/* push data to boa */
let array: boa_engine::object::builtins::JsArrayBuffer = boa_engine::object::builtins::JsArrayBuffer::from_byte_block(file, context).unwrap();
let attrs = boa_engine::property::Attribute::WRITABLE | boa_engine::property::Attribute::ENUMERABLE | boa_engine::property::Attribute::CONFIGURABLE;
let _ = context.register_global_property(boa_engine::js_string!("buf"), array, attrs);
}
/* parse workbook and assign to global `wb` property */
match eval_code(context, "void (globalThis.wb = XLSX.read(buf))") {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 88 KiB

@ -1,5 +1,5 @@
# Note: The official Hermes documentation includes zero guidance on embedding.=
# Tested against commit 388376f05d0c2c836c8761e372fdfafd9bf077fc on darwin-x64
# Tested against commit 8ef11b45d7b078434605658421efb34cf436c005 on darwin-x64
# History https://git.sheetjs.com/sheetjs/docs.sheetjs.com/commits/branch/master/docz/static/hermes/Makefile
MYCC=llvm-g++
@ -71,5 +71,5 @@ sheetjs-hermes.cpp:
.PHONY: init
init:
if [ ! -e hermes ]; then git clone https://github.com/facebook/hermes.git; cd hermes; git checkout 388376f05d0c2c836c8761e372fdfafd9bf077fc; cd ..; fi
if [ ! -e hermes ]; then git clone https://github.com/facebook/hermes.git; cd hermes; git checkout 8ef11b45d7b078434605658421efb34cf436c005; cd ..; fi
if [ ! -e build_release ]; then cmake -S hermes -B build_release -G Ninja -DCMAKE_BUILD_TYPE=Release -DHERMES_BUILD_APPLE_FRAMEWORK=OFF; cmake --build ./build_release; fi