diff --git a/docz/docs/03-demos/01-frontend/02-vue.md b/docz/docs/03-demos/01-frontend/02-vue.md
index 1998599..6b224a3 100644
--- a/docz/docs/03-demos/01-frontend/02-vue.md
+++ b/docz/docs/03-demos/01-frontend/02-vue.md
@@ -133,8 +133,8 @@ function exportFile() {
:::note
-This demo was last run on 2023 April 06 using `vue@3.2.47`. When running
-`npm init`, the package `create-vue@3.6.1` was installed.
+This demo was last run on 2023 August 27 using `vue@3.3.4`. When running
+`npm init`, the package `create-vue@3.7.3` was installed.
:::
@@ -209,8 +209,8 @@ function exportFile() {
:::note
-This demo was last run on 2023 April 06 using `vue@3.2.47`. When running
-`npm init`, the package `create-vue@3.6.1` was installed.
+This demo was last run on 2023 August 27 using `vue@3.3.4`. When running
+`npm init`, the package `create-vue@3.7.3` was installed.
:::
@@ -283,4 +283,4 @@ There is a shared component [`SheetJS-vue.js`](pathname:///vue/SheetJS-vue.js)
The entire demo is designed to run in Internet Explorer and does not reflect
modern design patterns.
-:::
\ No newline at end of file
+:::
diff --git a/docz/docs/03-demos/01-frontend/04-svelte.md b/docz/docs/03-demos/01-frontend/04-svelte.md
index 8472f6c..db29f85 100644
--- a/docz/docs/03-demos/01-frontend/04-svelte.md
+++ b/docz/docs/03-demos/01-frontend/04-svelte.md
@@ -1,5 +1,7 @@
---
-title: Svelte
+title: Sheets in Svelte Sites
+sidebar_label: Svelte
+description: Build interactive websites with Svelte. Seamlessly integrate spreadsheets into your app using SheetJS. Bring Excel-powered workflows and data to the modern web.
pagination_prev: demos/index
pagination_next: demos/grid/index
sidebar_position: 4
@@ -8,17 +10,25 @@ sidebar_position: 4
import current from '/version.js';
import CodeBlock from '@theme/CodeBlock';
-Svelte is a JS library for building user interfaces.
+[Svelte](https://svelte.dev/) is a JavaScript library for building user
+interfaces.
-This demo tries to cover common Svelte data flow ideas and strategies. Svelte
-familiarity is assumed.
+[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
+data from spreadsheets.
-Other demos cover general Svelte deployments, including:
+This demo uses Svelte and SheetJS to process and generate spreadsheets. We'll
+explore how to load SheetJS in a Svelte component and compare common state
+models and data flow strategies.
+
+:::note pass
+
+This demo focuses on Svelte concepts. Other demos cover general deployments:
- [Static Site Generation powered by SvelteKit](/docs/demos/static/svelte)
- [iOS applications powered by CapacitorJS](/docs/demos/mobile/capacitor)
- [Desktop application powered by Wails](/docs/demos/desktop/wails)
+:::
## Installation
@@ -122,8 +132,8 @@ function exportFile() {
:::note
-This demo was last run on 2023 March 08 using `svelte@3.55.1`. When running
-`npm create`, the package `create-vite@4.1.0` was installed.
+This demo was last run on 2023 August 27 using `svelte@4.2.0`. When running
+`npm create`, the package `create-vite@4.4.1` was installed.
:::
@@ -200,8 +210,8 @@ function exportFile() {
:::note
-This demo was last run on 2023 March 08 using `svelte@3.55.1`. When running
-`npm create`, the package `create-vite@4.1.0` was installed.
+This demo was last run on 2023 August 27 using `svelte@4.2.0`. When running
+`npm create`, the package `create-vite@4.4.1` was installed.
:::
diff --git a/docz/docs/03-demos/01-frontend/07-angularjs.md b/docz/docs/03-demos/01-frontend/07-angularjs.md
index 168a2b5..99047df 100644
--- a/docz/docs/03-demos/01-frontend/07-angularjs.md
+++ b/docz/docs/03-demos/01-frontend/07-angularjs.md
@@ -8,7 +8,7 @@ sidebar_position: 7
import current from '/version.js';
import CodeBlock from '@theme/CodeBlock';
-:::warning
+:::warning pass
This demo is for the legacy AngularJS framework (version 1).
@@ -23,7 +23,7 @@ This demo is for the legacy AngularJS framework (version 1).
:::note
-This demo was last run on 2023 April 08 using AngularJS `1.5.0`
+This demo was last run on 2023 August 27 using AngularJS `1.8.2`
:::
@@ -170,7 +170,7 @@ $scope.exportSheetJS = function() {
SheetJS + AngularJS
-
+
@@ -269,8 +269,8 @@ The HTML table can be directly exported with `XLSX.utils.table_to_book`:
SheetJS + AngularJS
-
-
+
+
diff --git a/docz/docs/03-demos/03-net/02-server.md b/docz/docs/03-demos/03-net/02-server.md
index f8d0134..edd8600 100644
--- a/docz/docs/03-demos/03-net/02-server.md
+++ b/docz/docs/03-demos/03-net/02-server.md
@@ -77,6 +77,13 @@ provides ["Worker Threads"](#worker-threads) for this exact use case.
#### Express
+:::note
+
+This demo was verified on 2023 August 27 using `express-formidable@1.2.0` and
+ExpressJS `4.18.2`
+
+:::
+
The `express-formidable` middleware is powered by the `formidable` parser. It
adds a `files` property to the request.
@@ -132,7 +139,7 @@ app.listen(+process.env.PORT||3000);
1) Install dependencies:
{`\
-npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz express express-formidable`}
+npm i --save https://cdn.sheetjs.com/xlsx-${current}/xlsx-${current}.tgz express@4.18.2 express-formidable@1.2.0`}
2) Start server (note: it will not print anything to console when running)
@@ -158,6 +165,12 @@ It should prompt to download `SheetJSExpress.xlsx`
#### NestJS
+:::note
+
+This demo was verified on 2023 August 27 using NestJS `10.2.0` and Multer.
+
+:::
+
[The NestJS docs](https://docs.nestjs.com/techniques/file-upload) have detailed
instructions for file upload support. In the controller, the `path` property
works with `XLSX.readFile`.
@@ -171,7 +184,7 @@ with a CSV output of the first sheet. It will also respond to GET requests to
```ts title="src/sheetjs/sheetjs.controller.js"
import { Controller, Get, Header, Post, StreamableFile, UploadedFile, UseInterceptors } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
-import { readFile, utils } from 'xlsx';
+import { readFile, utils, write } from 'xlsx';
@Controller('sheetjs')
export class SheetjsController {
@@ -220,7 +233,7 @@ npx @nestjs/cli generate controller sheetjs
```
3) Add `multer` to the new module by editing `src/sheetjs/sheetjs.module.ts`.
-Changes are highlighted below:
+The highlighted lines should be added to the file:
```ts title="src/sheetjs/sheetjs.module.ts"
import { Module } from '@nestjs/common';
@@ -269,7 +282,7 @@ It should prompt to download `SheetJSNest.xlsx`
:::note
-This demo was verified on 2023 April 06 using `fastify@4.15.0`
+This demo was verified on 2023 August 27 using `fastify@4.22.0`
:::
@@ -304,7 +317,7 @@ fastify.post('/', async(req, reply) => {
});
```
-:::caution
+:::caution pass
Out of the box, Fastify will return an error `FST_ERR_CTP_BODY_TOO_LARGE` when
processing large spreadsheets (`statusCode 413`). This is a Fastify issue.
@@ -420,7 +433,7 @@ the main server process. Body parsers like `formidable` will write uploaded
files to the filesystem, and the file path should be passed to the worker (and
the worker would be responsible for reading and cleaning up the files).
-:::note
+:::note pass
The `child_process` module can also spawn [command-line tools](/docs/demos/cli).
That approach is not explored in this demo.
@@ -431,9 +444,8 @@ That approach is not explored in this demo.
:::note
-This demo was last tested on 2023 March 14.
-
-Versions: NodeJS 18.15.0 + ExpressJS 4.18.2 + Formidable 2.1.1
+This demo was last tested on 2023 August 27 with NodeJS 20.5.1 + ExpressJS
+4.18.2 + Formidable 2.1.1
:::
diff --git a/docz/docs/03-demos/06-desktop/05-neutralino.md b/docz/docs/03-demos/06-desktop/05-neutralino.md
index eb3d17f..e173189 100644
--- a/docz/docs/03-demos/06-desktop/05-neutralino.md
+++ b/docz/docs/03-demos/06-desktop/05-neutralino.md
@@ -188,16 +188,16 @@ const save_button_callback = async() => {
## Complete Example
-:::note pass
+:::note
This demo was tested in the following environments:
-| OS and Version | Arch | Server | Client | Date |
-|:---------------|:-----|:----------|:---------|:-----------|
-| macOS 13.4.1 | x64 | `v4.10.0` | `v3.8.2` | 2023-06-28 |
-| macOS 13.4.1 | ARM | `v4.10.0` | `v3.8.2` | 2023-06-28 |
-| Windows 10 | x64 | `v4.7.0` | `v3.6.0` | 2023-03-19 |
-| Linux (HoloOS) | x64 | `v4.7.0` | `v3.6.0` | |
+| OS and Version | Arch | Server | Client | Date |
+|:---------------|:-----|:----------|:----------|:-----------|
+| macOS 13.5.1 | x64 | `v4.13.0` | `v3.11.0` | 2023-08-26 |
+| macOS 13.4.1 | ARM | `v4.10.0` | `v3.8.2` | 2023-06-28 |
+| Windows 10 | x64 | `v4.13.0` | `v3.11.0` | 2023-08-26 |
+| Linux (HoloOS) | x64 | `v4.13.0` | `v3.11.0` | 2023-08-26 |
:::
@@ -231,6 +231,13 @@ curl -L -o resources/js/xlsx.full.min.js https://cdn.sheetjs.com/xlsx-${current}
],
```
+:::note pass
+
+There may be multiple `nativeAllowList` blocks in the configuration file. The
+line must be added to the first block.
+
+:::
+
4) Set up skeleton app and print version info:
- Replace the contents of `resources/index.html` with the following code:
diff --git a/docz/docs/03-demos/06-desktop/09-cli.md b/docz/docs/03-demos/06-desktop/09-cli.md
index fb0ede9..8aa1d7f 100644
--- a/docz/docs/03-demos/06-desktop/09-cli.md
+++ b/docz/docs/03-demos/06-desktop/09-cli.md
@@ -62,6 +62,7 @@ This demo was tested in the following deployments:
|:-------------|:--------|:------------|:-----------|
| `darwin-x64` | `2.0.1` | `20.1.0` | 2023-05-08 |
| `darwin-arm` | `2.0.1` | `20.2.0` | 2023-06-05 |
+| `win10-x64` | `2.1.1` | `16.20.2` | 2023-08-27 |
| `linux-x64` | `2.0.1` | `20.1.0` | 2023-05-08 |
@@ -138,20 +139,76 @@ This generates `xlsx-cli-linux`, `xlsx-cli-macos`, and `xlsx-cli-win.exe` .
Run `boxednode`:
+
+
+
```bash
-npx boxednode@2.0.1 -s xlsx-cli.js -t xlsx-cli
+npx boxednode@2.1.1 -s xlsx-cli.js -t xlsx-cli
```
+
+
+
+```bash
+npx boxednode@2.1.1 -s xlsx-cli.js -t xlsx-cli.exe -n 16.20.2
+```
+
+:::info pass
+
+The Windows 10 build requires Visual Studio with "Desktop development with C++"
+workload, Python 3, and NASM[^1].
+
+:::
+
+:::caution pass
+
+When the demo was last tested on Windows, the build failed:
+
+```
+error MSB8020: The build tools for Visual Studio 2019 (Platform Toolset = 'v142') cannot be found. To build using the v142 build tools, please install Visual Studio 2019 build tools.
+```
+
+This error was fixed by installing the `v142` build tools through the Visual
+Studio installer.
+
+:::
+
+:::caution pass
+
+In the most recent Windows test against NodeJS `20.5.1`, the build failed due
+to an issue in the OpenSSL dependency:
+
+```
+...\node-v20.5.1\deps\openssl\openssl\crypto\info.c(176,16): error C2153: integer literals must have at least one digit [...\node-v20.5.1\deps\openssl\openssl.vcxproj]
+```
+
+SheetJS libraries are compatible with NodeJS versions dating back to `v0.8`. The
+workaround is to select NodeJS `v16.20.2` using the `-n` flag. This version was
+was chosen since NodeJS `v18` upgraded the OpenSSL dependency.
+
+:::
+
-4) Run the generated program, passing `pres.numbers` as the argument. For
+
+
+
+
+
+4) Run the generated program, passing `pres.numbers` as the argument. For
example, `nexe` generates `xlsx-cli` in macOS so the command is:
```bash
./xlsx-cli pres.numbers
```
+`nexe` generates `xlsx-cli.exe` in Windows, so the command is:
+
+```powershell
+.\xlsx-cli.exe pres.numbers
+```
+
## V8
The [V8](/docs/demos/engines/v8) demo covers standalone programs that embed the
@@ -288,3 +345,5 @@ The following demos for JS engines produce standalone programs:
- [QuickJS](/docs/demos/engines/quickjs)
- [Goja](/docs/demos/engines/goja)
- [JavaScriptCore](/docs/demos/engines/jsc)
+
+[^1]: Downloads can be found [at the main NASM project website](https://www.nasm.us/)
\ No newline at end of file
diff --git a/docz/docs/03-demos/09-cloud/31-dropbox.mdx b/docz/docs/03-demos/09-cloud/31-dropbox.mdx
index 1b5f008..bd1cb76 100644
--- a/docz/docs/03-demos/09-cloud/31-dropbox.mdx
+++ b/docz/docs/03-demos/09-cloud/31-dropbox.mdx
@@ -1,5 +1,6 @@
---
-title: Dropbox
+title: Spreadsheets in Dropbox
+sidebar_label: Dropbox
pagination_prev: demos/local/index
pagination_next: demos/extensions/index
---
@@ -8,12 +9,27 @@ pagination_next: demos/extensions/index
-Dropbox is a file hosting service that offers APIs for programmatic file access.
+[Dropbox](https://www.dropbox.com/) is a file hosting service that offers APIs
+for programmatic file access.
+
+[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing
+data from spreadsheets.
+
+This demo uses SheetJS to read and write spreadsheets stored on Dropbox. We'll
+explore two Dropbox API workflows:
+
+- A "Chooser"[^1] application allows users to select files from their Dropbox
+accounts. This demo will fetch and parse the selected file.
+
+- A "Saver"[^2] application allows users to save a generated spreadsheet to
+their Dropbox account. This demo will generate a XLS workbook using SheetJS.
+
+## Integration Details
"Dropbox Apps" are the standard way to interact with the service. The
["Dropbox App"](#dropbox-app) section describes how this demo was configured.
-:::note
+:::info pass
The Dropbox API script is loaded in this page with
@@ -29,23 +45,59 @@ The `data-app-key` used in this demo is a "Development" key associated with the
The live demos require a Dropbox account.
-## Reading Files
+### Reading Files
"Chooser" is a small library that lets users select a file from their account.
+`Dropbox.createChooseButton` is a function that accepts an options argument and
+returns a DOM element that should be added to the page:
-### Live Demo
+```js
+var button = Dropbox.createChooseButton({
+ /* ... options described below ... */
+});
+document.appendChild(button);
+```
-The button must have the following options:
+The following options must be set:
- `multiselect: false` ensures only one file can be selected
- `folderselect: false` limits selection to real files
- `linkType: "direct"` ensures the link points to a raw file
+- `success` method is called when the user selects a file
-When a file is selected, the `success` callback will receive an array of files
-(even if `multiselect` is disabled). Each file object has a `link` file which
-corresponds to a temporary URL that can be fetched.
+The following options are optional:
-:::caution
+- `extensions: ['.xlsx', '.xls']` limits the file types for selection
+
+#### Chooser Callback
+
+The `success` callback method receives an array of File objects even if only one
+file is selected. This file object has the following properties:
+
+- `name` is the name of the selected file
+- `link` is a temporary URL that can be fetched
+
+This demo fetches the link using the `fetch` API, parses the raw data using the
+SheetJS `read` function[^3] and generates a HTML table using `sheet_to_html`[^4]
+
+```js
+async(files) => {
+ /* get file entry -- note that dropbox API always passes an array */
+ var file = files[0];
+ console.log(`Selected ${file.name} ID=${file.id}`);
+
+ /* fetch file and parse */
+ var wb = XLSX.read(await (await fetch(file.link)).arrayBuffer());
+
+ /* convert first sheet to HTML table and add to page */
+ var html = XLSX.utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]);
+ console.log(html);
+}
+```
+
+#### Chooser Live Demo
+
+:::caution pass
If the live demo shows a message
@@ -93,9 +145,26 @@ function SheetJSChoisissez() {
}
```
-## Writing Files
+### Writing Files
-:::caution
+"Saver" is a small library that lets users save files to their account.
+`Dropbox.createSaveButton` is a function that accepts three arguments and
+returns a DOM element that should be added to the page:
+
+```js
+var button = Dropbox.createSaveButton(url, filename, options);
+/* add button to page */
+btn.current.appendChild(button);
+```
+
+`filename` will be the recommended filename in the Save window.
+
+The options object supports two callbacks: `success` (if the save succeeded) and
+`cancel` (if the user cancels without saving).
+
+#### URL
+
+:::caution pass
The Dropbox API was not designed for writing files that are created in the web
browser. The Data URI approach is a neat workaround but should not be used in
@@ -104,18 +173,49 @@ using NodeJS and generate a proper URL for Dropbox to fetch.
:::
-"Saver" is a small library that lets users save files to their account.
+The Dropbox API is designed to fetch data from a user-specified URL. Files are
+not included in the request!
-### Live Demo
+The SheetJS workaround involves the Data URI scheme[^5]. The main steps are:
-The file must be written before the Save button is created. Unfortunately the
-API does not accept data in the POST body, so the workaround is to create a data
-URI by writing with the `base64` type and prepending the URI metadata.
+1) Write a workbook using the SheetJS `write`[^6] method. The `type: "base64"`
+option instructs the method to return a Base64-encoded string.
+
+```js
+/* write XLS workbook (Base64 string) */
+const b64 = XLSX.write(workbook, { type: "base64", bookType: "xls" });
+```
+
+2) Construct a Data URL by prepending the `data` header:
+
+```js
+/* create data URI */
+const url = "data:application/vnd.ms-excel;base64," + b64;
+```
+
+3) Create a button and add it to the page:
+
+```js
+/* create save button using the concise function call */
+var button = Dropbox.createSaveButton( url, "SheetJSDropbox.xls", {
+ success: () => setMsg("File saved successfully!"),
+ cancel: () => setMsg("User Canceled Selection!"),
+});
+document.appendChild(button);
+```
+
+:::info
+
+The file must be written before the Save button is created.
+
+:::
+
+#### Saver Live Demo
This demo seeds data by fetching a file and writing to HTML table. The generated
table is scraped to create a new workbook that is written to XLS.
-:::caution
+:::caution pass
If the live demo shows a message
@@ -164,25 +264,36 @@ function SheetJSEnregistrez() {
:::note
-This demo was last tested on 2023 February 28.
+This demo was last tested on 2023 August 26.
:::
This demo requires a "Dropbox app":
-0) Create a Dropbox app through the Developer tools. For this demo:
+0) Create a Dropbox account and verify the associated email address. This demo
+has been tested with a free Dropbox Basic plan account. The app installation
+step can be safely skipped.
-- "Choose an APU": "Scoped access"
+1) Create a Dropbox app in the Developer panel.
+
+Click the `᎒᎒᎒` icon > App Center. In the next page, click "Build an App". In
+the next page, click "Create Apps".
+
+In the App creation wizard, select the following options:
+
+- "Choose an API": "Scoped access"
- "Choose the type of access you need": "Full Dropbox"
- "Name": (enter any name) "SheetJS Docs"
-:::caution
+:::caution pass
The Dropbox API Terms and Conditions should be reviewed before acceptance.
:::
-1) Configure the Dropbox app in the Developer tools.
+Click "Create App" to create the app.
+
+2) Configure the Dropbox app in the Developer tools.
The following permissions should be selected in the "Permissions" tab
@@ -195,3 +306,14 @@ In the settings tab, under "Chooser / Saver / Embedder domains", the desired
public domains should be added. `localhost` must also be added for development
use (it is not automatically enabled).
+For public use, select "Enable Additional Users".
+
+3) Copy the "App key" and add it to the `data-app-key` attribute of the Dropbox
+integration script reference.
+
+[^1]: See ["Chooser"](https://www.dropbox.com/developers/chooser) in the Dropbox Developers Documentation
+[^2]: See ["Saver"](https://www.dropbox.com/developers/saver) in the Dropbox Developers Documentation
+[^3]: See [`read` in "Reading Files"](/docs/api/parse-options)
+[^4]: See [`sheet_to_html` in "Utilities"](/docs/api/utilities/html#html-table-output)
+[^5]: See ["Data URLs"](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs) in the "MDN web docs"
+[^6]: See [`writeFile` in "Writing Files"](/docs/api/write-options)
\ No newline at end of file
diff --git a/docz/docs/03-demos/12-engines/02_v8.md b/docz/docs/03-demos/12-engines/02_v8.md
index f51bfe5..d58f58c 100644
--- a/docz/docs/03-demos/12-engines/02_v8.md
+++ b/docz/docs/03-demos/12-engines/02_v8.md
@@ -127,7 +127,7 @@ This demo was tested in the following deployments:
| `11.8.82` | `darwin-x64` | macOS 13.5.1 | `clang 14.0.3` | 2023-08-26 |
| `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.3.244.11` | `linux-x64` | HoloOS 3.4.6 | `gcc 12.2.0` | 2023-05-20 |
+| `11.8.82` | `linux-x64` | HoloOS 3.4.8 | `gcc 12.2.0` | 2023-08-26 |
:::
@@ -435,7 +435,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
@@ -504,7 +504,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 \
@@ -572,7 +572,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
diff --git a/docz/docs/03-demos/12-engines/06_goja.md b/docz/docs/03-demos/12-engines/06_goja.md
index dc63d66..725dd9e 100644
--- a/docz/docs/03-demos/12-engines/06_goja.md
+++ b/docz/docs/03-demos/12-engines/06_goja.md
@@ -96,6 +96,8 @@ 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 |
+| `linux-x64` | `81d7606` | `1.21.0` | 2023-08-27 |
:::
diff --git a/docz/docs/03-demos/12-engines/07_nashorn.md b/docz/docs/03-demos/12-engines/07_nashorn.md
index 0fd59fc..5ca88b3 100644
--- a/docz/docs/03-demos/12-engines/07_nashorn.md
+++ b/docz/docs/03-demos/12-engines/07_nashorn.md
@@ -96,12 +96,13 @@ This demo was tested in the following deployments:
| OpenJDK | Nashorn | Date |
|:--------|:----------------|:-----------|
-| 20.0.1 | 15.4 standalone | 2023-05-21 |
-| 19.0.2 | 15.4 standalone | 2023-05-21 |
-| 17.0.6 | 15.4 standalone | 2023-05-21 |
-| 15.0.10 | 15.4 standalone | 2023-05-21 |
-| 11.0.19 | Built-in | 2023-05-21 |
-| 1.8.0 | Built-in | 2023-05-21 |
+| 21-rc34 | 15.4 standalone | 2023-08-28 |
+| 20.0.2 | 15.4 standalone | 2023-08-28 |
+| 19.0.2 | 15.4 standalone | 2023-08-28 |
+| 17.0.8 | 15.4 standalone | 2023-08-28 |
+| 15.0.10 | 15.4 standalone | 2023-08-28 |
+| 11.0.20 | Built-in | 2023-08-28 |
+| 1.8.0 | Built-in | 2023-08-28 |
:::
diff --git a/docz/docs/03-demos/12-engines/08_quickjs.md b/docz/docs/03-demos/12-engines/08_quickjs.md
index 0edbdce..b63ba60 100644
--- a/docz/docs/03-demos/12-engines/08_quickjs.md
+++ b/docz/docs/03-demos/12-engines/08_quickjs.md
@@ -328,7 +328,7 @@ first worksheet name, and the contents of the first sheet as CSV rows.
:::note
-This demo was last tested on 2023 March 11 against QuickJS commit `2788d71`.
+This demo was last tested on 2023 August 26 against QuickJS commit `2788d71`.
:::
diff --git a/docz/docs/03-demos/12-engines/09_hermes.md b/docz/docs/03-demos/12-engines/09_hermes.md
index 26d4fab..fea4c9b 100644
--- a/docz/docs/03-demos/12-engines/09_hermes.md
+++ b/docz/docs/03-demos/12-engines/09_hermes.md
@@ -338,17 +338,32 @@ This demo was tested in the following deployments:
| Architecture | Git Commit | Date |
|:-------------|:-----------|:-----------|
-| `darwin-x64` | `70af78b` | 2023-08-02 |
+| `darwin-x64` | `70af78b` | 2023-08-27 |
| `darwin-arm` | `869312f` | 2023-06-05 |
+| `linux-x64` | `70af78b` | 2023-08-27 |
:::
-0) Install build dependencies:
+0) Install [dependencies](https://hermesengine.dev/docs/building-and-running/#dependencies)
+
+Installation Notes (click to show)
+
+The official guidance[^5] has been verified in macOS and HoloOS (Linux).
+
+On macOS:
```bash
brew install icu4c cmake ninja
```
+On HoloOS (and other Arch Linux distros):
+
+```bash
+sudo pacman -Syu cmake git ninja icu python zip readline
+```
+
+
+
1) Make a project directory:
```bash
@@ -405,7 +420,7 @@ contents of the first sheet as CSV rows.
:::note
-This demo was last tested on 2023 May 30 against Hermes version `0.11.0`.
+This demo was last tested on 2023 August 27 against Hermes version `0.11.0`.
:::
@@ -469,3 +484,4 @@ If successful, the script will print CSV data from the test file.
[^2]: See ["Workbook Object"](/docs/csf/book)
[^3]: See ["Workbook Object"](/docs/csf/book)
[^4]: See [`sheet_to_csv` in "Utilities"](/docs/api/utilities/csv#csv-output)
+[^5]: See ["Dependencies" in "Building and Running"](https://hermesengine.dev/docs/building-and-running/#dependencies) in the Hermes Documentation
\ No newline at end of file
diff --git a/docz/docs/03-demos/12-engines/15_rb.md b/docz/docs/03-demos/12-engines/15_rb.md
index 0cb9826..82d838f 100644
--- a/docz/docs/03-demos/12-engines/15_rb.md
+++ b/docz/docs/03-demos/12-engines/15_rb.md
@@ -71,6 +71,7 @@ This demo was tested in the following deployments:
|:-------------|:---------|:--------|:-----------|
| `darwin-x64` | `2.7.6` | `2.8.1` | 2023-07-24 |
| `darwin-arm` | `2.6.10` | `2.8.1` | 2023-07-24 |
+| `linux-x64` | `3.0.4` | `2.8.1` | 2023-08-27 |
:::
diff --git a/docz/docs/03-demos/12-engines/20_chakra.md b/docz/docs/03-demos/12-engines/20_chakra.md
index 8fd7da1..6baec24 100644
--- a/docz/docs/03-demos/12-engines/20_chakra.md
+++ b/docz/docs/03-demos/12-engines/20_chakra.md
@@ -123,7 +123,7 @@ This demo was tested in the following deployments:
| `darwin-x64` | `c3ead3f` | 2023-08-26 |
| `darwin-arm` | `c3ead3f` | 2023-08-26 |
| `win10-x64` | `c3ead3f` | 2023-08-26 |
-| `linux-x64` | `c3ead3f` | 2023-07-05 |
+| `linux-x64` | `c3ead3f` | 2023-08-27 |
:::
diff --git a/docz/docs/03-demos/12-engines/22_perl.md b/docz/docs/03-demos/12-engines/22_perl.md
index 0bbd365..c135960 100644
--- a/docz/docs/03-demos/12-engines/22_perl.md
+++ b/docz/docs/03-demos/12-engines/22_perl.md
@@ -102,7 +102,7 @@ write_file("SheetJE.fods", $fods);
:::note
-This demo was tested on 2023 February 12 against JE 0.066
+This demo was tested on 2023-08-26 against JE 0.066
:::
diff --git a/docz/static/angularjs/index.html b/docz/static/angularjs/index.html
index a70f569..a51e427 100644
--- a/docz/static/angularjs/index.html
+++ b/docz/static/angularjs/index.html
@@ -5,7 +5,7 @@
SheetJS + AngularJS
-
+
diff --git a/docz/static/hermes/Makefile b/docz/static/hermes/Makefile
index acfe45c..46c09ab 100644
--- a/docz/static/hermes/Makefile
+++ b/docz/static/hermes/Makefile
@@ -1,6 +1,15 @@
# Note: The official Hermes documentation includes zero guidance on embedding.
# Tested against commit 70af78ba69391645749b40a3674d7321c4d6177a
+MYCC=llvm-g++
+POSTAMBLE=-framework CoreFoundation
+
+UNAME__S := $(shell uname -s)
+ifeq ($(UNAME__S),Linux)
+MYCC=g++
+POSTAMBLE=-licuuc -licudata -licuio -licutu -licui18n
+endif
+
.PHONY: doit
doit: sheetjs-hermes
if [ ! -e xlsx.full.min.js ]; then curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js; fi
@@ -18,10 +27,17 @@ clean-all: clean
# This sequence was cobbled together by linking against every artifact.
# Some of these lines are likely extraneous
sheetjs-hermes: sheetjs-hermes.cpp init
- llvm-g++ $< -o $@ -std=gnu++17 \
+ $(MYCC) $< -o $@ -std=gnu++17 \
-Ihermes/include/ -Ihermes/API/ -Ihermes/API/jsi -Ihermes/public \
- -Lbuild_release/API/hermes/ -lhermesapi -lcompileJS -lsynthTrace -lsynthTraceParser -ltimerStats -ltraceInterpreter \
- -Lbuild_release/external/dtoa/ -ldtoa \
+ -Lbuild_release/API/hermes/ -lsynthTrace -lsynthTraceParser \
+ -lhermesapi \
+ -Lbuild_release/lib/VM/ -lhermesVMRuntime \
+ -Lbuild_release/lib/BCGen/HBC/ -lhermesHBCBackend \
+ -Lbuild_release/lib/BCGen/ -lhermesBackend \
+ -Lbuild_release/lib/SourceMap/ -lhermesSourceMap \
+ -Lbuild_release/lib/Parser/ -lhermesParser \
+ -Lbuild_release/lib/Platform/Unicode/ -lhermesPlatformUnicode \
+ -lcompileJS -ltimerStats -ltraceInterpreter \
-Lbuild_release/external/llvh/lib/Demangle/ -lLLVHDemangle \
-Lbuild_release/external/llvh/lib/Support/ -lLLVHSupport \
-Lbuild_release/jsi/ -ljsi \
@@ -30,8 +46,6 @@ sheetjs-hermes: sheetjs-hermes.cpp init
-Lbuild_release/lib/ADT -lhermesADT \
-Lbuild_release/lib/AST/ -lhermesAST \
-Lbuild_release/lib/AST2JS/ -lhermesAST2JS \
- -Lbuild_release/lib/BCGen/ -lhermesBackend \
- -Lbuild_release/lib/BCGen/HBC/ -lhermesHBCBackend \
-Lbuild_release/lib/CompilerDriver/ -lhermesCompilerDriver \
-Lbuild_release/lib/ConsoleHost/ -lhermesConsoleHost \
-Lbuild_release/lib/DependencyExtractor/ -lhermesDependencyExtractor \
@@ -39,19 +53,16 @@ sheetjs-hermes: sheetjs-hermes.cpp init
-Lbuild_release/lib/FrontEndDefs/ -lhermesFrontEndDefs \
-Lbuild_release/lib/Inst/ -lhermesInst \
-Lbuild_release/lib/InternalBytecode/ -lhermesInternalBytecode \
- -Lbuild_release/lib/Parser/ -lhermesParser \
-Lbuild_release/lib/Platform/ -lhermesPlatform \
-Lbuild_release/lib/Platform/Intl/ -lhermesBCP47Parser \
- -Lbuild_release/lib/Platform/Unicode/ -lhermesPlatformUnicode \
-Lbuild_release/lib/Regex/ -lhermesRegex \
- -Lbuild_release/lib/SourceMap/ -lhermesSourceMap \
-Lbuild_release/lib/Support/ -lhermesSupport \
- -Lbuild_release/lib/VM/ -lhermesVMRuntime \
-Lbuild_release/public/hermes/Public -lhermesPublic \
-Lhermes/external/flowparser/ -lflowparser-mac \
- -framework CoreFoundation
+ -Lbuild_release/external/dtoa/ -ldtoa \
+ $(POSTAMBLE)
.PHONY: init
init:
if [ ! -e hermes ]; then git clone https://github.com/facebook/hermes.git; cd hermes; git checkout 70af78ba69391645749b40a3674d7321c4d6177a; cd ..; fi
- if [ ! -e build_release ]; then cmake -S hermes -B build_release -G Ninja -DCMAKE_BUILD_TYPE=Release; cmake --build ./build_release; fi
+ if [ ! -e build_release ]; then cmake -S hermes -B build_release -G Ninja -DCMAKE_BUILD_TYPE=Release; cmake --build ./build_release; fi
\ No newline at end of file
diff --git a/docz/static/neu/linux.png b/docz/static/neu/linux.png
index 42a83e1..1cd2173 100644
Binary files a/docz/static/neu/linux.png and b/docz/static/neu/linux.png differ
diff --git a/docz/static/neu/macos.png b/docz/static/neu/macos.png
index 827baba..fc627eb 100644
Binary files a/docz/static/neu/macos.png and b/docz/static/neu/macos.png differ
diff --git a/docz/static/neu/win10.png b/docz/static/neu/win10.png
index d61c7e3..0c19fff 100644
Binary files a/docz/static/neu/win10.png and b/docz/static/neu/win10.png differ