forked from sheetjs/docs.sheetjs.com
		
	darwin-x64 refresh
This commit is contained in:
		
							parent
							
								
									4ada56688f
								
							
						
					
					
						commit
						255ad00bf4
					
				| @ -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 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user