From 5072c31d40a0aa152eb28c042d7f3b41f855a860 Mon Sep 17 00:00:00 2001 From: SheetJS Date: Sun, 14 Jun 2026 19:29:38 -0400 Subject: [PATCH] LynxJS win11-x64 --- docz/data/desktop.xls | 2 +- docz/data/mobile.xls | 26 +-- .../01-installation/07-bun.md | 2 +- .../03-demos/17-mobile/02-nativescript.md | 121 +++++++------ docz/docs/03-demos/17-mobile/06-flutter.md | 2 +- docz/docs/03-demos/17-mobile/07-lynx.md | 5 +- docz/docs/03-demos/19-desktop/02-nwjs.md | 41 ++--- docz/docs/03-demos/19-desktop/04-tauri.md | 2 +- docz/docs/03-demos/20-cli/08-boxednode.md | 4 +- docz/docs/03-demos/27-local/05-clipboard.md | 21 ++- .../03-demos/32-extensions/03-excelapi.md | 14 +- docz/docs/03-demos/32-extensions/10-stata.md | 6 +- docz/docs/03-demos/32-extensions/12-maple.md | 4 +- docz/docs/03-demos/32-extensions/41-ghidra.md | 14 +- docz/docs/03-demos/42-engines/01-duktape.md | 12 +- docz/docs/03-demos/42-engines/02-v8.md | 168 ++++++++++++++++-- docz/docs/03-demos/42-engines/06-goja.md | 4 +- docz/docs/03-demos/42-engines/09-hermes.md | 4 +- docz/static/cli/Cargo.toml | 2 +- docz/static/cli/sheet2csv.rs | 19 +- docz/static/cli/snapshot.rs | 10 +- docz/static/lynx/App.tsx | 2 +- tests/engines/duktape-perl.sh | 9 +- 23 files changed, 318 insertions(+), 176 deletions(-) diff --git a/docz/data/desktop.xls b/docz/data/desktop.xls index 972bd6a..9c0129e 100644 --- a/docz/data/desktop.xls +++ b/docz/data/desktop.xls @@ -72,7 +72,7 @@ - + Wails diff --git a/docz/data/mobile.xls b/docz/data/mobile.xls index f7dbfd0..7e44da0 100644 --- a/docz/data/mobile.xls +++ b/docz/data/mobile.xls @@ -34,7 +34,7 @@ - +
@@ -44,9 +44,9 @@ Real Device - MacOS Sim - Windows Sim - Linux Sim + MacOS + Windows + Linux Platform @@ -54,9 +54,7 @@ Android iOS Android - iOS Android - iOS Android @@ -65,9 +63,7 @@ - - @@ -76,9 +72,7 @@ - - @@ -87,9 +81,7 @@ - - @@ -98,9 +90,7 @@ - - @@ -109,9 +99,7 @@ - - @@ -120,9 +108,7 @@ - - @@ -131,9 +117,7 @@ - - - +
diff --git a/docz/docs/02-getting-started/01-installation/07-bun.md b/docz/docs/02-getting-started/01-installation/07-bun.md index 4980a6f..57ad8c3 100644 --- a/docz/docs/02-getting-started/01-installation/07-bun.md +++ b/docz/docs/02-getting-started/01-installation/07-bun.md @@ -121,7 +121,7 @@ This demo was last tested in the following deployments: | Architecture | BunJS | Date | |:-------------|:---------|:-----------| -| `darwin-x64` | `1.3.6` | 2026-01-20 | +| `darwin-x64` | `1.3.14` | 2026-06-13 | | `darwin-arm` | `1.3.6` | 2026-01-19 | | `win11-x64` | `1.3.6` | 2026-01-28 | | `win11-arm` | `1.3.10` | 2026-03-07 | diff --git a/docz/docs/03-demos/17-mobile/02-nativescript.md b/docz/docs/03-demos/17-mobile/02-nativescript.md index f0a13bc..13fbbab 100644 --- a/docz/docs/03-demos/17-mobile/02-nativescript.md +++ b/docz/docs/03-demos/17-mobile/02-nativescript.md @@ -56,15 +56,15 @@ This demo was tested in the following environments: | OS | Device | NS | Date | |:-----------|:--------------------|:---------|:-----------| -| Android 30 | NVIDIA Shield | `8.9.2` | 2025-05-06 | -| iOS 15.1 | iPad Pro | `8.9.2` | 2025-05-06 | +| Android 33 | AYN Thor Max | `9.0.3` | 2026-06-13 | +| iOS 26.5 | iPhone 17 Pro Max | `9.0.3` | 2026-06-13 | **Simulators** | OS | Device | NS | Dev Platform | Date | |:-----------|:--------------------|:---------|:-------------|:-----------| -| 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 36 | Pixel 9 Pro XL | `9.0.3` | `darwin-arm` | 2026-06-13 | +| iOS 18.4 | iPhone 16 Pro Max | `9.0.3` | `darwin-arm` | 2026-06-13 | | Android 35 | Pixel 9 | `8.9.2` | `win11-x64` | 2025-06-08 | | Android 36 | Pixel 9 | `8.9.2` | `linux-x64` | 2025-07-06 | @@ -332,7 +332,7 @@ In the last macOS test, the following output was displayed: Javac is installed and is configured properly. The Java Development Kit (JDK) is installed and is configured properly. Getting NativeScript components versions information... - Component nativescript has 8.9.2 version and is up to date. + Component nativescript has 9.0.6 version and is up to date. @@ -361,7 +361,7 @@ In the last macOS test, the following output was displayed: Python installed and configured correctly. Xcode version 16.3.0 satisfies minimum required version 10. Getting NativeScript components versions information... - Component nativescript has 8.9.2 version and is up to date. + Component nativescript has 9.0.6 version and is up to date. @@ -428,30 +428,29 @@ The goal of this section is to display the SheetJS library version number. npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} -7) Edit `src/app/item/items.component.ts` so that the component imports the +7) Edit `src/app/people/person.component.ts` so that the component imports the SheetJS version string and adds it to a `version` variable in the component: -```ts title="src/app/item/items.component.ts (add highlighted lines)" +```ts title="src/app/people/person.component.ts (add highlighted lines)" // highlight-next-line import { version } from 'xlsx'; -import { Component, NO_ERRORS_SCHEMA, inject } from '@angular/core' +import { ChangeDetectionStrategy, Component, NO_ERRORS_SCHEMA, inject } from '@angular/core' // ... -export class ItemsComponent { +export class PersonComponent { // highlight-next-line version = `SheetJS - ${version}`; - itemService = inject(ItemService) - page = inject(Page) -// ... + personService = inject(PersonService); +} ``` -8) Edit the template `src/app/item/items.component.html` to reference `version` -in the title of the action bar: +8) Edit the template `src/app/people/person.component.html` to reference +`version` in the title of the action bar: -```xml title="src/app/item/items.component.html (edit highlighted line)" +```xml title="src/app/people/person.component.html (edit highlighted line)" - + @@ -471,7 +470,7 @@ The title bar should show the version. 10) Add the Import and Export buttons to the template: -```xml title="src/app/item/items.component.html (add highlighted lines)" +```xml title="src/app/people/person.component.html (add highlighted lines)" @@ -481,7 +480,7 @@ The title bar should show the version. - + @@ -490,16 +489,15 @@ The title bar should show the version. 11) Add the `import` and `export` methods in the component script: -```ts title="src/app/item/items.component.ts (add highlighted lines)" +```ts title="src/app/people/person.component.ts (add highlighted lines)" // highlight-start import { version, utils, read, write } from 'xlsx'; import { Dialogs, getFileAccess } from '@nativescript/core'; import { Folder, knownFolders, path } from '@nativescript/core/file-system'; // highlight-end -import { Component, NO_ERRORS_SCHEMA, inject } from '@angular/core' +import { ChangeDetectionStrategy, Component, NO_ERRORS_SCHEMA, inject } from '@angular/core' import { NativeScriptCommonModule, NativeScriptRouterModule } from '@nativescript/angular' -import { Page } from '@nativescript/core' -import { ItemService } from './item.service' +import { PersonService } from './person.service' // highlight-start function get_url_for_filename(filename: string): string { @@ -510,10 +508,9 @@ function get_url_for_filename(filename: string): string { // ... -export class ItemsComponent { +export class PersonComponent { version = `SheetJS - ${version}`; - itemService = inject(ItemService) - page = inject(Page) + personService = inject(PersonService); // highlight-start /* Import button */ @@ -524,8 +521,7 @@ export class ItemsComponent { async export() { } // highlight-end - - // ... +} ``` 12) End the script and relaunch the app in the Android simulator: @@ -540,7 +536,7 @@ Two buttons should appear just below the header: 13) Implement import and export by adding the highlighted lines: -```ts title="src/app/item/items.component.ts (add highlighted lines)" +```ts title="src/app/people/person.component.ts (add highlighted lines)" /* Import button */ async import() { // highlight-start @@ -560,7 +556,7 @@ Two buttons should appear just below the header: const ws = wb.Sheets[wsname]; /* update table */ - this.itemService.items.set(utils.sheet_to_json(ws)); + this.personService.items.set(utils.sheet_to_json(ws)); } catch(e) { await Dialogs.alert(e.message); } // highlight-end } @@ -573,7 +569,7 @@ Two buttons should appear just below the header: try { /* create worksheet from data */ - const ws = utils.json_to_sheet(this.itemService.items()); + const ws = utils.json_to_sheet(this.personService.items()); /* create workbook from worksheet */ const wb = utils.book_new(); @@ -638,14 +634,14 @@ After the header row, insert a row and make the following assignments: - Set cell `A2` to `0` - Set cell `B2` to `SheetJS` (type `'SheetJS` in the formula bar) -- Set cell `C2` to `Library` (type `'Library` in the formula bar) +- Set cell `C2` to `American` (type `'American` in the formula bar) After making the changes, the worksheet should look like the following: ```text -id | name | role +id | name | nationality # highlight-next-line - 0 | SheetJS | Library + 0 | SheetJS | American ... ``` @@ -711,9 +707,9 @@ After the header row, insert a row and make the following assignments: After making the changes, the worksheet should look like the following: ```text -id | name | role +id | name | nationality # highlight-next-line - 0 | SheetJS | Library + 0 | SheetJS | American ... ``` @@ -726,20 +722,20 @@ The first item in the list will change: ### Fetching Files -25) Replace `item.service.ts` with the following: +25) Replace `person.service.ts` with the following: -```ts title="src/app/item/item.service.ts" -import { read, utils } from 'xlsx'; -import { Injectable, signal, effect } from '@angular/core' +```ts title="src/app/people/person.service.ts (replace contents)" +import { read, utils } from 'xlsx'; +import { Injectable, signal, effect } from '@angular/core'; import { knownFolders, path, getFileAccess } from '@nativescript/core'; import { getFile } from '@nativescript/core/http'; -import { Item } from './item' +import { Person } from './person'; interface IPresident { Name: string; Index: number }; -@Injectable({ providedIn: 'root' }) -export class ItemService { - items = signal([]); +@Injectable({providedIn: 'root'}) +export class PersonService { + items = signal([]); constructor() { effect(() => { (async() => { /* fetch https://docs.sheetjs.com/pres.xlsx */ const temp: string = path.join(knownFolders.temp().path, "pres.xlsx"); @@ -749,11 +745,11 @@ export class ItemService { /* translate the first worksheet to the required Item type */ const data = utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]); /* update state */ - this.items.set(data.map((pres, id) => ({id, name: pres.Name, role: ""+pres.Index} as Item))); + this.items.set(data.map((pres, id) => ({id, name: pres.Name, nationality: ""+pres.Index} as Person))); })(); }); } - getItem(id: number): Item { - return this.items().find((item) => item.id === id) +getPerson(id: number): Person { + return this.items().find((person) => person.id === id); } } ``` @@ -795,23 +791,23 @@ at `App_Resources/Android/src/main/AndroidManifest.xml`: npm i --save @nativescript-community/perms ``` -31) Add the highlighted lines to `items.component.ts`: +31) Add the highlighted lines to `person.component.ts`: - Import `File` from NativeScript core and `request` from the new dependency: -```ts title="items.component.ts (add highlighted lines)" -import { Dialogs, getFileAccess, Utils } from '@nativescript/core'; +```ts title="person.component.ts (add highlighted lines)" +import { Dialogs, getFileAccess } from '@nativescript/core'; // highlight-start import { request } from '@nativescript-community/perms'; import { Folder, knownFolders, path, File } from '@nativescript/core/file-system'; // highlight-end -import { Component, OnInit } from '@angular/core' +import { ChangeDetectionStrategy, Component, NO_ERRORS_SCHEMA, inject } from '@angular/core' // ... ``` - Add a new write operation to the `export` method: -```ts title="items.component.ts (add highlighted lines)" +```ts title="person.component.ts (add highlighted lines)" /* attempt to save Uint8Array to file */ await getFileAccess().writeBufferAsync(url, global.isAndroid ? (Array.from(u8) as any) : u8); await Dialogs.alert(`Wrote to SheetJSNS.xls at ${url}`); @@ -822,7 +818,7 @@ import { Component, OnInit } from '@angular/core' const res = await request('storage'); /* write to Downloads folder */ const dl = android.os.Environment.getExternalStoragePublicDirectory(android.os.Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); - File.fromPath(dl + "/SheetJSNS.xls").writeSync(Array.from(u8)); + await File.fromPath(dl + "/SheetJSNS.xls").write(Array.from(u8)); } /* highlight-end */ } catch(e) { await Dialogs.alert(e.message); } @@ -858,10 +854,10 @@ file named `SheetJSNS.xls`. 35) Enable developer code signing certificates: -Open `platforms/ios/SheetJSNS.xcodeproj/project.xcworkspace` in Xcode. Select -the "Project Navigator" and select `SheetJSNS`. In the main view, select the -`SheetJSNS` target. Click "Signing & Capabilities". Under "Signing", select a -team in the dropdown menu. +Open `platforms/ios/SheetJSNS.xcodeproj` in Xcode. Select "Project Navigator" in +the left sidebar and click `SheetJSNS`. In the main view, select the `SheetJSNS` +target. Click "Signing & Capabilities". Under "Signing", select a team in the +dropdown menu. :::caution pass @@ -893,6 +889,17 @@ npx -y -p nativescript ns platform clean ios npx -y -p nativescript ns run ios ``` +:::caution pass + +In some test runs, iOS showed a "Developer Mode Required" popup: + +> "SheetJSNS" requires Developer Mode to run. Until Developer Mode has been +> enabled this app will not be available for use. + +Under "Settings" > "Privacy & Security", enable "Developer Mode" and restart. + +::: + :::info pass If this is the first time testing an app on a device, the certificate must be diff --git a/docz/docs/03-demos/17-mobile/06-flutter.md b/docz/docs/03-demos/17-mobile/06-flutter.md index 03e90d1..bdc457e 100644 --- a/docz/docs/03-demos/17-mobile/06-flutter.md +++ b/docz/docs/03-demos/17-mobile/06-flutter.md @@ -59,7 +59,7 @@ This demo was tested in the following environments: |:-----------|:------------------|:---------|:---------|:-------------|:-----------| | Android 36 | Pixel Tablet | `3.11.1` | `3.41.4` | `darwin-arm` | 2026-03-11 | | iOS 18.6 | iPhone 16 Pro Max | `3.11.1` | `3.41.4` | `darwin-arm` | 2026-03-11 | -| Android 36 | Pixel 9 Pro XL | `3.7.2` | `3.29.3` | `win11-x64` | 2054-04-28 | +| Android 36 | Pixel 9 Pro XL | `3.7.2` | `3.29.3` | `win11-x64` | 2025-04-28 | ::: diff --git a/docz/docs/03-demos/17-mobile/07-lynx.md b/docz/docs/03-demos/17-mobile/07-lynx.md index 11105a7..7c7077a 100644 --- a/docz/docs/03-demos/17-mobile/07-lynx.md +++ b/docz/docs/03-demos/17-mobile/07-lynx.md @@ -212,6 +212,7 @@ This demo was tested in the following environments: |:-----------|:--------------------|:---------|:-------------|:-------------|:-----------| | Android 35 | Pixel 3a | `0.8.6` | `3.2.0-rc.1` | `darwin-arm` | 2025-03-26 | | iOS 18.3 | iPhone 16 Pro | `0.8.6` | `3.2.0-rc.1` | `darwin-arm` | 2025-03-26 | +| Android 37 | Pixel 10 Pro XL | `0.14.5` | `3.8.1` | `win11-x64` | 2026-06-14 | ::: @@ -235,7 +236,7 @@ Make sure you can run a basic test app on your simulator before continuing! 1) Create project: ```bash -npm create rspeedy@0.8.6 -- -d SheetJSLynxFetch -t react-ts --tools biome +npm create rspeedy@0.14.5 -- -d SheetJSLynxFetch -t react-ts --tools biome ``` 2) Install shared dependencies: @@ -314,7 +315,7 @@ emulator -avd Medium_Phone_API_35 7) Download the LynxExplorer[^4] APK. -The latest test used [`LynxExplorer-noasan-release.apk` for version `3.2.0-rc.1`](https://github.com/lynx-family/lynx/releases/download/3.2.0-rc.1/LynxExplorer-noasan-release.apk). +The latest test used [`LynxExplorer-noasan-release.apk` for version `3.8.1`](https://github.com/lynx-family/lynx/releases/download/3.8.1/LynxExplorer-noasan-release.apk). 8) Drag and drop the APK into the Android emulator window. diff --git a/docz/docs/03-demos/19-desktop/02-nwjs.md b/docz/docs/03-demos/19-desktop/02-nwjs.md index 7dd914b..2bf2b11 100644 --- a/docz/docs/03-demos/19-desktop/02-nwjs.md +++ b/docz/docs/03-demos/19-desktop/02-nwjs.md @@ -119,14 +119,14 @@ input.click(); This demo was tested in the following environments: -| OS and Version | Architecture | NW.js | Date | Notes | -|:---------------|:-------------|:----------|:-----------|:---------------------| -| macOS 15.7.4 | `darwin-x64` | `0.112.0` | 2026-06-13 | | -| macOS 14.5 | `darwin-arm` | `0.94.0` | 2025-03-30 | | -| Windows 11 | `win11-x64` | `0.111.3` | 2026-05-22 | | -| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | | -| Linux (Ubuntu) | `linux-x64` | `0.101.2` | 2025-07-06 | | -| Linux (Debian) | `linux-arm` | `0.60.0` | 2025-02-16 | Unofficial build[^1] | +| OS and Version | Architecture | NW.js | Date | +|:---------------|:-------------|:----------|:-----------| +| macOS 15.7.4 | `darwin-x64` | `0.112.0` | 2026-06-13 | +| macOS 14.5 | `darwin-arm` | `0.94.0` | 2025-03-30 | +| Windows 11 | `win11-x64` | `0.111.3` | 2026-05-22 | +| Windows 11 | `win11-arm` | `0.94.0` | 2025-02-23 | +| Linux (Ubuntu) | `linux-x64` | `0.101.2` | 2025-07-06 | +| Linux (Debian) | `linux-arm` | `0.112.0` | 2026-06-14 | ::: @@ -203,7 +203,7 @@ npm i 4) To verify the app works, run in the test environment: ```bash -npx nw . +npx -y nw . ``` On launch, the app will fetch and parse https://docs.sheetjs.com/pres.numbers . @@ -214,28 +214,10 @@ table will refresh with the contents of the selected file. Click "Export Data!" and save the generated file to `SheetJSNWDemo.xlsx`. This file can be opened in Excel or another spreadsheet editor. -
- Linux ARM64 support (click to show) - -NW.js does not officially support `linux-arm`. The official recommendation is to -use a third-party pre-built version. - -```bash -curl -LO https://github.com/LeonardLaszlo/nw.js-armv7-binaries/releases/download/nw60-arm64_2022-01-08/nw60-arm64_2022-01-08.tar.gz -tar -xzf nw60-arm64_2022-01-08.tar.gz -cp usr/docker/dist/nwjs-chromium-ffmpeg-branding/nwjs-v0.60.1-linux-arm64.tar.gz -tar -xzf nwjs-v0.60.1-linux-arm64.tar.gz -./nwjs-v0.60.1-linux-arm64/nw . -``` - -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.17.10 nwbuild --mode=build --version=0.111.3 --glob=false --outDir=../out ./ +npx -y -p nw-builder@4.17.10 nwbuild --mode=build --version=0.111.3 --glob=false --outDir=../out ./ ``` This will generate the standalone app in the `..\out\` folder. @@ -249,5 +231,4 @@ This will generate the standalone app in the `..\out\` folder. | `win11-x64` | `..\out\sheetjs-nwjs.exe` | | `win11-arm` | `..\out\sheetjs-nwjs.exe` | | `linux-x64` | `../out/sheetjs-nwjs` | - -[^1]: The [`nw60-arm64_2022-01-08` release](https://github.com/LeonardLaszlo/nw.js-armv7-binaries/releases/tag/nw60-arm64_2022-01-08) included an ARM64 version of `nw`. \ No newline at end of file +| `linux-arm` | `../out/sheetjs-nwjs` | diff --git a/docz/docs/03-demos/19-desktop/04-tauri.md b/docz/docs/03-demos/19-desktop/04-tauri.md index a6f3b24..d9cc51e 100644 --- a/docz/docs/03-demos/19-desktop/04-tauri.md +++ b/docz/docs/03-demos/19-desktop/04-tauri.md @@ -58,7 +58,7 @@ This demo was tested in the following environments: |:---------------|:-------------|:----------|:----------|:-----------| | macOS 15.7.4 | `darwin-x64` | `v1.6.0` | VueJS | 2026-06-13 | | macOS 14.5 | `darwin-arm` | `v1.6.0` | Kaioken | 2025-03-30 | -| Windows 11 | `win11-x64` | `v1.6.0` | VueJS | 2025-05-27 | +| Windows 11 | `win11-x64` | `v1.6.0` | VueJS | 2026-06-14 | | Windows 11 | `win11-arm` | `v1.6.0` | VueJS | 2025-02-23 | | Linux (HoloOS) | `linux-x64` | `v1.6.0` | VueJS | 2025-07-06 | | Linux (Debian) | `linux-arm` | `v1.6.0` | VueJS | 2025-05-27 | diff --git a/docz/docs/03-demos/20-cli/08-boxednode.md b/docz/docs/03-demos/20-cli/08-boxednode.md index 6af66b5..cbf51bf 100644 --- a/docz/docs/03-demos/20-cli/08-boxednode.md +++ b/docz/docs/03-demos/20-cli/08-boxednode.md @@ -34,7 +34,7 @@ This demo was tested in the following deployments: | `darwin-arm` | `3.0.0` | `23.11.0` | 2026-03-13 | | `win11-x64` | `3.0.0` | `22.22.2` | 2026-05-08 | | `linux-x64` | `3.0.0` | `25.8.0` | 2026-03-08 | -| `linux-arm` | `2.4.4` | `23.8.0` | 2025-02-15 | +| `linux-arm` | `3.0.0` | `23.8.0` | 2026-06-14 | ::: @@ -113,7 +113,7 @@ The `-n` flag controls the target NodeJS version. For this demo, the following command uses NodeJS `23.8.0`: ```bash -npx -y boxednode@2.4.4 -s xlsx-cli.js -t xlsx-cli -n 23.8.0 +npx -y boxednode@3.0.0 -s xlsx-cli.js -t xlsx-cli -n 23.8.0 ``` ::: diff --git a/docz/docs/03-demos/27-local/05-clipboard.md b/docz/docs/03-demos/27-local/05-clipboard.md index 24029bf..e462259 100644 --- a/docz/docs/03-demos/27-local/05-clipboard.md +++ b/docz/docs/03-demos/27-local/05-clipboard.md @@ -26,8 +26,8 @@ Each browser demo was tested in the following environments: | Safari 26.2 | `darwin-arm` | 2026-05-16 | `text/rtf` not supported | | Chromium 147 | `win11-arm` | 2026-05-26 | | | Edge 148 | `win11-arm` | 2026-05-26 | | -| Chromium 135 | `linux-arm` | 2025-04-23 | | -| Konqueror 22 | `linux-arm` | 2025-04-23 | `text/rtf`, files not supported | +| Chromium 147 | `linux-arm` | 2026-06-14 | `text/rtf` did not work | +| Konqueror 25 | `linux-arm` | 2026-06-14 | `text/rtf` not supported | Windows and macOS tests were run against Excel, while Linux tests were run against Gnumeric. @@ -106,7 +106,14 @@ and copy spreadsheets into the clipboard. ::: -The event `clipboardData.files` property, if it is set, is a list of files. +The event `clipboardData.files` property, if it is set, is a list of +[`File`](/docs/demos/local/file#blob-and-file) objects. + +The `arrayBuffer` method of the `File` object returns a `Promise` that resolves +to an `ArrayBuffer` with binary data. The `ArrayBuffer` can be parsed by the +SheetJS [`read`](/docs/api/parse-options) method. + +The following example parses copied files and displays all sheet names: ```jsx live function ClipboardReadFiles() { @@ -210,6 +217,14 @@ function ClipboardWrite() { } ``` +:::caution pass + +When the clipboard contains a full HTML document, Gnumeric prepends the title to +the table. The first row of the table will be "SheetJS Table Export". This does +not affect Excel or other popular spreadsheet software. + +::: + ## Electron Electron Clipboard API supports HTML and RTF clipboards. diff --git a/docz/docs/03-demos/32-extensions/03-excelapi.md b/docz/docs/03-demos/32-extensions/03-excelapi.md index ea54941..35a6867 100644 --- a/docz/docs/03-demos/32-extensions/03-excelapi.md +++ b/docz/docs/03-demos/32-extensions/03-excelapi.md @@ -39,7 +39,7 @@ This demo was tested in the following deployments: | OS and Version | Architecture | Excel | Date | |:---------------|:-------------|:-----------|:-----------| -| macOS 15.3 | `darwin-x64` | 16.95.4 | 2025-04-17 | +| macOS 15.7.4 | `darwin-x64` | 16.109 | 2026-06-13 | | macOS 14.5 | `darwin-arm` | 16.106.3 | 2026-05-05 | | Windows 11 | `win11-x64` | 365 (2604) | 2026-06-05 | | Windows 11 | `win11-arm` | 365 (2503) | 2025-04-24 | @@ -287,6 +287,16 @@ var XLSX = require("xlsx"); export function version() { return [[XLSX.version]]; } + +/** + * Download file and write data + * @customfunction + * @param {string} url URL to fetch and parse + * @returns {any[][]} Worksheet data + */ +export async function extern(url) { + return [[""]]; +} ``` 12) Close the terminal window and the Excel window. Do not save the Excel file. @@ -372,7 +382,7 @@ npm start 15) Add the following code snippet to `src\functions\functions.js` and save: -```js title="src\functions\functions.js (add to end)" +```js title="src\functions\functions.js (replace existing function)" /** * Download file and write data * @customfunction diff --git a/docz/docs/03-demos/32-extensions/10-stata.md b/docz/docs/03-demos/32-extensions/10-stata.md index 79281d5..14266fa 100644 --- a/docz/docs/03-demos/32-extensions/10-stata.md +++ b/docz/docs/03-demos/32-extensions/10-stata.md @@ -53,7 +53,7 @@ This demo was tested in the following deployments: | Architecture | Version | Date | |:-------------|:------------------|:-----------| -| `darwin-x64` | `18.5` (StataNow) | 2025-06-20 | +| `darwin-x64` | `19.5` (StataNow) | 2026-06-13 | | `darwin-arm` | `19.5` (StataNow) | 2026-03-13 | | `win11-x64` | `19.5` (StataNow) | 2026-05-14 | | `win11-arm` | `18.5` (StataNow) | 2025-02-23 | @@ -257,9 +257,9 @@ curl -LO https://www.stata.com/plugins/stplugin.c curl -LO https://www.stata.com/plugins/stplugin.h ``` -:::danger pass +:::caution pass -**When this demo was last tested, `stplugin.h` was removed from the website!** +**In some demo test runs, `stplugin.h` was not available from the website!** If the official links do not work, the following files should be used: diff --git a/docz/docs/03-demos/32-extensions/12-maple.md b/docz/docs/03-demos/32-extensions/12-maple.md index ca9b5b7..02755d2 100644 --- a/docz/docs/03-demos/32-extensions/12-maple.md +++ b/docz/docs/03-demos/32-extensions/12-maple.md @@ -38,8 +38,8 @@ This demo was tested by SheetJS users in the following deployments: | Architecture | Version | Date | |:-------------|:---------|:-----------| -| `darwin-x64` | `2025.1` | 2025-06-20 | -| `win11-x64` | `2025.1` | 2025-07-17 | +| `darwin-x64` | `2025.1` | 2026-06-13 | +| `win11-x64` | `2025.1` | 2026-06-13 | ::: diff --git a/docz/docs/03-demos/32-extensions/41-ghidra.md b/docz/docs/03-demos/32-extensions/41-ghidra.md index 463d819..12f92fe 100644 --- a/docz/docs/03-demos/32-extensions/41-ghidra.md +++ b/docz/docs/03-demos/32-extensions/41-ghidra.md @@ -27,7 +27,7 @@ This demo was tested by SheetJS users in the following deployments: | Architecture | Ghidra | Date | |:-------------|:----------|:-----------| -| `darwin-x64` | `11.13.1` | 2025-04-17 | +| `darwin-x64` | `12.1.2` | 2026-06-13 | | `darwin-arm` | `11.13.1` | 2025-10-19 | ::: @@ -264,16 +264,18 @@ When this demo was last tested, Java and Ghidra were installed using Homebrew: ```bash brew install zulu@21 -brew install --cask ghidra +brew install ghidra ``` -1) Add the base Ghidra folder to the PATH variable. The following shell command -adds to the path for the current `zsh` or `bash` session: +1) Add the base Ghidra folder to the PATH variable. The following shell commands +adds common paths for the current `zsh` or `bash` session: ```bash export PATH="$PATH":$(dirname $(realpath `which ghidraRun`)) +export PATH="$PATH":$(realpath $(dirname $(realpath `which ghidraRun`))/../libexec/Ghidra) +export PATH="$PATH":$(realpath $(dirname $(realpath `which ghidraRun`))/../libexec/Extensions/Ghidra) ``` 2) Install `ghidra.js` globally: @@ -323,7 +325,7 @@ binaries. `lipo` creates a new binary with support for one architecture. 6) Analyze the program: ```bash -$(dirname $(realpath `which ghidraRun`))/support/analyzeHeadless /tmp/sheetjs-ghidra Numbers -import TSTables.macho +$(dirname $(realpath `which ghidraRun`))/../libexec/support/analyzeHeadless /tmp/sheetjs-ghidra Numbers -import TSTables.macho ```
@@ -411,7 +413,7 @@ npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz`} 9) Run the script: ```bash -$(dirname $(realpath `which ghidraRun`))/support/analyzeHeadless /tmp/sheetjs-ghidra Numbers -process TSTables.macho -noanalysis -scriptPath `pwd` -postScript sheetjs-ghidra.js +$(dirname $(realpath `which ghidraRun`))/../libexec/support/analyzeHeadless /tmp/sheetjs-ghidra Numbers -process TSTables.macho -noanalysis -scriptPath `pwd` -postScript sheetjs-ghidra.js ``` 10) Open the generated `SheetJSGhidraTSTCell.xlsx` spreadsheet with Numbers: diff --git a/docz/docs/03-demos/42-engines/01-duktape.md b/docz/docs/03-demos/42-engines/01-duktape.md index 6977372..82f4ebe 100644 --- a/docz/docs/03-demos/42-engines/01-duktape.md +++ b/docz/docs/03-demos/42-engines/01-duktape.md @@ -132,7 +132,7 @@ This demo was tested in the following deployments: | `darwin-arm` | `2.7.0` | 2026-03-07 | | `win11-x64` | `2.7.0` | 2026-05-26 | | `win11-arm` | `2.7.0` | 2025-02-23 | -| `linux-x64` | `2.7.0` | 2025-04-21 | +| `linux-x64` | `2.7.0` | 2026-06-14 | | `linux-arm` | `2.7.0` | 2026-03-07 | ::: @@ -408,7 +408,7 @@ This demo was tested in the following deployments: |:-------------|:--------|:---------|:-----------| | `darwin-x64` | `2.7.0` | `8.4.11` | 2026-01-21 | | `darwin-arm` | `2.7.0` | `8.4.8` | 2026-01-23 | -| `linux-x64` | `2.7.0` | `8.3.6` | 2025-04-21 | +| `linux-x64` | `2.7.0` | `8.4.11` | 2026-06-14 | | `linux-arm` | `2.7.0` | `8.4.16` | 2026-03-07 | ::: @@ -552,7 +552,7 @@ This demo was tested in the following deployments: | `darwin-arm` | `2.7.0` | `3.12.3` | 2026-01-23 | | `win11-x64` | `2.7.0` | `3.11.9` | 2026-02-02 | | `win11-arm` | `2.7.0` | `3.11.9` | 2026-02-02 | -| `linux-x64` | `2.7.0` | `3.12.3` | 2025-04-21 | +| `linux-x64` | `2.7.0` | `3.13.9` | 2026-06-14 | | `linux-arm` | `2.7.0` | `3.13.5` | 2026-03-07 | ::: @@ -910,7 +910,7 @@ This demo was tested in the following deployments: | `darwin-arm` | `2.7.0` | `0.15.2` | 2026-01-20 | | `win11-x64` | `2.7.0` | `0.15.2` | 2026-05-26 | | `win11-arm` | `2.7.0` | `0.13.0` | 2025-02-23 | -| `linux-x64` | `2.7.0` | `0.14.0` | 2025-04-21 | +| `linux-x64` | `2.7.0` | `0.15.2` | 2026-06-14 | | `linux-arm` | `2.7.0` | `0.15.2` | 2026-03-07 | On Windows, due to incompatibilities between WSL and PowerShell, some commands @@ -952,7 +952,7 @@ tar -xzf zig-*.tar.xz For X64 Linux: ```bash -curl -LO https://ziglang.org/download/0.14.0/zig-linux-x86_64-0.14.0.tar.xz +curl -LO https://ziglang.org/download/0.15.2/zig-x86_64-linux-0.15.2.tar.xz xz -d zig-linux-*.tar.xz tar -xf zig-linux-*.tar ``` @@ -1141,7 +1141,7 @@ This demo was tested in the following deployments: | `darwin-x64` | `2.2.0` | 2026-01-21 | | `darwin-arm` | `2.2.0` | 2026-03-07 | | `win11-arm` | `2.2.0` | 2026-05-09 | -| `linux-x64` | `2.2.0` | 2025-04-21 | +| `linux-x64` | `2.2.0` | 2026-06-14 | | `linux-arm` | `2.2.0` | 2026-03-07 | ::: diff --git a/docz/docs/03-demos/42-engines/02-v8.md b/docz/docs/03-demos/42-engines/02-v8.md index e8e5ffb..3e6a353 100644 --- a/docz/docs/03-demos/42-engines/02-v8.md +++ b/docz/docs/03-demos/42-engines/02-v8.md @@ -146,11 +146,11 @@ This demo was tested in the following deployments: | V8 Version | Platform | OS Version | Compiler | Date | |:--------------|:-------------|:--------------|:-----------------|:-----------| -| `13.7.5` | `darwin-x64` | macOS 15.3.2 | `clang 16.0.0` | 2025-03-31 | +| `15.1.102` | `darwin-x64` | macOS 15.7.4 | `clang 17.0.0` | 2026-06-13 | | `13.5.92` | `darwin-arm` | macOS 14.5 | `clang 16.0.0` | 2025-02-15 | | `13.8.124` | `win11-x64` | Windows 11 | `CL 19.43.34810` | 2025-05-11 | | `13.5.92` | `linux-x64` | Ubuntu 24.04 | `gcc 13.3.0` | 2025-06-16 | -| `13.5.92` | `linux-arm` | Debian 12 | `gcc 12.2.0` | 2025-02-15 | +| `13.8.124` | `linux-arm` | Debian 12 | `gcc 14.2.0` | 2026-06-14 | ::: @@ -449,19 +449,30 @@ The recommended fix is to delete the referenced folder and re-run `gclient sync` -5) Checkout the desired version. The following command pulls `13.8.124`: +5) Checkout the desired version. The following command pulls `15.1.102`: ```bash -git checkout tags/13.8.124 -b sample +git checkout tags/15.1.102 -b sample ``` +:::info pass + +The ["Tested Deployments" table](#complete-example) includes the exact versions +that were tested on various platforms. It is strongly recommeded to use the +tested versions as they have been explicitly verified by SheetJS teammates. + +**Please reach out to [the SheetJS chat](https://sheetjs.com/chat) if there are +any issues not mentioned in the demo page.** + +::: + :::caution pass The official documentation recommends: ```bash -git checkout refs/tags/13.8.124 -b sample -t +git checkout refs/tags/15.1.102 -b sample -t ``` This command failed in local testing: @@ -480,17 +491,33 @@ fatal: cannot set up tracking information; starting point 'refs/tags/13.8.124' i +Run the following command. It may fail. + ```bash tools/dev/v8gen.py x64.release.sample +``` + +Append the following lines to `out.gn/x64.release.sample/args.gn`: + +```text title="out.gn/x64.release.sample/args.gn (add to file)" +v8_enable_sandbox = false +use_allocator_shim = false +v8_enable_temporal_support = false +``` + +Run the build: + +```bash +gn gen out.gn/x64.release.sample/ ninja -C out.gn/x64.release.sample v8_monolith ``` -:::caution pass +:::info pass **This may not work in newer Python releases due to a breaking change!** Python 3.13 removed the `pipes` module from the standard library[^7]. `v8gen.py` -will fail on newer Python releases with the following traceback: +may fail on newer Python releases with the following traceback: ``` Traceback (most recent call last): @@ -567,6 +594,8 @@ treat_warnings_as_errors = false +Run the following command. It may fail. + ```bash tools/dev/v8gen.py arm64.release.sample ``` @@ -576,11 +605,14 @@ Append the following lines to `out.gn/arm64.release.sample/args.gn`: ```text title="out.gn/arm64.release.sample/args.gn (add to file)" is_clang = false treat_warnings_as_errors = false +v8_enable_sandbox = false +v8_enable_temporal_support = false ``` Run the build: ```bash +gn gen out.gn/arm64.release.sample/ ninja -C out.gn/arm64.release.sample v8_monolith ``` @@ -628,6 +660,22 @@ adding `false &&` to the `elif` preprocessor directives: int8x8_t x; ``` +There may be a block in `src/objects/simd.cc` that includes `arm_neon.h`. If +this block is present, the entire `ifdef` clause should be commented: + +```cpp title="src/objects/simd.cc (edit highlighted lines)" + +#ifdef V8_HOST_ARCH_ARM64 +// We use Neon only on 64-bit ARM (because on 32-bit, some instructions and some +// types are not available). Note that ARM64 is guaranteed to have Neon. +//highlight-start +//#define NEON64 +//#include +//highlight-end +#endif + +``` + ::: :::note pass @@ -742,10 +790,27 @@ 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 -framework Foundation + -std=c++20 -DV8_COMPRESS_POINTERS=1 -framework Foundation ./hello_world ``` +:::caution pass + +In some tests, the `hello_world` program failed with a message referencing ICU: + +``` +Failed to initialize ICU +``` + +`icudtl.dat` must be copied to the folder with the `hello_world` program: + +```bash +cp out.gn/x64.release.sample/icudtl.dat . +./hello_world +``` + +::: + :::info pass In older V8 versions, the flags `-lv8_libbase -lv8_libplatform` were required. @@ -798,7 +863,7 @@ 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++20 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX + -std=c++20 -DV8_COMPRESS_POINTERS=1 ./hello_world ``` @@ -878,6 +943,12 @@ cp ~/dev/v8/v8/samples/hello-world.cc . ```bash ln -s ~/dev/v8/v8/include ln -s ~/dev/v8/v8/out.gn/x64.release.sample/obj +``` + +In addition, `icudtl.dat` must be copied to this folder: + +```bash +cp ~/dev/v8/v8/out.gn/*/icudtl.dat . ``` @@ -952,7 +1023,16 @@ g++ -I. -Iinclude hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ :::caution pass -On macOS, in some V8 versions, the `Foundation` framework is required: +On macOS, some builds fail due to undefined symbols starting with `_CF`: + +``` +Undefined symbols for architecture x86_64: + "_CFRelease", referenced from: + absl::time_internal::cctz::local_time_zone() in libv8_monolith.a[777](time_zone_lookup.o) +``` + +These symbols are provided by `Foundation` framework. `-framework Foundation` +must be added to the build step: ```bash g++ -I. -Iinclude hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ @@ -963,6 +1043,27 @@ g++ -I. -Iinclude hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ ::: +:::caution pass + +In some tests, the `hello_world` program failed with a sandbox error: + +``` +# Embedder-vs-V8 build configuration mismatch. On embedder side sandbox is ENABLED while on V8 side it's DISABLED. +``` + +If the sandbox was disabled earlier, the `-DV8_ENABLE_SANDBOX` must be removed. +For example, the following build command works with V8 `15.1.102` on Intel Mac: + +```bash +g++ -I. -Iinclude hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ + -ldl -Lobj/ -pthread -std=c++20 \ + -DV8_COMPRESS_POINTERS=1 -framework Foundation +./hello_world +``` + +::: + + @@ -1026,7 +1127,16 @@ g++ -I. -Iinclude sheetjs.v8.cc -o sheetjs.v8 -fno-rtti -lv8_monolith \ :::caution pass -On macOS, in some V8 versions, the `Foundation` framework is required: +On macOS, some builds fail due to undefined symbols starting with `_CF`: + +``` +Undefined symbols for architecture x86_64: + "_CFRelease", referenced from: + absl::time_internal::cctz::local_time_zone() in libv8_monolith.a[777](time_zone_lookup.o) +``` + +These symbols are provided by `Foundation` framework. `-framework Foundation` +must be added to the build step: ```bash g++ -I. -Iinclude sheetjs.v8.cc -o sheetjs.v8 -fno-rtti -lv8_monolith \ @@ -1055,6 +1165,26 @@ cl /MT /I..\v8\v8\ /I..\v8\v8\include sheetjs.v8.cc /GR- v8_monolith.lib Advapi3 ./sheetjs.v8 pres.numbers ``` +:::caution pass + +In some tests, the `hello_world` program failed with a sandbox error: + +``` +# Embedder-vs-V8 build configuration mismatch. On embedder side sandbox is ENABLED while on V8 side it's DISABLED. +``` + +If the sandbox was disabled earlier, the `-DV8_ENABLE_SANDBOX` must be removed. +For example, the following build command works with V8 `15.1.102` on Intel Mac: + +```bash +g++ -I. -Iinclude sheetjs.v8.cc -o sheetjs.v8 -fno-rtti -lv8_monolith \ + -ldl -Lobj/ -pthread -std=c++20 \ + -DV8_COMPRESS_POINTERS=1 -framework Foundation +./sheetjs.v8 pres.numbers +``` + +::: + @@ -1098,7 +1228,7 @@ This demo was last tested in the following deployments: |:-------------|:----------|:-----------| | `darwin-x64` | `146.3.0` | 2026-03-08 | | `darwin-arm` | `134.3.0` | 2025-02-13 | -| `win11-x64` | `137.1.0` | 2025-05-11 | +| `win11-x64` | `150.0.0` | 2026-06-14 | | `win11-arm` | `145.0.0` | 2026-02-02 | | `linux-x64` | `142.2.0` | 2026-01-08 | | `linux-arm` | `146.3.0` | 2026-03-07 | @@ -1175,7 +1305,7 @@ curl.exe -L -o src/main.rs https://docs.sheetjs.com/v8/main.rs :::info pass There were multiple breaking changes in the `v8` crate. This example was tested -against version `142.2.0`. +against versions `142.2.0` and `150.0.0`. Older versions of this demo script were designed for older `v8` versions. They are available in the source repo for the documentation. Please reach out to the @@ -1212,7 +1342,7 @@ This demo was last tested in the following deployments: | Architecture | V8 Version | Javet | Java | Date | |:-------------|:--------------|:--------|:----------|:-----------| -| `darwin-x64` | `13.2.152.16` | `4.1.1` | `24.0.1` | 2025-04-21 | +| `darwin-x64` | `13.2.152.16` | `4.1.1` | `25.0.2` | 2026-06-13 | | `darwin-arm` | `13.2.152.16` | `4.1.1` | `17.0.14` | 2026-03-04 | | `win11-x64` | `13.2.152.16` | `4.1.1` | `17.0.12` | 2026-03-04 | | `win11-arm` | `13.2.152.16` | `4.1.1` | `25.0.2` | 2026-03-04 | @@ -1447,7 +1577,7 @@ This demo was last tested in the following deployments: |:-------------|:--------------|:-----------| | `darwin-x64` | `13.3.415.23` | 2026-03-06 | | `darwin-arm` | `13.3.415.23` | 2026-03-06 | -| `win11-x64` | `13.3.415.23` | 2025-05-11 | +| `win11-x64` | `14.7.173.23` | 2026-06-14 | | `win11-arm` | `12.3.219.12` | 2025-02-23 | | `linux-x64` | `12.3.219.12` | 2026-03-06 | | `linux-arm` | `13.3.415.23` | 2026-03-07 | @@ -1525,7 +1655,7 @@ dotnet run 4) Add ClearScript to the project: ```bash -dotnet add package Microsoft.ClearScript.Complete --version 7.5.0 +dotnet add package Microsoft.ClearScript.Complete --version 7.5.1 ``` 5) Download the SheetJS standalone script and test file. Move both files to the @@ -1740,8 +1870,8 @@ This demo was last tested in the following deployments: |:-------------|:--------------|:----------|:-----------| | `darwin-x64` | `13.5.212.10` | `136.0.0` | 2026-03-08 | | `darwin-arm` | `13.5.212.10` | `136.0.0` | 2025-04-24 | -| `win11-x64` | `13.5.212.10` | `136.0.0` | 2025-05-11 | -| `linux-x64` | `13.5.212.10` | `136.0.0` | 2025-06-16 | +| `win11-x64` | `15.0.245.2` | `150.0.0` | 2026-06-14 | +| `linux-x64` | `15.0.245.2` | `150.0.0` | 2026-06-14 | | `linux-arm` | `13.5.212.10` | `136.0.0` | 2026-03-07 | ::: @@ -1828,7 +1958,7 @@ mv target/release/sheet2csv . ```bash -mv target/release/sheet2csv.exe . +move target\release\sheet2csv.exe . .\sheet2csv.exe pres.numbers ``` diff --git a/docz/docs/03-demos/42-engines/06-goja.md b/docz/docs/03-demos/42-engines/06-goja.md index ffa4737..e5b7723 100644 --- a/docz/docs/03-demos/42-engines/06-goja.md +++ b/docz/docs/03-demos/42-engines/06-goja.md @@ -108,8 +108,8 @@ This demo was tested in the following deployments: | `darwin-x64` | `651366f` | `1.25.6` | 2026-01-21 | | `darwin-arm` | `6a7976c` | `1.24.0` | 2026-03-07 | | `win11-x64` | `6a7976c` | `1.24.2` | 2026-03-08 | -| `win11-arm` | `065cd970` | `1.26.1` | 2026-03-22 | -| `linux-x64` | `cb187b0` | `1.22.2` | 2025-06-16 | +| `win11-arm` | `065cd97` | `1.26.1` | 2026-03-22 | +| `linux-x64` | `348e6be` | `1.25.11` | 2026-06-14 | | `linux-arm` | `6a7976c` | `1.24.4` | 2026-03-07 | At the time of writing, Goja did not have proper version numbers. Versions are diff --git a/docz/docs/03-demos/42-engines/09-hermes.md b/docz/docs/03-demos/42-engines/09-hermes.md index 6f1d413..9fb1668 100644 --- a/docz/docs/03-demos/42-engines/09-hermes.md +++ b/docz/docs/03-demos/42-engines/09-hermes.md @@ -366,7 +366,7 @@ This demo was tested in the following deployments: |:-------------|:-----------|:-----------| | `darwin-x64` | `f45c6bc` | 2026-03-06 | | `darwin-arm` | `f45c6bc` | 2026-01-23 | -| `linux-x64` | `8ef11b4` | 2025-04-21 | +| `linux-x64` | `f45c6bc` | 2026-06-14 | | `linux-arm` | `f45c6bc` | 2026-03-07 | The main Hermes source tree does not have Windows support. The `hermes-windows` @@ -914,7 +914,7 @@ This demo was tested in the following deployments: | `darwin-arm` | `0.13.0` | 2026-03-06 | | `win11-x64` | `0.13.0` | 2026-05-10 | | `win11-arm` | `0.13.0` | 2025-02-23 | -| `linux-x64` | `0.13.0` | 2025-04-21 | +| `linux-x64` | `0.13.0` | 2026-06-14 | | `linux-arm` | `0.13.0` | 2026-03-07 | When this demo was last tested, `jsvu` did not install a native `linux-arm` diff --git a/docz/static/cli/Cargo.toml b/docz/static/cli/Cargo.toml index 6d4f263..2b72e0a 100644 --- a/docz/static/cli/Cargo.toml +++ b/docz/static/cli/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -v8 = "136.0.0" +v8 = "150.0.0" [[bin]] name = "sheet2csv" diff --git a/docz/static/cli/sheet2csv.rs b/docz/static/cli/sheet2csv.rs index c6e38b5..60a5c8b 100644 --- a/docz/static/cli/sheet2csv.rs +++ b/docz/static/cli/sheet2csv.rs @@ -1,5 +1,8 @@ +/*! sheetjs (C) SheetJS -- https://sheetjs.com */ /* run code, get result as a Rust String */ -fn eval_code(scope: &mut v8::HandleScope, code: &str) -> std::string::String { +fn eval_code(scope: &mut v8::PinScope, code: &str) -> std::string::String { + let scope = std::pin::pin!(v8::HandleScope::new(scope)); + let scope = &mut scope.init(); let source = v8::String::new(scope, code).unwrap(); let script = v8::Script::compile(scope, source, None).unwrap(); let result = script.run(scope).unwrap(); @@ -7,7 +10,9 @@ fn eval_code(scope: &mut v8::HandleScope, code: &str) -> std::string::String { } /* assuming JS code returns an ArrayBuffer, copy result to a Vec */ -fn eval_code_ab(scope: &mut v8::HandleScope, code: &str) -> Vec { +fn eval_code_ab(scope: &mut v8::PinScope, code: &str) -> Vec { + let scope = std::pin::pin!(v8::HandleScope::new(scope)); + let scope = &mut scope.init(); let source = v8::String::new(scope, code).unwrap(); let script = v8::Script::compile(scope, source, None).unwrap(); let result: v8::Local = script.run(scope).unwrap().try_into().unwrap(); @@ -30,11 +35,11 @@ fn main() { /* read snapshot */ let startup_data: Vec = include_bytes!("./snapshot.bin").to_vec(); - let params = v8::Isolate::create_params().snapshot_blob(startup_data); - let isolate = &mut v8::Isolate::new(params); - let handle_scope = &mut v8::HandleScope::new(isolate); - let context = v8::Context::new(handle_scope, Default::default()); - let context_scope = &mut v8::ContextScope::new(handle_scope, context); + let params = v8::Isolate::create_params().snapshot_blob(startup_data.into()); + let mut isolate = v8::Isolate::new(params); + v8::scope!(let scope, &mut isolate); + let context = v8::Context::new(scope, Default::default()); + let context_scope = &mut v8::ContextScope::new(scope, context); /* read file */ { diff --git a/docz/static/cli/snapshot.rs b/docz/static/cli/snapshot.rs index c44732f..29364c8 100644 --- a/docz/static/cli/snapshot.rs +++ b/docz/static/cli/snapshot.rs @@ -1,6 +1,8 @@ /*! sheetjs (C) SheetJS -- https://sheetjs.com */ /* run code and ignore result */ -fn eval_code(scope: &mut v8::HandleScope, code: &str) { +fn eval_code(scope: &mut v8::PinScope, code: &str) { + let scope = std::pin::pin!(v8::HandleScope::new(scope)); + let scope = &mut scope.init(); let source = v8::String::new(scope, code).unwrap(); let script = v8::Script::compile(scope, source, None).unwrap(); let _ = script.run(scope); @@ -18,9 +20,9 @@ fn main() { /* scope enforces the lifetime of the `&mut isolate` in `handle_scope` */ { /* same steps as normal flow */ - let handle_scope = &mut v8::HandleScope::new(&mut isolate); - let context = v8::Context::new(handle_scope, Default::default()); - let context_scope = &mut v8::ContextScope::new(handle_scope, context); + v8::scope!(let scope, &mut isolate); + let context = v8::Context::new(scope, Default::default()); + let context_scope = &mut v8::ContextScope::new(scope, context); /* instructs the snapshot creator to dump the new context */ context_scope.set_default_context(context); diff --git a/docz/static/lynx/App.tsx b/docz/static/lynx/App.tsx index f23ad9f..4826ec6 100644 --- a/docz/static/lynx/App.tsx +++ b/docz/static/lynx/App.tsx @@ -3,7 +3,7 @@ import './App.css' import { useCallback, useState } from '@lynx-js/react' import SheetJSLogo from './assets/SheetJS-logo.png'; -import { read, utils, WorkSheet } from 'xlsx'; +import { read, utils, type WorkSheet } from 'xlsx'; const make_width = (ws: WorkSheet): number[] => { const aoa = utils.sheet_to_json(ws, { header: 1 }), res: number[] = []; diff --git a/tests/engines/duktape-perl.sh b/tests/engines/duktape-perl.sh index fbbd7fb..5bbbb7f 100755 --- a/tests/engines/duktape-perl.sh +++ b/tests/engines/duktape-perl.sh @@ -11,9 +11,10 @@ curl -LO https://docs.sheetjs.com/duk/SheetJSDuk.pl curl -LO https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.extendscript.js curl -LO https://docs.sheetjs.com/pres.xlsx -perl SheetJSDuk.pl pres.xlsx; echo $? +perl SheetJSDuk.pl pres.xlsx +PERL_EXIT=$? -npx -y xlsx-cli SheetJSDuk.xlsb +if [ $PERL_EXIT -ne 0 ] || [ ! -f SheetJSDuk.xlsb ]; then cat <