From 609f7ff5f24e7eac9734c6549af555f8c3e83731 Mon Sep 17 00:00:00 2001
From: SheetJS
Date: Wed, 13 Aug 2025 16:28:31 -0400
Subject: [PATCH] DOM Operations note
---
README.md | 2 +-
.../02-examples/06-loader.md | 30 ++++++-
docz/docs/03-demos/02-frontend/04-vue.md | 72 +++++++---------
docz/docs/03-demos/12-static/04-esbuild.md | 35 ++++----
.../docs/03-demos/17-mobile/01-reactnative.md | 34 +++++++-
.../03-demos/17-mobile/02-nativescript.md | 6 +-
docz/docs/03-demos/17-mobile/05-capacitor.md | 46 +++++++++--
docz/docs/03-demos/19-desktop/01-electron.md | 24 +++++-
docz/docs/03-demos/19-desktop/02-nwjs.md | 10 ++-
docz/docs/03-demos/19-desktop/03-wails.md | 2 +-
docz/docs/03-demos/19-desktop/04-tauri.md | 4 +-
.../docs/03-demos/19-desktop/05-neutralino.md | 2 +-
docz/docs/03-demos/27-local/01-file.md | 6 +-
docz/docs/03-demos/32-extensions/10-stata.md | 61 +++++++-------
docz/docs/03-demos/32-extensions/12-maple.md | 82 +++++++++++++++++--
docz/docs/03-demos/42-engines/09-hermes.md | 2 +-
docz/docs/07-csf/03-sheet.md | 2 +-
docz/docs/07-csf/07-features/06-nf.md | 12 +--
docz/docs/08-api/03-parse-options.md | 16 ++--
docz/docs/08-api/07-utilities/03-html.md | 15 ++++
docz/docs/09-miscellany/02-errors.md | 37 +++++++++
docz/docs/09-miscellany/05-contributing.md | 34 +++++---
docz/docusaurus.config.js | 47 ++++++-----
tests/bundler/browserify.sh | 2 +-
tests/bundler/requirejs.sh | 8 +-
tests/engines-hermes.sh | 6 ++
.../{static-esbuild.sh => static/esbuild.sh} | 3 +-
27 files changed, 426 insertions(+), 174 deletions(-)
rename tests/{static-esbuild.sh => static/esbuild.sh} (97%)
diff --git a/README.md b/README.md
index a7e9795..ade36a5 100644
--- a/README.md
+++ b/README.md
@@ -99,7 +99,7 @@ tables in . The component script
### Formats Graph
The formats graph and legend are written in the DOT language. Rebuilding the
-graphs will require Graphviz (`brew install graphviz` on macOS)
+graphs will require Graphviz and the "Indie Flower" font.
## Live Demos
diff --git a/docz/docs/02-getting-started/02-examples/06-loader.md b/docz/docs/02-getting-started/02-examples/06-loader.md
index 040dd02..8134b6c 100644
--- a/docz/docs/02-getting-started/02-examples/06-loader.md
+++ b/docz/docs/02-getting-started/02-examples/06-loader.md
@@ -36,12 +36,13 @@ This demo was tested in the following configurations:
| Platform | Architecture | Date |
|:------------------------------------------------------------------|:-------------|:-----------|
| NVIDIA RTX 5090 (32 GB VRAM) + Ryzen Z1 Extreme (24 GB RAM) | `win11-x64` | 2025-06-17 |
+| NVIDIA RTX 5090 (32 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-06-20 |
| NVIDIA RTX 4090 (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | 2025-04-17 |
-| NVIDIA RTX 4090 (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-01-28 |
+| NVIDIA RTX 4090 (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-06-20 |
| AMD RX 7900 XTX (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | 2025-06-20 |
-| AMD RX 7900 XTX (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-01-29 |
+| AMD RX 7900 XTX (24 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-06-21 |
| Intel Arc B580 (12 GB VRAM) + Ryzen Z1 Extreme (24 GB RAM) | `win11-x64` | 2025-06-20 |
-| Intel Arc B580 (12 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-02-08 |
+| Intel Arc B580 (12 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `linux-x64` | 2025-06-21 |
| Apple M4 Max 16-Core CPU + 40-Core GPU (48 GB unified memory) | `darwin-arm` | 2025-03-06 |
| Apple M3 Ultra 28-Core CPU + 60-Core GPU (96 GB unified memory) | `darwin-arm` | 2025-06-24 |
| Apple M2 Max 12-Core CPU + 30-Core GPU (32 GB unified memory) | `darwin-arm` | 2025-03-25 |
@@ -55,6 +56,7 @@ SheetJS users have verified this demo in other configurations:
|:---------------------------------------------------------------------|:-------------|:------------|
| NVIDIA L40 (48 GB VRAM) + i9-13900K (32 GB RAM) | `linux-x64` | LangChainJS |
| NVIDIA RTX 4080 SUPER (16 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | LangChainJS |
+| NVIDIA RTX 4080 SUPER (16 GB VRAM) + Ryzen Z2 Go (32 GB RAM) | `linux-x64` | LangChainJS |
| NVIDIA RTX 4070 Ti SUPER (16 GB VRAM) + Ryzen Z1 Extreme (16 GB RAM) | `win11-x64` | LangChainJS |
| NVIDIA RTX 4070 Ti (12 GB VRAM) + Ryzen 7 5800x (64 GB RAM) | `win11-x64` | LangChainJS |
| NVIDIA RTX 4060 (8 GB VRAM) + Ryzen 7 5700g (32 GB RAM) | `win11-x64` | LangChainJS |
@@ -751,7 +753,7 @@ Intel ARC GPUs require the Intel Extension for PyTorch (IPEX) and a special
version of Ollama that ships with the associated LLM Library (IPEX-LLM).
- ARC Instructions (click to show)
+ ARC Instructions on Windows (click to show)
These instructions are based on the official Intel recommendations.
@@ -808,6 +810,26 @@ This window should be kept open throughout the demo.
+
+ ARC Instructions on Linux (click to show)
+
+These instructions are based on the official Intel recommendations.
+
+A) Install the dependencies from the [Battlemage quickstart](https://github.com/intel/ipex-llm/blob/main/docs/mddocs/Quickstart/bmg_quickstart.md#11-install-prerequisites)
+
+B) Download and extract the [Ollama Portable Zip](https://github.com/intel/ipex-llm/blob/main/docs/mddocs/Quickstart/ollama_portable_zip_quickstart.md#linux-quickstart).
+
+C) When this demo was last tested, the computer had an AMD processor. To force
+Ollama to use the GPU, uncomment the "single GPU" line in `start-ollama.sh`:
+
+```bash title="start-ollama.sh (uncomment line)"
+export ONEAPI_DEVICE_SELECTOR=level_zero:0
+```
+
+D) Run the `start-ollama.sh` script from the extracted folder.
+
+
+
:::
After installing dependencies, start a new terminal session.
diff --git a/docz/docs/03-demos/02-frontend/04-vue.md b/docz/docs/03-demos/02-frontend/04-vue.md
index 949495a..e6c11ff 100644
--- a/docz/docs/03-demos/02-frontend/04-vue.md
+++ b/docz/docs/03-demos/02-frontend/04-vue.md
@@ -37,12 +37,20 @@ This demo focuses on VueJS concepts. Other demos cover general deployments:
[The "Frameworks" section](/docs/getting-started/installation/frameworks) covers
installation with Yarn and other package managers.
-The library can be imported directly from JS or JSX code with:
+In modern sites, the library can be imported directly from JS or JSX code:
```js
import { read, utils, writeFile } from 'xlsx';
```
+In projects that use CommonJS, the library can be loaded with `require`:
+
+```js
+var XLSX = require("xlsx");
+```
+
+["Legacy Deployments"](#legacy-deployments) covers integration strategies for
+sites that require standalone scripts.
## Internal State
@@ -341,28 +349,29 @@ function exportFile() {
{{ row.Name }}
{{ row.Index }}
-
+
-
+
```
How to run the example (click to hide)
-
-
-
:::note Tested Deployments
This demo was tested in the following environments:
-| VueJS | ViteJS | Date |
-|:---------|:---------|:-----------|
-| `3.5.13` | `6.1.0` | 2025-02-15 |
+| VueJS | Deployment | Date |
+|:---------|:----------------|:-----------|
+| `3.5.17` | ViteJS `7.0.0` | 2025-06-29 |
+| `3.5.17` | NuxtJS `3.17.5` | 2025-06-29 |
:::
+
+
+
1) Create a new site:
```bash
@@ -378,7 +387,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
npm run dev`}
-3) Open a web browser and access the displayed URL (`http://localhost:5173`)
+3) Access the "Local" URL (typically `http://localhost:5173`) in a web browser.
4) Replace `src/App.vue` with the `src/SheetJSVueAoO.vue` example.
@@ -406,20 +415,10 @@ and test the page.
-:::note Tested Deployments
-
-This demo was tested in the following environments:
-
-| VueJS | NuxtJS | Date |
-|:---------|:---------|:-----------|
-| `3.5.13` | `3.15.0` | 2025-01-02 |
-
-:::
-
1) Create a new site:
```bash
-npx nuxi@latest init sheetjs-nuxt --packageManager npm --no-install --no-gitInit
+npx nuxi@latest init sheetjs-nuxt --packageManager npm --no-install --no-gitInit -M ,
```
2) Install the SheetJS dependency and start the dev server:
@@ -431,7 +430,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
npm run dev`}
-3) Open a web browser and access the displayed URL (`http://localhost:3000`)
+3) Access the "Local" URL (typically `http://localhost:3000`) in a web browser.
4) Replace `app.vue` with the `src/SheetJSVueAoO.vue` example.
@@ -511,19 +510,20 @@ function exportFile() {
How to run the example (click to hide)
-
-
-
:::note Tested Deployments
This demo was tested in the following environments:
-| VueJS | ViteJS | Date |
-|:---------|:--------|:-----------|
-| `3.5.13` | `6.0.7` | 2025-01-02 |
+| VueJS | Deployment | Date |
+|:---------|:----------------|:-----------|
+| `3.5.17` | ViteJS `7.0.0` | 2025-06-29 |
+| `3.5.17` | NuxtJS `3.17.5` | 2025-06-29 |
:::
+
+
+
1) Create a new site:
```bash
@@ -539,7 +539,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
npm run dev`}
-3) Open a web browser and access the displayed URL (`http://localhost:5173`)
+3) Access the "Local" URL (typically `http://localhost:5173`) in a web browser.
4) Replace `src/App.vue` with the `src/SheetJSVueHTML.vue` example.
@@ -567,20 +567,10 @@ and test the page.
-:::note Tested Deployments
-
-This demo was tested in the following environments:
-
-| VueJS | NuxtJS | Date |
-|:---------|:---------|:-----------|
-| `3.5.13` | `3.15.0` | 2025-01-02 |
-
-:::
-
1) Create a new site:
```bash
-npx nuxi@latest init sheetjs-nuxt --packageManager npm --no-install --no-gitInit
+npx nuxi@latest init sheetjs-nuxt --packageManager npm --no-install --no-gitInit -M ,
```
2) Install the SheetJS dependency and start the dev server:
@@ -592,7 +582,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
npm run dev`}
-3) Open a web browser and access the displayed URL (`http://localhost:3000`)
+3) Access the "Local" URL (typically `http://localhost:3000`) in a web browser.
4) Replace `app.vue` with the `src/SheetJSVueHTML.vue` example.
diff --git a/docz/docs/03-demos/12-static/04-esbuild.md b/docz/docs/03-demos/12-static/04-esbuild.md
index d6c62a8..88cbe93 100644
--- a/docz/docs/03-demos/12-static/04-esbuild.md
+++ b/docz/docs/03-demos/12-static/04-esbuild.md
@@ -204,23 +204,24 @@ This demo was tested in the following environments:
| `esbuild` | Date |
|:----------|:-----------|
-| `0.24.2` | 2025-01-07 |
-| `0.23.1` | 2025-01-07 |
-| `0.22.0` | 2025-01-07 |
-| `0.21.5` | 2025-01-07 |
-| `0.20.2` | 2025-01-07 |
-| `0.19.12` | 2025-01-07 |
-| `0.18.20` | 2025-01-07 |
-| `0.17.19` | 2025-01-07 |
-| `0.16.17` | 2025-01-07 |
-| `0.15.18` | 2025-01-07 |
-| `0.14.54` | 2025-01-07 |
-| `0.13.15` | 2025-01-07 |
-| `0.12.29` | 2025-01-07 |
-| `0.11.23` | 2025-01-07 |
-| `0.10.2` | 2025-01-07 |
-| `0.9.7` | 2025-01-07 |
-| `0.9.1` | 2025-01-07 |
+| `0.25.5` | 2025-06-20 |
+| `0.24.2` | 2025-06-20 |
+| `0.23.1` | 2025-06-20 |
+| `0.22.0` | 2025-06-20 |
+| `0.21.5` | 2025-06-20 |
+| `0.20.2` | 2025-06-20 |
+| `0.19.12` | 2025-06-20 |
+| `0.18.20` | 2025-06-20 |
+| `0.17.19` | 2025-06-20 |
+| `0.16.17` | 2025-06-20 |
+| `0.15.18` | 2025-06-20 |
+| `0.14.54` | 2025-06-20 |
+| `0.13.15` | 2025-06-20 |
+| `0.12.29` | 2025-06-20 |
+| `0.11.23` | 2025-06-20 |
+| `0.10.2` | 2025-06-20 |
+| `0.9.7` | 2025-06-20 |
+| `0.9.1` | 2025-06-20 |
:::
diff --git a/docz/docs/03-demos/17-mobile/01-reactnative.md b/docz/docs/03-demos/17-mobile/01-reactnative.md
index a2054c2..c2d57e2 100644
--- a/docz/docs/03-demos/17-mobile/01-reactnative.md
+++ b/docz/docs/03-demos/17-mobile/01-reactnative.md
@@ -242,7 +242,7 @@ This demo was tested in the following environments:
| 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 Pro XL | `0.79.2` | `win11-x64` | 2025-06-08 |
-| Android 35 | Pixel 9 | `0.76.5` | `linux-x64` | 2025-01-02 |
+| Android 36 | Pixel 9 | `0.79.2` | `linux-x64` | 2025-07-06 |
:::
@@ -259,12 +259,22 @@ Make sure you can run a basic test app on your phone/simulator before continuing
Installation Notes (click to show)
+**Java JDK**
+
On the Steam Deck, JDK17 was installed using `pacman`:
```bash
sudo pacman -Syu jdk17-openjdk
```
+Debian and Ubuntu require the `openjdk-17-jdk` package:
+
+```bash
+sudo apt install openjdk-17-jdk
+```
+
+**Android Studio for Linux**
+
[The Android Studio tarball](https://developer.android.com/studio) was
downloaded and extracted. After extracting:
@@ -276,6 +286,8 @@ cd ./android-studio/bin
In Android Studio, select "SDK Manager" and switch to the "SDK Tools" tab. Check
"Show Package Details" and install "Android SDK Command-line Tools (latest)".
+**Environment Variables for Linux**
+
When this demo was last tested, the following environment variables were used:
```bash
@@ -390,8 +402,8 @@ the interactive CLI tool:
npx react-native start
```
-Once the dev server is ready, the terminal will display a few options. Press `a`
-to run on Android.
+Once the dev server is ready, the terminal will display a few options. Press
+r to relaod the app.
:::
@@ -1132,7 +1144,7 @@ This demo was tested in the following environments:
| 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 Pro XL | `0.76.5` | `win11-x64` | 2025-06-08 |
-| Android 35 | Pixel 9 | `0.76.5` | `linux-x64` | 2025-01-02 |
+| Android 36 | Pixel 9 | `0.76.5` | `linux-x64` | 2025-07-06 |
:::
@@ -1217,6 +1229,20 @@ The app should look like the following screenshot:

+:::info pass
+
+On Linux, the command may silently stall. It is strongly recommended to launch
+the interactive CLI tool:
+
+```bash
+npx react-native start
+```
+
+Once the dev server is ready, the terminal will display a few options. Press
+r to relaod the app.
+
+:::
+
:::caution pass
In some test runs on Windows, the build failed with an error:
diff --git a/docz/docs/03-demos/17-mobile/02-nativescript.md b/docz/docs/03-demos/17-mobile/02-nativescript.md
index e1ef690..f0a13bc 100644
--- a/docz/docs/03-demos/17-mobile/02-nativescript.md
+++ b/docz/docs/03-demos/17-mobile/02-nativescript.md
@@ -66,7 +66,7 @@ This demo was tested in the following environments:
| Android 35 | Pixel 9 Pro XL | `8.9.2` | `darwin-x64` | 2025-05-06 |
| iOS 18.4 | iPhone 16 Pro Max | `8.9.2` | `darwin-x64` | 2025-05-06 |
| Android 35 | Pixel 9 | `8.9.2` | `win11-x64` | 2025-06-08 |
-| Android 35 | Pixel 9 | `8.8.3` | `linux-x64` | 2025-01-02 |
+| Android 36 | Pixel 9 | `8.9.2` | `linux-x64` | 2025-07-06 |
:::
@@ -611,7 +611,7 @@ adb root
adb pull /data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls SheetJSNS.xls
```
-If the emulator cannot be rooted, the following command works in macOS:
+If the emulator cannot be rooted, the following workaround should be used:
```bash
adb shell "run-as org.nativescript.SheetJSNS cat /data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls" > SheetJSNS.xls
@@ -655,7 +655,7 @@ id | name | role
adb push SheetJSNS.xls /data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls
```
-If the emulator cannot be rooted, the following command works in macOS:
+If the emulator cannot be rooted, raw byte operations work in macOS and Linux:
```bash
dd if=SheetJSNS.xls | adb shell "run-as org.nativescript.SheetJSNS dd of=/data/user/0/org.nativescript.SheetJSNS/files/SheetJSNS.xls"
diff --git a/docz/docs/03-demos/17-mobile/05-capacitor.md b/docz/docs/03-demos/17-mobile/05-capacitor.md
index f925324..64190e7 100644
--- a/docz/docs/03-demos/17-mobile/05-capacitor.md
+++ b/docz/docs/03-demos/17-mobile/05-capacitor.md
@@ -54,7 +54,7 @@ This demo was tested in the following environments:
| 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 Pro XL | `7.3.0` / `7.1.1` | `win11-x64` | 2025-06-08 |
-| Android 35 | Pixel 9 | `6.2.0` / `6.0.2` | `linux-x64` | 2025-01-02 |
+| Android 36 | Pixel 9 | `7.4.1` / `7.1.2` | `linux-x64` | 2025-07-06 |
:::
@@ -212,12 +212,16 @@ iOS development is only supported on macOS.
:::
-
+Installation Notes (click to show)
For Android development, CapacitorJS requires a Java version compatible with the
-expected Gradle version. When this demo was tested against CapacitorJS `6.2.0`,
-Java 20 was required to support Gradle `8.2.1`.
+expected Gradle version:
+
+| CapacitorJS | Gradle | Java |
+|:------------|:---------|:-----|
+| `6.2.0` | `8.2.1` | 20 |
+| `7.4.1` | `8.11.1` | 21 |
@@ -249,6 +253,22 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz
npm i --save @capacitor/core @capacitor/cli @capacitor/filesystem`}
+:::warning pass
+
+When this demo was last tested, parts of the official project required ViteJS 6
+and other parts required ViteJS 7. The install failed.
+
+**This is a bug in the Svelte integration!**
+
+Until the bug is fixed, the `--force` option should be used:
+
+{`\
+npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz --force
+npm i --save @capacitor/core @capacitor/cli @capacitor/filesystem --force`}
+
+
+:::
+
4) Create CapacitorJS structure:
```bash
@@ -258,7 +278,7 @@ npm run build
:::note pass
-If prompted to create an Ionic account, type `N` and press Enter.
+If prompted to create an Ionic account, Press N to opt out.
:::
@@ -277,6 +297,22 @@ npm i --save @capacitor/android
npx cap add android
```
+:::warning pass
+
+When this demo was last tested, parts of the official project required ViteJS 6
+and other parts required ViteJS 7. The install failed.
+
+**This is a bug in the Svelte integration!**
+
+Until the bug is fixed, the `--force` option should be used:
+
+```bash
+npm i --save @capacitor/android --force
+npx cap add android
+```
+
+:::
+
:::caution pass
If the wrong Java version is installed, the last command will fail with a
diff --git a/docz/docs/03-demos/19-desktop/01-electron.md b/docz/docs/03-demos/19-desktop/01-electron.md
index 711e139..85d350b 100644
--- a/docz/docs/03-demos/19-desktop/01-electron.md
+++ b/docz/docs/03-demos/19-desktop/01-electron.md
@@ -211,7 +211,7 @@ This demo was tested in the following environments:
| 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 |
+| Linux (Ubuntu) | `linux-x64` | `35.1.2` | 2025-07-06 |
| Linux (Debian) | `linux-arm` | `33.2.1` | 2025-02-16 |
:::
@@ -284,6 +284,28 @@ npx -y electron .
The app will run.
+:::info pass
+
+In some Linux deployments, the command will fail with a sandbox error:
+
+```
+The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now.
+```
+
+The workaround is to temporarily disable the sandbox restriction:
+
+```bash
+sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
+```
+
+After testing, the restriction can be re-enabled with a similar command:
+
+```bash
+sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=1
+```
+
+:::
+
4) To build a standalone app, run the builder:
```bash
diff --git a/docz/docs/03-demos/19-desktop/02-nwjs.md b/docz/docs/03-demos/19-desktop/02-nwjs.md
index 78a1647..da0b18e 100644
--- a/docz/docs/03-demos/19-desktop/02-nwjs.md
+++ b/docz/docs/03-demos/19-desktop/02-nwjs.md
@@ -125,7 +125,7 @@ This demo was tested in the following environments:
| macOS 14.5 | `darwin-arm` | `0.94.0` | 2025-03-30 | |
| Windows 11 | `win11-x64` | `0.100.0` | 2025-05-27 | |
| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | |
-| Linux (HoloOS) | `linux-x64` | `0.89.0` | 2025-01-10 | |
+| Linux (Ubuntu) | `linux-x64` | `0.101.2` | 2025-07-06 | |
| Linux (Debian) | `linux-arm` | `0.60.0` | 2025-02-16 | Unofficial build[^1] |
:::
@@ -146,7 +146,7 @@ cd sheetjs-nwjs
"version": "0.0.0",
"main": "index.html",
"dependencies": {
- "nw": "0.100.0",
+ "nw": "0.101.2",
"xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz"
}
}`}
@@ -224,7 +224,7 @@ Unfortunately `nw-builder` will not be able to build a standalone program.
5) To build a standalone app, run the builder:
```bash
-npx -p nw-builder@4.11.6 nwbuild --mode=build --version=0.100.0 --glob=false --outDir=../out ./
+npx -p nw-builder@4.13.14 nwbuild --mode=build --version=0.101.2 --glob=false --outDir=../out ./
```
This will generate the standalone app in the `..\out\` folder.
@@ -235,6 +235,10 @@ There is a regression in `nw-builder` versions `4.12.0` and `4.13.14`.
In local `win11-x64` testing, `4.11.6` generates the standalone application.
+```bash
+npx -p nw-builder@4.11.6 nwbuild --mode=build --version=0.101.2 --glob=false --outDir=../out ./
+```
+
:::
6) Launch the generated application:
diff --git a/docz/docs/03-demos/19-desktop/03-wails.md b/docz/docs/03-demos/19-desktop/03-wails.md
index 7fbf23e..d89fd86 100644
--- a/docz/docs/03-demos/19-desktop/03-wails.md
+++ b/docz/docs/03-demos/19-desktop/03-wails.md
@@ -64,7 +64,7 @@ This demo was tested in the following environments:
| macOS 14.5 | `darwin-arm` | `v2.10.1` | 2025-03-30 |
| Windows 11 | `win11-x64` | `v2.10.1` | 2025-05-27 |
| Windows 11 | `win11-arm` | `v2.10` | 2025-02-23 |
-| Linux (HoloOS) | `linux-x64` | `v2.9.2` | 2025-01-02 |
+| Linux (HoloOS) | `linux-x64` | `v2.10.2` | 2025-07-06 |
| Linux (Debian) | `linux-arm` | `v2.10` | 2025-02-16 |
:::
diff --git a/docz/docs/03-demos/19-desktop/04-tauri.md b/docz/docs/03-demos/19-desktop/04-tauri.md
index ba6084b..cc64753 100644
--- a/docz/docs/03-demos/19-desktop/04-tauri.md
+++ b/docz/docs/03-demos/19-desktop/04-tauri.md
@@ -60,7 +60,7 @@ This demo was tested in the following environments:
| macOS 14.5 | `darwin-arm` | `v1.6.0` | 2025-03-30 |
| Windows 11 | `win11-x64` | `v1.6.0` | 2025-05-27 |
| Windows 11 | `win11-arm` | `v1.6.0` | 2025-02-23 |
-| Linux (HoloOS) | `linux-x64` | `v1.6.0` | 2025-01-02 |
+| Linux (HoloOS) | `linux-x64` | `v1.6.0` | 2025-07-06 |
| Linux (Debian) | `linux-arm` | `v1.6.0` | 2025-05-27 |
:::
@@ -376,7 +376,7 @@ At a high level, the following software is required for building Tauri apps:
The platform configuration can be verified by running:
```bash
-npx @tauri-apps/cli info
+npx @tauri-apps/cli@1 info
```
If required dependencies are installed, the output will show a checkmark next to
diff --git a/docz/docs/03-demos/19-desktop/05-neutralino.md b/docz/docs/03-demos/19-desktop/05-neutralino.md
index 9ef63f9..a22d3a4 100644
--- a/docz/docs/03-demos/19-desktop/05-neutralino.md
+++ b/docz/docs/03-demos/19-desktop/05-neutralino.md
@@ -55,7 +55,7 @@ This demo was tested in the following environments:
| macOS 14.5 | `darwin-arm` | `6.0.0` | `6.0.0` | 2025-03-30 |
| Windows 11 | `win11-x64` | `6.1.0` | `6.1.0` | 2025-05-27 |
| Windows 11 | `win11-arm` | `5.6.0` | `5.6.0` | 2025-02-23 |
-| Linux (HoloOS) | `linux-x64` | `5.5.0` | `5.5.0` | 2025-01-02 |
+| Linux (HoloOS) | `linux-x64` | `6.1.0` | `6.1.0` | 2025-07-06 |
| Linux (Debian) | `linux-arm` | `5.6.0` | `5.6.0` | 2025-02-16 |
NeutralinoJS on Windows on ARM generates X64 binaries that run using the X64
diff --git a/docz/docs/03-demos/27-local/01-file.md b/docz/docs/03-demos/27-local/01-file.md
index 98e8f22..7faff4a 100644
--- a/docz/docs/03-demos/27-local/01-file.md
+++ b/docz/docs/03-demos/27-local/01-file.md
@@ -466,15 +466,15 @@ This browser demo was tested in the following environments:
| Browser | Date |
|:-------------|:-----------|
-| Chromium 131 | 2025-01-07 |
+| Chromium 137 | 2025-06-20 |
Some lesser-used browsers do not support File System Access API:
| Browser | Date |
|:-------------|:-----------|
-| Safari 17.5 | 2025-01-07 |
+| Safari 18.5 | 2025-06-20 |
| Konqueror 22 | 2025-04-23 |
-| Firefox 133 | 2025-01-07 |
+| Firefox 139 | 2025-06-20 |
:::
diff --git a/docz/docs/03-demos/32-extensions/10-stata.md b/docz/docs/03-demos/32-extensions/10-stata.md
index 6772d00..b358e11 100644
--- a/docz/docs/03-demos/32-extensions/10-stata.md
+++ b/docz/docs/03-demos/32-extensions/10-stata.md
@@ -53,11 +53,11 @@ This demo was tested in the following deployments:
| Architecture | Version | Date |
|:-------------|:------------------|:-----------|
-| `darwin-x64` | `18.5` (StataNow) | 2025-01-08 |
+| `darwin-x64` | `18.5` (StataNow) | 2025-06-20 |
| `darwin-arm` | `18.5` (StataNow) | 2025-04-24 |
| `win11-x64` | `18.5` (StataNow) | 2025-04-28 |
| `win11-arm` | `18.5` (StataNow) | 2025-02-23 |
-| `linux-x64` | `18.5` (StataNow) | 2025-01-09 |
+| `linux-x64` | `19.5` (StataNow) | 2025-07-06 |
:::
@@ -203,7 +203,7 @@ import excel "sheetjs.tmp.xlsx", firstrow
1) Open Stata and run the following command:
-```stata
+```stata title="Find Stata data directory (run in Stata)"
pwd
```
@@ -213,7 +213,7 @@ The output will be the default data directory. On macOS this is typically
2) Open a terminal window and create a project folder `sheetjs-stata` within the
Stata data directory:
-```bash
+```bash title="Create folder in Stata data directory (run in terminal)"
: # `cd` to the Stata data directory
cd ~/Documents/Stata
mkdir sheetjs-stata
@@ -252,7 +252,7 @@ bash
3) Download [`stplugin.c`](https://www.stata.com/plugins/stplugin.c) and
[`stplugin.h`](https://www.stata.com/plugins/stplugin.h) from the Stata website:
-```bash
+```bash title="Download Stata plugin files (run in terminal)"
curl -LO https://www.stata.com/plugins/stplugin.c
curl -LO https://www.stata.com/plugins/stplugin.h
```
@@ -276,7 +276,7 @@ curl -LO https://docs.sheetjs.com/plugins/stplugin.h
4) Download Duktape. In Windows, the following commands should be run in WSL. In
macOS, the commands should be run in the same Terminal session.
-```bash
+```bash title="Download Duktape (run in terminal)"
curl -LO https://duktape.org/duktape-2.7.0.tar.xz
tar -xJf duktape-2.7.0.tar.xz
mv duktape-2.7.0/src/*.{c,h} .
@@ -287,7 +287,7 @@ mv duktape-2.7.0/src/*.{c,h} .
In Windows, the following commands should be run in WSL. In macOS, the commands
should be run in the same Terminal session.
-```bash
+```bash title="Download plugin source (run in terminal)"
curl -LO https://docs.sheetjs.com/stata/cleanfile.c
```
@@ -298,7 +298,7 @@ curl -LO https://docs.sheetjs.com/stata/cleanfile.c
7) Build the plugin:
-```bash
+```bash title="Build plugin (run in terminal)"
gcc -shared -fPIC -DSYSTEM=APPLEMAC stplugin.c duktape.c cleanfile.c -lm -std=c99 -Wall -ocleanfile.plugin
```
@@ -329,7 +329,7 @@ cl /LD cleanfile.c stplugin.c duktape.c
8) Copy the plugin to the Stata data directory:
-```bash
+```bash title="Copy compiled plugin to Stata data directory (run in terminal)"
cp cleanfile.plugin ../
```
@@ -354,7 +354,7 @@ copy cleanfile.dll c:\data\cleanfile.plugin
9) Move to the Stata data directory:
-```bash
+```bash title="Move to Stata data directory (run in terminal)"
cd ..
```
@@ -383,7 +383,7 @@ bash
In Windows, the following commands should be run in WSL. In macOS, the commands
should be run in the same Terminal session.
-{`\
+{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://docs.sheetjs.com/pres.numbers`}
@@ -404,7 +404,7 @@ The screenshot in the introduction shows the result of steps 13 - 19
13) Run the following command in Stata:
-```stata
+```stata title="List files in data directory (run in Stata)"
dir
```
@@ -424,13 +424,13 @@ cd c:\data
14) Load the `cleanfile` plugin:
-```stata
+```stata title="Load the new plugin (run in Stata)"
program cleanfile, plugin
```
16) Read the `pres.numbers` test file:
-```stata
+```stata title="Run the plugin (run in Stata)"
plugin call cleanfile, "pres.numbers" verbose
```
@@ -453,13 +453,13 @@ for more help, see import excel
17) Close the plugin:
-```stata
+```stata title="Close the plugin (run in Stata)"
program drop cleanfile
```
18) Clear the current session:
-```stata
+```stata title="Clear the current session (run in Stata)"
clear
```
@@ -468,7 +468,7 @@ excel "sheetjs.tmp.xlsx", firstrow
Alternatively, manually type the command:
-```stata
+```stata title="Load the file created by the SheetJS plugin (run in Stata)"
import excel "sheetjs.tmp.xlsx", firstrow
```
@@ -481,25 +481,24 @@ The output will show the import result:
20) List the dataset:
-```stata
+```stata title="List the new variables (run in Stata)"
list Name Index
```
The result should match the following listing:
-```
-. list Name Index
-
- +----------------------+
- | Name Index |
- |----------------------|
- 1. | Bill Clinton 42 |
- 2. | GeorgeW Bush 43 |
- 3. | Barack Obama 44 |
- 4. | Donald Trump 45 |
- 5. | Joseph Biden 46 |
- +----------------------+
-```
+
+. list Name Index
+{' '}+----------------------+
+{' '}| Name Index |
+{' '}|----------------------|
+{' '}1. | Bill Clinton 42 |
+{' '}2. | GeorgeW Bush 43 |
+{' '}3. | Barack Obama 44 |
+{' '}4. | Donald Trump 45 |
+{' '}5. | Joseph Biden 46 |
+{' '}+----------------------+
+
In the Stata GUI, the Data Editor should match the following screenshot:
diff --git a/docz/docs/03-demos/32-extensions/12-maple.md b/docz/docs/03-demos/32-extensions/12-maple.md
index 511aca3..ca9b5b7 100644
--- a/docz/docs/03-demos/32-extensions/12-maple.md
+++ b/docz/docs/03-demos/32-extensions/12-maple.md
@@ -8,6 +8,8 @@ sidebar_custom_props:
---
import current from '/version.js';
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
import CodeBlock from '@theme/CodeBlock';
[Maple](https://www.maplesoft.com/products/Maple/) is a numeric computing
@@ -36,8 +38,8 @@ This demo was tested by SheetJS users in the following deployments:
| Architecture | Version | Date |
|:-------------|:---------|:-----------|
-| `darwin-x64` | `2024.0` | 2025-01-10 |
-| `win11-x64` | `2024.2` | 2025-05-07 |
+| `darwin-x64` | `2025.1` | 2025-06-20 |
+| `win11-x64` | `2025.1` | 2025-07-17 |
:::
@@ -134,6 +136,20 @@ with(ExcelTools);
Import(SheetToXLSX("pres.numbers"))
```
+
+
+
+1) Open a new Terminal window and create the `/tmp/sheetjs-maple` folder:
+
+```bash
+cd /tmp
+mkdir sheetjs-maple
+cd sheetjs-maple
+```
+
+
+
+
0) Install "Windows Subsystem for Linux" (WSL)[^5] and Visual Studio[^6].
1) Open a new "x64 Native Tools Command Prompt" window and create a project
@@ -145,20 +161,40 @@ mkdir sheetjs-maple
cd sheetjs-maple
```
+
+
+
2) Copy the headers and `lib` files from the Maple folder to the project folder.
The headers will be placed in the `extern/include/` folder in the Maple folder.
The `lib` files are placed in a platform-specific `bin` folder.
-The following commands apply to x64 versions of Windows:
+
+
+
+In macOS, the "Maple folder" is located in `/Library/Frameworks`:
+
+```bash
+cp /Library/Frameworks/Maple.framework/Versions/2025/extern/include/*.h .
+cp /Library/Frameworks/Maple.framework/Versions/2025/bin.APPLE_UNIVERSAL_OSX/*.so .
+cp /Library/Frameworks/Maple.framework/Versions/2025/bin.APPLE_UNIVERSAL_OSX/*.dylib .
+```
+
+3) Observe that macOS does not need a "Linux Subsystem" and move to Step 4.
+
+
+
```powershell
-copy "C:\Program Files\Maple 2024\extern\include\"*.h .
-copy "c:\Program Files\Maple 2024\bin.x86_64_WINDOWS"\*.lib .
+copy "C:\Program Files\Maple 2025\extern\include\"*.h .
+copy "C:\Program Files\Maple 2025\bin.x86_64_WINDOWS"\*.lib .
```
3) Run `bash` to enter WSL
-4) Within WSL, install Duktape:
+
+
+
+4) Install Duktape:
```bash
curl -LO https://duktape.org/duktape-2.7.0.tar.xz
@@ -166,7 +202,7 @@ tar -xJf duktape-2.7.0.tar.xz
mv duktape-2.7.0/src/*.{c,h} .
```
-5) Still within WSL, download SheetJS scripts and the test file.
+5) Download SheetJS scripts and the test file.
{`\
curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js
@@ -174,12 +210,26 @@ curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js
curl -LO https://docs.sheetjs.com/pres.numbers`}
-6) Still within WSL, download the extension C code
+6) Download the extension C code
```bash
curl -LO https://docs.sheetjs.com/maple/sheetjs-maple.c
```
+
+
+
+7) Observe that macOS does not need a "Linux Subsystem" and move to Step 8.
+
+8) Build the extension library:
+
+```powershell
+gcc -shared -fPIC duktape.c sheetjs-maple.c -lm -std=c99 -Wall -o libsheetjs-maple.so -L. -lmaplec
+```
+
+
+
+
7) Exit WSL by running `exit`. The window will return to the command prompt.
8) Build the extension DLL:
@@ -188,14 +238,30 @@ curl -LO https://docs.sheetjs.com/maple/sheetjs-maple.c
cl -Gz sheetjs-maple.c duktape.c /EHsc -link -dll -out:sheetjs-maple.dll maplec.lib
```
+
+
+
9) Close and re-open Maple, then create a new Maple Worksheet or Document
10) Run the following command in Maple to change the working directory:
+
+
+
+```maple
+currentdir("/tmp/sheetjs-maple");
+```
+
+
+
+
```maple
currentdir("c:\\sheetjs-maple");
```
+
+
+
11) Load the `SheetToXLSX` method from the extension:
```maple
diff --git a/docz/docs/03-demos/42-engines/09-hermes.md b/docz/docs/03-demos/42-engines/09-hermes.md
index 30c16b1..1413a4d 100644
--- a/docz/docs/03-demos/42-engines/09-hermes.md
+++ b/docz/docs/03-demos/42-engines/09-hermes.md
@@ -365,7 +365,7 @@ This demo was tested in the following deployments:
| Architecture | Git Commit | Date |
|:-------------|:-----------|:-----------|
| `darwin-x64` | `8ef11b4` | 2025-03-31 |
-| `darwin-arm` | `388376f` | 2025-01-13 |
+| `darwin-arm` | `8ef11b4` | 2025-08-07 |
| `linux-x64` | `8ef11b4` | 2025-04-21 |
| `linux-arm` | `388376f` | 2025-02-15 |
diff --git a/docz/docs/07-csf/03-sheet.md b/docz/docs/07-csf/03-sheet.md
index d40243a..c050136 100644
--- a/docz/docs/07-csf/03-sheet.md
+++ b/docz/docs/07-csf/03-sheet.md
@@ -210,7 +210,7 @@ In addition to the aforementioned sheet keys, worksheets also add:
merge object is a range object that represents the covered range.
- `ws['!outline']`: configure how outlines should behave. Options default to
- the default settings in Excel 2024:
+ the default settings in Excel:
| key | Excel feature | default |
|:----------|:----------------------------------------------|:--------|
diff --git a/docz/docs/07-csf/07-features/06-nf.md b/docz/docs/07-csf/07-features/06-nf.md
index f441bbb..afe1667 100644
--- a/docz/docs/07-csf/07-features/06-nf.md
+++ b/docz/docs/07-csf/07-features/06-nf.md
@@ -275,12 +275,12 @@ tend to use a continued fraction approach.
The common algorithm produces unexpected results for "Up to one digit":
-| Value | Mediant | Excel 2024 |
-|:------|--------:|-----------:|
-| `0.3` | `2/7` | `2/7` |
-| `1.3` | `1 2/7` | `1 1/3` |
-| `2.3` | `2 2/7` | `2 2/7` |
-| `3.3` | `3 2/7` | `3 2/7` |
+| Value | Mediant | Excel |
+|:------|--------:|--------:|
+| `0.3` | `2/7` | `2/7` |
+| `1.3` | `1 2/7` | `1 1/3` |
+| `2.3` | `2 2/7` | `2 2/7` |
+| `3.3` | `3 2/7` | `3 2/7` |
:::
diff --git a/docz/docs/08-api/03-parse-options.md b/docz/docs/08-api/03-parse-options.md
index 98185ff..ea4d676 100644
--- a/docz/docs/08-api/03-parse-options.md
+++ b/docz/docs/08-api/03-parse-options.md
@@ -99,20 +99,26 @@ The read functions accept an options argument:
#### Dense
-The ["Cell Storage"](/docs/csf/sheet#cell-storage) section of the SheetJS Data
-Model documentation explains the worksheet representation in more detail.
+By default, the `read` and `readFile` functions generate "sparse" worksheets.
+When the `dense` option is set to `true`, the functions will generate "dense"
+worksheets that may be more efficient in modern browsers.
+
+The ["Cell Storage"](/docs/csf/sheet#cell-storage) section explains worksheet
+structures in more detail.
:::note pass
[Utility functions that process SheetJS workbook objects](/docs/api/utilities/)
-typically process both sparse and dense worksheets.
+typically support sparse and dense worksheets.
:::
#### Range
-Some file formats, including XLSX and XLS, can self-report worksheet ranges. The
-self-reported ranges are used by default.
+Some file formats, including XLSX and XLS, can self-report worksheet ranges.
+`read` and `readFile` assume the self-reported worksheet ranges are correct. If
+files include cells outside this range, the parsers will save cell information
+but other utility functions will ignore those cells.
If the `sheetRows` option is set, up to `sheetRows` rows will be parsed from the
worksheets. `sheetRows-1` rows will be generated when looking at the JSON object
diff --git a/docz/docs/08-api/07-utilities/03-html.md b/docz/docs/08-api/07-utilities/03-html.md
index abe0a1c..aee6c74 100644
--- a/docz/docs/08-api/07-utilities/03-html.md
+++ b/docz/docs/08-api/07-utilities/03-html.md
@@ -120,6 +120,21 @@ or `querySelector`.
:::
+:::caution pass
+
+The underlying DOM operations have changed over time. Some deployments using
+older SheetJS CE versions may not work using the latest version, throwing an
+error such as:
+
+```
+Unsupported origin when DIV is not a TABLE
+```
+
+[The note](/docs/miscellany/errors#unsupported-origin-when-div-is-not-a-table)
+in the "Troubleshooting" section includes a deeper explanation and a workaround.
+
+:::
+
### Create New Sheet
**Create a worksheet or workbook from a TABLE element**
diff --git a/docz/docs/09-miscellany/02-errors.md b/docz/docs/09-miscellany/02-errors.md
index f2465d4..41e88ed 100644
--- a/docz/docs/09-miscellany/02-errors.md
+++ b/docz/docs/09-miscellany/02-errors.md
@@ -189,6 +189,43 @@ dev server and copied to the production site in the build process.
:::
+#### "Unsupported origin when DIV is not a TABLE"
+
+[`table_to_book` / `table_to_sheet`](/docs/api/utilities/html#html-table-input)
+process HTML DOM elements. The underlying behavior has changed over time. The
+SheetJS methods use the following techniques:
+
+- Versions up to `0.18.8` (including `0.18.5`) scanned the descendents of the
+ DOM element to find `TR` table rows. The root element need not be a `TABLE`
+
+- Newer releases expect a `TABLE` element and uses the `rows` property to find
+ the `TR` elements. This approach automatically handles `TBODY` and other
+ table section elements.
+
+Some data table libraries may use multiple `DIV` wrappers or multiple `TABLE`
+elements. The older implementation of `table_to_book` handles these corner cases
+but the newer implementation does not.
+
+The old behavior can be approximated by scanning for `TABLE` elements:
+
+```js
+function deep_table_to_sheet(elt, opts) {
+ let ws;
+ [...elt.getElementsByTagName("TABLE")].forEach(t => {
+ if(!ws) ws = XLSX.utils.table_to_sheet(t, opts);
+ else XLSX.utils.sheet_add_dom(ws, t, {...opts, origin: -1});
+ });
+ return ws;
+};
+
+function deep_table_to_book(elt, opts) {
+ return XLSX.utils.book_new(deep_table_to_sheet(elt, opts));
+}
+```
+
+See [issue #3319](https://git.sheetjs.com/sheetjs/sheetjs/issues/3319) for a
+longer discussion.
+
#### Cloudflare Worker "Error: Script startup exceeded CPU time limit."
This may show up in projects with many dependencies. The official workaround is
diff --git a/docz/docs/09-miscellany/05-contributing.md b/docz/docs/09-miscellany/05-contributing.md
index 57c7ce7..9cac5e1 100644
--- a/docz/docs/09-miscellany/05-contributing.md
+++ b/docz/docs/09-miscellany/05-contributing.md
@@ -41,11 +41,11 @@ These instructions were tested on the following platforms:
| Platform | Architecture | Test Date |
|:------------------------------|:-------------|:-----------|
-| Linux (Steam Deck Holo x64) | `linux-x64` | 2025-01-10 |
+| Linux (Ubuntu Linux x64) | `linux-x64` | 2025-07-06 |
| Linux (Debian Linux AArch64) | `linux-arm` | 2025-01-14 |
| MacOS 15.3 (x64) | `darwin-x64` | 2025-03-31 |
| MacOS 15.2 (ARM64) | `darwin-arm` | 2025-03-07 |
-| Windows 11 (x64) + WSL Ubuntu | `win11-x64` | 2025-01-14 |
+| Windows 11 (x64) + WSL Ubuntu | `win11-x64` | 2025-06-20 |
| Windows 11 (ARM) + WSL Ubuntu | `win11-arm` | 2025-02-23 |
With some additional dependencies, the unminified scripts are reproducible and
@@ -154,7 +154,7 @@ success with Windows on ARM running on computers with the M2 Max CPU.
B) Install NVM within WSL:
-```bash
+```bash title="Install NVM (run within WSL)"
sudo apt-get install curl
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
```
@@ -163,14 +163,14 @@ C) Exit the WSL session and start a new session
D) Install NodeJS 16 using NVM:
-```bash
+```bash title="Install NodeJS 16 (run within WSL)"
nvm install 16
nvm use 16
```
E) Clone the [`js-crc32` repo](https://git.sheetjs.com/sheetjs/js-crc32)
-```bash
+```bash title="Clone repo (run within WSL)"
git clone https://git.sheetjs.com/sheetjs/js-crc32
```
@@ -211,20 +211,32 @@ F) Set `git` config `core.autocrlf` setting to `false`. The following commands
should be run twice, once within PowerShell (if Git for Windows is installed)
and once within WSL bash:
-```bash
+```bash title="Configure git (run within WSL AND run within PowerShell)"
git config --global --add core.autocrlf false
git config --global --unset core.autocrlf true
```
-G) Run `unzip`. If the program is missing, install manually:
+G) Run `unzip` within WSL:
-```bash
+```bash title="Test if the unzip tool is installed (run within WSL)"
+unzip
+```
+
+If the program is missing, install manually:
+
+```bash title="Install unzip (run within WSL)"
sudo apt-get install -y unzip
```
-H) Run `make`. If the program is missing, install manually:
+H) Run `make` within WSL:
-```bash
+```bash title="Test if the make tool is installed (run within WSL)"
+make
+```
+
+If the program is missing, install manually:
+
+```bash title="Install make (run within WSL)"
sudo apt-get install -y make
```
@@ -326,7 +338,7 @@ On Debian and Ubuntu systems, `build-essential`, `curl` and `git` are required:
```bash title="Debian and Ubuntu"
sudo apt update
-sudo apt-get install build-essential curl git
+sudo apt install build-essential curl git
```
On Arch Linux, `base-devel`, `curl` and `git` are required:
diff --git a/docz/docusaurus.config.js b/docz/docusaurus.config.js
index 401cabe..d972e49 100644
--- a/docz/docusaurus.config.js
+++ b/docz/docusaurus.config.js
@@ -213,16 +213,27 @@ const config = {
require.resolve("@cmfcmf/docusaurus-search-local"),
[ '@docusaurus/plugin-client-redirects', {
redirects: [
+ /* installation */
+ { from: '/docs/installation', to: '/docs/getting-started/' },
+ { from: '/docs/installation/standalone', to: '/docs/getting-started/installation/standalone/' },
+ { from: '/docs/installation/frameworks', to: '/docs/getting-started/installation/frameworks/' },
+ { from: '/docs/installation/nodejs', to: '/docs/getting-started/installation/nodejs/' },
+ { from: '/docs/installation/amd', to: '/docs/getting-started/installation/amd/' },
+ { from: '/docs/installation/extendscript', to: '/docs/getting-started/installation/extendscript/' },
+ { from: '/docs/installation/deno', to: '/docs/getting-started/installation/deno/' },
+ { from: '/docs/installation/bun', to: '/docs/getting-started/installation/bun/' },
+ /* examples */
{ from: '/docs/example', to: '/docs/getting-started/examples/export/' },
{ from: '/docs/getting-started/example', to: '/docs/getting-started/examples/export/' },
- { from: '/docs/installation', to: '/docs/getting-started/' },
+
+ /* api */
{ from: '/docs/interface', to: '/docs/api/' },
+ { from: '/docs/read', to: '/docs/api/parse-options/' },
+
+ /* demos */
{ from: '/docs/demos/excel', to: '/docs/demos/' },
{ from: '/docs/getting-started/demos/', to: '/docs/demos/' },
{ from: '/docs/getting-started/demos/excel', to: '/docs/demos/' },
- { from: '/docs/demos/content', to: '/docs/demos/static/' },
- { from: '/docs/demos/git', to: '/docs/demos/cloud/github/' },
- { from: '/docs/demo/grid', to: '/docs/demos/grid/' },
/* frontend */
{ from: '/docs/demos/angular', to: '/docs/demos/frontend/angular/' },
{ from: '/docs/demos/react', to: '/docs/demos/frontend/react/' },
@@ -241,19 +252,18 @@ const config = {
{ from: '/docs/demos/netsuite', to: '/docs/demos/cloud/netsuite/' },
{ from: '/docs/demos/gsheet', to: '/docs/demos/cloud/gsheet/' },
{ from: '/docs/demos/airtable', to: '/docs/demos/cloud/airtable/' },
+ { from: '/docs/demos/git', to: '/docs/demos/cloud/github/' },
+ { from: '/docs/demos/cloudata', to: '/docs/demos/cloud/' },
+ { from: '/docs/demos/cloudata/gsheet', to: '/docs/demos/cloud/gsheet/' },
+ { from: '/docs/demos/cloudata/airtable', to: '/docs/demos/cloud/airtable/' },
+ { from: '/docs/getting-started/demos/netsuite', to: '/docs/demos/cloud/netsuite/' },
+ { from: '/docs/demos/hosting/dropbox', to: '/docs/demos/cloud/dropbox/' },
+ { from: '/docs/demos/hosting/github', to: '/docs/demos/cloud/github/' },
/* extensions */
{ from: '/docs/demos/extendscript', to: '/docs/demos/extensions/extendscript/' },
{ from: '/docs/demos/excelapi', to: '/docs/demos/extensions/excelapi/' },
{ from: '/docs/demos/chromium', to: '/docs/demos/extensions/chromium/' },
{ from: '/docs/getting-started/demos/chromium', to: '/docs/demos/extensions/chromium/' },
- /* cloud */
- { from: '/docs/demos/cloudata', to: '/docs/demos/cloud/' },
- { from: '/docs/demos/cloudata/gsheet', to: '/docs/demos/cloud/gsheet/' },
- { from: '/docs/demos/cloudata/airtable', to: '/docs/demos/cloud/airtable/' },
- { from: '/docs/getting-started/demos/netsuite', to: '/docs/demos/cloud/netsuite/' },
- /* hosting */
- { from: '/docs/demos/hosting/dropbox', to: '/docs/demos/cloud/dropbox/' },
- { from: '/docs/demos/hosting/github', to: '/docs/demos/cloud/github/' },
/* data */
{ from: '/docs/getting-started/demos/database', to: '/docs/demos/data/' },
{ from: '/docs/demos/database', to: '/docs/demos/data/' },
@@ -283,16 +293,11 @@ const config = {
{ from: '/docs/demos/ml', to: '/docs/demos/math/' },
{ from: '/docs/demos/bigdata/ml', to: '/docs/demos/math/' },
{ from: '/docs/demos/engines/pandas', to: '/docs/demos/math/pandas/' },
- /* installation */
- { from: '/docs/installation/standalone', to: '/docs/getting-started/installation/standalone/' },
- { from: '/docs/installation/frameworks', to: '/docs/getting-started/installation/frameworks/' },
- { from: '/docs/installation/nodejs', to: '/docs/getting-started/installation/nodejs/' },
- { from: '/docs/installation/amd', to: '/docs/getting-started/installation/amd/' },
- { from: '/docs/installation/extendscript', to: '/docs/getting-started/installation/extendscript/' },
- { from: '/docs/installation/deno', to: '/docs/getting-started/installation/deno/' },
- { from: '/docs/installation/bun', to: '/docs/getting-started/installation/bun/' },
- /* misc */
+ /* grid */
{ from: '/demos/datagrid', to: '/docs/demos/grid/' },
+ { from: '/docs/demo/grid', to: '/docs/demos/grid/' },
+ /* static */
+ { from: '/docs/demos/content', to: '/docs/demos/static/' },
]
}]
]
diff --git a/tests/bundler/browserify.sh b/tests/bundler/browserify.sh
index 37083ec..46b52bc 100755
--- a/tests/bundler/browserify.sh
+++ b/tests/bundler/browserify.sh
@@ -28,7 +28,7 @@ document.getElementById("xport").addEventListener("click", function() {
prez.forEach(function(row) {
row.start = row.terms.find(function(term) {
return term.type === "prez";
- }).start
+ }).start;
});
prez.sort(function(l,r) { return l.start.localeCompare(r.start); });
diff --git a/tests/bundler/requirejs.sh b/tests/bundler/requirejs.sh
index ac8481c..4849066 100755
--- a/tests/bundler/requirejs.sh
+++ b/tests/bundler/requirejs.sh
@@ -24,7 +24,11 @@ require(["xlsx"], function(XLSX) {
var prez = raw_data.filter(function(row) { return row.terms.some(function(term) { return term.type === "prez"; }); });
/* sort by first presidential term */
- prez.forEach(function(row) { row.start = row.terms.find(function(term) {return term.type === "prez"; }).start; });
+ prez.forEach(function(row) {
+ row.start = row.terms.find(function(term) {
+ return term.type === "prez";
+ }).start;
+ });
prez.sort(function(l,r) { return l.start.localeCompare(r.start); });
/* flatten objects */
@@ -46,7 +50,7 @@ require(["xlsx"], function(XLSX) {
worksheet["!cols"] = [ { wch: max_width } ];
/* create an XLSX file and try to save to Presidents.xlsx */
- //XLSX.writeFileXLSX(workbook, "Presidents.xlsx");
+ XLSX.writeFileXLSX(workbook, "Presidents.xlsx");
console.log(XLSX.utils.sheet_to_csv(worksheet));
});
});
diff --git a/tests/engines-hermes.sh b/tests/engines-hermes.sh
index d768070..24adaf4 100755
--- a/tests/engines-hermes.sh
+++ b/tests/engines-hermes.sh
@@ -11,6 +11,12 @@ curl -LO https://docs.sheetjs.com/hermes/sheetjs-hermes.cpp
make init
+# CMake 4 workaround
+rm -rf build_release
+cp hermes/CMakeLists.txt hermes/CMakeLists.bak
+awk 'NR != 42' hermes/CMakeLists.txt
+make init
+
make sheetjs-hermes
curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js
diff --git a/tests/static-esbuild.sh b/tests/static/esbuild.sh
similarity index 97%
rename from tests/static-esbuild.sh
rename to tests/static/esbuild.sh
index 8b12da5..940cc9c 100755
--- a/tests/static-esbuild.sh
+++ b/tests/static/esbuild.sh
@@ -63,7 +63,8 @@ app.listen(7262, async() => {
EOF
-for n in 0.9.1 0.{9..24}; do
+for n in 0.9.1 0.{9..25}; do
+ npm rm --save esbuild
npm i --save esbuild@$n
npm ls | grep esbuild
rm -f out.js