From 9239192893ef83188ebf57f6093f909d5af147f6 Mon Sep 17 00:00:00 2001
From: SheetJS <dev@sheetjs.com>
Date: Sun, 13 Nov 2022 15:45:13 -0500
Subject: [PATCH] inputtype

---
 .../01-installation/06-deno.md                |  3 ++-
 docz/docs/03-demos/25-gsheet.md               | 19 +++----------------
 docz/docs/03-demos/31-engines.md              | 12 +++++++-----
 docz/docs/03-demos/35-server.md               |  4 ++--
 docz/docs/03-demos/44-legacy.md               | 18 ++++++++----------
 docz/docs/06-solutions/01-input.md            | 15 +++++++--------
 docz/docs/08-api/05-parse-options.md          |  8 ++++++++
 7 files changed, 37 insertions(+), 42 deletions(-)

diff --git a/docz/docs/02-getting-started/01-installation/06-deno.md b/docz/docs/02-getting-started/01-installation/06-deno.md
index c45e063..922dc01 100644
--- a/docz/docs/02-getting-started/01-installation/06-deno.md
+++ b/docz/docs/02-getting-started/01-installation/06-deno.md
@@ -92,7 +92,8 @@ The official Deno registry is out of date.  This is a registry bug.
 
 :::
 
-Applications using the Deno registry can migrate by changing the URLs.
+Applications using the Deno registry can migrate by changing the URLs.  After
+migrating, it is easy to update by changing the version number.
 
 <Tabs>
   <TabItem value="v" label="URL with version">
diff --git a/docz/docs/03-demos/25-gsheet.md b/docz/docs/03-demos/25-gsheet.md
index 0a746eb..c5665dc 100644
--- a/docz/docs/03-demos/25-gsheet.md
+++ b/docz/docs/03-demos/25-gsheet.md
@@ -5,8 +5,7 @@ title: Google Sheets
 import Tabs from '@theme/Tabs';
 import TabItem from '@theme/TabItem';
 
-This demo uses [`node-google-spreadsheet`](https://theoephraim.github.io/node-google-spreadsheet)
-to interact with Google Sheets v4 API.
+This demo uses `node-google-spreadsheet` to interact with Google Sheets v4 API.
 
 :::caution
 
@@ -57,13 +56,7 @@ not natively support the XLSB format.  SheetJS fills the gap.
 
 <details><summary><b>How to run locally</b> (click to show)</summary>
 
-0) Follow the [Authentication and Service Account](https://theoephraim.github.io/node-google-spreadsheet/#/getting-started/authentication)
-instructions.  At the end, you should have
-
-- Created a project and enabled the Sheets API
-- Created a service account with a JSON key
-
-Move the generated JSON key to `key.json` in your project folder.
+0) Follow the [Initial Configuration](#initial-configuration).
 
 1) Create a new Google Sheet and share with the generated service account.  It
 should be granted the "Editor" role
@@ -195,13 +188,7 @@ The goal is to refresh a Google Sheet based on a local file.
 
 <details><summary><b>How to run locally</b> (click to show)</summary>
 
-0) Follow the [Authentication and Service Account](https://theoephraim.github.io/node-google-spreadsheet/#/getting-started/authentication)
-instructions.  At the end, you should have
-
-- Created a project and enabled the Sheets API
-- Created a service account with a JSON key
-
-Move the generated JSON key to `key.json` in your project folder.
+0) Follow the [Initial Configuration](#initial-configuration).
 
 1) Create a new Google Sheet and share with the generated service account.  It
 should be granted the "Editor" role
diff --git a/docz/docs/03-demos/31-engines.md b/docz/docs/03-demos/31-engines.md
index 5dda32b..7a0e650 100644
--- a/docz/docs/03-demos/31-engines.md
+++ b/docz/docs/03-demos/31-engines.md
@@ -647,7 +647,7 @@ the standalone browser scripts.
 
 2) Save the following script to `SheetJSQuick.js`:
 
-```js title="SheetJSQuick.js
+```js title="SheetJSQuick.js"
 /* sheetjs (C) 2013-present  SheetJS -- https://sheetjs.com */
 /* load XLSX */
 import * as std from "std";
@@ -664,10 +664,10 @@ rh.read(ab, 0, sz);
 rh.close();
 
 /* parse file */
