summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorakanass <akanass@icloud.com>2021-06-17 17:34:59 +0200
committerakanass <akanass@icloud.com>2021-06-17 17:34:59 +0200
commitf93dc50ffdb5e65c404ca093f45d3c79833f1627 (patch)
tree2b5632eba893e107dd913c446d722166314814d2
parent27a91965f059b3ee193f944736c03192fafef262 (diff)
get back ES5 UMD bundle
-rw-r--r--packages/browser/README.md17
-rw-r--r--packages/browser/rollup.config.js39
-rw-r--r--packages/browser/tsconfig.es5.json29
3 files changed, 85 insertions, 0 deletions
diff --git a/packages/browser/README.md b/packages/browser/README.md
index f281493..d94700b 100644
--- a/packages/browser/README.md
+++ b/packages/browser/README.md
@@ -9,6 +9,8 @@
- [@simplewebauthn/browser](#simplewebauthnbrowser)
- [Installation](#installation)
- [UMD](#umd)
+ - [ES5](#es5)
+ - [ES2018](#es2018)
- [Usage](#usage)
## Installation
@@ -23,6 +25,21 @@ npm install @simplewebauthn/browser
This package can also be installed via **unpkg** by including the following script in your page's `<head>` element. The library's methods will be available on the global **`SimpleWebAuthnBrowser`** object.
+> NOTE: The only difference between the two packages below is that the ES5 bundle includes TypeScript's `tslib` runtime code. This adds some bundle size overhead, but _does_ enable use of `supportsWebAuthn()` in older browsers to show appropriate UI when WebAuthn is unavailable.
+
+#### ES5
+
+If you need to support WebAuthn feature detection in deprecated browsers like IE11 and Edge Legacy, include the `ES5` version:
+
+```html
+
+<script src="https://unpkg.com/@simplewebauthn/browser/dist/bundle/index.es5.umd.min.js"></script>
+```
+
+#### ES2018
+
+If you only need to support modern browsers, include the `ES2018` version:
+
```html
<script src="https://unpkg.com/@simplewebauthn/browser"></script>
diff --git a/packages/browser/rollup.config.js b/packages/browser/rollup.config.js
index 15a0b88..0c5ab8d 100644
--- a/packages/browser/rollup.config.js
+++ b/packages/browser/rollup.config.js
@@ -3,6 +3,33 @@ import nodeResolve from '@rollup/plugin-node-resolve';
import { terser } from 'rollup-plugin-terser';
import versionInjector from 'rollup-plugin-version-injector';
+/**
+ * Rollup plugin to clean `tslib` comment in `UMD` bundle targeting `ES5`
+ */
+const cleanTslibCommentInUMDBundleTargetingES5 = () => {
+ return {
+ name: 'cleanTslibCommentInUMDBundleTargetingES5',
+ renderChunk: async code => {
+ const comment = `
+/*! *****************************************************************************
+ Copyright (c) Microsoft Corporation.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ PERFORMANCE OF THIS SOFTWARE.
+ ***************************************************************************** */`;
+ return code.indexOf(comment) > -1 ? code.replace(comment, '') : null;
+ },
+ };
+};
+
const swanVersionInjector = versionInjector({
injectInComments: {
fileRegexp: /\.(js)$/,
@@ -15,6 +42,7 @@ const swanVersionInjector = versionInjector({
/**
* Rollup configuration to generate the following:
* - ES2018 bundle
+ * - ES5 bundle
* - Type declarations
*/
export default [
@@ -37,4 +65,15 @@ export default [
],
plugins: [typescript({ tsconfig: './tsconfig.json' }), nodeResolve(), swanVersionInjector],
},
+ {
+ input: 'src/index.ts',
+ output: {
+ dir: 'dist',
+ format: 'umd',
+ name: 'SimpleWebAuthnBrowser',
+ entryFileNames: 'bundle/[name].es5.umd.min.js',
+ plugins: [terser(), cleanTslibCommentInUMDBundleTargetingES5()],
+ },
+ plugins: [typescript({ tsconfig: './tsconfig.es5.json' }), nodeResolve(), swanVersionInjector],
+ },
];
diff --git a/packages/browser/tsconfig.es5.json b/packages/browser/tsconfig.es5.json
new file mode 100644
index 0000000..b652f4b
--- /dev/null
+++ b/packages/browser/tsconfig.es5.json
@@ -0,0 +1,29 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "target": "ES5",
+ "module": "ES2020",
+ "moduleResolution": "node",
+ "lib": [
+ "ES5",
+ "DOM"
+ ],
+ "baseUrl": "./src",
+ "declaration": false,
+ "declarationDir": null,
+ "declarationMap": false,
+ "downlevelIteration": true,
+ "removeComments": true,
+ "sourceMap": false,
+ "importHelpers": true,
+ "noEmit": true
+ },
+ "include": [
+ "./src/**/*.ts"
+ ],
+ "exclude": [
+ "./src/**/*.test.ts",
+ "./src/setupTests.ts",
+ "./src/**/__mocks__"
+ ]
+}