diff --git a/docz/docs/02-getting-started/02-examples/04-import.md b/docz/docs/02-getting-started/02-examples/04-import.md index 7fb7d03..b453050 100644 --- a/docz/docs/02-getting-started/02-examples/04-import.md +++ b/docz/docs/02-getting-started/02-examples/04-import.md @@ -30,7 +30,7 @@ sequenceDiagram actor U as User participant P as Page participant A as Site - U->>P: click button + U->>P: load site P->>A: fetch file A->>P: raw file Note over P: parse file diff --git a/docz/docs/03-demos/06-desktop/03-wails.md b/docz/docs/03-demos/06-desktop/03-wails.md index 70fb847..50b9c04 100644 --- a/docz/docs/03-demos/06-desktop/03-wails.md +++ b/docz/docs/03-demos/06-desktop/03-wails.md @@ -1,5 +1,5 @@ --- -title: Wails +title: Spreadsheet-Powered Wails Apps sidebar_label: Wails description: Build data-intensive desktop apps using Wails. Seamlessly integrate spreadsheets into your app using SheetJS. Modernize Excel-powered business processes with confidence. pagination_prev: demos/mobile/index @@ -9,8 +9,6 @@ sidebar_custom_props: summary: Webview + Go Backend --- -# Spreadsheet-Powered Wails Apps - import current from '/version.js'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; @@ -47,10 +45,11 @@ app to read and write workbooks. The app will look like the screenshots below: -:::info +:::tip pass -This demo assumes some familiarity with JavaScript and with Go. If you would -prefer a pure JavaScript solution, the [Electron](/docs/demos/desktop/electron) +This demo assumes familiarity with the Go programming language. + +For a pure JavaScript solution, the [Electron](/docs/demos/desktop/electron) platform provides many native features out of the box. ::: @@ -60,11 +59,11 @@ platform provides many native features out of the box. The [SheetJS NodeJS Module](/docs/getting-started/installation/nodejs) can be installed in the `frontend` folder and imported in frontend scripts. -:::caution +:::caution pass Wails currently does not provide the equivalent of NodeJS `fs` module. -Reading and writing raw file data must be implemented in native Go code. +**Reading and writing raw file data must be implemented in native Go code.** ::: @@ -144,6 +143,8 @@ func (a *App) ReadFile() string { Wails will automatically create bindings for use in JS. The `App` binding module will export the function `ReadFile`. +The following example uses the [SvelteJS](/docs/demos/frontend/svelte) framework: + ```js title="frontend/src/App.svelte" import { read, utils } from 'xlsx'; import { ReadFile } from '../wailsjs/go/main/App'; @@ -163,7 +164,7 @@ async function importFile(evt) { ### Writing Files -:::info +:::info pass The SheetJS `write` method[^7] can write spreadsheets in a number of formats[^8] including XLSX, XLSB, XLS, and NUMBERS. It expects a `bookType` option. This @@ -262,7 +263,9 @@ func (a *App) WriteFile(b64 string, path string) { #### JS Wails will automatically create bindings for use in JS. The `App` binding module -will export the functions `SaveFile` and `WriteFile`: +will export the functions `SaveFile` and `WriteFile`. + +The following example uses the [SvelteJS](/docs/demos/frontend/svelte) framework: ```js title="frontend/src/App.svelte" import { utils, write } from 'xlsx'; @@ -290,8 +293,14 @@ async function exportFile(table_element) { :::note -This demo was tested against Wails `v2.4.1` on 2023 April 30 using -the Svelte TypeScript starter. +This demo was tested in the following environments: + +| OS and Version | Arch | Wails | Date | +|:---------------|:-----|:---------|:-----------| +| macOS 12.6.3 | x64 | `v2.5.1` | 2023-08-24 | +| macOS 13.5.1 | ARM | `v2.5.1` | 2023-08-24 | +| Windows 10 | x64 | `v2.5.1` | 2023-08-25 | +| Linux (HoloOS) | x64 | `v2.5.1` | 2023-08-25 | ::: @@ -326,12 +335,22 @@ Your system is ready for Wails development! If a required dependency is missing, it will be displayed. -:::note +:::note pass None of the optional packages are required for building and running this demo. ::: +:::info pass + +On the Steam Deck (HoloOS), some dependencies must be reinstalled: + +```bash +sudo pacman -Syu base-devel gtk glib2 pango harfbuzz cairo gdk-pixbuf2 atk libsoup +``` + +::: + 1) Create a new Wails app: @@ -374,6 +393,15 @@ wails build At the end, it will print the path to the generated program. Run the program! +**Testing** + +When run, the program will download [`pres.xlsx`](https://sheetjs.com/pres.xlsx) +and display the contents of the first worksheet in a table. + +To test export features, click "Export XLSX". The app will ask for a file name +and location. After clicking Save, the app will export to XLSX. This file can be +opened in a spreadsheet editor such as Excel. + [^1]: See ["How does it Work?"](https://wails.io/docs/howdoesitwork) in the Wails documentation. [^2]: See [`read` in "Reading Files"](/docs/api/parse-options) [^3]: See [`sheet_to_html` in "Utilities"](/docs/api/utilities/html#html-table-output) diff --git a/docz/docs/03-demos/12-engines/02_v8.md b/docz/docs/03-demos/12-engines/02_v8.md index 2ad3afd..f51bfe5 100644 --- a/docz/docs/03-demos/12-engines/02_v8.md +++ b/docz/docs/03-demos/12-engines/02_v8.md @@ -1,5 +1,7 @@ --- -title: C++ + V8 +title: Blazing Fast Data Processing with V8 +sidebar_label: C++ + V8 +description: Process structured data in C++ or Rust programs. Seamlessly integrate spreadsheets by paring V8 and SheetJS. Modernize workflows while preserving Excel compatibility. pagination_prev: demos/bigdata/index pagination_next: solutions/input --- @@ -9,14 +11,25 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; -V8 is an embeddable JS engine written in C++. It powers Chromium and Chrome, -NodeJS and Deno, Adobe UXP and other platforms. +[V8](https://v8.dev/) is an embeddable JavaScript engine written in C++. It +powers Chromium and Chrome, NodeJS and Deno, Adobe UXP and other platforms. -The [Standalone scripts](/docs/getting-started/installation/standalone) can be -parsed and evaluated in a V8 context. +[SheetJS](https://sheetjs.com) is a JavaScript library for reading and writing +data from spreadsheets. + +This demo uses V8 and SheetJS to read and write spreadsheets. We'll explore how +to load SheetJS in a V8 context and process spreadsheets and structured data from +C++ and Rust programs. + +The ["Complete Example"](#complete-example) creates a C++ command-line tool for +reading spreadsheet files and generating new workbooks. ["Bindings"](#bindings) +covers V8 engine bindings for other programming languages. ## Integration Details +The [SheetJS Standalone scripts](/docs/getting-started/installation/standalone) +can be parsed and evaluated in a V8 context. + _Initialize V8_ The official V8 `hello-world` example covers initialization and cleanup. For the @@ -30,10 +43,10 @@ v8::Local context = v8::Context::New(isolate); The following helper function evaluates C strings as JS code: ```cpp -v8::Local eval_code(v8::Isolate *i, v8::Local c, char* code) { - v8::Local source = v8::String::NewFromUtf8(i, code).ToLocalChecked(); - v8::Local script = v8::Script::Compile(i, source).ToLocalChecked(); - return script->Run(c).ToLocalChecked(); +v8::Local eval_code(v8::Isolate *isolate, v8::Local context, char* code, size_t sz = -1) { + v8::Local source = v8::String::NewFromUtf8(isolate, code, v8::NewStringType::kNormal, sz).ToLocalChecked(); + v8::Local script = v8::Script::Compile(context, source).ToLocalChecked(); + return script->Run(context).ToLocalChecked(); } ``` @@ -56,7 +69,7 @@ static char *read_file(const char *filename, size_t *sz) { // ... size_t sz; char *file = read_file("xlsx.full.min.js", &sz); - v8::Local result = eval_code(isolate, context, file); + v8::Local result = eval_code(isolate, context, file, sz); ``` To confirm the library is loaded, `XLSX.version` can be inspected: @@ -109,25 +122,26 @@ The resulting `buf` can be written to file with `fwrite`. This demo was tested in the following deployments: -| V8 Version | Platform | OS Version | Compiler | Date | -|:--------------|:-------------|:-------------|:---------------|:-----------| -| `11.3.244.11` | `darwin-x64` | macOS 13.2 | `clang 14.0.3` | 2023-05-20 | -| `11.3.244.11` | `darwin-arm` | macOS 13.0 | `clang 14.0.3` | 2023-06-05 | -| `11.3.244.11` | `linux-x64` | HoloOS 3.4.6 | `gcc 12.2.0` | 2023-05-20 | +| V8 Version | Platform | OS Version | Compiler | Date | +|:--------------|:-------------|:-------------|:-----------------|:-----------| +| `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 | ::: This program parses a file and prints CSV data from the first worksheet. It also generates an XLSB file and writes to the filesystem. -:::caution +:::caution pass When the demo was last tested, there were errors in the official V8 embed guide. The correct instructions are included below. ::: -:::caution +:::caution pass The build process is long and will test your patience. @@ -135,6 +149,9 @@ The build process is long and will test your patience. ### Preparation + + + 0) Prepare `/usr/local/lib`: ```bash @@ -142,7 +159,7 @@ mkdir -p /usr/local/lib cd /usr/local/lib ``` -:::caution +:::caution pass If this step throws a permission error, run: @@ -153,15 +170,77 @@ sudo chmod 777 /usr/local/lib ::: + + + +0) Follow the official ["Visual Studio"](https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md#visual-studio) +installation steps. + +:::info pass + +Using the installer tool, the "Desktop development with C++" workload must be +installed. In the sidebar, verify the following components are checked: + +- "C++ ATL for latest ... build tools" (`v143` when last tested) +- "C++ MFC for latest ... build tools" (`v143` when last tested) + +In the "Individual components" tab, search for "Windows 11 SDK" and verify that +"Windows 11 SDK (10.0.22621.0)" is checked. + +Click "Modify" and allow the installer to finish. + +The SDK debugging tools must be installed after the SDK is installed. + +1) Using the Search bar, search "Apps & features". + +2) When the setting panel opens, scroll down to "Windows Software Development +Kit - Windows 10.0.22621 and click "Modify". + +3) In the new window, select "Change" and click "Next" + +4) Check "Debugging Tools for Windows" and click "Change" + +::: + +The following `git` settings should be changed: + +```bash +git config --global core.autocrlf false +git config --global core.filemode false +git config --global branch.autosetuprebase always +``` + + + + 1) Download and install `depot_tools`: + + + ```bash git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git ``` + + + +[The bundle](https://storage.googleapis.com/chrome-infra/depot_tools.zip) is a +ZIP file that should be downloaded and extracted. + +The demo was last tested on an exFAT-formatted drive (mounted at `E:\`). + +After extracting, verify that the `depot_tools` folder is not read-only. + + + + 2) Add the path to the `PATH` environment variable: + + + ```bash export PATH="/usr/local/lib/depot_tools:$PATH" ``` @@ -169,16 +248,91 @@ export PATH="/usr/local/lib/depot_tools:$PATH" At this point, it is strongly recommended to add the line to a shell startup script such as `.bashrc` or `.zshrc` + + + +:::caution pass + +These instructions are for `cmd` use. Do not run in PowerShell! + +It is strongly recommended to use the "Developer Command Prompt" from Visual +Studio as it prepares the console to run build tools. + +::: + +```bash +set DEPOT_TOOLS_WIN_TOOLCHAIN=0 +set PATH=E:\depot_tools;%PATH% +``` + +In addition, the `vs2022_install` variable must be set to the Visual Studio +folder. For example, using the "Community Edition", the assignment should be + +```bash +set vs2022_install="C:\Program Files\Microsoft Visual Studio\2022\Community" +``` + +These environment variables can be persisted in the Control Panel. + + + + 3) Run `gclient` once to update `depot_tools`: + + + ```bash gclient ``` + + + +```bash +gclient +``` + +:::caution pass + +`gclient` may throw errors related to `git` and permissions issues: + +``` +fatal: detected dubious ownership in repository at 'E:/depot_tools' +'E:/depot_tools' is on a file system that doesnot record ownership +To add an exception for this directory, call: + + git config --global --add safe.directory E:/depot_tools +``` + +These issues are related to the exFAT file system. They were resolved by running +the recommended commands and re-running `gclient`. + +::: + +:::caution pass + +There were errors pertaining to `gitconfig`: + +``` +error: could not write config file E:/depot_tools/bootstrap-2@3_8_10_chromium_26_bin/git/etc/gitconfig: File exists +``` + +This can happen if the `depot_tools` folder is read-only. The workaround is to +unset the read-only flag for the `E:\depot_tools` folder. + +::: + + + + ### Clone V8 4) Create a base directory: + + + ```bash mkdir -p ~/dev/v8 cd ~/dev/v8 @@ -188,12 +342,94 @@ cd v8 Note that the actual repo will be placed in `~/dev/v8/v8`. -5) Checkout the desired version. The following command pulls `11.3.244.11`: + + ```bash -git checkout refs/tags/11.3.244.11 -b sample -t +cd E:\ +mkdir v8 +cd v8 +fetch v8 +cd v8 ``` +:::caution pass + +On exFAT, every cloned repo elicited the same `git` permissions error. `fetch` +will fail with a clear remedy message such as + +``` + git config --global --add safe.directory E:/v8/v8 +``` + +Run the command then run `gclient sync`, repeating each time the command fails. + +::: + +:::caution pass + +There were occasional `git` conflict errors: + +``` +v8/tools/clang (ERROR) +---------------------------------------- +[0:00:01] Started. +... +error: Your local changes to the following files would be overwritten by checkout: + plugins/FindBadRawPtrPatterns.cpp +... +Please commit your changes or stash them before you switch branches. +Aborting +error: could not detach HEAD +---------------------------------------- +Error: 28> Unrecognized error, please merge or rebase manually. +28> cd E:\v8\v8\tools\clang && git rebase --onto 65ceb79efbc9d1dec9b1a0f4bc0b8d010b9d7a66 refs/remotes/origin/main +``` + +The recommended fix is to delete the referenced folder and re-run `gclient sync` + +::: + + + + + +5) Checkout the desired version. The following command pulls `11.8.82`: + + + + +```bash +git checkout refs/tags/11.8.82 -b sample -t +``` + + + + +```bash +git checkout tags/11.8.82 -b sample +``` + +:::caution pass + +The official documentation recommends: + +```bash +git checkout refs/tags/11.8.82 -b sample -t +``` + +This command failed in local testing: + +``` +E:\v8\v8>git checkout refs/tags/11.8.82 -b sample -t +fatal: cannot set up tracking information; starting point 'refs/tags/11.8.82' is not a branch +``` + +::: + + + + ### Build V8 6) Build the static library. @@ -214,6 +450,54 @@ tools/dev/v8gen.py arm64.release.sample ninja -C out.gn/arm64.release.sample v8_monolith ``` + + + +```bash +python3 tools\dev\v8gen.py -vv x64.release.sample +ninja -C out.gn\x64.release.sample v8_monolith +``` + +:::caution pass + +In local testing, the build sometimes failed with a `dbghelp.dll` error: + +``` + Exception: dbghelp.dll not found in "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\dbghelp.dll" +``` + +This issue was fixed by removing and reinstalling "Debugging Tools for Windows" +from the Control Panel as described in step 0. + +::: + +:::caution pass + +In local testing, the `ninja` build failed with C++ deprecation errors: + +```c++ +../..\src/wasm/wasm-code-manager.h(789,28): error: 'atomic_load>' is deprecated: warning STL4029: std::atomic_*() overloads for shared_ptr are deprecated in C++20. The shared_ptr specialization of std::atomic provides superior functionality. You can define _SILENCE_CXX20_OLD_SHARED_PTR_ATOMIC_SUPPORT_DEPRECATION_WARNING or _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS to suppress this warning. [-Werror,-Wdeprecated-declarations] + 789 | auto wire_bytes = std::atomic_load(&wire_bytes_); + | ^ +C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\include\memory(3794,1): note: 'atomic_load>' has been explicitly marked deprecated here + 3794 | _CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT _NODISCARD shared_ptr<_Ty> atomic_load( + | ^ +C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\include\yvals_core.h(1317,7): note: expanded from macro '_CXX20_DEPRECATE_OLD_SHARED_PTR_ATOMIC_SUPPORT' + 1317 | [[deprecated("warning STL4029: " \ + | ^ +2 errors generated. +[14/1303] CXX obj/torque_generated_definitions/js-atomics-synchronization-tq.obj +FAILED: obj/torque_generated_definitions/js-atomics-synchronization-tq.obj +``` + +The workaround is to append a line to `out.gn\x64.release.sample\args.gn`: + +```text title="out.gn\x64.release.sample\args.gn (add to end)" +treat_warnings_as_errors = false +``` + +::: + @@ -237,6 +521,14 @@ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith -lv8_libbase -lv8_libplatform -ldl -Lout.gn/arm64.release.sample/obj/ -pthread \ -std=c++17 -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX ./hello_world +``` + + + + +```bash +cl /I. /Iinclude samples/hello-world.cc /GR- v8_monolith.lib Advapi32.lib Winmm.lib Dbghelp.lib /std:c++17 /DV8_COMPRESS_POINTERS=1 /DV8_ENABLE_SANDBOX /link /out:hello_world.exe /LIBPATH:out.gn\x64.release.sample\obj\ +.\hello_world.exe ``` @@ -247,14 +539,32 @@ g++ -I. -Iinclude samples/hello-world.cc -o hello_world -fno-rtti -lv8_monolith 8) Make a new project folder: + + + ```bash cd ~/dev +mkdir -p sheetjs-v8 +cd sheetjs-v8 +``` + + + + +```bash +cd E:\ mkdir sheetjs-v8 cd sheetjs-v8 ``` + + + 9) Copy the sample source: + + + ```bash cp ~/dev/v8/v8/samples/hello-world.cc . ``` @@ -280,8 +590,23 @@ ln -s ~/dev/v8/v8/out.gn/arm64.release.sample/obj + + + +```bash +copy E:\v8\v8\samples\hello-world.cc .\ +``` + +10) Observe that exFAT does not support symbolic links and move on to step 11. + + + + 11) Build and run the `hello-world` example from this folder: + + + ```bash g++ -I. -Iinclude hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ -lv8_libbase -lv8_libplatform -ldl -Lobj/ -pthread -std=c++17 \ @@ -289,6 +614,17 @@ g++ -I. -Iinclude hello-world.cc -o hello_world -fno-rtti -lv8_monolith \ ./hello_world ``` + + + +```bash +cl /MT /I..\v8\v8\ /I..\v8\v8\include hello-world.cc /GR- v8_monolith.lib Advapi32.lib Winmm.lib Dbghelp.lib /std:c++17 /DV8_COMPRESS_POINTERS=1 /DV8_ENABLE_SANDBOX /link /out:hello_world.exe /LIBPATH:..\v8\v8\out.gn\x64.release.sample\obj\ +.\hello_world.exe +``` + + + + ### Add SheetJS 12) Download the standalone script and test file: @@ -311,18 +647,44 @@ curl -LO https://docs.sheetjs.com/v8/sheetjs.v8.cc 14) Compile standalone `sheetjs.v8` binary + + + ```bash g++ -I. -Iinclude sheetjs.v8.cc -o sheetjs.v8 -fno-rtti -lv8_monolith \ -lv8_libbase -lv8_libplatform -ldl -Lobj/ -pthread -std=c++17 \ -DV8_COMPRESS_POINTERS=1 -DV8_ENABLE_SANDBOX ``` + + + +```bash +cl /MT /I..\v8\v8\ /I..\v8\v8\include sheetjs.v8.cc /GR- v8_monolith.lib Advapi32.lib Winmm.lib Dbghelp.lib /std:c++17 /DV8_COMPRESS_POINTERS=1 /DV8_ENABLE_SANDBOX /link /out:sheetjs.v8.exe /LIBPATH:..\v8\v8\out.gn\x64.release.sample\obj\ +``` + + + + 15) Run the demo: + + + ```bash ./sheetjs.v8 pres.numbers ``` + + + +```bash +cl /MT /I..\v8\v8\ /I..\v8\v8\include sheetjs.v8.cc /GR- v8_monolith.lib Advapi32.lib Winmm.lib Dbghelp.lib /std:c++17 /DV8_COMPRESS_POINTERS=1 /DV8_ENABLE_SANDBOX /link /out:sheetjs.v8.exe /LIBPATH:..\v8\v8\out.gn\x64.release.sample\obj\ +``` + + + + If the program succeeded, the CSV contents will be printed to console and the file `sheetjsw.xlsb` will be created. That file can be opened with Excel. @@ -358,7 +720,7 @@ This demo was last tested in the following deployments: | Architecture | V8 Crate | Date | |:-------------|:---------|:-----------| -| `darwin-x64` | `0.71.2` | 2023-05-22 | +| `darwin-x64` | `0.75.1` | 2023-08-26 | | `darwin-arm` | `0.73.0` | 2023-06-05 | | `linux-x64` | `0.71.2` | 2023-05-23 | | `win10-x64` | `0.71.2` | 2023-05-23 | diff --git a/docz/docs/03-demos/12-engines/20_chakra.md b/docz/docs/03-demos/12-engines/20_chakra.md index d48bf93..8fd7da1 100644 --- a/docz/docs/03-demos/12-engines/20_chakra.md +++ b/docz/docs/03-demos/12-engines/20_chakra.md @@ -120,13 +120,14 @@ This demo was tested in the following deployments: | Architecture | Git Commit | Date | |:-------------|:-----------|:-----------| -| `darwin-x64` | `c3ead3f` | 2023-07-05 | -| `darwin-arm` | `c3ead3f` | 2023-07-05 | +| `darwin-x64` | `c3ead3f` | 2023-08-26 | +| `darwin-arm` | `c3ead3f` | 2023-08-26 | +| `win10-x64` | `c3ead3f` | 2023-08-26 | | `linux-x64` | `c3ead3f` | 2023-07-05 | ::: -0) Install `icu` and `cmake` dependencies. +0) Install dependencies: @@ -151,13 +152,19 @@ On Arch Linux / HoloOS: sudo pacman -S cmake clang ``` + + + +Install Visual Studio 2022 with the "Desktop Development with C++" workflow. +All commands in this demo should be run in a Developer Command Prompt. + 1) Download ChakraCore: ```bash -git clone https://github.com/Microsoft/ChakraCore +git clone https://github.com/Microsoft/ChakraCore.git cd ChakraCore git checkout c3ead3f cd .. @@ -241,6 +248,31 @@ When the demo was last tested, ChakraCore JIT was not supported. cd ChakraCore ./build.sh --static --embed-icu --test-build -j=8 --no-jit cd .. +``` + + + + +:::info pass + +As explained in the ChakraCore project wiki[^1], the build accepts a few flags: + +- `/p:Platform=x64` controls the architecture +- `/p:Configuration=Debug` enables runtime checks +- `/p:RuntimeLib=static_library` ensures MSVC libraries are statically linked + +::: + +``` +cd ChakraCore +msbuild /m /p:Platform=x64 /p:Configuration=Debug /p:RuntimeLib=static_library Build\Chakra.Core.sln +cd .. +``` + +After building, the generated DLL should be copied into the project folder: + +``` +copy .\ChakraCore\Build\VcBuild\bin\x64_debug\ChakraCore.dll . ``` @@ -252,18 +284,19 @@ cd .. - [`Makefile`](pathname:///chakra/Makefile) ```bash -curl -LO https://docs.sheetjs.com/chakra/sheetjs.ch.cpp -curl -LO https://docs.sheetjs.com/chakra/Makefile +curl -L -O https://docs.sheetjs.com/chakra/sheetjs.ch.cpp +curl -L -O https://docs.sheetjs.com/chakra/Makefile ``` 4) Build the sample application: + + + ```bash make ``` -This program tries to parse the file specified by the first argument - :::caution When this demo was last tested on macOS, the build failed with the message: @@ -283,6 +316,16 @@ sudo ln -s /opt/homebrew/opt/icu4c ::: + + + +``` +cl sheetjs.ch.cpp ChakraCore.lib /I ChakraCore\lib\Jsrt /link /LIBPATH:ChakraCore\Build\VcBuild\bin\x64_debug +``` + + + + 5) Download the standalone script, shim script, and test file:
    @@ -292,17 +335,30 @@ sudo ln -s /opt/homebrew/opt/icu4c
{`\ -curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js -curl -LO https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js -curl -LO https://sheetjs.com/pres.numbers`} +curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js +curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js +curl -L -O https://sheetjs.com/pres.numbers`} 6) Run the test program: + + + ```bash ./sheetjs.ch pres.numbers ``` + + + +``` +.\sheetjs.ch.exe pres.numbers +``` + + + + If successful, the program will print the contents of the first sheet as CSV. @@ -310,8 +366,7 @@ If successful, the program will print the contents of the first sheet as CSV. :::note -This demo was last tested on 2023 April 09 against `ch` `1.13.0.0-beta`. -The command line tool was built against commit `c3ead3f`. +This demo was last tested on 2023-08-26 against `ch` commit `c3ead3f`. ::: @@ -321,6 +376,13 @@ file as a Base64 string and directly add it to an amalgamated script. 0) Download and extract the ChakraCore release ZIP. Copy the binary (`bin/ch`) to your project folder. +:::note pass + +The ["Integration Example"](#integration-example) also builds the `ch` binary! +It will typically be placed in the `ChakraCore/out/Test/` folder. + +::: + 1) Download the standalone script, shim, and test file: +{`\ +curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/xlsx.full.min.js +curl -L -O https://cdn.sheetjs.com/xlsx-${current}/package/dist/shim.min.js +curl -L -O https://sheetjs.com/pres.numbers`} + + 2) Bundle the test file and create `payload.js`: ```bash @@ -364,3 +432,5 @@ ready, it will read the bundled test data and print the contents as CSV. ```bash ./ch xlsx.chakra.js ``` + +[^1]: See ["Building ChakraCore"](https://github.com/chakra-core/ChakraCore/wiki/Building-ChakraCore#deployment) in the ChakraCore project wiki \ No newline at end of file diff --git a/docz/docs/07-csf/07-features/08-visibility.md b/docz/docs/07-csf/07-features/10-visibility.md similarity index 99% rename from docz/docs/07-csf/07-features/08-visibility.md rename to docz/docs/07-csf/07-features/10-visibility.md index 37c305f..06f24e4 100644 --- a/docz/docs/07-csf/07-features/08-visibility.md +++ b/docz/docs/07-csf/07-features/10-visibility.md @@ -1,6 +1,6 @@ --- title: Sheet Visibility -sidebar_position: 7 +sidebar_position: 10 ---
diff --git a/docz/docs/09-miscellany/03-source.md b/docz/docs/09-miscellany/03-source.md index 6f5c619..1335679 100644 --- a/docz/docs/09-miscellany/03-source.md +++ b/docz/docs/09-miscellany/03-source.md @@ -8,6 +8,8 @@ The official source code repository is Issues should be raised at +Issues can also be reported on [our Discord server](https://sheetjs.com/chat) + The official changelog can be found [in the source code repository](https://git.sheetjs.com/sheetjs/sheetjs/raw/branch/master/CHANGELOG.md) :::tip pass diff --git a/docz/static/v8/sheetjs.v8.cc b/docz/static/v8/sheetjs.v8.cc index a6eb324..85ed4e8 100644 --- a/docz/static/v8/sheetjs.v8.cc +++ b/docz/static/v8/sheetjs.v8.cc @@ -16,12 +16,13 @@ static char *read_file(const char *filename, size_t *sz) { return buf; } -v8::Local eval_code(v8::Isolate *isolate, v8::Local context, char* code) { - v8::Local source = v8::String::NewFromUtf8(isolate, code).ToLocalChecked(); +v8::Local eval_code(v8::Isolate *isolate, v8::Local context, char* code, size_t sz = -1) { + v8::Local source = v8::String::NewFromUtf8(isolate, code, v8::NewStringType::kNormal, sz).ToLocalChecked(); v8::Local script = v8::Script::Compile(context, source).ToLocalChecked(); return script->Run(context).ToLocalChecked(); } #define EVAL_CODE(x) eval_code(isolate, context, (char *)x) +#define EVAL_CODE2(x,sz) eval_code(isolate, context, (char *)x, sz) int main(int argc, char* argv[]) { /* initialize -- this part is from the hello world example */ @@ -47,7 +48,7 @@ int main(int argc, char* argv[]) { if(!file) { perror("Error reading xlsx.full.min.js"); return 1; } /* evaluate */ - v8::Local result = EVAL_CODE(file); + v8::Local result = EVAL_CODE2(file, sz); /* free */ free(file); diff --git a/docz/static/wails/linux.png b/docz/static/wails/linux.png index 40f36fa..a5b7a9a 100644 Binary files a/docz/static/wails/linux.png and b/docz/static/wails/linux.png differ diff --git a/docz/static/wails/macos.png b/docz/static/wails/macos.png index 6611550..c47727b 100644 Binary files a/docz/static/wails/macos.png and b/docz/static/wails/macos.png differ diff --git a/docz/static/wails/win10.png b/docz/static/wails/win10.png index c559b87..645cd41 100644 Binary files a/docz/static/wails/win10.png and b/docz/static/wails/win10.png differ