-var wb = XLSX.read(ab, {type: 'array'});
+var wb = XLSX.read(ab);
 
-/* write array */
-var out = XLSX.write(wb, {type: 'array'});
+/* write XLSX */
+var out = XLSX.write(wb, {bookType: "xlsx", type: "array"});
 
 /* write contents to file */
 var wh = std.open("SheetJSQuick.xlsx", "wb");
@@ -861,6 +861,7 @@ The `load` function in `jjs` can load the minified source directly:
 
 ```js
 var global = (function(){ return this; }).call(null);
+load('shim.min.js');
 load('xlsx.full.min.js');
 ```
 
@@ -887,6 +888,7 @@ array and calls `XLSX.read` with type `"array"`.
 
 /* load module */
 var global = (function(){ return this; }).call(null);
+load('shim.min.js');
 load('xlsx.full.min.js');
 
 /* helper to convert byte array to plain JS array */
@@ -905,7 +907,7 @@ function process_file(path) {
   var u8a = b2a(bytes);
 
   /* read data */
-  var wb = XLSX.read(u8a, {type:"array"});
+  var wb = XLSX.read(u8a);
 
   /* get first worksheet as an array of arrays */
   var ws = wb.Sheets[wb.SheetNames[0]];
diff --git a/docz/docs/03-demos/35-server.md b/docz/docs/03-demos/35-server.md
index 7eb189f..2417ea2 100644
--- a/docz/docs/03-demos/35-server.md
+++ b/docz/docs/03-demos/35-server.md
@@ -100,7 +100,7 @@ class ParseResource extends Drash.Resource {
     const file = request.bodyParam<Drash.Types.BodyFile>("upload");
     if (!file) throw new Error("File is required!");
     // highlight-next-line
-    var wb = read(file.content, {type: "buffer"});
+    var wb = read(file.content);
     return response.html( utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]));
   }
 }
@@ -156,7 +156,7 @@ class ParseResource extends Drash.Resource {
   public POST(request: Drash.Request, response: Drash.Response) {
     const file = request.bodyParam<Drash.Types.BodyFile>("file");
     if (!file) throw new Error("File is required!");
-    var wb = read(file.content, {type: "buffer"});
+    var wb = read(file.content);
     return response.html( utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]));
   }
 
diff --git a/docz/docs/03-demos/44-legacy.md b/docz/docs/03-demos/44-legacy.md
index b1789e2..a2cd5a1 100644
--- a/docz/docs/03-demos/44-legacy.md
+++ b/docz/docs/03-demos/44-legacy.md
@@ -13,9 +13,9 @@ SheetJS libraries strive to maintain broad browser and JS engine compatibility.
 
 ## Integration
 
-The ["Standalone Browser Scripts"](/docs/getting-started/installation/standalone) section has
-instructions for obtaining or referencing the standalone scripts.  These are
-designed to be referenced with `<script>` tags.
+["Standalone Browser Scripts"](/docs/getting-started/installation/standalone)
+section has instructions for obtaining or referencing the standalone scripts.
+These are designed to be referenced with `<script>` tags.
 
 ## Internet Explorer
 
@@ -27,7 +27,7 @@ The SheetJS testing grid still includes IE and should work.
 :::
 
 The modern upload and download strategies are not available in older versions of
-IE, but there are approaches using older technologies like ActiveX and Flash.
+IE, but there are approaches using ActiveX or Flash.
 
 <details><summary><b>Complete Example</b> (click to show)</summary>
 
@@ -58,7 +58,7 @@ npx -y http-server .
 
 <details><summary><b>Other Live Demos</b> (click to show)</summary>
 
-:::warning
+:::caution
 
 The hosted solutions may not work in older versions of Windows.  For testing,
 demo pages should be downloaded and hosted using a simple HTTP server.
@@ -174,9 +174,8 @@ included in the page and the relevant features are enabled on the target system.
 
 ### AngularJS
 
