diff --git a/docz/docs/03-demos/06-desktop/02-nwjs.md b/docz/docs/03-demos/06-desktop/02-nwjs.md index b4b0b16..13ff97e 100644 --- a/docz/docs/03-demos/06-desktop/02-nwjs.md +++ b/docz/docs/03-demos/06-desktop/02-nwjs.md @@ -113,10 +113,11 @@ This demo was tested in the following environments: | OS and Version | Arch | NW.js | Date | |:---------------|:-----|:---------|:-----------| -| macOS 13.4.1 | x64 | `0.78.0` | 2023-07-27 | -| Windows 10 | x64 | `0.78.0` | 2023-07-27 | -| Windows 10 | ARM | `0.80.0` | 2023-09-25 | -| Linux (HoloOS) | x64 | `0.78.0` | 2023-07-27 | +| macOS 13.5.2 | x64 | `0.78.1` | 2023-09-27 | +| macOS 13.5.2 | ARM | `0.78.1` | 2023-09-27 | +| Windows 10 | x64 | `0.78.1` | 2023-09-27 | +| Windows 11 | ARM | `0.78.1` | 2023-09-27 | +| Linux (HoloOS) | x64 | `0.78.1` | 2023-09-27 | ::: @@ -129,7 +130,7 @@ This demo was tested in the following environments: "version": "0.0.0", "main": "index.html", "dependencies": { - "nw": "~0.80.0", + "nw": "0.78.1", "xlsx": "https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz" } }`} @@ -150,7 +151,11 @@ In the terminal window, the download can be performed with: curl -LO https://docs.sheetjs.com/nwjs/index.html ``` -3) Run `npm i` to install dependencies +3) Install dependencies: + +```bash +npm i +``` 4) To verify the app works, run in the test environment: @@ -164,7 +169,7 @@ the file input element to select a spreadsheet and clicking the export button. 5) To build a standalone app, run the builder: ```bash -npx -p nw-builder nwbuild --mode=build --glob=false --outDir=../out ./ +npx -p nw-builder nwbuild --mode=build --version=0.78.1 --glob=false --outDir=../out ./ ``` -This will generate the standalone app in the `..\build\sheetjs-nwjs\` folder. \ No newline at end of file +This will generate the standalone app in the `..\out\` folder. \ No newline at end of file diff --git a/docz/docs/03-demos/06-desktop/04-tauri.md b/docz/docs/03-demos/06-desktop/04-tauri.md index cb1824e..c2fc0dd 100644 --- a/docz/docs/03-demos/06-desktop/04-tauri.md +++ b/docz/docs/03-demos/06-desktop/04-tauri.md @@ -260,7 +260,9 @@ This demo was tested in the following environments: | macOS 13.4.0 | x64 | `v1.4.0` | 2023-06-25 | | macOS 13.4.1 | ARM | `v1.4.0` | 2023-06-29 | | Windows 10 | x64 | `v1.4.1` | 2023-07-30 | +| Windows 11 | ARM | `v1.4.1` | 2023-09-26 | | Linux (HoloOS) | x64 | `v1.4.1` | 2023-07-30 | +| Linux (Debian) | ARM | `v1.4.1` | 2023-09-26 | ::: diff --git a/docz/docs/03-demos/06-desktop/09-cli.md b/docz/docs/03-demos/06-desktop/09-cli.md index 41e933f..b982f2c 100644 --- a/docz/docs/03-demos/06-desktop/09-cli.md +++ b/docz/docs/03-demos/06-desktop/09-cli.md @@ -345,6 +345,7 @@ This demo was last tested in the following deployments: | `darwin-x64` | `1.33.2` | 2023-05-08 | | `darwin-arm` | `1.34.1` | 2023-06-05 | | `win10-x64` | `1.33.2` | 2023-05-08 | +| `win11-arm` | `1.37.0` | 2023-09-26 | | `linux-x64` | `1.33.2` | 2023-05-08 | | `linux-arm` | `1.36.3` | 2023-08-30 | diff --git a/docz/docs/03-demos/42-engines/01_duktape.md b/docz/docs/03-demos/42-engines/01-duktape.md similarity index 94% rename from docz/docs/03-demos/42-engines/01_duktape.md rename to docz/docs/03-demos/42-engines/01-duktape.md index bde8d4f..d5a29da 100644 --- a/docz/docs/03-demos/42-engines/01_duktape.md +++ b/docz/docs/03-demos/42-engines/01-duktape.md @@ -5,6 +5,8 @@ pagination_next: solutions/input --- import current from '/version.js'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; Duktape is an embeddable JS engine written in C. It has been ported to a number @@ -120,6 +122,7 @@ This demo was tested in the following deployments: | `darwin-x64` | `2.7.0` | 2023-07-24 | | `darwin-arm` | `2.7.0` | 2023-06-05 | | `win10-x64` | `2.7.0` | 2023-07-24 | +| `win11-arm` | `2.7.0` | 2023-09-26 | | `linux-x64` | `2.7.0` | 2023-09-22 | | `linux-arm` | `2.7.0` | 2023-08-30 | @@ -163,16 +166,42 @@ curl -LO https://docs.sheetjs.com/duk/sheetjs.duk.c 3) Compile standalone `sheetjs.duk` binary + + + ```bash gcc -std=c99 -Wall -osheetjs.duk sheetjs.duk.c duktape.c -lm ``` + + + +```powershell +cl sheetjs.duk.c duktape.c /I .\ +``` + + + + 4) Run the demo: + + + ```bash ./sheetjs.duk pres.numbers ``` + + + +```bash +.\sheetjs.duk.exe pres.numbers +``` + + + + If the program succeeded, the CSV contents will be printed to console and the file `sheetjsw.xlsb` will be created. That file can be opened with Excel. diff --git a/docz/docs/03-demos/42-engines/02_v8.md b/docz/docs/03-demos/42-engines/02-v8.md similarity index 91% rename from docz/docs/03-demos/42-engines/02_v8.md rename to docz/docs/03-demos/42-engines/02-v8.md index dda55ae..1260798 100644 --- a/docz/docs/03-demos/42-engines/02_v8.md +++ b/docz/docs/03-demos/42-engines/02-v8.md @@ -128,6 +128,7 @@ This demo was tested in the following deployments: | `11.8.82` | `darwin-arm` | macOS 13.5.1 | `clang 14.0.3` | 2023-08-26 | | `11.8.82` | `win10-x64` | Windows 10 | `CL 19.37.32822` | 2023-08-26 | | `11.8.82` | `linux-x64` | HoloOS 3.4.8 | `gcc 12.2.0` | 2023-08-26 | +| `11.8.82` | `linux-arm` | Debian 11 | `gcc 10.2.1` | 2023-09-26 | ::: @@ -435,7 +436,7 @@ fatal: cannot set up tracking information; starting point 'refs/tags/11.8.82' is 6) Build the static library. - + ```bash tools/dev/v8gen.py x64.release.sample @@ -443,11 +444,38 @@ ninja -C out.gn/x64.release.sample v8_monolith ``` - + ```bash tools/dev/v8gen.py arm64.release.sample ninja -C out.gn/arm64.release.sample v8_monolith +``` + + + + +```bash +tools/dev/v8gen.py x64.release.sample +ninja -C out.gn/x64.release.sample v8_monolith +``` + + + + +```bash +tools/dev/v8gen.py arm64.release.sample +``` + +Append the following line to `out.gn/arm64.release.sample/args.gn`: + +```text title="out.gn/arm64.release.sample/args.gn (add to file)" +is_clang = false +``` + +Run the build: + +```bash +ninja -C out.gn/arm64.release.sample v8_monolith ``` @@ -504,7 +532,7 @@ treat_warnings_as_errors = false 7) Ensure the sample `hello-world` compiles and runs: - + ```bash g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ @@ -514,7 +542,27 @@ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith ``` - + + +```bash +g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ + -lv8_libbase -lv8_libplatform -ldl -Lout.gn/arm64.release.sample/obj/ -pthread \ + -std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX +./hello_world +``` + + + + +```bash +g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ + -lv8_libbase -lv8_libplatform -ldl -Lout.gn/x64.release.sample/obj/ -pthread \ + -std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX +./hello_world +``` + + + ```bash g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ @@ -572,7 +620,7 @@ cp ~/dev/v8/v8/samples/hello-world.cc . 10) Create symbolic links to the `include` headers and `obj` library folders: - + ```bash ln -s ~/dev/v8/v8/include @@ -580,7 +628,23 @@ ln -s ~/dev/v8/v8/out.gn/x64.release.sample/obj ``` - + + +```bash +ln -s ~/dev/v8/v8/include +ln -s ~/dev/v8/v8/out.gn/arm64.release.sample/obj +``` + + + + +```bash +ln -s ~/dev/v8/v8/include +ln -s ~/dev/v8/v8/out.gn/x64.release.sample/obj +``` + + + ```bash ln -s ~/dev/v8/v8/include diff --git a/docz/docs/03-demos/42-engines/03_rhino.md b/docz/docs/03-demos/42-engines/03-rhino.md similarity index 100% rename from docz/docs/03-demos/42-engines/03_rhino.md rename to docz/docs/03-demos/42-engines/03-rhino.md diff --git a/docz/docs/03-demos/42-engines/04_jsc.md b/docz/docs/03-demos/42-engines/04-jsc.md similarity index 100% rename from docz/docs/03-demos/42-engines/04_jsc.md rename to docz/docs/03-demos/42-engines/04-jsc.md diff --git a/docz/docs/03-demos/42-engines/05-jint.md b/docz/docs/03-demos/42-engines/05-jint.md index cfffdaa..ee91d8e 100644 --- a/docz/docs/03-demos/42-engines/05-jint.md +++ b/docz/docs/03-demos/42-engines/05-jint.md @@ -164,16 +164,17 @@ This demo was tested in the following deployments: | Architecture | Jint Version | Date | |:-------------|:------------------|:-----------| | `darwin-x64` | `3.0.0-beta-2051` | 2023-09-16 | +| `darwin-arm` | `3.0.0-beta-2051` | 2023-09-26 | | `win10-x64` | `3.0.0-beta-2051` | 2023-09-16 | +| `win11-arm` | `3.0.0-beta-2051` | 2023-09-26 | | `linux-x64` | `3.0.0-beta-2051` | 2023-09-22 | +| `linux-arm` | `3.0.0-beta-2051` | 2023-09-26 | ::: -0) Install .NET[^5] - ### Platform Configuration -1) Set the `DOTNET_CLI_TELEMETRY_OPTOUT` environment variable to `1`. +0) Set the `DOTNET_CLI_TELEMETRY_OPTOUT` environment variable to `1`.
How to disable telemetry (click to hide) @@ -206,6 +207,20 @@ Click "OK" in each window (3 windows) and restart your computer.
+1) Install .NET + +
Installation Notes (click to show) + +For macOS x64 and ARM64, install with Homebrew: `brew install dotnet@6` + +For Steam Deck Holo and other Arch Linux x64 distributions, the `dotnet-sdk` and +`dotnet-runtime` packages should be installed using `pacman`. + + is the official source +for Windows and ARM64 Linux versions. + +
+ 2) Open a new Terminal window in macOS or PowerShell window in Windows. ### Base Project @@ -213,7 +228,6 @@ Click "OK" in each window (3 windows) and restart your computer. 3) Create a new folder `SheetJSJint` and a new project using the `dotnet` tool: ```bash -rm -rf SheetJSJint mkdir SheetJSJint cd SheetJSJint dotnet new console --framework net6.0 @@ -331,14 +345,17 @@ If the `using Jint;` directive is omitted, the build will fail: ### Standalone Application -8) Find the runtime identifier (RID) for your platform[^6]. The RID values for +8) Find the runtime identifier (RID) for your platform[^5]. The RID values for tested platforms are listed below: -| Platform | RID | -|:-----------------|:------------| -| Intel Mac | `osx-x64` | -| Windows 10 (x64) | `win10-x64` | -| Linux (x64) | `linux-x64` | +| Platform | RID | +|:-----------------|:--------------| +| Intel Mac | `osx-x64` | +| ARM64 Mac | `osx-arm64` | +| Windows 10 (x64) | `win10-x64` | +| Windows 11 (ARM) | `win-arm64` | +| Linux (x64) | `linux-x64` | +| Linux (ARM) | `linux-arm64` | 9) Build the standalone application. Replace `$RID` with the real value in: @@ -355,6 +372,15 @@ For Intel Mac, the RID is `osx-x64` and the command is ```bash dotnet publish -c Release -r osx-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true +``` + +
+ + +For Apple Silicon, the RID is `osx-arm64` and the command is + +```bash +dotnet publish -c Release -r osx-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true ``` @@ -364,6 +390,15 @@ For x64 Linux, the RID is `linux-x64` and the command is ```bash dotnet publish -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true +``` + +
+ + +For x64 Linux, the RID is `linux-arm64` and the command is + +```bash +dotnet publish -c Release -r linux-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true ``` @@ -373,6 +408,15 @@ For Windows 10 x64, the RID is `win10-x64` and the command is: ```powershell dotnet publish -c Release -r win10-x64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true +``` + +
+ + +For Windows 11 ARM64, the RID is `win-arm64` and the command is: + +```powershell +dotnet publish -c Release -r win-arm64 --self-contained true -p:PublishSingleFile=true -p:PublishTrimmed=true ``` @@ -394,6 +438,15 @@ For Intel Mac, the RID is `osx-x64` and the command is: ```bash cp bin/Release/net6.0/osx-x64/publish/SheetJSJint . +``` + +
+ + +For Apple Silicon, the RID is `osx-arm64` and the command is: + +```bash +cp bin/Release/net6.0/osx-arm64/publish/SheetJSJint . ``` @@ -403,6 +456,15 @@ For x64 Linux, the RID is `linux-x64` and the command is ```bash cp bin/Release/net6.0/linux-x64/publish/SheetJSJint . +``` + +
+ + +For x64 Linux, the RID is `linux-arm64` and the command is + +```bash +cp bin/Release/net6.0/linux-arm64/publish/SheetJSJint . ``` @@ -412,6 +474,15 @@ For Windows 10 x64, the RID is `win10-x64` and the command is: ```powershell copy .\bin\Release\net6.0\win10-x64\publish\SheetJSJint.exe . +``` + +
+ + +For Windows 11 ARM64, the RID is `win-arm64` and the command is: + +```powershell +copy .\bin\Release\net6.0\win-arm64\publish\SheetJSJint.exe . ``` @@ -442,5 +513,4 @@ copy .\bin\Release\net6.0\win10-x64\publish\SheetJSJint.exe . [^2]: See [`read` in "Reading Files"](/docs/api/parse-options) [^3]: See [`write` in "Writing Files"](/docs/api/write-options) [^4]: See ["Supported Output Formats" in "Writing Files"](/docs/api/write-options#supported-output-formats) for details on `bookType` -[^5]: At the time of writing, is the official endpoint. For Steam Deck Holo and other Arch Linux distributions, the `dotnet-sdk` and `dotnet-runtime` packages should be installed using `pacman`. -[^6]: See [".NET RID Catalog"](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog) in the .NET documentation \ No newline at end of file +[^5]: See [".NET RID Catalog"](https://learn.microsoft.com/en-us/dotnet/core/rid-catalog) in the .NET documentation \ No newline at end of file diff --git a/docz/docs/03-demos/42-engines/06_goja.md b/docz/docs/03-demos/42-engines/06-goja.md similarity index 98% rename from docz/docs/03-demos/42-engines/06_goja.md rename to docz/docs/03-demos/42-engines/06-goja.md index bc0ad59..13a6f39 100644 --- a/docz/docs/03-demos/42-engines/06_goja.md +++ b/docz/docs/03-demos/42-engines/06-goja.md @@ -97,7 +97,7 @@ This demo was tested in the following deployments: | `darwin-x64` | `28ee0ee` | `1.19.3` | 2023-06-05 | | `darwin-arm` | `28ee0ee` | `1.20.4` | 2023-06-05 | | `win10-x64` | `81d7606` | `1.20.2` | 2023-08-27 | -| `win10-arm` | `fc55792` | `1.21.1` | 2023-09-25 | +| `win11-arm` | `fc55792` | `1.21.1` | 2023-09-25 | | `linux-x64` | `81d7606` | `1.21.0` | 2023-08-27 | | `linux-arm` | `3dbe69d` | `1.21.1` | 2023-08-30 | diff --git a/docz/docs/03-demos/42-engines/07_nashorn.md b/docz/docs/03-demos/42-engines/07-nashorn.md similarity index 100% rename from docz/docs/03-demos/42-engines/07_nashorn.md rename to docz/docs/03-demos/42-engines/07-nashorn.md diff --git a/docz/docs/03-demos/42-engines/08_quickjs.md b/docz/docs/03-demos/42-engines/08-quickjs.md similarity index 100% rename from docz/docs/03-demos/42-engines/08_quickjs.md rename to docz/docs/03-demos/42-engines/08-quickjs.md diff --git a/docz/docs/03-demos/42-engines/09_hermes.md b/docz/docs/03-demos/42-engines/09-hermes.md similarity index 100% rename from docz/docs/03-demos/42-engines/09_hermes.md rename to docz/docs/03-demos/42-engines/09-hermes.md diff --git a/docz/docs/03-demos/42-engines/15_rb.md b/docz/docs/03-demos/42-engines/15-rb.md similarity index 100% rename from docz/docs/03-demos/42-engines/15_rb.md rename to docz/docs/03-demos/42-engines/15-rb.md diff --git a/docz/docs/03-demos/42-engines/20_chakra.md b/docz/docs/03-demos/42-engines/20-chakra.md similarity index 98% rename from docz/docs/03-demos/42-engines/20_chakra.md rename to docz/docs/03-demos/42-engines/20-chakra.md index 7ed7750..fc4f211 100644 --- a/docz/docs/03-demos/42-engines/20_chakra.md +++ b/docz/docs/03-demos/42-engines/20-chakra.md @@ -137,7 +137,7 @@ brew install icu4c cmake ```
- + ```bash brew install icu4c cmake @@ -201,7 +201,7 @@ cd .. ::: - + :::info pass diff --git a/docz/docs/03-demos/42-engines/21_boa.md b/docz/docs/03-demos/42-engines/21-boa.md similarity index 99% rename from docz/docs/03-demos/42-engines/21_boa.md rename to docz/docs/03-demos/42-engines/21-boa.md index 5010d98..f23f94c 100644 --- a/docz/docs/03-demos/42-engines/21_boa.md +++ b/docz/docs/03-demos/42-engines/21-boa.md @@ -117,6 +117,7 @@ This demo was tested in the following deployments: | `darwin-x64` | 2023-08-31 | | `darwin-arm` | 2023-07-05 | | `win10-x64` | 2023-08-31 | +| `win11-arm` | 2023-09-26 | | `linux-x64` | 2023-07-05 | | `linux-arm` | 2023-08-30 | diff --git a/docz/docs/03-demos/42-engines/22_perl.md b/docz/docs/03-demos/42-engines/22-perl.md similarity index 100% rename from docz/docs/03-demos/42-engines/22_perl.md rename to docz/docs/03-demos/42-engines/22-perl.md diff --git a/docz/docs/09-miscellany/02-errors.md b/docz/docs/09-miscellany/02-errors.md index 6858458..2f5cfe5 100644 --- a/docz/docs/09-miscellany/02-errors.md +++ b/docz/docs/09-miscellany/02-errors.md @@ -78,20 +78,7 @@ further detail. Browsers have strict memory limits and large spreadsheets can exceed the limits. -
Technical Limitations (click to show) - -V8 (Node/Chrome) have a maximum string length that has changed over the years. -Node 16 and Chrome 106 enforce a limit of 536870888 characters. This issue will -manifest with error messages such as `Invalid string length`. - -There are memory bottlenecks associated with string addresses. A number of bugs -have been reported to the V8 and Chromium projects on this subject. While those -bugs are being resolved, for sheets containing hundreds of thousands of rows, -dense mode worksheets should be used. - -
- -The API functions support [dense mode](/docs/csf/sheet#dense-mode): +For large worksheets, use [dense worksheets](/docs/csf/sheet#dense-mode): ```js var wb = XLSX.read(data, {dense: true}); // creates a dense-mode sheet @@ -103,6 +90,48 @@ server with NodeJS or some other server-side technology. If the files are small, please [report to our issue tracker](https://git.sheetjs.com/sheetjs/sheetjs/issues) +:::info pass + +Sparse worksheets historically were more performant in small sheets. Due to a +[2014 bug in V8](https://bugs.chromium.org/p/v8/issues/detail?id=3175) and a +[2017 regression in V8](https://bugs.chromium.org/p/v8/issues/detail?id=6696) +(the JavaScript engine powering Node and Chrome), large sparse worksheets will +crash the web browser. + +::: + +#### "Invalid String Length" or ERR_STRING_TOO_LONG + +V8 (Node/Chrome) have a maximum string length that has changed over the years. +Node 16 and Chrome 106 enforce a limit of `0x1fffffe8` (536870888) characters. +[A 2017 V8 discussion](https://bugs.chromium.org/p/v8/issues/detail?id=6148) +explains some of the background behind the V8 decision. + +XLSX and ODS are ZIP-based formats that store worksheets in XML entries. In +worksheets with over 100M cells, the XML strings may exceed the V8 limit! + +Depending on the environment, this issue may result in missing worksheets; error +messages such as `Invalid string length`, `ERR_STRING_TOO_LONG`, or +`Cannot create a string longer than 0x1fffffe8 characters`; or browser crashes. + +A number of bugs have been reported to the V8 and Chromium projects on this +subject, some of which have been open for nearly a decade. + +Please [leave a note](https://git.sheetjs.com/sheetjs/sheetjs/issues) including +worksheet sizes (number of rows/columns and file size) and environment (browser +or NodeJS or other platform). + +:::tip pass + +The "Excel Binary Workbook" XLSB format uses a binary representation. The XLSB +parser is not affected by this issue. + +XLSB files are typically smaller than equivalent XLSX files. There are other +Excel performance benefits to XLSB, so it is strongly recommended to use XLSB +when possible. + +::: + #### Invalid HTML: could not find table Data can be fetched and parsed by the library: