├── .gitignore ├── .prettierrc.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── lib └── simple-ts.js ├── package-lock.json ├── package.json ├── rollup.config.js ├── src ├── index.ts └── missing-types.d.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | .ts-tmp 2 | .vscode 3 | node_modules 4 | dist 5 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | This only documents breaking changes. For other changes, see the commit log. 2 | 3 | # v3.0.0 4 | 5 | - Simpler set of exports, but files moved around as a result. No change if you're just importing `safari-14-idb-fix`. 6 | 7 | # v2.0.0 8 | 9 | - `dist` no longer commited. 10 | - CommonJS files now have a `.cjs` extension. 11 | - Sourcemaps no longer included. 12 | - Package exports used to create paths to other builds. 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Safari 14 IndexedDB fix 2 | 3 | Safari on macOS Big Sur 11.4 and iOS 14.6 has a [nasty bug](https://bugs.webkit.org/show_bug.cgi?id=226547) where IndexedDB requests get lost and never resolve. The issue was fixed in Safari 14.7. 4 | 5 | This library (well, function) works around the issue and tells you when IndexedDB is actually available. 6 | 7 | To install: 8 | 9 | ``` 10 | npm i safari-14-idb-fix 11 | ``` 12 | 13 | To use: 14 | 15 | ```js 16 | import idbReady from 'safari-14-idb-fix'; 17 | 18 | idbReady().then(() => { 19 | // Safari has definitely figured out where IndexedDB is. 20 | // You can use IndexedDB as usual. 21 | }); 22 | ``` 23 | 24 | ## All bundles 25 | 26 | A modern build tool will handle the above example fine, but if you need a specific build: 27 | 28 | - `safari-14-idb-fix/dist/index.js` EcmaScript module. 29 | - `safari-14-idb-fix/dist/index.cjs` CommonJS module. 30 | - `safari-14-idb-fix/dist/iife.min.js` Minified plain JS, which creates an `idbReady` global. 31 | -------------------------------------------------------------------------------- /lib/simple-ts.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2019 Google Inc. All Rights Reserved. 3 | * Licensed under the Apache License, Version 2.0 (the "License"); 4 | * you may not use this file except in compliance with the License. 5 | * You may obtain a copy of the License at 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * Unless required by applicable law or agreed to in writing, software 8 | * distributed under the License is distributed on an "AS IS" BASIS, 9 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10 | * See the License for the specific language governing permissions and 11 | * limitations under the License. 12 | */ 13 | import { spawn } from 'child_process'; 14 | import { relative, join, parse } from 'path'; 15 | import { promises as fsp } from 'fs'; 16 | import { promisify } from 'util'; 17 | 18 | import * as ts from 'typescript'; 19 | import glob from 'glob'; 20 | 21 | const globP = promisify(glob); 22 | 23 | const extRe = /\.tsx?$/; 24 | 25 | function loadConfig(mainPath) { 26 | const fileName = ts.findConfigFile(mainPath, ts.sys.fileExists); 27 | if (!fileName) throw Error('tsconfig not found'); 28 | const text = ts.sys.readFile(fileName); 29 | const loadedConfig = ts.parseConfigFileTextToJson(fileName, text).config; 30 | const parsedTsConfig = ts.parseJsonConfigFileContent( 31 | loadedConfig, 32 | ts.sys, 33 | process.cwd(), 34 | undefined, 35 | fileName, 36 | ); 37 | return parsedTsConfig; 38 | } 39 | 40 | export default function simpleTS(mainPath, { noBuild, watch } = {}) { 41 | const config = loadConfig(mainPath); 42 | const args = ['-b', mainPath]; 43 | 44 | let done = Promise.resolve(); 45 | 46 | if (!noBuild) { 47 | done = new Promise((resolve) => { 48 | const proc = spawn('tsc', args, { 49 | stdio: 'inherit', 50 | }); 51 | 52 | proc.on('exit', (code) => { 53 | if (code !== 0) { 54 | throw Error('TypeScript build failed'); 55 | } 56 | resolve(); 57 | }); 58 | }); 59 | } 60 | 61 | if (!noBuild && watch) { 62 | done.then(() => { 63 | spawn('tsc', [...args, '--watch', '--preserveWatchOutput'], { 64 | stdio: 'inherit', 65 | }); 66 | }); 67 | } 68 | 69 | return { 70 | name: 'simple-ts', 71 | async buildStart() { 72 | await done; 73 | const matches = await globP(config.options.outDir + '/**/*.js'); 74 | for (const match of matches) this.addWatchFile(match); 75 | }, 76 | resolveId(id, importer) { 77 | // If there isn't an importer, it's an entry point, so we don't need to resolve it relative 78 | // to something. 79 | if (!importer) return null; 80 | 81 | const tsResolve = ts.resolveModuleName( 82 | id, 83 | importer, 84 | config.options, 85 | ts.sys, 86 | ); 87 | 88 | if ( 89 | // It didn't find anything 90 | !tsResolve.resolvedModule || 91 | // Or if it's linking to a definition file, it's something in node_modules, 92 | // or something local like css.d.ts 93 | tsResolve.resolvedModule.extension === '.d.ts' 94 | ) { 95 | return null; 96 | } 97 | return tsResolve.resolvedModule.resolvedFileName; 98 | }, 99 | async load(id) { 100 | if (!extRe.test(id)) return null; 101 | 102 | // Look for the JS equivalent in the tmp folder 103 | const basePath = join( 104 | config.options.outDir, 105 | relative(process.cwd(), id), 106 | ).replace(extRe, ''); 107 | 108 | const srcP = fsp.readFile(basePath + '.js', { encoding: 'utf8' }); 109 | 110 | // Also copy definitions 111 | const assetExtensions = ['.d.ts']; 112 | 113 | await Promise.all( 114 | assetExtensions.map(async (extension) => { 115 | const fileName = basePath + extension; 116 | const source = await fsp.readFile(fileName); 117 | this.emitFile({ 118 | type: 'asset', 119 | source, 120 | fileName: parse(fileName).base, 121 | }); 122 | }), 123 | ); 124 | 125 | return srcP; 126 | }, 127 | }; 128 | } 129 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "safari-14-idb-fix", 3 | "version": "3.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "safari-14-idb-fix", 9 | "version": "3.0.0", 10 | "license": "Apache-2.0", 11 | "devDependencies": { 12 | "del": "^6.0.0", 13 | "prettier": "^2.3.1", 14 | "rollup": "^2.52.1", 15 | "rollup-plugin-terser": "^7.0.2", 16 | "typescript": "^4.3.3" 17 | } 18 | }, 19 | "node_modules/@babel/code-frame": { 20 | "version": "7.14.5", 21 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 22 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 23 | "dev": true, 24 | "dependencies": { 25 | "@babel/highlight": "^7.14.5" 26 | }, 27 | "engines": { 28 | "node": ">=6.9.0" 29 | } 30 | }, 31 | "node_modules/@babel/helper-validator-identifier": { 32 | "version": "7.14.5", 33 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", 34 | "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", 35 | "dev": true, 36 | "engines": { 37 | "node": ">=6.9.0" 38 | } 39 | }, 40 | "node_modules/@babel/highlight": { 41 | "version": "7.14.5", 42 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 43 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 44 | "dev": true, 45 | "dependencies": { 46 | "@babel/helper-validator-identifier": "^7.14.5", 47 | "chalk": "^2.0.0", 48 | "js-tokens": "^4.0.0" 49 | }, 50 | "engines": { 51 | "node": ">=6.9.0" 52 | } 53 | }, 54 | "node_modules/@nodelib/fs.scandir": { 55 | "version": "2.1.5", 56 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 57 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 58 | "dev": true, 59 | "dependencies": { 60 | "@nodelib/fs.stat": "2.0.5", 61 | "run-parallel": "^1.1.9" 62 | }, 63 | "engines": { 64 | "node": ">= 8" 65 | } 66 | }, 67 | "node_modules/@nodelib/fs.stat": { 68 | "version": "2.0.5", 69 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 70 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 71 | "dev": true, 72 | "engines": { 73 | "node": ">= 8" 74 | } 75 | }, 76 | "node_modules/@nodelib/fs.walk": { 77 | "version": "1.2.7", 78 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", 79 | "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", 80 | "dev": true, 81 | "dependencies": { 82 | "@nodelib/fs.scandir": "2.1.5", 83 | "fastq": "^1.6.0" 84 | }, 85 | "engines": { 86 | "node": ">= 8" 87 | } 88 | }, 89 | "node_modules/@types/node": { 90 | "version": "15.12.2", 91 | "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", 92 | "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", 93 | "dev": true 94 | }, 95 | "node_modules/aggregate-error": { 96 | "version": "3.1.0", 97 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 98 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 99 | "dev": true, 100 | "dependencies": { 101 | "clean-stack": "^2.0.0", 102 | "indent-string": "^4.0.0" 103 | }, 104 | "engines": { 105 | "node": ">=8" 106 | } 107 | }, 108 | "node_modules/ansi-styles": { 109 | "version": "3.2.1", 110 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 111 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 112 | "dev": true, 113 | "dependencies": { 114 | "color-convert": "^1.9.0" 115 | }, 116 | "engines": { 117 | "node": ">=4" 118 | } 119 | }, 120 | "node_modules/array-union": { 121 | "version": "2.1.0", 122 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 123 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 124 | "dev": true, 125 | "engines": { 126 | "node": ">=8" 127 | } 128 | }, 129 | "node_modules/balanced-match": { 130 | "version": "1.0.2", 131 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 132 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 133 | "dev": true 134 | }, 135 | "node_modules/brace-expansion": { 136 | "version": "1.1.11", 137 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 138 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 139 | "dev": true, 140 | "dependencies": { 141 | "balanced-match": "^1.0.0", 142 | "concat-map": "0.0.1" 143 | } 144 | }, 145 | "node_modules/braces": { 146 | "version": "3.0.2", 147 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 148 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 149 | "dev": true, 150 | "dependencies": { 151 | "fill-range": "^7.0.1" 152 | }, 153 | "engines": { 154 | "node": ">=8" 155 | } 156 | }, 157 | "node_modules/buffer-from": { 158 | "version": "1.1.1", 159 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 160 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 161 | "dev": true 162 | }, 163 | "node_modules/chalk": { 164 | "version": "2.4.2", 165 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 166 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 167 | "dev": true, 168 | "dependencies": { 169 | "ansi-styles": "^3.2.1", 170 | "escape-string-regexp": "^1.0.5", 171 | "supports-color": "^5.3.0" 172 | }, 173 | "engines": { 174 | "node": ">=4" 175 | } 176 | }, 177 | "node_modules/clean-stack": { 178 | "version": "2.2.0", 179 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 180 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 181 | "dev": true, 182 | "engines": { 183 | "node": ">=6" 184 | } 185 | }, 186 | "node_modules/color-convert": { 187 | "version": "1.9.3", 188 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 189 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 190 | "dev": true, 191 | "dependencies": { 192 | "color-name": "1.1.3" 193 | } 194 | }, 195 | "node_modules/color-name": { 196 | "version": "1.1.3", 197 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 198 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 199 | "dev": true 200 | }, 201 | "node_modules/commander": { 202 | "version": "2.20.3", 203 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 204 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 205 | "dev": true 206 | }, 207 | "node_modules/concat-map": { 208 | "version": "0.0.1", 209 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 210 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 211 | "dev": true 212 | }, 213 | "node_modules/del": { 214 | "version": "6.0.0", 215 | "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", 216 | "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", 217 | "dev": true, 218 | "dependencies": { 219 | "globby": "^11.0.1", 220 | "graceful-fs": "^4.2.4", 221 | "is-glob": "^4.0.1", 222 | "is-path-cwd": "^2.2.0", 223 | "is-path-inside": "^3.0.2", 224 | "p-map": "^4.0.0", 225 | "rimraf": "^3.0.2", 226 | "slash": "^3.0.0" 227 | }, 228 | "engines": { 229 | "node": ">=10" 230 | }, 231 | "funding": { 232 | "url": "https://github.com/sponsors/sindresorhus" 233 | } 234 | }, 235 | "node_modules/dir-glob": { 236 | "version": "3.0.1", 237 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 238 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 239 | "dev": true, 240 | "dependencies": { 241 | "path-type": "^4.0.0" 242 | }, 243 | "engines": { 244 | "node": ">=8" 245 | } 246 | }, 247 | "node_modules/escape-string-regexp": { 248 | "version": "1.0.5", 249 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 250 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 251 | "dev": true, 252 | "engines": { 253 | "node": ">=0.8.0" 254 | } 255 | }, 256 | "node_modules/fast-glob": { 257 | "version": "3.2.5", 258 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", 259 | "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", 260 | "dev": true, 261 | "dependencies": { 262 | "@nodelib/fs.stat": "^2.0.2", 263 | "@nodelib/fs.walk": "^1.2.3", 264 | "glob-parent": "^5.1.0", 265 | "merge2": "^1.3.0", 266 | "micromatch": "^4.0.2", 267 | "picomatch": "^2.2.1" 268 | }, 269 | "engines": { 270 | "node": ">=8" 271 | } 272 | }, 273 | "node_modules/fastq": { 274 | "version": "1.11.0", 275 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", 276 | "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", 277 | "dev": true, 278 | "dependencies": { 279 | "reusify": "^1.0.4" 280 | } 281 | }, 282 | "node_modules/fill-range": { 283 | "version": "7.0.1", 284 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 285 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 286 | "dev": true, 287 | "dependencies": { 288 | "to-regex-range": "^5.0.1" 289 | }, 290 | "engines": { 291 | "node": ">=8" 292 | } 293 | }, 294 | "node_modules/fs.realpath": { 295 | "version": "1.0.0", 296 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 297 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 298 | "dev": true 299 | }, 300 | "node_modules/fsevents": { 301 | "version": "2.3.2", 302 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 303 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 304 | "dev": true, 305 | "hasInstallScript": true, 306 | "optional": true, 307 | "os": [ 308 | "darwin" 309 | ], 310 | "engines": { 311 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 312 | } 313 | }, 314 | "node_modules/glob": { 315 | "version": "7.1.7", 316 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 317 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 318 | "dev": true, 319 | "dependencies": { 320 | "fs.realpath": "^1.0.0", 321 | "inflight": "^1.0.4", 322 | "inherits": "2", 323 | "minimatch": "^3.0.4", 324 | "once": "^1.3.0", 325 | "path-is-absolute": "^1.0.0" 326 | }, 327 | "engines": { 328 | "node": "*" 329 | }, 330 | "funding": { 331 | "url": "https://github.com/sponsors/isaacs" 332 | } 333 | }, 334 | "node_modules/glob-parent": { 335 | "version": "5.1.2", 336 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 337 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 338 | "dev": true, 339 | "dependencies": { 340 | "is-glob": "^4.0.1" 341 | }, 342 | "engines": { 343 | "node": ">= 6" 344 | } 345 | }, 346 | "node_modules/globby": { 347 | "version": "11.0.4", 348 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", 349 | "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", 350 | "dev": true, 351 | "dependencies": { 352 | "array-union": "^2.1.0", 353 | "dir-glob": "^3.0.1", 354 | "fast-glob": "^3.1.1", 355 | "ignore": "^5.1.4", 356 | "merge2": "^1.3.0", 357 | "slash": "^3.0.0" 358 | }, 359 | "engines": { 360 | "node": ">=10" 361 | }, 362 | "funding": { 363 | "url": "https://github.com/sponsors/sindresorhus" 364 | } 365 | }, 366 | "node_modules/graceful-fs": { 367 | "version": "4.2.6", 368 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 369 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 370 | "dev": true 371 | }, 372 | "node_modules/has-flag": { 373 | "version": "3.0.0", 374 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 375 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 376 | "dev": true, 377 | "engines": { 378 | "node": ">=4" 379 | } 380 | }, 381 | "node_modules/ignore": { 382 | "version": "5.1.8", 383 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 384 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 385 | "dev": true, 386 | "engines": { 387 | "node": ">= 4" 388 | } 389 | }, 390 | "node_modules/indent-string": { 391 | "version": "4.0.0", 392 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 393 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 394 | "dev": true, 395 | "engines": { 396 | "node": ">=8" 397 | } 398 | }, 399 | "node_modules/inflight": { 400 | "version": "1.0.6", 401 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 402 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 403 | "dev": true, 404 | "dependencies": { 405 | "once": "^1.3.0", 406 | "wrappy": "1" 407 | } 408 | }, 409 | "node_modules/inherits": { 410 | "version": "2.0.4", 411 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 412 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 413 | "dev": true 414 | }, 415 | "node_modules/is-extglob": { 416 | "version": "2.1.1", 417 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 418 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 419 | "dev": true, 420 | "engines": { 421 | "node": ">=0.10.0" 422 | } 423 | }, 424 | "node_modules/is-glob": { 425 | "version": "4.0.1", 426 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 427 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 428 | "dev": true, 429 | "dependencies": { 430 | "is-extglob": "^2.1.1" 431 | }, 432 | "engines": { 433 | "node": ">=0.10.0" 434 | } 435 | }, 436 | "node_modules/is-number": { 437 | "version": "7.0.0", 438 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 439 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 440 | "dev": true, 441 | "engines": { 442 | "node": ">=0.12.0" 443 | } 444 | }, 445 | "node_modules/is-path-cwd": { 446 | "version": "2.2.0", 447 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", 448 | "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", 449 | "dev": true, 450 | "engines": { 451 | "node": ">=6" 452 | } 453 | }, 454 | "node_modules/is-path-inside": { 455 | "version": "3.0.3", 456 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 457 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 458 | "dev": true, 459 | "engines": { 460 | "node": ">=8" 461 | } 462 | }, 463 | "node_modules/jest-worker": { 464 | "version": "26.6.2", 465 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 466 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 467 | "dev": true, 468 | "dependencies": { 469 | "@types/node": "*", 470 | "merge-stream": "^2.0.0", 471 | "supports-color": "^7.0.0" 472 | }, 473 | "engines": { 474 | "node": ">= 10.13.0" 475 | } 476 | }, 477 | "node_modules/jest-worker/node_modules/has-flag": { 478 | "version": "4.0.0", 479 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 480 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 481 | "dev": true, 482 | "engines": { 483 | "node": ">=8" 484 | } 485 | }, 486 | "node_modules/jest-worker/node_modules/supports-color": { 487 | "version": "7.2.0", 488 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 489 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 490 | "dev": true, 491 | "dependencies": { 492 | "has-flag": "^4.0.0" 493 | }, 494 | "engines": { 495 | "node": ">=8" 496 | } 497 | }, 498 | "node_modules/js-tokens": { 499 | "version": "4.0.0", 500 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 501 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 502 | "dev": true 503 | }, 504 | "node_modules/merge-stream": { 505 | "version": "2.0.0", 506 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 507 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 508 | "dev": true 509 | }, 510 | "node_modules/merge2": { 511 | "version": "1.4.1", 512 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 513 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 514 | "dev": true, 515 | "engines": { 516 | "node": ">= 8" 517 | } 518 | }, 519 | "node_modules/micromatch": { 520 | "version": "4.0.4", 521 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 522 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 523 | "dev": true, 524 | "dependencies": { 525 | "braces": "^3.0.1", 526 | "picomatch": "^2.2.3" 527 | }, 528 | "engines": { 529 | "node": ">=8.6" 530 | } 531 | }, 532 | "node_modules/minimatch": { 533 | "version": "3.0.4", 534 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 535 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 536 | "dev": true, 537 | "dependencies": { 538 | "brace-expansion": "^1.1.7" 539 | }, 540 | "engines": { 541 | "node": "*" 542 | } 543 | }, 544 | "node_modules/once": { 545 | "version": "1.4.0", 546 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 547 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 548 | "dev": true, 549 | "dependencies": { 550 | "wrappy": "1" 551 | } 552 | }, 553 | "node_modules/p-map": { 554 | "version": "4.0.0", 555 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 556 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 557 | "dev": true, 558 | "dependencies": { 559 | "aggregate-error": "^3.0.0" 560 | }, 561 | "engines": { 562 | "node": ">=10" 563 | }, 564 | "funding": { 565 | "url": "https://github.com/sponsors/sindresorhus" 566 | } 567 | }, 568 | "node_modules/path-is-absolute": { 569 | "version": "1.0.1", 570 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 571 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 572 | "dev": true, 573 | "engines": { 574 | "node": ">=0.10.0" 575 | } 576 | }, 577 | "node_modules/path-type": { 578 | "version": "4.0.0", 579 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 580 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 581 | "dev": true, 582 | "engines": { 583 | "node": ">=8" 584 | } 585 | }, 586 | "node_modules/picomatch": { 587 | "version": "2.3.0", 588 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 589 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 590 | "dev": true, 591 | "engines": { 592 | "node": ">=8.6" 593 | }, 594 | "funding": { 595 | "url": "https://github.com/sponsors/jonschlinkert" 596 | } 597 | }, 598 | "node_modules/prettier": { 599 | "version": "2.3.1", 600 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", 601 | "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", 602 | "dev": true, 603 | "bin": { 604 | "prettier": "bin-prettier.js" 605 | }, 606 | "engines": { 607 | "node": ">=10.13.0" 608 | } 609 | }, 610 | "node_modules/queue-microtask": { 611 | "version": "1.2.3", 612 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 613 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 614 | "dev": true, 615 | "funding": [ 616 | { 617 | "type": "github", 618 | "url": "https://github.com/sponsors/feross" 619 | }, 620 | { 621 | "type": "patreon", 622 | "url": "https://www.patreon.com/feross" 623 | }, 624 | { 625 | "type": "consulting", 626 | "url": "https://feross.org/support" 627 | } 628 | ] 629 | }, 630 | "node_modules/randombytes": { 631 | "version": "2.1.0", 632 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 633 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 634 | "dev": true, 635 | "dependencies": { 636 | "safe-buffer": "^5.1.0" 637 | } 638 | }, 639 | "node_modules/reusify": { 640 | "version": "1.0.4", 641 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 642 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 643 | "dev": true, 644 | "engines": { 645 | "iojs": ">=1.0.0", 646 | "node": ">=0.10.0" 647 | } 648 | }, 649 | "node_modules/rimraf": { 650 | "version": "3.0.2", 651 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 652 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 653 | "dev": true, 654 | "dependencies": { 655 | "glob": "^7.1.3" 656 | }, 657 | "bin": { 658 | "rimraf": "bin.js" 659 | }, 660 | "funding": { 661 | "url": "https://github.com/sponsors/isaacs" 662 | } 663 | }, 664 | "node_modules/rollup": { 665 | "version": "2.52.1", 666 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.1.tgz", 667 | "integrity": "sha512-/SPqz8UGnp4P1hq6wc9gdTqA2bXQXGx13TtoL03GBm6qGRI6Hm3p4Io7GeiHNLl0BsQAne1JNYY+q/apcY933w==", 668 | "dev": true, 669 | "bin": { 670 | "rollup": "dist/bin/rollup" 671 | }, 672 | "engines": { 673 | "node": ">=10.0.0" 674 | }, 675 | "optionalDependencies": { 676 | "fsevents": "~2.3.2" 677 | } 678 | }, 679 | "node_modules/rollup-plugin-terser": { 680 | "version": "7.0.2", 681 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 682 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 683 | "dev": true, 684 | "dependencies": { 685 | "@babel/code-frame": "^7.10.4", 686 | "jest-worker": "^26.2.1", 687 | "serialize-javascript": "^4.0.0", 688 | "terser": "^5.0.0" 689 | }, 690 | "peerDependencies": { 691 | "rollup": "^2.0.0" 692 | } 693 | }, 694 | "node_modules/run-parallel": { 695 | "version": "1.2.0", 696 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 697 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 698 | "dev": true, 699 | "funding": [ 700 | { 701 | "type": "github", 702 | "url": "https://github.com/sponsors/feross" 703 | }, 704 | { 705 | "type": "patreon", 706 | "url": "https://www.patreon.com/feross" 707 | }, 708 | { 709 | "type": "consulting", 710 | "url": "https://feross.org/support" 711 | } 712 | ], 713 | "dependencies": { 714 | "queue-microtask": "^1.2.2" 715 | } 716 | }, 717 | "node_modules/safe-buffer": { 718 | "version": "5.1.2", 719 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 720 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 721 | "dev": true 722 | }, 723 | "node_modules/serialize-javascript": { 724 | "version": "4.0.0", 725 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 726 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 727 | "dev": true, 728 | "dependencies": { 729 | "randombytes": "^2.1.0" 730 | } 731 | }, 732 | "node_modules/slash": { 733 | "version": "3.0.0", 734 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 735 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 736 | "dev": true, 737 | "engines": { 738 | "node": ">=8" 739 | } 740 | }, 741 | "node_modules/source-map-support": { 742 | "version": "0.5.19", 743 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 744 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 745 | "dev": true, 746 | "dependencies": { 747 | "buffer-from": "^1.0.0", 748 | "source-map": "^0.6.0" 749 | } 750 | }, 751 | "node_modules/source-map-support/node_modules/source-map": { 752 | "version": "0.6.1", 753 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 754 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 755 | "dev": true, 756 | "engines": { 757 | "node": ">=0.10.0" 758 | } 759 | }, 760 | "node_modules/supports-color": { 761 | "version": "5.5.0", 762 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 763 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 764 | "dev": true, 765 | "dependencies": { 766 | "has-flag": "^3.0.0" 767 | }, 768 | "engines": { 769 | "node": ">=4" 770 | } 771 | }, 772 | "node_modules/terser": { 773 | "version": "5.7.0", 774 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", 775 | "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", 776 | "dev": true, 777 | "dependencies": { 778 | "commander": "^2.20.0", 779 | "source-map": "~0.7.2", 780 | "source-map-support": "~0.5.19" 781 | }, 782 | "bin": { 783 | "terser": "bin/terser" 784 | }, 785 | "engines": { 786 | "node": ">=10" 787 | } 788 | }, 789 | "node_modules/terser/node_modules/source-map": { 790 | "version": "0.7.3", 791 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 792 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 793 | "dev": true, 794 | "engines": { 795 | "node": ">= 8" 796 | } 797 | }, 798 | "node_modules/to-regex-range": { 799 | "version": "5.0.1", 800 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 801 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 802 | "dev": true, 803 | "dependencies": { 804 | "is-number": "^7.0.0" 805 | }, 806 | "engines": { 807 | "node": ">=8.0" 808 | } 809 | }, 810 | "node_modules/typescript": { 811 | "version": "4.3.3", 812 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.3.tgz", 813 | "integrity": "sha512-rUvLW0WtF7PF2b9yenwWUi9Da9euvDRhmH7BLyBG4DCFfOJ850LGNknmRpp8Z8kXNUPObdZQEfKOiHtXuQHHKA==", 814 | "dev": true, 815 | "bin": { 816 | "tsc": "bin/tsc", 817 | "tsserver": "bin/tsserver" 818 | }, 819 | "engines": { 820 | "node": ">=4.2.0" 821 | } 822 | }, 823 | "node_modules/wrappy": { 824 | "version": "1.0.2", 825 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 826 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 827 | "dev": true 828 | } 829 | }, 830 | "dependencies": { 831 | "@babel/code-frame": { 832 | "version": "7.14.5", 833 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 834 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 835 | "dev": true, 836 | "requires": { 837 | "@babel/highlight": "^7.14.5" 838 | } 839 | }, 840 | "@babel/helper-validator-identifier": { 841 | "version": "7.14.5", 842 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", 843 | "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", 844 | "dev": true 845 | }, 846 | "@babel/highlight": { 847 | "version": "7.14.5", 848 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 849 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 850 | "dev": true, 851 | "requires": { 852 | "@babel/helper-validator-identifier": "^7.14.5", 853 | "chalk": "^2.0.0", 854 | "js-tokens": "^4.0.0" 855 | } 856 | }, 857 | "@nodelib/fs.scandir": { 858 | "version": "2.1.5", 859 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 860 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 861 | "dev": true, 862 | "requires": { 863 | "@nodelib/fs.stat": "2.0.5", 864 | "run-parallel": "^1.1.9" 865 | } 866 | }, 867 | "@nodelib/fs.stat": { 868 | "version": "2.0.5", 869 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 870 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 871 | "dev": true 872 | }, 873 | "@nodelib/fs.walk": { 874 | "version": "1.2.7", 875 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", 876 | "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", 877 | "dev": true, 878 | "requires": { 879 | "@nodelib/fs.scandir": "2.1.5", 880 | "fastq": "^1.6.0" 881 | } 882 | }, 883 | "@types/node": { 884 | "version": "15.12.2", 885 | "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", 886 | "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==", 887 | "dev": true 888 | }, 889 | "aggregate-error": { 890 | "version": "3.1.0", 891 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 892 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 893 | "dev": true, 894 | "requires": { 895 | "clean-stack": "^2.0.0", 896 | "indent-string": "^4.0.0" 897 | } 898 | }, 899 | "ansi-styles": { 900 | "version": "3.2.1", 901 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 902 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 903 | "dev": true, 904 | "requires": { 905 | "color-convert": "^1.9.0" 906 | } 907 | }, 908 | "array-union": { 909 | "version": "2.1.0", 910 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 911 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 912 | "dev": true 913 | }, 914 | "balanced-match": { 915 | "version": "1.0.2", 916 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 917 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 918 | "dev": true 919 | }, 920 | "brace-expansion": { 921 | "version": "1.1.11", 922 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 923 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 924 | "dev": true, 925 | "requires": { 926 | "balanced-match": "^1.0.0", 927 | "concat-map": "0.0.1" 928 | } 929 | }, 930 | "braces": { 931 | "version": "3.0.2", 932 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 933 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 934 | "dev": true, 935 | "requires": { 936 | "fill-range": "^7.0.1" 937 | } 938 | }, 939 | "buffer-from": { 940 | "version": "1.1.1", 941 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 942 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 943 | "dev": true 944 | }, 945 | "chalk": { 946 | "version": "2.4.2", 947 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 948 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 949 | "dev": true, 950 | "requires": { 951 | "ansi-styles": "^3.2.1", 952 | "escape-string-regexp": "^1.0.5", 953 | "supports-color": "^5.3.0" 954 | } 955 | }, 956 | "clean-stack": { 957 | "version": "2.2.0", 958 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 959 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 960 | "dev": true 961 | }, 962 | "color-convert": { 963 | "version": "1.9.3", 964 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 965 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 966 | "dev": true, 967 | "requires": { 968 | "color-name": "1.1.3" 969 | } 970 | }, 971 | "color-name": { 972 | "version": "1.1.3", 973 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 974 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 975 | "dev": true 976 | }, 977 | "commander": { 978 | "version": "2.20.3", 979 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 980 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 981 | "dev": true 982 | }, 983 | "concat-map": { 984 | "version": "0.0.1", 985 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 986 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 987 | "dev": true 988 | }, 989 | "del": { 990 | "version": "6.0.0", 991 | "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", 992 | "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", 993 | "dev": true, 994 | "requires": { 995 | "globby": "^11.0.1", 996 | "graceful-fs": "^4.2.4", 997 | "is-glob": "^4.0.1", 998 | "is-path-cwd": "^2.2.0", 999 | "is-path-inside": "^3.0.2", 1000 | "p-map": "^4.0.0", 1001 | "rimraf": "^3.0.2", 1002 | "slash": "^3.0.0" 1003 | } 1004 | }, 1005 | "dir-glob": { 1006 | "version": "3.0.1", 1007 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1008 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1009 | "dev": true, 1010 | "requires": { 1011 | "path-type": "^4.0.0" 1012 | } 1013 | }, 1014 | "escape-string-regexp": { 1015 | "version": "1.0.5", 1016 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1017 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1018 | "dev": true 1019 | }, 1020 | "fast-glob": { 1021 | "version": "3.2.5", 1022 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", 1023 | "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", 1024 | "dev": true, 1025 | "requires": { 1026 | "@nodelib/fs.stat": "^2.0.2", 1027 | "@nodelib/fs.walk": "^1.2.3", 1028 | "glob-parent": "^5.1.0", 1029 | "merge2": "^1.3.0", 1030 | "micromatch": "^4.0.2", 1031 | "picomatch": "^2.2.1" 1032 | } 1033 | }, 1034 | "fastq": { 1035 | "version": "1.11.0", 1036 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", 1037 | "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", 1038 | "dev": true, 1039 | "requires": { 1040 | "reusify": "^1.0.4" 1041 | } 1042 | }, 1043 | "fill-range": { 1044 | "version": "7.0.1", 1045 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1046 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1047 | "dev": true, 1048 | "requires": { 1049 | "to-regex-range": "^5.0.1" 1050 | } 1051 | }, 1052 | "fs.realpath": { 1053 | "version": "1.0.0", 1054 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1055 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1056 | "dev": true 1057 | }, 1058 | "fsevents": { 1059 | "version": "2.3.2", 1060 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1061 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1062 | "dev": true, 1063 | "optional": true 1064 | }, 1065 | "glob": { 1066 | "version": "7.1.7", 1067 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 1068 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 1069 | "dev": true, 1070 | "requires": { 1071 | "fs.realpath": "^1.0.0", 1072 | "inflight": "^1.0.4", 1073 | "inherits": "2", 1074 | "minimatch": "^3.0.4", 1075 | "once": "^1.3.0", 1076 | "path-is-absolute": "^1.0.0" 1077 | } 1078 | }, 1079 | "glob-parent": { 1080 | "version": "5.1.2", 1081 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1082 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1083 | "dev": true, 1084 | "requires": { 1085 | "is-glob": "^4.0.1" 1086 | } 1087 | }, 1088 | "globby": { 1089 | "version": "11.0.4", 1090 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", 1091 | "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", 1092 | "dev": true, 1093 | "requires": { 1094 | "array-union": "^2.1.0", 1095 | "dir-glob": "^3.0.1", 1096 | "fast-glob": "^3.1.1", 1097 | "ignore": "^5.1.4", 1098 | "merge2": "^1.3.0", 1099 | "slash": "^3.0.0" 1100 | } 1101 | }, 1102 | "graceful-fs": { 1103 | "version": "4.2.6", 1104 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 1105 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 1106 | "dev": true 1107 | }, 1108 | "has-flag": { 1109 | "version": "3.0.0", 1110 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1111 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1112 | "dev": true 1113 | }, 1114 | "ignore": { 1115 | "version": "5.1.8", 1116 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 1117 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 1118 | "dev": true 1119 | }, 1120 | "indent-string": { 1121 | "version": "4.0.0", 1122 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1123 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 1124 | "dev": true 1125 | }, 1126 | "inflight": { 1127 | "version": "1.0.6", 1128 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1129 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1130 | "dev": true, 1131 | "requires": { 1132 | "once": "^1.3.0", 1133 | "wrappy": "1" 1134 | } 1135 | }, 1136 | "inherits": { 1137 | "version": "2.0.4", 1138 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1139 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1140 | "dev": true 1141 | }, 1142 | "is-extglob": { 1143 | "version": "2.1.1", 1144 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1145 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1146 | "dev": true 1147 | }, 1148 | "is-glob": { 1149 | "version": "4.0.1", 1150 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1151 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1152 | "dev": true, 1153 | "requires": { 1154 | "is-extglob": "^2.1.1" 1155 | } 1156 | }, 1157 | "is-number": { 1158 | "version": "7.0.0", 1159 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1160 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1161 | "dev": true 1162 | }, 1163 | "is-path-cwd": { 1164 | "version": "2.2.0", 1165 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", 1166 | "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", 1167 | "dev": true 1168 | }, 1169 | "is-path-inside": { 1170 | "version": "3.0.3", 1171 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1172 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1173 | "dev": true 1174 | }, 1175 | "jest-worker": { 1176 | "version": "26.6.2", 1177 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 1178 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 1179 | "dev": true, 1180 | "requires": { 1181 | "@types/node": "*", 1182 | "merge-stream": "^2.0.0", 1183 | "supports-color": "^7.0.0" 1184 | }, 1185 | "dependencies": { 1186 | "has-flag": { 1187 | "version": "4.0.0", 1188 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1189 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1190 | "dev": true 1191 | }, 1192 | "supports-color": { 1193 | "version": "7.2.0", 1194 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1195 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1196 | "dev": true, 1197 | "requires": { 1198 | "has-flag": "^4.0.0" 1199 | } 1200 | } 1201 | } 1202 | }, 1203 | "js-tokens": { 1204 | "version": "4.0.0", 1205 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1206 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1207 | "dev": true 1208 | }, 1209 | "merge-stream": { 1210 | "version": "2.0.0", 1211 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1212 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1213 | "dev": true 1214 | }, 1215 | "merge2": { 1216 | "version": "1.4.1", 1217 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1218 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1219 | "dev": true 1220 | }, 1221 | "micromatch": { 1222 | "version": "4.0.4", 1223 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 1224 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 1225 | "dev": true, 1226 | "requires": { 1227 | "braces": "^3.0.1", 1228 | "picomatch": "^2.2.3" 1229 | } 1230 | }, 1231 | "minimatch": { 1232 | "version": "3.0.4", 1233 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1234 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1235 | "dev": true, 1236 | "requires": { 1237 | "brace-expansion": "^1.1.7" 1238 | } 1239 | }, 1240 | "once": { 1241 | "version": "1.4.0", 1242 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1243 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1244 | "dev": true, 1245 | "requires": { 1246 | "wrappy": "1" 1247 | } 1248 | }, 1249 | "p-map": { 1250 | "version": "4.0.0", 1251 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 1252 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 1253 | "dev": true, 1254 | "requires": { 1255 | "aggregate-error": "^3.0.0" 1256 | } 1257 | }, 1258 | "path-is-absolute": { 1259 | "version": "1.0.1", 1260 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1261 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1262 | "dev": true 1263 | }, 1264 | "path-type": { 1265 | "version": "4.0.0", 1266 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1267 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1268 | "dev": true 1269 | }, 1270 | "picomatch": { 1271 | "version": "2.3.0", 1272 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1273 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 1274 | "dev": true 1275 | }, 1276 | "prettier": { 1277 | "version": "2.3.1", 1278 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz", 1279 | "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==", 1280 | "dev": true 1281 | }, 1282 | "queue-microtask": { 1283 | "version": "1.2.3", 1284 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1285 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1286 | "dev": true 1287 | }, 1288 | "randombytes": { 1289 | "version": "2.1.0", 1290 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1291 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1292 | "dev": true, 1293 | "requires": { 1294 | "safe-buffer": "^5.1.0" 1295 | } 1296 | }, 1297 | "reusify": { 1298 | "version": "1.0.4", 1299 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1300 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1301 | "dev": true 1302 | }, 1303 | "rimraf": { 1304 | "version": "3.0.2", 1305 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1306 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1307 | "dev": true, 1308 | "requires": { 1309 | "glob": "^7.1.3" 1310 | } 1311 | }, 1312 | "rollup": { 1313 | "version": "2.52.1", 1314 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.1.tgz", 1315 | "integrity": "sha512-/SPqz8UGnp4P1hq6wc9gdTqA2bXQXGx13TtoL03GBm6qGRI6Hm3p4Io7GeiHNLl0BsQAne1JNYY+q/apcY933w==", 1316 | "dev": true, 1317 | "requires": { 1318 | "fsevents": "~2.3.2" 1319 | } 1320 | }, 1321 | "rollup-plugin-terser": { 1322 | "version": "7.0.2", 1323 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1324 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1325 | "dev": true, 1326 | "requires": { 1327 | "@babel/code-frame": "^7.10.4", 1328 | "jest-worker": "^26.2.1", 1329 | "serialize-javascript": "^4.0.0", 1330 | "terser": "^5.0.0" 1331 | } 1332 | }, 1333 | "run-parallel": { 1334 | "version": "1.2.0", 1335 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1336 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1337 | "dev": true, 1338 | "requires": { 1339 | "queue-microtask": "^1.2.2" 1340 | } 1341 | }, 1342 | "safe-buffer": { 1343 | "version": "5.1.2", 1344 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1345 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1346 | "dev": true 1347 | }, 1348 | "serialize-javascript": { 1349 | "version": "4.0.0", 1350 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1351 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1352 | "dev": true, 1353 | "requires": { 1354 | "randombytes": "^2.1.0" 1355 | } 1356 | }, 1357 | "slash": { 1358 | "version": "3.0.0", 1359 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1360 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1361 | "dev": true 1362 | }, 1363 | "source-map-support": { 1364 | "version": "0.5.19", 1365 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 1366 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 1367 | "dev": true, 1368 | "requires": { 1369 | "buffer-from": "^1.0.0", 1370 | "source-map": "^0.6.0" 1371 | }, 1372 | "dependencies": { 1373 | "source-map": { 1374 | "version": "0.6.1", 1375 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1376 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1377 | "dev": true 1378 | } 1379 | } 1380 | }, 1381 | "supports-color": { 1382 | "version": "5.5.0", 1383 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1384 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1385 | "dev": true, 1386 | "requires": { 1387 | "has-flag": "^3.0.0" 1388 | } 1389 | }, 1390 | "terser": { 1391 | "version": "5.7.0", 1392 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", 1393 | "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", 1394 | "dev": true, 1395 | "requires": { 1396 | "commander": "^2.20.0", 1397 | "source-map": "~0.7.2", 1398 | "source-map-support": "~0.5.19" 1399 | }, 1400 | "dependencies": { 1401 | "source-map": { 1402 | "version": "0.7.3", 1403 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1404 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 1405 | "dev": true 1406 | } 1407 | } 1408 | }, 1409 | "to-regex-range": { 1410 | "version": "5.0.1", 1411 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1412 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1413 | "dev": true, 1414 | "requires": { 1415 | "is-number": "^7.0.0" 1416 | } 1417 | }, 1418 | "typescript": { 1419 | "version": "4.3.3", 1420 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.3.tgz", 1421 | "integrity": "sha512-rUvLW0WtF7PF2b9yenwWUi9Da9euvDRhmH7BLyBG4DCFfOJ850LGNknmRpp8Z8kXNUPObdZQEfKOiHtXuQHHKA==", 1422 | "dev": true 1423 | }, 1424 | "wrappy": { 1425 | "version": "1.0.2", 1426 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1427 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1428 | "dev": true 1429 | } 1430 | } 1431 | } 1432 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "safari-14-idb-fix", 3 | "version": "3.0.0", 4 | "description": "Working around a Safari 14 IndexedDB bug", 5 | "homepage": "https://github.com/jakearchibald/safari-14-idb-fix", 6 | "main": "./dist/index.cjs", 7 | "module": "./dist/index.js", 8 | "types": "./dist/index.d.ts", 9 | "exports": { 10 | ".": { 11 | "module": "./dist/index.js", 12 | "import": "./dist/index.js", 13 | "require": "./dist/index.cjs" 14 | }, 15 | "./dist/cjs": "./dist/index.cjs", 16 | "./dist/cjs-compat": "./dist/index.cjs", 17 | "./dist/esm": "./dist/index.js", 18 | "./dist/esm-compat": "./dist/index.js", 19 | "./dist/iife": "./dist/iife.min.js", 20 | "./dist/iife-compat": "./dist/iife.min.js", 21 | "./package.json": "./package.json" 22 | }, 23 | "type": "module", 24 | "scripts": { 25 | "build": "rollup -c", 26 | "prepack": "npm run build" 27 | }, 28 | "files": [ 29 | "dist/**" 30 | ], 31 | "license": "Apache-2.0", 32 | "devDependencies": { 33 | "del": "^6.0.0", 34 | "prettier": "^2.3.1", 35 | "rollup": "^2.52.1", 36 | "rollup-plugin-terser": "^7.0.2", 37 | "typescript": "^4.3.3" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import simpleTS from './lib/simple-ts'; 2 | import del from 'del'; 3 | import { terser } from 'rollup-plugin-terser'; 4 | 5 | function removeDefs() { 6 | return { 7 | generateBundle(_, bundle) { 8 | for (const key of Object.keys(bundle)) { 9 | if (key.includes('.d.ts')) delete bundle[key]; 10 | } 11 | }, 12 | }; 13 | } 14 | 15 | export default async function () { 16 | await del('dist'); 17 | 18 | return { 19 | input: 'src/index.ts', 20 | plugins: [simpleTS('./')], 21 | output: [ 22 | { 23 | file: 'dist/index.js', 24 | format: 'es', 25 | }, 26 | { 27 | file: 'dist/index.cjs', 28 | format: 'cjs', 29 | strict: false, 30 | exports: 'default', 31 | plugins: [removeDefs()], 32 | }, 33 | { 34 | file: 'dist/iife.min.js', 35 | format: 'iife', 36 | name: 'idbReady', 37 | esModule: false, 38 | plugins: [removeDefs(), terser()], 39 | }, 40 | ], 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Work around Safari 14 IndexedDB open bug. 3 | * 4 | * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547 5 | * The only solution is to keep nudging it until it's awake. 6 | */ 7 | export default function idbReady(): Promise { 8 | const isSafari = 9 | !navigator.userAgentData && 10 | /Safari\//.test(navigator.userAgent) && 11 | !/Chrom(e|ium)\//.test(navigator.userAgent); 12 | 13 | // No point putting other browsers or older versions of Safari through this mess. 14 | if (!isSafari || !indexedDB.databases) return Promise.resolve(); 15 | 16 | let intervalId: number; 17 | 18 | return new Promise((resolve) => { 19 | const tryIdb = () => indexedDB.databases().finally(resolve); 20 | intervalId = setInterval(tryIdb, 100); 21 | tryIdb(); 22 | }).finally(() => clearInterval(intervalId)); 23 | } 24 | -------------------------------------------------------------------------------- /src/missing-types.d.ts: -------------------------------------------------------------------------------- 1 | interface IDBDatabaseInfo { 2 | name: string; 3 | version: number; 4 | } 5 | 6 | interface IDBFactory { 7 | databases(): Promise; 8 | } 9 | 10 | interface Navigator { 11 | // In reality it has properties and such, but for the sake of this lib: 12 | userAgentData?: {}; 13 | } 14 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES5", 4 | "module": "esnext", 5 | "strict": true, 6 | "outDir": ".ts-tmp", 7 | "composite": true, 8 | "declarationMap": false, 9 | "baseUrl": "./", 10 | "rootDir": "./", 11 | "noUnusedLocals": true, 12 | "sourceMap": false, 13 | "lib": ["ESNext", "DOM"], 14 | "types": [] 15 | }, 16 | "include": ["src/**/*"] 17 | } 18 | --------------------------------------------------------------------------------