-[AngularJS](https://en.wikipedia.org/wiki/AngularJS) was a front-end MVC
-framework that was abandoned by Google in 2022. It should not be confused with
-"Angular" the modern framework.
+AngularJS was a front-end MVC framework that was discontinued by Google in 2022.
+It should not be confused with the modern framework "Angular".
 
 The [Live demo](pathname:///angularjs/index.html) shows a simple table that is
 updated with file data and exported to spreadsheets.
@@ -391,8 +390,7 @@ require(["xlsx"], function(_XLSX) {
 
 ### KnockoutJS
 
-[KnockoutJS](https://en.wikipedia.org/wiki/Knockout_(web_framework)) was a
-popular MVVM framework.
+KnockoutJS was a popular MVVM framework.
 
 The [Live demo](pathname:///knockout/knockout.html) shows a view model that is
 updated with file data and exported to spreadsheets.
diff --git a/docz/docs/06-solutions/01-input.md b/docz/docs/06-solutions/01-input.md
index 5b8b75a..75771df 100644
--- a/docz/docs/06-solutions/01-input.md
+++ b/docz/docs/06-solutions/01-input.md
@@ -325,8 +325,8 @@ The [`server` demo](/docs/demos/server) has more advanced examples.
   </TabItem>
   <TabItem value="deno" label="Deno">
 
-[Drash](https://drash.land/drash/) is a HTTP server framework for Deno.  In a
-`POST` request handler, the body parser can pull file data into a `Uint8Array`:
+Drash is a HTTP server framework for Deno.  In a `POST` request handler, the
+body parser can pull file data into a `Uint8Array`:
 
 <pre><code parentName="pre" {...{"className": "language-ts"}}>{`\
 // @deno-types="https://cdn.sheetjs.com/xlsx-${current}/package/types/index.d.ts"
@@ -345,7 +345,7 @@ class SheetResource extends Drash.Resource {
     const file = request.bodyParam<Drash.Types.BodyFile>("file");
     if (!file) throw new Error("File is required!");
     // highlight-next-line
-    var wb = XLSX.read(file.content, {type: "buffer"});
+    var wb = XLSX.read(file.content);
     var html = XLSX.utils.sheet_to_html(wb.Sheets[wb.SheetNames[0]]);
     return response.html(html);
   }
@@ -583,7 +583,7 @@ and process the whole thing at the end:
 ```js
 // XLSX is a global from the standalone script
 
-async function process_RS(stream) {
+async function buffer_RS(stream) {
   /* collect data */
   const buffers = [];
   const reader = stream.getReader();
@@ -605,9 +605,9 @@ async function process_RS(stream) {
   return out;
 }
 
-const data = await process_RS(stream);
+const data = await buffer_RS(stream);
 /* data is Uint8Array */
-const workbook = XLSX.read(data, {type: 'array'});
+const workbook = XLSX.read(data);
 ```
 
   </TabItem>
@@ -617,7 +617,6 @@ When dealing with Readable Streams, the easiest approach is to buffer the stream
 and process the whole thing at the end:
 
 ```js
-var fs = require("fs");
 var XLSX = require("xlsx");
 
 function process_RS(stream, cb) {
@@ -625,7 +624,7 @@ function process_RS(stream, cb) {
   stream.on("data", function(data) { buffers.push(data); });
   stream.on("end", function() {
     var buffer = Buffer.concat(buffers);
-    var workbook = XLSX.read(buffer, {type:"buffer"});
+    var workbook = XLSX.read(buffer);
 
     /* DO SOMETHING WITH workbook IN THE CALLBACK */
     cb(workbook);
diff --git a/docz/docs/08-api/05-parse-options.md b/docz/docs/08-api/05-parse-options.md
index 2c68d17..57b3fe5 100644
--- a/docz/docs/08-api/05-parse-options.md
+++ b/docz/docs/08-api/05-parse-options.md
@@ -87,6 +87,14 @@ tells the library how to parse the data argument:
 | `"array"`  | array: array of 8-bit unsigned int (byte `n` is `data[n]`)      |
 | `"file"`   | string: path of file that will be read (nodejs only)            |
 
+Some common types are automatically deduced from the data input type, including
+NodeJS `Buffer` objects, `Uint8Array` and `ArrayBuffer` objects, and arrays of
+numbers.
+
+When a JS `string` is passed with no `type`, the library assumes the data is a
+Base64 string. `FileReader#readAsBinaryString` or ASCII data requires `"binary"`
+type. DOM strings including `FileReader#readAsText` should use type `"string"`.
+
 ### Guessing File Type
 
 <details>