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