From ffd2a62c3f7df94365980302fef3bc3376b48182 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 3 Aug 2020 13:00:48 +0530 Subject: [PATCH] modularize repo, use pnpm, improve typechecking --- .gitignore | 6 +- .yarnrc | 2 - Makefile | 36 +- bin/taler-wallet-cli | 3 - package.json | 94 +- packages/README | 2 - packages/idb-bridge/.vscode/settings.json | 4 - packages/idb-bridge/package.json | 22 +- packages/idb-bridge/rollup.config.js | 31 + packages/idb-bridge/src/BridgeIDBCursor.ts | 15 +- .../src/BridgeIDBCursorWithValue.ts | 6 +- packages/idb-bridge/src/BridgeIDBDatabase.ts | 21 +- packages/idb-bridge/src/BridgeIDBFactory.ts | 12 +- packages/idb-bridge/src/BridgeIDBIndex.ts | 22 +- packages/idb-bridge/src/BridgeIDBKeyRange.ts | 4 +- .../idb-bridge/src/BridgeIDBObjectStore.ts | 18 +- .../idb-bridge/src/BridgeIDBOpenDBRequest.ts | 26 +- packages/idb-bridge/src/BridgeIDBRequest.ts | 14 +- .../idb-bridge/src/BridgeIDBTransaction.ts | 13 +- .../src/BridgeIDBVersionChangeEvent.ts | 34 +- packages/idb-bridge/src/MemoryBackend.test.ts | 34 +- packages/idb-bridge/src/MemoryBackend.ts | 10 +- packages/idb-bridge/src/backend-interface.ts | 21 +- packages/idb-bridge/src/idbtypes.ts | 736 +++ packages/idb-bridge/src/index.ts | 21 +- packages/idb-bridge/src/tree/b+tree.ts | 1066 ++-- packages/idb-bridge/src/tree/interfaces.ts | 287 +- packages/idb-bridge/src/util/FakeEvent.ts | 87 +- .../idb-bridge/src/util/FakeEventTarget.ts | 2 +- packages/idb-bridge/src/util/cmp.ts | 144 +- packages/idb-bridge/src/util/enforceRange.ts | 20 +- packages/idb-bridge/src/util/errors.ts | 159 +- .../idb-bridge/src/util/getIndexKeys.test.ts | 28 +- packages/idb-bridge/src/util/injectKey.ts | 2 +- .../src/util/makeStoreKeyValue.test.ts | 26 +- .../idb-bridge/src/util/makeStoreKeyValue.ts | 5 +- packages/idb-bridge/src/util/queueTask.ts | 8 +- .../idb-bridge/src/util/structuredClone.ts | 3 +- packages/idb-bridge/src/util/types.ts | 21 +- .../idb-bridge/src/util/validateKeyPath.ts | 98 +- packages/idb-bridge/src/util/valueToKey.ts | 1 - packages/idb-bridge/tsconfig.json | 13 +- packages/idb-bridge/yarn.lock | 2689 ---------- packages/pogen/package.json | 2 +- packages/pogen/tsconfig.json | 3 +- packages/taler-wallet-android/package.json | 44 + .../taler-wallet-android/rollup.config.js | 30 + packages/taler-wallet-android/src/index.d.ts | 26 + packages/taler-wallet-android/src/index.js | 284 + .../taler-wallet-android/src/index.js.map | 1 + .../taler-wallet-android/src}/index.ts | 98 +- .../taler-wallet-android/tsconfig.json | 8 +- .../taler-wallet-cli/bin/taler-wallet-cli | 7 + packages/taler-wallet-cli/package.json | 48 + packages/taler-wallet-cli/rollup.config.js | 30 + .../taler-wallet-cli/src}/clk.ts | 0 .../taler-wallet-cli/src/index.ts | 84 +- packages/taler-wallet-cli/tsconfig.json | 30 + packages/taler-wallet-core/.gitignore | 1 + packages/taler-wallet-core/package.json | 81 + packages/taler-wallet-core/rollup.config.js | 31 + .../src/TalerErrorCode.d.ts.map | 1 + .../taler-wallet-core/src}/TalerErrorCode.ts | 3 - .../src/crypto/primitives/kdf.d.ts.map | 1 + .../src}/crypto/primitives/kdf.ts | 0 .../src/crypto/primitives/nacl-fast.d.ts.map | 1 + .../src}/crypto/primitives/nacl-fast.ts | 4 +- .../src/crypto/primitives/sha256.d.ts.map | 1 + .../src}/crypto/primitives/sha256.ts | 0 .../src}/crypto/talerCrypto-test.ts | 8 +- .../src/crypto/talerCrypto.d.ts.map | 1 + .../src}/crypto/talerCrypto.ts | 19 +- .../src/crypto/workers/cryptoApi.d.ts.map | 1 + .../src}/crypto/workers/cryptoApi.ts | 29 +- .../workers/cryptoImplementation.d.ts.map | 1 + .../crypto/workers/cryptoImplementation.ts | 6 +- .../src/crypto/workers/cryptoWorker.d.ts.map | 1 + .../src}/crypto/workers/cryptoWorker.ts | 0 .../crypto/workers/nodeThreadWorker.d.ts.map | 1 + .../src}/crypto/workers/nodeThreadWorker.ts | 0 .../src}/crypto/workers/synchronousWorker.ts | 3 +- {src => packages/taler-wallet-core/src}/db.ts | 9 +- .../src/headless/NodeHttpLib.d.ts.map | 1 + .../src}/headless/NodeHttpLib.ts | 0 .../src}/headless/helpers.ts | 1 + .../taler-wallet-core/src}/i18n/de.po | 0 .../taler-wallet-core/src}/i18n/en-US.po | 0 .../taler-wallet-core/src}/i18n/fr.po | 0 packages/taler-wallet-core/src/i18n/index.ts | 78 + .../taler-wallet-core/src}/i18n/it.po | 0 .../taler-wallet-core/src}/i18n/poheader | 0 .../src}/i18n/strings-prelude | 0 .../taler-wallet-core/src}/i18n/strings.ts | 0 .../taler-wallet-core/src}/i18n/sv.po | 0 .../src}/i18n/taler-wallet-webex.pot | 0 packages/taler-wallet-core/src/index.ts | 75 + .../src/operations/balance.d.ts.map | 1 + .../src}/operations/balance.ts | 0 .../src/operations/errors.d.ts.map | 1 + .../src}/operations/errors.ts | 0 .../src/operations/exchanges.d.ts.map | 1 + .../src}/operations/exchanges.ts | 1 + .../src/operations/pay.d.ts.map | 1 + .../taler-wallet-core/src}/operations/pay.ts | 3 +- .../src/operations/pending.d.ts.map | 1 + .../src}/operations/pending.ts | 0 .../src/operations/recoup.d.ts.map | 1 + .../src}/operations/recoup.ts | 1 + .../src/operations/refresh.d.ts.map | 1 + .../src}/operations/refresh.ts | 3 +- .../src/operations/refund.d.ts.map | 1 + .../src}/operations/refund.ts | 19 +- .../src/operations/reserves.d.ts.map | 1 + .../src}/operations/reserves.ts | 1 + .../src/operations/state.d.ts.map | 1 + .../src}/operations/state.ts | 0 .../src/operations/testing.d.ts.map | 1 + .../src/operations/testing.ts | 156 + .../src/operations/tip.d.ts.map | 1 + .../taler-wallet-core/src}/operations/tip.ts | 1 + .../src/operations/transactions.d.ts.map | 1 + .../src}/operations/transactions.ts | 6 +- .../src/operations/versions.d.ts.map | 1 + .../src}/operations/versions.ts | 0 .../src}/operations/withdraw-test.ts | 0 .../src/operations/withdraw.d.ts.map | 1 + .../src}/operations/withdraw.ts | 51 +- .../src/types/ReserveStatus.d.ts.map | 1 + .../src}/types/ReserveStatus.ts | 0 .../src/types/ReserveTransaction.d.ts.map | 1 + .../src}/types/ReserveTransaction.ts | 0 .../src/types/dbTypes.d.ts.map | 1 + .../taler-wallet-core/src}/types/dbTypes.ts | 403 +- .../src/types/notifications.d.ts.map | 1 + .../src}/types/notifications.ts | 0 .../src/types/pending.d.ts.map | 1 + .../taler-wallet-core/src}/types/pending.ts | 0 .../src}/types/schemacore.ts | 0 .../src/types/talerTypes.d.ts.map | 1 + .../src}/types/talerTypes.ts | 7 +- .../src/types/transactions.d.ts.map | 1 + .../src}/types/transactions.ts | 12 +- .../src}/types/types-test.ts | 0 .../src/types/walletTypes.d.ts.map | 1 + .../src}/types/walletTypes.ts | 6 - .../src/util/RequestThrottler.d.ts.map | 1 + .../src}/util/RequestThrottler.ts | 1 + .../src}/util/amounts-test.ts | 0 .../src/util/amounts.d.ts.map | 1 + .../taler-wallet-core/src}/util/amounts.ts | 1 + .../src/util/assertUnreachable.d.ts.map | 1 + .../src}/util/assertUnreachable.ts | 0 .../src/util/asyncMemo.d.ts.map | 1 + .../taler-wallet-core/src}/util/asyncMemo.ts | 0 .../taler-wallet-core/src}/util/codec-test.ts | 0 .../taler-wallet-core/src/util/codec.d.ts.map | 1 + .../taler-wallet-core/src}/util/codec.ts | 10 +- .../src}/util/helpers-test.ts | 0 .../src/util/helpers.d.ts.map | 1 + .../taler-wallet-core/src}/util/helpers.ts | 1 + .../taler-wallet-core/src/util/http.d.ts.map | 1 + .../taler-wallet-core/src}/util/http.ts | 125 - .../src}/util/libtoolVersion-test.ts | 0 .../src/util/libtoolVersion.d.ts.map | 1 + .../src}/util/libtoolVersion.ts | 0 .../src/util/logging.d.ts.map | 1 + .../taler-wallet-core/src}/util/logging.ts | 14 +- .../taler-wallet-core/src}/util/payto-test.ts | 0 .../taler-wallet-core/src/util/payto.d.ts.map | 1 + .../taler-wallet-core/src}/util/payto.ts | 2 + .../src/util/promiseUtils.d.ts.map | 1 + .../src}/util/promiseUtils.ts | 0 .../taler-wallet-core/src/util/query.d.ts.map | 1 + .../taler-wallet-core/src}/util/query.ts | 45 +- .../src}/util/reserveHistoryUtil-test.ts | 0 .../src/util/reserveHistoryUtil.d.ts.map | 1 + .../src}/util/reserveHistoryUtil.ts | 0 .../src}/util/talerconfig.ts | 0 .../src}/util/taleruri-test.ts | 15 +- .../src/util/taleruri.d.ts.map | 1 + .../taler-wallet-core/src}/util/taleruri.ts | 14 +- .../taler-wallet-core/src/util/testvectors.ts | 36 + .../taler-wallet-core/src/util/time.d.ts.map | 1 + .../taler-wallet-core/src}/util/time.ts | 0 .../taler-wallet-core/src/util/timer.d.ts.map | 1 + .../taler-wallet-core/src}/util/timer.ts | 13 +- .../taler-wallet-core/src/util/url.d.ts.map | 1 + packages/taler-wallet-core/src/util/url.ts | 74 + .../taler-wallet-core/src}/util/wire.ts | 2 +- .../taler-wallet-core/src}/wallet-test.ts | 0 .../taler-wallet-core/src/wallet.d.ts.map | 1 + .../taler-wallet-core/src}/wallet.ts | 5 +- .../src/walletCoreApiHandler.d.ts.map | 1 + .../src}/walletCoreApiHandler.ts | 17 +- packages/taler-wallet-core/tsconfig.json | 31 + .../taler-wallet-webextension/package.json | 41 + .../rollup.config.js | 0 .../src}/background.ts | 0 .../src/browserCryptoWorkerFactory.js | 44 + .../src/browserCryptoWorkerFactory.js.map | 1 + .../src/browserCryptoWorkerFactory.ts | 43 + .../src/browserHttpLib.ts | 129 + .../src}/browserWorkerEntry.ts | 2 +- .../src}/chromeBadge.ts | 0 .../taler-wallet-webextension/src/compat.js | 61 + .../taler-wallet-webextension/src}/compat.ts | 0 .../src}/i18n-test.tsx | 3 +- .../taler-wallet-webextension/src}/i18n.tsx | 68 +- .../src}/pageEntryPoint.ts | 0 .../src}/pages/pay.tsx | 14 +- .../src}/pages/payback.tsx | 0 .../src}/pages/popup.tsx | 33 +- .../src}/pages/refund.tsx | 4 +- .../src}/pages/reset-required.tsx | 2 +- .../src}/pages/return-coins.tsx | 0 .../src}/pages/tip.tsx | 4 +- .../src}/pages/welcome.tsx | 4 +- .../src}/pages/withdraw.tsx | 0 .../src}/permissions.ts | 0 .../src}/renderHtml.tsx | 17 +- .../taler-wallet-webextension/src}/wxApi.ts | 101 +- .../src}/wxBackend.ts | 43 +- .../taler-wallet-webextension/tsconfig.json | 19 + .../webextension}/manifest.json | 0 .../webextension}/pack.sh | 0 .../webextension}/static/add-auditor.html | 0 .../webextension}/static/auditors.html | 0 .../webextension}/static/background.html | 0 .../webextension}/static/benchmark.html | 0 .../webextension}/static/img/icon.png | Bin .../static/img/logo-2015-medium.png | Bin .../webextension}/static/img/logo.png | 0 .../webextension}/static/img/spinner-bars.svg | 0 .../webextension}/static/pay.html | 0 .../webextension}/static/payback.html | 0 .../webextension}/static/popup.html | 0 .../webextension}/static/refund.html | 0 .../webextension}/static/reset-required.html | 0 .../webextension}/static/return-coins.html | 0 .../webextension}/static/style/popup.css | 0 .../webextension}/static/style/pure.css | 0 .../webextension}/static/style/wallet.css | 0 .../webextension}/static/tip.html | 0 .../webextension}/static/welcome.html | 0 .../webextension}/static/withdraw.html | 0 pnpm-lock.yaml | 4749 +++++++++++++++++ pnpm-workspace.yaml | 2 + src/index.ts | 22 - src/webex/pages/add-auditor.tsx | 135 - src/webex/pages/auditors.tsx | 161 - src/webex/pages/benchmark.tsx | 104 - yarn.lock | 4290 --------------- 252 files changed, 8871 insertions(+), 9262 deletions(-) delete mode 100644 .yarnrc delete mode 100755 bin/taler-wallet-cli delete mode 100644 packages/README delete mode 100644 packages/idb-bridge/.vscode/settings.json create mode 100644 packages/idb-bridge/rollup.config.js create mode 100644 packages/idb-bridge/src/idbtypes.ts delete mode 100644 packages/idb-bridge/yarn.lock create mode 100644 packages/taler-wallet-android/package.json create mode 100644 packages/taler-wallet-android/rollup.config.js create mode 100644 packages/taler-wallet-android/src/index.d.ts create mode 100644 packages/taler-wallet-android/src/index.js create mode 100644 packages/taler-wallet-android/src/index.js.map rename {src/android => packages/taler-wallet-android/src}/index.ts (76%) rename tsconfig.json => packages/taler-wallet-android/tsconfig.json (79%) create mode 100755 packages/taler-wallet-cli/bin/taler-wallet-cli create mode 100644 packages/taler-wallet-cli/package.json create mode 100644 packages/taler-wallet-cli/rollup.config.js rename {src/headless => packages/taler-wallet-cli/src}/clk.ts (100%) rename src/headless/taler-wallet-cli.ts => packages/taler-wallet-cli/src/index.ts (88%) create mode 100644 packages/taler-wallet-cli/tsconfig.json create mode 100644 packages/taler-wallet-core/.gitignore create mode 100644 packages/taler-wallet-core/package.json create mode 100644 packages/taler-wallet-core/rollup.config.js create mode 100644 packages/taler-wallet-core/src/TalerErrorCode.d.ts.map rename {src => packages/taler-wallet-core/src}/TalerErrorCode.ts (99%) create mode 100644 packages/taler-wallet-core/src/crypto/primitives/kdf.d.ts.map rename {src => packages/taler-wallet-core/src}/crypto/primitives/kdf.ts (100%) create mode 100644 packages/taler-wallet-core/src/crypto/primitives/nacl-fast.d.ts.map rename {src => packages/taler-wallet-core/src}/crypto/primitives/nacl-fast.ts (99%) create mode 100644 packages/taler-wallet-core/src/crypto/primitives/sha256.d.ts.map rename {src => packages/taler-wallet-core/src}/crypto/primitives/sha256.ts (100%) rename {src => packages/taler-wallet-core/src}/crypto/talerCrypto-test.ts (97%) create mode 100644 packages/taler-wallet-core/src/crypto/talerCrypto.d.ts.map rename {src => packages/taler-wallet-core/src}/crypto/talerCrypto.ts (96%) create mode 100644 packages/taler-wallet-core/src/crypto/workers/cryptoApi.d.ts.map rename {src => packages/taler-wallet-core/src}/crypto/workers/cryptoApi.ts (92%) create mode 100644 packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.d.ts.map rename {src => packages/taler-wallet-core/src}/crypto/workers/cryptoImplementation.ts (99%) create mode 100644 packages/taler-wallet-core/src/crypto/workers/cryptoWorker.d.ts.map rename {src => packages/taler-wallet-core/src}/crypto/workers/cryptoWorker.ts (100%) create mode 100644 packages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.d.ts.map rename {src => packages/taler-wallet-core/src}/crypto/workers/nodeThreadWorker.ts (100%) rename {src => packages/taler-wallet-core/src}/crypto/workers/synchronousWorker.ts (97%) rename {src => packages/taler-wallet-core/src}/db.ts (89%) create mode 100644 packages/taler-wallet-core/src/headless/NodeHttpLib.d.ts.map rename {src => packages/taler-wallet-core/src}/headless/NodeHttpLib.ts (100%) rename {src => packages/taler-wallet-core/src}/headless/helpers.ts (98%) rename {src => packages/taler-wallet-core/src}/i18n/de.po (100%) rename {src => packages/taler-wallet-core/src}/i18n/en-US.po (100%) rename {src => packages/taler-wallet-core/src}/i18n/fr.po (100%) create mode 100644 packages/taler-wallet-core/src/i18n/index.ts rename {src => packages/taler-wallet-core/src}/i18n/it.po (100%) rename {src => packages/taler-wallet-core/src}/i18n/poheader (100%) rename {src => packages/taler-wallet-core/src}/i18n/strings-prelude (100%) rename {src => packages/taler-wallet-core/src}/i18n/strings.ts (100%) rename {src => packages/taler-wallet-core/src}/i18n/sv.po (100%) rename {src => packages/taler-wallet-core/src}/i18n/taler-wallet-webex.pot (100%) create mode 100644 packages/taler-wallet-core/src/index.ts create mode 100644 packages/taler-wallet-core/src/operations/balance.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/balance.ts (100%) create mode 100644 packages/taler-wallet-core/src/operations/errors.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/errors.ts (100%) create mode 100644 packages/taler-wallet-core/src/operations/exchanges.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/exchanges.ts (99%) create mode 100644 packages/taler-wallet-core/src/operations/pay.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/pay.ts (99%) create mode 100644 packages/taler-wallet-core/src/operations/pending.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/pending.ts (100%) create mode 100644 packages/taler-wallet-core/src/operations/recoup.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/recoup.ts (99%) create mode 100644 packages/taler-wallet-core/src/operations/refresh.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/refresh.ts (99%) create mode 100644 packages/taler-wallet-core/src/operations/refund.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/refund.ts (96%) create mode 100644 packages/taler-wallet-core/src/operations/reserves.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/reserves.ts (99%) create mode 100644 packages/taler-wallet-core/src/operations/state.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/state.ts (100%) create mode 100644 packages/taler-wallet-core/src/operations/testing.d.ts.map create mode 100644 packages/taler-wallet-core/src/operations/testing.ts create mode 100644 packages/taler-wallet-core/src/operations/tip.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/tip.ts (99%) create mode 100644 packages/taler-wallet-core/src/operations/transactions.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/transactions.ts (99%) create mode 100644 packages/taler-wallet-core/src/operations/versions.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/versions.ts (100%) rename {src => packages/taler-wallet-core/src}/operations/withdraw-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/operations/withdraw.d.ts.map rename {src => packages/taler-wallet-core/src}/operations/withdraw.ts (96%) create mode 100644 packages/taler-wallet-core/src/types/ReserveStatus.d.ts.map rename {src => packages/taler-wallet-core/src}/types/ReserveStatus.ts (100%) create mode 100644 packages/taler-wallet-core/src/types/ReserveTransaction.d.ts.map rename {src => packages/taler-wallet-core/src}/types/ReserveTransaction.ts (100%) create mode 100644 packages/taler-wallet-core/src/types/dbTypes.d.ts.map rename {src => packages/taler-wallet-core/src}/types/dbTypes.ts (85%) create mode 100644 packages/taler-wallet-core/src/types/notifications.d.ts.map rename {src => packages/taler-wallet-core/src}/types/notifications.ts (100%) create mode 100644 packages/taler-wallet-core/src/types/pending.d.ts.map rename {src => packages/taler-wallet-core/src}/types/pending.ts (100%) rename {src => packages/taler-wallet-core/src}/types/schemacore.ts (100%) create mode 100644 packages/taler-wallet-core/src/types/talerTypes.d.ts.map rename {src => packages/taler-wallet-core/src}/types/talerTypes.ts (99%) create mode 100644 packages/taler-wallet-core/src/types/transactions.d.ts.map rename {src => packages/taler-wallet-core/src}/types/transactions.ts (98%) rename {src => packages/taler-wallet-core/src}/types/types-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/types/walletTypes.d.ts.map rename {src => packages/taler-wallet-core/src}/types/walletTypes.ts (99%) create mode 100644 packages/taler-wallet-core/src/util/RequestThrottler.d.ts.map rename {src => packages/taler-wallet-core/src}/util/RequestThrottler.ts (99%) rename {src => packages/taler-wallet-core/src}/util/amounts-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/amounts.d.ts.map rename {src => packages/taler-wallet-core/src}/util/amounts.ts (99%) create mode 100644 packages/taler-wallet-core/src/util/assertUnreachable.d.ts.map rename {src => packages/taler-wallet-core/src}/util/assertUnreachable.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/asyncMemo.d.ts.map rename {src => packages/taler-wallet-core/src}/util/asyncMemo.ts (100%) rename {src => packages/taler-wallet-core/src}/util/codec-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/codec.d.ts.map rename {src => packages/taler-wallet-core/src}/util/codec.ts (97%) rename {src => packages/taler-wallet-core/src}/util/helpers-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/helpers.d.ts.map rename {src => packages/taler-wallet-core/src}/util/helpers.ts (99%) create mode 100644 packages/taler-wallet-core/src/util/http.d.ts.map rename {src => packages/taler-wallet-core/src}/util/http.ts (63%) rename {src => packages/taler-wallet-core/src}/util/libtoolVersion-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/libtoolVersion.d.ts.map rename {src => packages/taler-wallet-core/src}/util/libtoolVersion.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/logging.d.ts.map rename {src => packages/taler-wallet-core/src}/util/logging.ts (91%) rename {src => packages/taler-wallet-core/src}/util/payto-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/payto.d.ts.map rename {src => packages/taler-wallet-core/src}/util/payto.ts (97%) create mode 100644 packages/taler-wallet-core/src/util/promiseUtils.d.ts.map rename {src => packages/taler-wallet-core/src}/util/promiseUtils.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/query.d.ts.map rename {src => packages/taler-wallet-core/src}/util/query.ts (91%) rename {src => packages/taler-wallet-core/src}/util/reserveHistoryUtil-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/reserveHistoryUtil.d.ts.map rename {src => packages/taler-wallet-core/src}/util/reserveHistoryUtil.ts (100%) rename {src => packages/taler-wallet-core/src}/util/talerconfig.ts (100%) rename {src => packages/taler-wallet-core/src}/util/taleruri-test.ts (94%) create mode 100644 packages/taler-wallet-core/src/util/taleruri.d.ts.map rename {src => packages/taler-wallet-core/src}/util/taleruri.ts (96%) create mode 100644 packages/taler-wallet-core/src/util/testvectors.ts create mode 100644 packages/taler-wallet-core/src/util/time.d.ts.map rename {src => packages/taler-wallet-core/src}/util/time.ts (100%) create mode 100644 packages/taler-wallet-core/src/util/timer.d.ts.map rename {src => packages/taler-wallet-core/src}/util/timer.ts (96%) create mode 100644 packages/taler-wallet-core/src/util/url.d.ts.map create mode 100644 packages/taler-wallet-core/src/util/url.ts rename {src => packages/taler-wallet-core/src}/util/wire.ts (97%) rename {src => packages/taler-wallet-core/src}/wallet-test.ts (100%) create mode 100644 packages/taler-wallet-core/src/wallet.d.ts.map rename {src => packages/taler-wallet-core/src}/wallet.ts (99%) create mode 100644 packages/taler-wallet-core/src/walletCoreApiHandler.d.ts.map rename {src => packages/taler-wallet-core/src}/walletCoreApiHandler.ts (96%) create mode 100644 packages/taler-wallet-core/tsconfig.json create mode 100644 packages/taler-wallet-webextension/package.json rename rollup.config.js => packages/taler-wallet-webextension/rollup.config.js (100%) rename {src/webex => packages/taler-wallet-webextension/src}/background.ts (100%) create mode 100644 packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.js create mode 100644 packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.js.map create mode 100644 packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.ts create mode 100644 packages/taler-wallet-webextension/src/browserHttpLib.ts rename {src/crypto/workers => packages/taler-wallet-webextension/src}/browserWorkerEntry.ts (96%) rename {src/webex => packages/taler-wallet-webextension/src}/chromeBadge.ts (100%) create mode 100644 packages/taler-wallet-webextension/src/compat.js rename {src/webex => packages/taler-wallet-webextension/src}/compat.ts (100%) rename {src/webex => packages/taler-wallet-webextension/src}/i18n-test.tsx (94%) rename {src/webex => packages/taler-wallet-webextension/src}/i18n.tsx (77%) rename {src/webex => packages/taler-wallet-webextension/src}/pageEntryPoint.ts (100%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/pay.tsx (89%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/payback.tsx (100%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/popup.tsx (94%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/refund.tsx (96%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/reset-required.tsx (99%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/return-coins.tsx (100%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/tip.tsx (95%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/welcome.tsx (97%) rename {src/webex => packages/taler-wallet-webextension/src}/pages/withdraw.tsx (100%) rename {src/webex => packages/taler-wallet-webextension/src}/permissions.ts (100%) rename {src/webex => packages/taler-wallet-webextension/src}/renderHtml.tsx (94%) rename {src/webex => packages/taler-wallet-webextension/src}/wxApi.ts (67%) rename {src/webex => packages/taler-wallet-webextension/src}/wxBackend.ts (93%) create mode 100644 packages/taler-wallet-webextension/tsconfig.json rename {webextension => packages/taler-wallet-webextension/webextension}/manifest.json (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/pack.sh (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/add-auditor.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/auditors.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/background.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/benchmark.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/img/icon.png (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/img/logo-2015-medium.png (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/img/logo.png (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/img/spinner-bars.svg (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/pay.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/payback.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/popup.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/refund.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/reset-required.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/return-coins.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/style/popup.css (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/style/pure.css (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/style/wallet.css (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/tip.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/welcome.html (100%) rename {webextension => packages/taler-wallet-webextension/webextension}/static/withdraw.html (100%) create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml delete mode 100644 src/index.ts delete mode 100644 src/webex/pages/add-auditor.tsx delete mode 100644 src/webex/pages/auditors.tsx delete mode 100644 src/webex/pages/benchmark.tsx delete mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 182fa2462..91b045338 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,10 @@ .idea/ .nyc_output/ dist/ +lib/ +node_modules/ -# Even though node_modules are tracked in git, -# per default we don't want them to show up in git status -node_modules +tsconfig.tsbuildinfo *.swp diff --git a/.yarnrc b/.yarnrc deleted file mode 100644 index fe3df9c1a..000000000 --- a/.yarnrc +++ /dev/null @@ -1,2 +0,0 @@ -yarn-offline-mirror "./npm-packages-offline-cache" -yarn-offline-mirror-pruning true diff --git a/Makefile b/Makefile index 87a7f0573..8d31bfc1a 100644 --- a/Makefile +++ b/Makefile @@ -9,9 +9,10 @@ nyc = node_modules/nyc/bin/nyc.js include config.mk -.PHONY: tsc -tsc: yarn-install - $(tsc) +.PHONY: compile +compile: + pnpm i + pnpm run compile .PHONY: dist dist: @@ -24,30 +25,22 @@ typedoc: .PHONY: clean clean: - rm -rf dist/ config.mk + pnpm run clean .PHONY: submodules-update submodules-update: git submodule update --recursive --remote .PHONY: check -check: tsc yarn-install - $(ava) - -.PHONY: coverage -coverage: tsc yarn-install - $(nyc) --all $(ava) 'build/**/*-test.js' - -.PHONY: yarn-install -yarn-install: - $(yarn) install +check: compile + pnpm run check .PHONY: webextensions webextensions: rollup ./webextension/pack.sh .PHONY: i18n -i18n: yarn-install +i18n: compile # extract translatable strings find $(src) \( -name '*.ts' -or -name '*.tsx' \) ! -name '*.d.ts' \ | xargs node $(pogen) \ @@ -75,14 +68,19 @@ warn-noprefix: @echo "no prefix configured, did you run ./configure?" install: warn-noprefix else +install_target = $(prefix)/lib/taler-wallet-cli .PHONY: install -install: tsc - @echo "installing to" $(prefix) - $(yarn) global add file://$(CURDIR) --prefix $(prefix) +install: # compile + install -d $(install_target)/node_modules/taler-wallet-cli + install -d $(install_target)/node_modules/taler-wallet-cli/bin + install -d $(install_target)/node_modules/taler-wallet-cli/dist + install ./packages/taler-wallet-cli/dist/taler-wallet-cli.js $(install_target)/node_modules/taler-wallet-cli/dist/ + install ./packages/taler-wallet-cli/bin/taler-wallet-cli $(install_target)/node_modules/taler-wallet-cli/bin/ + ln -sft $(prefix)/bin $(install_target)/node_modules/taler-wallet-cli/bin/taler-wallet-cli endif .PHONY: rollup -rollup: yarn-install +rollup: compile ./node_modules/.bin/rollup -c .PHONY: lint diff --git a/bin/taler-wallet-cli b/bin/taler-wallet-cli deleted file mode 100755 index 04aef8922..000000000 --- a/bin/taler-wallet-cli +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -require('source-map-support').install(); -require('../dist/node/headless/taler-wallet-cli.js') diff --git a/package.json b/package.json index 7ca3b1e30..538ed1134 100644 --- a/package.json +++ b/package.json @@ -1,94 +1,8 @@ { - "name": "taler-wallet", - "version": "0.6.12", - "description": "", - "engines": { - "node": ">=0.12.0" - }, - "repository": { - "type": "git", - "url": "git://git.taler.net/wallet-core.git" - }, - "author": "Florian Dold", - "license": "GPL-3.0", - "bin": { - "taler-wallet-cli": "./bin/taler-wallet-cli" - }, + "private": true, "scripts": { - "build": "make tsc", - "pretty": "prettier --config .prettierrc --write src", - "test": "ava", - "coverage": "nyc ava" - }, - "files": [ - "AUTHORS", - "README", - "COPYING", - "bin/", - "dist/node", - "src/" - ], - "devDependencies": { - "@ava/typescript": "^1.1.1", - "@rollup/plugin-commonjs": "^14.0.0", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-node-resolve": "^8.4.0", - "@rollup/plugin-replace": "^2.3.3", - "@rollup/plugin-typescript": "^5.0.2", - "@types/chrome": "^0.0.103", - "@types/enzyme": "^3.10.5", - "@types/enzyme-adapter-react-16": "^1.0.6", - "@types/node": "^14.0.23", - "@types/react": "^16.9.6", - "@types/react-dom": "^16.9.6", - "@typescript-eslint/eslint-plugin": "^3.6.1", - "@typescript-eslint/parser": "^3.6.1", - "ava": "^3.10.1", - "enzyme": "^3.11.0", - "enzyme-adapter-react-16": "^1.15.2", - "eslint": "^7.4.0", - "eslint-config-airbnb-typescript": "^8.0.2", - "eslint-plugin-import": "^2.22.0", - "eslint-plugin-jsx-a11y": "^6.3.1", - "eslint-plugin-react": "^7.20.3", - "eslint-plugin-react-hooks": "^4.0.8", - "jed": "^1.1.1", - "moment": "^2.27.0", - "nyc": "^15.1.0", - "po2json": "^0.4.5", - "pogen": "^0.0.5", - "prettier": "^2.0.5", - "react": "^16.13.1", - "react-dom": "^16.13.1", - "rollup": "^2.21.0", - "rollup-plugin-sourcemaps": "^0.6.2", - "rollup-plugin-terser": "^6.1.0", - "source-map-resolve": "^0.6.0", - "structured-clone": "^0.2.2", - "typedoc": "^0.17.8", - "typescript": "^3.9.7" - }, - "dependencies": { - "axios": "^0.19.2", - "big-integer": "^1.6.48", - "idb-bridge": "^0.0.15", - "qrcode-generator": "^1.4.3", - "source-map-support": "^0.5.19", - "tslib": "^2.0.0" - }, - "ava": { - "files": [ - "src/**/*-test.*" - ], - "typescript": { - "extensions": [ - "js", - "ts", - "tsx" - ], - "rewritePaths": { - "src/": "dist/node/" - } - } + "compile": "pnpm run --filter '{packages}' compile", + "clean": "pnpm run --filter '{packages}' clean", + "pretty": "pnpm run --filter '{packages}' pretty" } } diff --git a/packages/README b/packages/README deleted file mode 100644 index c06e9941a..000000000 --- a/packages/README +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains NPM packages that are used by the wallet. They are -uploaded to the registry. diff --git a/packages/idb-bridge/.vscode/settings.json b/packages/idb-bridge/.vscode/settings.json deleted file mode 100644 index ec71f9aae..000000000 --- a/packages/idb-bridge/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "editor.tabSize": 2, - "typescript.tsdk": "node_modules/typescript/lib" -} \ No newline at end of file diff --git a/packages/idb-bridge/package.json b/packages/idb-bridge/package.json index b0aa74a71..b2c22921f 100644 --- a/packages/idb-bridge/package.json +++ b/packages/idb-bridge/package.json @@ -2,17 +2,31 @@ "name": "idb-bridge", "version": "0.0.15", "description": "IndexedDB implementation that uses SQLite3 as storage", - "main": "./build/index.js", - "types": "./build/index.d.ts", + "main": "./dist/idb-bridge.js", + "module": "./lib/index.js", + "types": "./lib/index.d.ts", "author": "Florian Dold", "license": "AGPL-3.0-or-later", "private": false, "scripts": { "test": "tsc && ava", - "build": "tsc" + "compile": "tsc && rollup -c", + "clean": "rimraf dist lib", + "pretty": "prettier --config ../../.prettierrc --write src" }, "devDependencies": { - "ava": "2.3.0", + "@rollup/plugin-typescript": "^5.0.2", + "ava": "^3.10.1", + "esm": "^3.2.25", + "rimraf": "^3.0.2", + "rollup": "^2.23.0", "typescript": "^3.7.0" + }, + "dependencies": { + "@types/node": "^14.0.27", + "tslib": "^2.0.0" + }, + "ava": { + "require": ["esm"] } } diff --git a/packages/idb-bridge/rollup.config.js b/packages/idb-bridge/rollup.config.js new file mode 100644 index 000000000..76214f22d --- /dev/null +++ b/packages/idb-bridge/rollup.config.js @@ -0,0 +1,31 @@ +// rollup.config.js +import commonjs from "@rollup/plugin-commonjs"; +import nodeResolve from "@rollup/plugin-node-resolve"; +import json from "@rollup/plugin-json"; +import builtins from "builtin-modules"; +import pkg from "./package.json"; + +export default { + input: "lib/index.js", + output: { + file: pkg.main, + format: "cjs", + sourcemap: true + }, + external: builtins, + plugins: [ + nodeResolve({ + preferBuiltins: true, + }), + + commonjs({ + include: [/node_modules/], + extensions: [".js", ".ts"], + ignoreGlobal: false, + sourceMap: false, + }), + + json(), + ], +} + diff --git a/packages/idb-bridge/src/BridgeIDBCursor.ts b/packages/idb-bridge/src/BridgeIDBCursor.ts index ebf71da0d..a85f41f2b 100644 --- a/packages/idb-bridge/src/BridgeIDBCursor.ts +++ b/packages/idb-bridge/src/BridgeIDBCursor.ts @@ -16,9 +16,9 @@ permissions and limitations under the License. */ -import BridgeIDBKeyRange from "./BridgeIDBKeyRange"; -import BridgeIDBObjectStore from "./BridgeIDBObjectStore"; -import BridgeIDBRequest from "./BridgeIDBRequest"; +import { BridgeIDBKeyRange } from "./BridgeIDBKeyRange"; +import { BridgeIDBObjectStore } from "./BridgeIDBObjectStore"; +import { BridgeIDBRequest } from "./BridgeIDBRequest"; import compareKeys from "./util/cmp"; import { DataError, @@ -42,7 +42,7 @@ import { RecordStoreRequest, StoreLevel, } from "./backend-interface"; -import BridgeIDBFactory from "./BridgeIDBFactory"; +import { BridgeIDBFactory } from "./BridgeIDBFactory"; /** * http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#cursor @@ -136,7 +136,8 @@ export class BridgeIDBCursor { console.log( `iterating cursor os=${this._objectStoreName},idx=${this._indexName}`, ); - BridgeIDBFactory.enableTracing && console.log("cursor type ", this.toString()); + BridgeIDBFactory.enableTracing && + console.log("cursor type ", this.toString()); const recordGetRequest: RecordGetRequest = { direction: this.direction, indexName: this._indexName, @@ -232,7 +233,7 @@ export class BridgeIDBCursor { const operation = async () => { if (BridgeIDBFactory.enableTracing) { - console.log("updating at cursor") + console.log("updating at cursor"); } const { btx } = this.source._confirmActiveTransaction(); await this._backend.storeRecord(btx, storeReq); @@ -359,5 +360,3 @@ export class BridgeIDBCursor { return "[object IDBCursor]"; } } - -export default BridgeIDBCursor; diff --git a/packages/idb-bridge/src/BridgeIDBCursorWithValue.ts b/packages/idb-bridge/src/BridgeIDBCursorWithValue.ts index d75bd21e6..8561879cf 100644 --- a/packages/idb-bridge/src/BridgeIDBCursorWithValue.ts +++ b/packages/idb-bridge/src/BridgeIDBCursorWithValue.ts @@ -14,7 +14,7 @@ permissions and limitations under the License. */ -import BridgeIDBCursor from "./BridgeIDBCursor"; +import { BridgeIDBCursor } from "./BridgeIDBCursor"; import { CursorRange, CursorSource, @@ -22,7 +22,7 @@ import { Value, } from "./util/types"; -class BridgeIDBCursorWithValue extends BridgeIDBCursor { +export class BridgeIDBCursorWithValue extends BridgeIDBCursor { get value(): Value { return this._value; } @@ -46,5 +46,3 @@ class BridgeIDBCursorWithValue extends BridgeIDBCursor { return "[object IDBCursorWithValue]"; } } - -export default BridgeIDBCursorWithValue; diff --git a/packages/idb-bridge/src/BridgeIDBDatabase.ts b/packages/idb-bridge/src/BridgeIDBDatabase.ts index bc2e8acca..a22ad5400 100644 --- a/packages/idb-bridge/src/BridgeIDBDatabase.ts +++ b/packages/idb-bridge/src/BridgeIDBDatabase.ts @@ -14,7 +14,7 @@ * permissions and limitations under the License. */ -import BridgeIDBTransaction from "./BridgeIDBTransaction"; +import { BridgeIDBTransaction } from "./BridgeIDBTransaction"; import { ConstraintError, InvalidAccessError, @@ -61,9 +61,8 @@ const confirmActiveVersionchangeTransaction = (database: BridgeIDBDatabase) => { return transaction; }; - // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-interface -class BridgeIDBDatabase extends FakeEventTarget { +export class BridgeIDBDatabase extends FakeEventTarget { _closePending = false; _closed = false; _runningVersionchangeTransaction = false; @@ -152,7 +151,12 @@ class BridgeIDBDatabase extends FakeEventTarget { throw new InvalidAccessError(); } - transaction._backend.createObjectStore(backendTx, name, keyPath, autoIncrement); + transaction._backend.createObjectStore( + backendTx, + name, + keyPath, + autoIncrement, + ); this._schema = this._backend.getSchema(this._backendConnection); @@ -212,7 +216,12 @@ class BridgeIDBDatabase extends FakeEventTarget { } } - const tx = new BridgeIDBTransaction(storeNames, mode, this, backendTransaction); + const tx = new BridgeIDBTransaction( + storeNames, + mode, + this, + backendTransaction, + ); this._transactions.push(tx); queueTask(() => tx._start()); return tx; @@ -236,5 +245,3 @@ class BridgeIDBDatabase extends FakeEventTarget { return "[object IDBDatabase]"; } } - -export default BridgeIDBDatabase; diff --git a/packages/idb-bridge/src/BridgeIDBFactory.ts b/packages/idb-bridge/src/BridgeIDBFactory.ts index 0fbcd7630..7002222d8 100644 --- a/packages/idb-bridge/src/BridgeIDBFactory.ts +++ b/packages/idb-bridge/src/BridgeIDBFactory.ts @@ -15,9 +15,9 @@ * permissions and limitations under the License. */ -import BridgeIDBDatabase from "./BridgeIDBDatabase"; -import BridgeIDBOpenDBRequest from "./BridgeIDBOpenDBRequest"; -import BridgeIDBVersionChangeEvent from "./BridgeIDBVersionChangeEvent"; +import { BridgeIDBDatabase } from "./BridgeIDBDatabase"; +import { BridgeIDBOpenDBRequest } from "./BridgeIDBOpenDBRequest"; +import { BridgeIDBVersionChangeEvent } from "./BridgeIDBVersionChangeEvent"; import compareKeys from "./util/cmp"; import enforceRange from "./util/enforceRange"; import { AbortError, VersionError } from "./util/errors"; @@ -44,7 +44,7 @@ export class BridgeIDBFactory { queueTask(async () => { const databases = await this.backend.getDatabases(); - const dbInfo = databases.find(x => x.name == name); + const dbInfo = databases.find((x) => x.name == name); if (!dbInfo) { // Database already doesn't exist, success! const event = new BridgeIDBVersionChangeEvent("success", { @@ -219,8 +219,6 @@ export class BridgeIDBFactory { } private _anyOpen(): boolean { - return this.connections.some(c => !c._closed && !c._closePending); + return this.connections.some((c) => !c._closed && !c._closePending); } } - -export default BridgeIDBFactory; diff --git a/packages/idb-bridge/src/BridgeIDBIndex.ts b/packages/idb-bridge/src/BridgeIDBIndex.ts index 5be80ba71..3c1b39435 100644 --- a/packages/idb-bridge/src/BridgeIDBIndex.ts +++ b/packages/idb-bridge/src/BridgeIDBIndex.ts @@ -15,11 +15,11 @@ permissions and limitations under the License. */ -import BridgeIDBCursor from "./BridgeIDBCursor"; -import BridgeIDBCursorWithValue from "./BridgeIDBCursorWithValue"; -import BridgeIDBKeyRange from "./BridgeIDBKeyRange"; -import BridgeIDBObjectStore from "./BridgeIDBObjectStore"; -import BridgeIDBRequest from "./BridgeIDBRequest"; +import { BridgeIDBCursor } from "./BridgeIDBCursor"; +import { BridgeIDBCursorWithValue } from "./BridgeIDBCursorWithValue"; +import { BridgeIDBKeyRange } from "./BridgeIDBKeyRange"; +import { BridgeIDBObjectStore } from "./BridgeIDBObjectStore"; +import { BridgeIDBRequest } from "./BridgeIDBRequest"; import { ConstraintError, InvalidStateError, @@ -27,7 +27,7 @@ import { } from "./util/errors"; import { BridgeIDBCursorDirection, Key, KeyPath } from "./util/types"; import valueToKey from "./util/valueToKey"; -import BridgeIDBTransaction from "./BridgeIDBTransaction"; +import { BridgeIDBTransaction } from "./BridgeIDBTransaction"; import { Schema, Backend, @@ -59,15 +59,18 @@ export class BridgeIDBIndex { } get keyPath(): KeyPath { - return this._schema.objectStores[this.objectStore.name].indexes[this._name].keyPath; + return this._schema.objectStores[this.objectStore.name].indexes[this._name] + .keyPath; } get multiEntry(): boolean { - return this._schema.objectStores[this.objectStore.name].indexes[this._name].multiEntry; + return this._schema.objectStores[this.objectStore.name].indexes[this._name] + .multiEntry; } get unique(): boolean { - return this._schema.objectStores[this.objectStore.name].indexes[this._name].unique; + return this._schema.objectStores[this.objectStore.name].indexes[this._name] + .unique; } get _backend(): Backend { @@ -305,7 +308,6 @@ export class BridgeIDBIndex { operation, source: this, }); - } public toString() { diff --git a/packages/idb-bridge/src/BridgeIDBKeyRange.ts b/packages/idb-bridge/src/BridgeIDBKeyRange.ts index 4055e092a..43f59fb14 100644 --- a/packages/idb-bridge/src/BridgeIDBKeyRange.ts +++ b/packages/idb-bridge/src/BridgeIDBKeyRange.ts @@ -21,7 +21,7 @@ import { Key } from "./util/types"; import valueToKey from "./util/valueToKey"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#range-concept -class BridgeIDBKeyRange { +export class BridgeIDBKeyRange { public static only(value: Key) { if (arguments.length === 0) { throw new TypeError(); @@ -128,5 +128,3 @@ class BridgeIDBKeyRange { return BridgeIDBKeyRange.only(key); } } - -export default BridgeIDBKeyRange; diff --git a/packages/idb-bridge/src/BridgeIDBObjectStore.ts b/packages/idb-bridge/src/BridgeIDBObjectStore.ts index bb84b4454..a32c29275 100644 --- a/packages/idb-bridge/src/BridgeIDBObjectStore.ts +++ b/packages/idb-bridge/src/BridgeIDBObjectStore.ts @@ -15,12 +15,12 @@ permissions and limitations under the License. */ -import BridgeIDBCursor from "./BridgeIDBCursor"; -import BridgeIDBCursorWithValue from "./BridgeIDBCursorWithValue"; -import BridgeIDBIndex from "./BridgeIDBIndex"; -import BridgeIDBKeyRange from "./BridgeIDBKeyRange"; -import BridgeIDBRequest from "./BridgeIDBRequest"; -import BridgeIDBTransaction from "./BridgeIDBTransaction"; +import { BridgeIDBCursor } from "./BridgeIDBCursor"; +import { BridgeIDBCursorWithValue } from "./BridgeIDBCursorWithValue"; +import { BridgeIDBIndex } from "./BridgeIDBIndex"; +import { BridgeIDBKeyRange } from "./BridgeIDBKeyRange"; +import { BridgeIDBRequest } from "./BridgeIDBRequest"; +import { BridgeIDBTransaction } from "./BridgeIDBTransaction"; import { ConstraintError, @@ -44,10 +44,10 @@ import { ResultLevel, StoreLevel, } from "./backend-interface"; -import BridgeIDBFactory from "./BridgeIDBFactory"; +import { BridgeIDBFactory } from "./BridgeIDBFactory"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#object-store -class BridgeIDBObjectStore { +export class BridgeIDBObjectStore { _indexesCache: Map = new Map(); transaction: BridgeIDBTransaction; @@ -455,5 +455,3 @@ class BridgeIDBObjectStore { return "[object IDBObjectStore]"; } } - -export default BridgeIDBObjectStore; diff --git a/packages/idb-bridge/src/BridgeIDBOpenDBRequest.ts b/packages/idb-bridge/src/BridgeIDBOpenDBRequest.ts index 7b636193f..71a6495e5 100644 --- a/packages/idb-bridge/src/BridgeIDBOpenDBRequest.ts +++ b/packages/idb-bridge/src/BridgeIDBOpenDBRequest.ts @@ -15,22 +15,20 @@ permissions and limitations under the License. */ -import BridgeIDBRequest from "./BridgeIDBRequest"; +import { BridgeIDBRequest } from "./BridgeIDBRequest"; import { EventCallback } from "./util/types"; -class BridgeIDBOpenDBRequest extends BridgeIDBRequest { - public onupgradeneeded: EventCallback | null = null; - public onblocked: EventCallback | null = null; +export class BridgeIDBOpenDBRequest extends BridgeIDBRequest { + public onupgradeneeded: EventCallback | null = null; + public onblocked: EventCallback | null = null; - constructor() { - super(); - // https://www.w3.org/TR/IndexedDB/#open-requests - this.source = null; - } + constructor() { + super(); + // https://www.w3.org/TR/IndexedDB/#open-requests + this.source = null; + } - public toString() { - return "[object IDBOpenDBRequest]"; - } + public toString() { + return "[object IDBOpenDBRequest]"; + } } - -export default BridgeIDBOpenDBRequest; diff --git a/packages/idb-bridge/src/BridgeIDBRequest.ts b/packages/idb-bridge/src/BridgeIDBRequest.ts index 1a6bdf501..3ed2f9244 100644 --- a/packages/idb-bridge/src/BridgeIDBRequest.ts +++ b/packages/idb-bridge/src/BridgeIDBRequest.ts @@ -15,19 +15,19 @@ * permissions and limitations under the License. */ -import BridgeFDBCursor from "./BridgeIDBCursor"; -import BridgeIDBIndex from "./BridgeIDBIndex"; -import BridgeIDBObjectStore from "./BridgeIDBObjectStore"; -import BridgeIDBTransaction from "./BridgeIDBTransaction"; +import { BridgeIDBCursor as BridgeFIBCursor } from "./BridgeIDBCursor"; +import { BridgeIDBIndex } from "./BridgeIDBIndex"; +import { BridgeIDBObjectStore } from "./BridgeIDBObjectStore"; +import { BridgeIDBTransaction } from "./BridgeIDBTransaction"; import { InvalidStateError } from "./util/errors"; import FakeEventTarget from "./util/FakeEventTarget"; import { EventCallback } from "./util/types"; import FakeEvent from "./util/FakeEvent"; -class BridgeIDBRequest extends FakeEventTarget { +export class BridgeIDBRequest extends FakeEventTarget { _result: any = null; _error: Error | null | undefined = null; - source: BridgeFDBCursor | BridgeIDBIndex | BridgeIDBObjectStore | null = null; + source: BridgeFIBCursor | BridgeIDBIndex | BridgeIDBObjectStore | null = null; transaction: BridgeIDBTransaction | null = null; readyState: "done" | "pending" = "pending"; onsuccess: EventCallback | null = null; @@ -83,5 +83,3 @@ class BridgeIDBRequest extends FakeEventTarget { this.dispatchEvent(event); } } - -export default BridgeIDBRequest; diff --git a/packages/idb-bridge/src/BridgeIDBTransaction.ts b/packages/idb-bridge/src/BridgeIDBTransaction.ts index 250e27149..56a4d59ef 100644 --- a/packages/idb-bridge/src/BridgeIDBTransaction.ts +++ b/packages/idb-bridge/src/BridgeIDBTransaction.ts @@ -1,6 +1,6 @@ -import BridgeIDBDatabase from "./BridgeIDBDatabase"; -import BridgeIDBObjectStore from "./BridgeIDBObjectStore"; -import BridgeIDBRequest from "./BridgeIDBRequest"; +import { BridgeIDBDatabase } from "./BridgeIDBDatabase"; +import { BridgeIDBObjectStore } from "./BridgeIDBObjectStore"; +import { BridgeIDBRequest } from "./BridgeIDBRequest"; import { AbortError, InvalidStateError, @@ -19,11 +19,10 @@ import { import queueTask from "./util/queueTask"; import openPromise from "./util/openPromise"; import { DatabaseTransaction, Backend } from "./backend-interface"; -import { array } from "prop-types"; -import BridgeIDBFactory from "./BridgeIDBFactory"; +import { BridgeIDBFactory } from "./BridgeIDBFactory"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#transaction -class BridgeIDBTransaction extends FakeEventTarget { +export class BridgeIDBTransaction extends FakeEventTarget { public _state: "active" | "inactive" | "committing" | "finished" = "active"; public _started = false; public _objectStoresCache: Map = new Map(); @@ -328,5 +327,3 @@ class BridgeIDBTransaction extends FakeEventTarget { return this._waitPromise; } } - -export default BridgeIDBTransaction; diff --git a/packages/idb-bridge/src/BridgeIDBVersionChangeEvent.ts b/packages/idb-bridge/src/BridgeIDBVersionChangeEvent.ts index 6fc63ee35..43e822d86 100644 --- a/packages/idb-bridge/src/BridgeIDBVersionChangeEvent.ts +++ b/packages/idb-bridge/src/BridgeIDBVersionChangeEvent.ts @@ -17,25 +17,23 @@ import FakeEvent from "./util/FakeEvent"; -class BridgeIDBVersionChangeEvent extends FakeEvent { - public newVersion: number | null; - public oldVersion: number; +export class BridgeIDBVersionChangeEvent extends FakeEvent { + public newVersion: number | null; + public oldVersion: number; - constructor( - type: "blocked" | "success" | "upgradeneeded" | "versionchange", - parameters: { newVersion?: number | null; oldVersion?: number } = {}, - ) { - super(type); + constructor( + type: "blocked" | "success" | "upgradeneeded" | "versionchange", + parameters: { newVersion?: number | null; oldVersion?: number } = {}, + ) { + super(type); - this.newVersion = - parameters.newVersion !== undefined ? parameters.newVersion : null; - this.oldVersion = - parameters.oldVersion !== undefined ? parameters.oldVersion : 0; - } + this.newVersion = + parameters.newVersion !== undefined ? parameters.newVersion : null; + this.oldVersion = + parameters.oldVersion !== undefined ? parameters.oldVersion : 0; + } - public toString() { - return "[object IDBVersionChangeEvent]"; - } + public toString() { + return "[object IDBVersionChangeEvent]"; + } } - -export default BridgeIDBVersionChangeEvent; diff --git a/packages/idb-bridge/src/MemoryBackend.test.ts b/packages/idb-bridge/src/MemoryBackend.test.ts index a48fafb1e..21325379d 100644 --- a/packages/idb-bridge/src/MemoryBackend.test.ts +++ b/packages/idb-bridge/src/MemoryBackend.test.ts @@ -14,15 +14,14 @@ permissions and limitations under the License. */ - import test from "ava"; import MemoryBackend from "./MemoryBackend"; -import BridgeIDBFactory from "./BridgeIDBFactory"; -import BridgeIDBRequest from "./BridgeIDBRequest"; -import BridgeIDBDatabase from "./BridgeIDBDatabase"; -import BridgeIDBTransaction from "./BridgeIDBTransaction"; -import BridgeIDBKeyRange from "./BridgeIDBKeyRange"; -import BridgeIDBCursorWithValue from "./BridgeIDBCursorWithValue"; +import { BridgeIDBFactory } from "./BridgeIDBFactory"; +import { BridgeIDBRequest } from "./BridgeIDBRequest"; +import { BridgeIDBDatabase } from "./BridgeIDBDatabase"; +import { BridgeIDBTransaction } from "./BridgeIDBTransaction"; +import { BridgeIDBKeyRange } from "./BridgeIDBKeyRange"; +import { BridgeIDBCursorWithValue } from "./BridgeIDBCursorWithValue"; function promiseFromRequest(request: BridgeIDBRequest): Promise { return new Promise((resolve, reject) => { @@ -48,7 +47,7 @@ function promiseFromTransaction( }); } -test("Spec: Example 1 Part 1", async t => { +test("Spec: Example 1 Part 1", async (t) => { const backend = new MemoryBackend(); const idb = new BridgeIDBFactory(backend); @@ -69,7 +68,7 @@ test("Spec: Example 1 Part 1", async t => { t.pass(); }); -test("Spec: Example 1 Part 2", async t => { +test("Spec: Example 1 Part 2", async (t) => { const backend = new MemoryBackend(); const idb = new BridgeIDBFactory(backend); @@ -101,7 +100,7 @@ test("Spec: Example 1 Part 2", async t => { t.pass(); }); -test("Spec: Example 1 Part 3", async t => { +test("Spec: Example 1 Part 3", async (t) => { const backend = new MemoryBackend(); const idb = new BridgeIDBFactory(backend); @@ -229,7 +228,6 @@ test("Spec: Example 1 Part 3", async t => { cursor = request6.result; t.is(cursor, null); - const request7 = index5.openCursor(null, "prevunique"); await promiseFromRequest(request7); cursor = request7.result; @@ -251,8 +249,7 @@ test("Spec: Example 1 Part 3", async t => { t.pass(); }); - -test("simple deletion", async t => { +test("simple deletion", async (t) => { const backend = new MemoryBackend(); const idb = new BridgeIDBFactory(backend); @@ -307,8 +304,7 @@ test("simple deletion", async t => { t.pass(); }); - -test("export", async t => { +test("export", async (t) => { const backend = new MemoryBackend(); const idb = new BridgeIDBFactory(backend); @@ -322,7 +318,6 @@ test("export", async t => { const db: BridgeIDBDatabase = await promiseFromRequest(request); - const tx = db.transaction("books", "readwrite"); tx.oncomplete = () => { console.log("oncomplete called"); @@ -341,10 +336,13 @@ test("export", async t => { backend2.importDump(exportedData); const exportedData2 = backend2.exportDump(); - t.assert(exportedData.databases["library"].objectStores["books"].records.length === 3); + t.assert( + exportedData.databases["library"].objectStores["books"].records.length === + 3, + ); t.deepEqual(exportedData, exportedData2); t.is(exportedData.databases["library"].schema.databaseVersion, 42); t.is(exportedData2.databases["library"].schema.databaseVersion, 42); t.pass(); -}); \ No newline at end of file +}); diff --git a/packages/idb-bridge/src/MemoryBackend.ts b/packages/idb-bridge/src/MemoryBackend.ts index 08103d722..c5fac41a9 100644 --- a/packages/idb-bridge/src/MemoryBackend.ts +++ b/packages/idb-bridge/src/MemoryBackend.ts @@ -40,7 +40,7 @@ import { Key, Value, KeyPath } from "./util/types"; import { StoreKeyResult, makeStoreKeyValue } from "./util/makeStoreKeyValue"; import getIndexKeys from "./util/getIndexKeys"; import openPromise from "./util/openPromise"; -import BridgeIDBKeyRange from "./BridgeIDBKeyRange"; +import { BridgeIDBKeyRange } from "./BridgeIDBKeyRange"; enum TransactionLevel { Disconnected = 0, @@ -863,9 +863,9 @@ export class MemoryBackend implements Backend { !db.txRestrictObjectStores.includes(objectStoreName) ) { throw Error( - `Not allowed to access store '${ - objectStoreName - }', transaction is over ${JSON.stringify(db.txRestrictObjectStores)}`, + `Not allowed to access store '${objectStoreName}', transaction is over ${JSON.stringify( + db.txRestrictObjectStores, + )}`, ); } if (typeof range !== "object") { @@ -986,7 +986,7 @@ export class MemoryBackend implements Backend { throw Error("db inconsistent: expected index entry missing"); } const newPrimaryKeys = existingRecord.primaryKeys.filter( - x => compareKeys(x, primaryKey) !== 0, + (x) => compareKeys(x, primaryKey) !== 0, ); if (newPrimaryKeys.length === 0) { index.modifiedData = indexData.without(indexKey); diff --git a/packages/idb-bridge/src/backend-interface.ts b/packages/idb-bridge/src/backend-interface.ts index bcb1e8a85..3617d21bc 100644 --- a/packages/idb-bridge/src/backend-interface.ts +++ b/packages/idb-bridge/src/backend-interface.ts @@ -22,7 +22,7 @@ import { KeyPath, BridgeIDBDatabaseInfo, } from "./util/types"; -import BridgeIDBKeyRange from "./BridgeIDBKeyRange"; +import { BridgeIDBKeyRange } from "./BridgeIDBKeyRange"; export interface ObjectStoreProperties { keyPath: KeyPath | null; @@ -76,7 +76,7 @@ export interface RecordGetRequest { * Last cursor position in terms of the index key. * Can only be specified if indexName is defined and * lastObjectStorePosition is defined. - * + * * Must either be undefined or within range. */ lastIndexPosition?: Key; @@ -87,7 +87,7 @@ export interface RecordGetRequest { /** * If specified, the index key of the results must be * greater or equal to advanceIndexKey. - * + * * Only applicable if indexName is specified. */ advanceIndexKey?: Key; @@ -144,7 +144,7 @@ export interface Backend { /** * Even though the standard interface for indexedDB doesn't require * the client to run deleteDatabase in a version transaction, there is - * implicitly one running. + * implicitly one running. */ deleteDatabase(btx: DatabaseTransaction, name: string): Promise; @@ -152,9 +152,18 @@ export interface Backend { getSchema(db: DatabaseConnection): Schema; - renameIndex(btx: DatabaseTransaction, objectStoreName: string, oldName: string, newName: string): void; + renameIndex( + btx: DatabaseTransaction, + objectStoreName: string, + oldName: string, + newName: string, + ): void; - deleteIndex(btx: DatabaseTransaction, objectStoreName: string, indexName: string): void; + deleteIndex( + btx: DatabaseTransaction, + objectStoreName: string, + indexName: string, + ): void; rollback(btx: DatabaseTransaction): Promise; diff --git a/packages/idb-bridge/src/idbtypes.ts b/packages/idb-bridge/src/idbtypes.ts new file mode 100644 index 000000000..53f93d451 --- /dev/null +++ b/packages/idb-bridge/src/idbtypes.ts @@ -0,0 +1,736 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + +/** + * Type declarations for IndexedDB, adapted from the TypeScript lib.dom.d.ts. + * + * Instead of ambient types, we export type declarations. + */ + +export type IDBKeyPath = string; + +export interface EventListener { + (evt: Event): void; +} + +export interface EventListenerObject { + handleEvent(evt: Event): void; +} + +export interface EventListenerOptions { + capture?: boolean; +} + +export interface AddEventListenerOptions extends EventListenerOptions { + once?: boolean; + passive?: boolean; +} + +export type IDBTransactionMode = "readonly" | "readwrite" | "versionchange"; + +export type EventListenerOrEventListenerObject = + | EventListener + | EventListenerObject; + +/** EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them. */ +export interface EventTarget { + /** + * Appends an event listener for events whose type attribute value is type. The callback argument sets the callback that will be invoked when the event is dispatched. + * + * The options argument sets listener-specific options. For compatibility this can be a boolean, in which case the method behaves exactly as if the value was specified as options's capture. + * + * When set to true, options's capture prevents callback from being invoked when the event's eventPhase attribute value is BUBBLING_PHASE. When false (or not present), callback will not be invoked when event's eventPhase attribute value is CAPTURING_PHASE. Either way, callback will be invoked if event's eventPhase attribute value is AT_TARGET. + * + * When set to true, options's passive indicates that the callback will not cancel the event by invoking preventDefault(). This is used to enable performance optimizations described in ยง 2.8 Observing event listeners. + * + * When set to true, options's once indicates that the callback will only be invoked once after which the event listener will be removed. + * + * The event listener is appended to target's event listener list and is not appended if it has the same type, callback, and capture. + */ + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject | null, + options?: boolean | AddEventListenerOptions, + ): void; + /** + * Dispatches a synthetic event event to target and returns true if either event's cancelable attribute value is false or its preventDefault() method was not invoked, and false otherwise. + */ + dispatchEvent(event: Event): boolean; + /** + * Removes the event listener in target's event listener list with the same type, callback, and options. + */ + removeEventListener( + type: string, + callback: EventListenerOrEventListenerObject | null, + options?: EventListenerOptions | boolean, + ): void; +} + +/** An event which takes place in the DOM. */ +export interface Event { + /** + * Returns true or false depending on how event was initialized. True if event goes through its target's ancestors in reverse tree order, and false otherwise. + */ + readonly bubbles: boolean; + cancelBubble: boolean; + /** + * Returns true or false depending on how event was initialized. Its return value does not always carry meaning, but true can indicate that part of the operation during which event was dispatched, can be canceled by invoking the preventDefault() method. + */ + readonly cancelable: boolean; + /** + * Returns true or false depending on how event was initialized. True if event invokes listeners past a ShadowRoot node that is the root of its target, and false otherwise. + */ + readonly composed: boolean; + /** + * Returns the object whose event listener's callback is currently being invoked. + */ + readonly currentTarget: EventTarget | null; + /** + * Returns true if preventDefault() was invoked successfully to indicate cancelation, and false otherwise. + */ + readonly defaultPrevented: boolean; + /** + * Returns the event's phase, which is one of NONE, CAPTURING_PHASE, AT_TARGET, and BUBBLING_PHASE. + */ + readonly eventPhase: number; + /** + * Returns true if event was dispatched by the user agent, and false otherwise. + */ + readonly isTrusted: boolean; + returnValue: boolean; + /** @deprecated */ + readonly srcElement: EventTarget | null; + /** + * Returns the object to which event is dispatched (its target). + */ + readonly target: EventTarget | null; + /** + * Returns the event's timestamp as the number of milliseconds measured relative to the time origin. + */ + readonly timeStamp: number; + /** + * Returns the type of event, e.g. "click", "hashchange", or "submit". + */ + readonly type: string; + /** + * Returns the invocation target objects of event's path (objects on which listeners will be invoked), except for any nodes in shadow trees of which the shadow root's mode is "closed" that are not reachable from event's currentTarget. + */ + composedPath(): EventTarget[]; + initEvent(type: string, bubbles?: boolean, cancelable?: boolean): void; + /** + * If invoked when the cancelable attribute value is true, and while executing a listener for the event with passive set to false, signals to the operation that caused event to be dispatched that it needs to be canceled. + */ + preventDefault(): void; + /** + * Invoking this method prevents event from reaching any registered event listeners after the current one finishes running and, when dispatched in a tree, also prevents event from reaching any other objects. + */ + stopImmediatePropagation(): void; + /** + * When dispatched in a tree, invoking this method prevents event from reaching any objects other than the current object. + */ + stopPropagation(): void; + readonly AT_TARGET: number; + readonly BUBBLING_PHASE: number; + readonly CAPTURING_PHASE: number; + readonly NONE: number; +} + +/** A type returned by some APIs which contains a list of DOMString (strings). */ +export interface DOMStringList { + /** + * Returns the number of strings in strings. + */ + readonly length: number; + /** + * Returns true if strings contains string, and false otherwise. + */ + contains(string: string): boolean; + /** + * Returns the string with index index from strings. + */ + item(index: number): string | null; + [index: number]: string; +} + +export type BufferSource = ArrayBufferView | ArrayBuffer; + +export type IDBValidKey = number | string | Date | BufferSource | IDBArrayKey; + +export interface IDBIndexParameters { + multiEntry?: boolean; + unique?: boolean; +} + +export interface IDBObjectStoreParameters { + autoIncrement?: boolean; + keyPath?: string | string[] | null; +} + +export interface EventInit { + bubbles?: boolean; + cancelable?: boolean; + composed?: boolean; +} + +export interface IDBArrayKey extends Array {} + +export type IDBCursorDirection = "next" | "nextunique" | "prev" | "prevunique"; + +/** This IndexedDB API interface represents a cursor for traversing or iterating over multiple records in a database. */ +export interface IDBCursor { + /** + * Returns the direction ("next", "nextunique", "prev" or "prevunique") of the cursor. + */ + readonly direction: IDBCursorDirection; + /** + * Returns the key of the cursor. Throws a "InvalidStateError" DOMException if the cursor is advancing or is finished. + */ + readonly key: IDBValidKey; + /** + * Returns the effective key of the cursor. Throws a "InvalidStateError" DOMException if the cursor is advancing or is finished. + */ + readonly primaryKey: IDBValidKey; + /** + * Returns the IDBObjectStore or IDBIndex the cursor was opened from. + */ + readonly source: IDBObjectStore | IDBIndex; + /** + * Advances the cursor through the next count records in range. + */ + advance(count: number): void; + /** + * Advances the cursor to the next record in range. + */ + continue(key?: IDBValidKey): void; + /** + * Advances the cursor to the next record in range matching or after key and primaryKey. Throws an "InvalidAccessError" DOMException if the source is not an index. + */ + continuePrimaryKey(key: IDBValidKey, primaryKey: IDBValidKey): void; + /** + * Delete the record pointed at by the cursor with a new value. + * + * If successful, request's result will be undefined. + */ + delete(): IDBRequest; + /** + * Updated the record pointed at by the cursor with a new value. + * + * Throws a "DataError" DOMException if the effective object store uses in-line keys and the key would have changed. + * + * If successful, request's result will be the record's key. + */ + update(value: any): IDBRequest; +} + +/** This IndexedDB API interface represents a cursor for traversing or iterating over multiple records in a database. It is the same as the IDBCursor, except that it includes the value property. */ +export interface IDBCursorWithValue extends IDBCursor { + /** + * Returns the cursor's current value. + */ + readonly value: any; +} + +export interface IDBDatabaseEventMap { + abort: Event; + close: Event; + error: Event; + versionchange: IDBVersionChangeEvent; +} + +/** This IndexedDB API interface provides a connection to a database; you can use an IDBDatabase object to open a transaction on your database then create, manipulate, and delete objects (data) in that database. The interface provides the only way to get and manage versions of the database. */ +export interface IDBDatabase extends EventTarget { + /** + * Returns the name of the database. + */ + readonly name: string; + /** + * Returns a list of the names of object stores in the database. + */ + readonly objectStoreNames: DOMStringList; + onabort: ((this: IDBDatabase, ev: Event) => any) | null; + onclose: ((this: IDBDatabase, ev: Event) => any) | null; + onerror: ((this: IDBDatabase, ev: Event) => any) | null; + onversionchange: + | ((this: IDBDatabase, ev: IDBVersionChangeEvent) => any) + | null; + /** + * Returns the version of the database. + */ + readonly version: number; + /** + * Closes the connection once all running transactions have finished. + */ + close(): void; + /** + * Creates a new object store with the given name and options and returns a new IDBObjectStore. + * + * Throws a "InvalidStateError" DOMException if not called within an upgrade transaction. + */ + createObjectStore( + name: string, + optionalParameters?: IDBObjectStoreParameters, + ): IDBObjectStore; + /** + * Deletes the object store with the given name. + * + * Throws a "InvalidStateError" DOMException if not called within an upgrade transaction. + */ + deleteObjectStore(name: string): void; + /** + * Returns a new transaction with the given mode ("readonly" or "readwrite") and scope which can be a single object store name or an array of names. + */ + transaction( + storeNames: string | string[], + mode?: IDBTransactionMode, + ): IDBTransaction; + addEventListener( + type: K, + listener: (this: IDBDatabase, ev: IDBDatabaseEventMap[K]) => any, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions, + ): void; + removeEventListener( + type: K, + listener: (this: IDBDatabase, ev: IDBDatabaseEventMap[K]) => any, + options?: boolean | EventListenerOptions, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions, + ): void; +} + +/** In the following code snippet, we make a request to open a database, and include handlers for the success and error cases. For a full working example, see our To-do Notifications app (view example live.) */ +export interface IDBFactory { + /** + * Compares two values as keys. Returns -1 if key1 precedes key2, 1 if key2 precedes key1, and 0 if the keys are equal. + * + * Throws a "DataError" DOMException if either input is not a valid key. + */ + cmp(first: any, second: any): number; + /** + * Attempts to delete the named database. If the database already exists and there are open connections that don't close in response to a versionchange event, the request will be blocked until all they close. If the request is successful request's result will be null. + */ + deleteDatabase(name: string): IDBOpenDBRequest; + /** + * Attempts to open a connection to the named database with the current version, or 1 if it does not already exist. If the request is successful request's result will be the connection. + */ + open(name: string, version?: number): IDBOpenDBRequest; +} + +/** IDBIndex interface of the IndexedDB API provides asynchronous access to an index in a database. An index is a kind of object store for looking up records in another object store, called the referenced object store. You use this interface to retrieve data. */ +export interface IDBIndex { + readonly keyPath: string | string[]; + readonly multiEntry: boolean; + /** + * Returns the name of the index. + */ + name: string; + /** + * Returns the IDBObjectStore the index belongs to. + */ + readonly objectStore: IDBObjectStore; + readonly unique: boolean; + /** + * Retrieves the number of records matching the given key or key range in query. + * + * If successful, request's result will be the count. + */ + count(key?: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * Retrieves the value of the first record matching the given key or key range in query. + * + * If successful, request's result will be the value, or undefined if there was no matching record. + */ + get(key: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * Retrieves the values of the records matching the given key or key range in query (up to count if given). + * + * If successful, request's result will be an Array of the values. + */ + getAll( + query?: IDBValidKey | IDBKeyRange | null, + count?: number, + ): IDBRequest; + /** + * Retrieves the keys of records matching the given key or key range in query (up to count if given). + * + * If successful, request's result will be an Array of the keys. + */ + getAllKeys( + query?: IDBValidKey | IDBKeyRange | null, + count?: number, + ): IDBRequest; + /** + * Retrieves the key of the first record matching the given key or key range in query. + * + * If successful, request's result will be the key, or undefined if there was no matching record. + */ + getKey(key: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * Opens a cursor over the records matching query, ordered by direction. If query is null, all records in index are matched. + * + * If successful, request's result will be an IDBCursorWithValue, or null if there were no matching records. + */ + openCursor( + query?: IDBValidKey | IDBKeyRange | null, + direction?: IDBCursorDirection, + ): IDBRequest; + /** + * Opens a cursor with key only flag set over the records matching query, ordered by direction. If query is null, all records in index are matched. + * + * If successful, request's result will be an IDBCursor, or null if there were no matching records. + */ + openKeyCursor( + query?: IDBValidKey | IDBKeyRange | null, + direction?: IDBCursorDirection, + ): IDBRequest; +} + +/** A key range can be a single value or a range with upper and lower bounds or endpoints. If the key range has both upper and lower bounds, then it is bounded; if it has no bounds, it is unbounded. A bounded key range can either be open (the endpoints are excluded) or closed (the endpoints are included). To retrieve all keys within a certain range, you can use the following code constructs: */ +export interface IDBKeyRange { + /** + * Returns lower bound, or undefined if none. + */ + readonly lower: any; + /** + * Returns true if the lower open flag is set, and false otherwise. + */ + readonly lowerOpen: boolean; + /** + * Returns upper bound, or undefined if none. + */ + readonly upper: any; + /** + * Returns true if the upper open flag is set, and false otherwise. + */ + readonly upperOpen: boolean; + /** + * Returns true if key is included in the range, and false otherwise. + */ + includes(key: any): boolean; +} + +/** This example shows a variety of different uses of object stores, from updating the data structure with IDBObjectStore.createIndexย inside an onupgradeneeded function, to adding a new item to our object store with IDBObjectStore.add. For a full working example, see ourย To-do Notificationsย app (view example live.) */ +export interface IDBObjectStore { + /** + * Returns true if the store has a key generator, and false otherwise. + */ + readonly autoIncrement: boolean; + /** + * Returns a list of the names of indexes in the store. + */ + readonly indexNames: DOMStringList; + /** + * Returns the key path of the store, or null if none. + */ + readonly keyPath: string | string[]; + /** + * Returns the name of the store. + */ + name: string; + /** + * Returns the associated transaction. + */ + readonly transaction: IDBTransaction; + /** + * Adds or updates a record in store with the given value and key. + * + * If the store uses in-line keys and key is specified a "DataError" DOMException will be thrown. + * + * If put() is used, any existing record with the key will be replaced. If add() is used, and if a record with the key already exists the request will fail, with request's error set to a "ConstraintError" DOMException. + * + * If successful, request's result will be the record's key. + */ + add(value: any, key?: IDBValidKey): IDBRequest; + /** + * Deletes all records in store. + * + * If successful, request's result will be undefined. + */ + clear(): IDBRequest; + /** + * Retrieves the number of records matching the given key or key range in query. + * + * If successful, request's result will be the count. + */ + count(key?: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * Creates a new index in store with the given name, keyPath and options and returns a new IDBIndex. If the keyPath and options define constraints that cannot be satisfied with the data already in store the upgrade transaction will abort with a "ConstraintError" DOMException. + * + * Throws an "InvalidStateError" DOMException if not called within an upgrade transaction. + */ + createIndex( + name: string, + keyPath: string | string[], + options?: IDBIndexParameters, + ): IDBIndex; + /** + * Deletes records in store with the given key or in the given key range in query. + * + * If successful, request's result will be undefined. + */ + delete(key: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * Deletes the index in store with the given name. + * + * Throws an "InvalidStateError" DOMException if not called within an upgrade transaction. + */ + deleteIndex(name: string): void; + /** + * Retrieves the value of the first record matching the given key or key range in query. + * + * If successful, request's result will be the value, or undefined if there was no matching record. + */ + get(query: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * Retrieves the values of the records matching the given key or key range in query (up to count if given). + * + * If successful, request's result will be an Array of the values. + */ + getAll( + query?: IDBValidKey | IDBKeyRange | null, + count?: number, + ): IDBRequest; + /** + * Retrieves the keys of records matching the given key or key range in query (up to count if given). + * + * If successful, request's result will be an Array of the keys. + */ + getAllKeys( + query?: IDBValidKey | IDBKeyRange | null, + count?: number, + ): IDBRequest; + /** + * Retrieves the key of the first record matching the given key or key range in query. + * + * If successful, request's result will be the key, or undefined if there was no matching record. + */ + getKey(query: IDBValidKey | IDBKeyRange): IDBRequest; + index(name: string): IDBIndex; + /** + * Opens a cursor over the records matching query, ordered by direction. If query is null, all records in store are matched. + * + * If successful, request's result will be an IDBCursorWithValue pointing at the first matching record, or null if there were no matching records. + */ + openCursor( + query?: IDBValidKey | IDBKeyRange | null, + direction?: IDBCursorDirection, + ): IDBRequest; + /** + * Opens a cursor with key only flag set over the records matching query, ordered by direction. If query is null, all records in store are matched. + * + * If successful, request's result will be an IDBCursor pointing at the first matching record, or null if there were no matching records. + */ + openKeyCursor( + query?: IDBValidKey | IDBKeyRange | null, + direction?: IDBCursorDirection, + ): IDBRequest; + /** + * Adds or updates a record in store with the given value and key. + * + * If the store uses in-line keys and key is specified a "DataError" DOMException will be thrown. + * + * If put() is used, any existing record with the key will be replaced. If add() is used, and if a record with the key already exists the request will fail, with request's error set to a "ConstraintError" DOMException. + * + * If successful, request's result will be the record's key. + */ + put(value: any, key?: IDBValidKey): IDBRequest; +} + +export interface IDBOpenDBRequestEventMap extends IDBRequestEventMap { + blocked: Event; + upgradeneeded: IDBVersionChangeEvent; +} + +/** Also inherits methods from its parents IDBRequest and EventTarget. */ +export interface IDBOpenDBRequest extends IDBRequest { + onblocked: ((this: IDBOpenDBRequest, ev: Event) => any) | null; + onupgradeneeded: + | ((this: IDBOpenDBRequest, ev: IDBVersionChangeEvent) => any) + | null; + addEventListener( + type: K, + listener: (this: IDBOpenDBRequest, ev: IDBOpenDBRequestEventMap[K]) => any, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions, + ): void; + removeEventListener( + type: K, + listener: (this: IDBOpenDBRequest, ev: IDBOpenDBRequestEventMap[K]) => any, + options?: boolean | EventListenerOptions, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions, + ): void; +} + +export type IDBRequestReadyState = "done" | "pending"; + +export interface IDBRequestEventMap { + error: Event; + success: Event; +} + +/** An abnormal event (called an exception) which occurs as a result of calling a method or accessing a property of a web API. */ +export interface DOMException { + readonly code: number; + readonly message: string; + readonly name: string; + readonly ABORT_ERR: number; + readonly DATA_CLONE_ERR: number; + readonly DOMSTRING_SIZE_ERR: number; + readonly HIERARCHY_REQUEST_ERR: number; + readonly INDEX_SIZE_ERR: number; + readonly INUSE_ATTRIBUTE_ERR: number; + readonly INVALID_ACCESS_ERR: number; + readonly INVALID_CHARACTER_ERR: number; + readonly INVALID_MODIFICATION_ERR: number; + readonly INVALID_NODE_TYPE_ERR: number; + readonly INVALID_STATE_ERR: number; + readonly NAMESPACE_ERR: number; + readonly NETWORK_ERR: number; + readonly NOT_FOUND_ERR: number; + readonly NOT_SUPPORTED_ERR: number; + readonly NO_DATA_ALLOWED_ERR: number; + readonly NO_MODIFICATION_ALLOWED_ERR: number; + readonly QUOTA_EXCEEDED_ERR: number; + readonly SECURITY_ERR: number; + readonly SYNTAX_ERR: number; + readonly TIMEOUT_ERR: number; + readonly TYPE_MISMATCH_ERR: number; + readonly URL_MISMATCH_ERR: number; + readonly VALIDATION_ERR: number; + readonly WRONG_DOCUMENT_ERR: number; +} + +/** The request object does not initially contain any information about the result of the operation, but once information becomes available, an event is fired on the request, and the information becomes available through the properties of the IDBRequest instance. */ +export interface IDBRequest extends EventTarget { + /** + * When a request is completed, returns the error (a DOMException), or null if the request succeeded. Throws a "InvalidStateError" DOMException if the request is still pending. + */ + readonly error: DOMException | null; + onerror: ((this: IDBRequest, ev: Event) => any) | null; + onsuccess: ((this: IDBRequest, ev: Event) => any) | null; + /** + * Returns "pending" until a request is complete, then returns "done". + */ + readonly readyState: IDBRequestReadyState; + /** + * When a request is completed, returns the result, or undefined if the request failed. Throws a "InvalidStateError" DOMException if the request is still pending. + */ + readonly result: T; + /** + * Returns the IDBObjectStore, IDBIndex, or IDBCursor the request was made against, or null if is was an open request. + */ + readonly source: IDBObjectStore | IDBIndex | IDBCursor; + /** + * Returns the IDBTransaction the request was made within. If this as an open request, then it returns an upgrade transaction while it is running, or null otherwise. + */ + readonly transaction: IDBTransaction | null; + addEventListener( + type: K, + listener: (this: IDBRequest, ev: IDBRequestEventMap[K]) => any, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions, + ): void; + removeEventListener( + type: K, + listener: (this: IDBRequest, ev: IDBRequestEventMap[K]) => any, + options?: boolean | EventListenerOptions, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions, + ): void; +} + +export interface IDBTransactionEventMap { + abort: Event; + complete: Event; + error: Event; +} + +export interface IDBTransaction extends EventTarget { + /** + * Returns the transaction's connection. + */ + readonly db: IDBDatabase; + /** + * If the transaction was aborted, returns the error (a DOMException) providing the reason. + */ + readonly error: DOMException; + /** + * Returns the mode the transaction was created with ("readonly" or "readwrite"), or "versionchange" for an upgrade transaction. + */ + readonly mode: IDBTransactionMode; + /** + * Returns a list of the names of object stores in the transaction's scope. For an upgrade transaction this is all object stores in the database. + */ + readonly objectStoreNames: DOMStringList; + onabort: ((this: IDBTransaction, ev: Event) => any) | null; + oncomplete: ((this: IDBTransaction, ev: Event) => any) | null; + onerror: ((this: IDBTransaction, ev: Event) => any) | null; + /** + * Aborts the transaction. All pending requests will fail with a "AbortError" DOMException and all changes made to the database will be reverted. + */ + abort(): void; + /** + * Returns an IDBObjectStore in the transaction's scope. + */ + objectStore(name: string): IDBObjectStore; + addEventListener( + type: K, + listener: (this: IDBTransaction, ev: IDBTransactionEventMap[K]) => any, + options?: boolean | AddEventListenerOptions, + ): void; + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions, + ): void; + removeEventListener( + type: K, + listener: (this: IDBTransaction, ev: IDBTransactionEventMap[K]) => any, + options?: boolean | EventListenerOptions, + ): void; + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions, + ): void; +} + +/** This IndexedDB API interface indicates that the version of the database has changed, as the result of an IDBOpenDBRequest.onupgradeneeded event handler function. */ +export interface IDBVersionChangeEvent extends Event { + readonly newVersion: number | null; + readonly oldVersion: number; +} diff --git a/packages/idb-bridge/src/index.ts b/packages/idb-bridge/src/index.ts index a65458748..8f19c9a31 100644 --- a/packages/idb-bridge/src/index.ts +++ b/packages/idb-bridge/src/index.ts @@ -1,23 +1,23 @@ import { BridgeIDBFactory } from "./BridgeIDBFactory"; import { BridgeIDBCursor } from "./BridgeIDBCursor"; import { BridgeIDBIndex } from "./BridgeIDBIndex"; -import BridgeIDBDatabase from "./BridgeIDBDatabase"; -import BridgeIDBKeyRange from "./BridgeIDBKeyRange"; -import BridgeIDBObjectStore from "./BridgeIDBObjectStore"; -import BridgeIDBOpenDBRequest from "./BridgeIDBOpenDBRequest"; -import BridgeIDBRequest from "./BridgeIDBRequest"; -import BridgeIDBTransaction from "./BridgeIDBTransaction"; -import BridgeIDBVersionChangeEvent from "./BridgeIDBVersionChangeEvent"; +import { BridgeIDBDatabase } from "./BridgeIDBDatabase"; +import { BridgeIDBKeyRange } from "./BridgeIDBKeyRange"; +import { BridgeIDBObjectStore } from "./BridgeIDBObjectStore"; +import { BridgeIDBOpenDBRequest } from "./BridgeIDBOpenDBRequest"; +import { BridgeIDBRequest } from "./BridgeIDBRequest"; +import { BridgeIDBTransaction } from "./BridgeIDBTransaction"; +import { BridgeIDBVersionChangeEvent } from "./BridgeIDBVersionChangeEvent"; export { BridgeIDBFactory, BridgeIDBCursor }; export { MemoryBackend } from "./MemoryBackend"; // globalThis polyfill, see https://mathiasbynens.be/notes/globalthis -(function() { +(function () { if (typeof globalThis === "object") return; Object.defineProperty(Object.prototype, "__magic__", { - get: function() { + get: function () { return this; }, configurable: true, // This makes it possible to `delete` the getter later. @@ -58,3 +58,6 @@ export function shimIndexedDB(factory: BridgeIDBFactory): void { // @ts-ignore: shimming globalThis.IDBVersionChangeEvent = BridgeIDBVersionChangeEvent; } + +import * as idbtypes from "./idbtypes"; +export type { idbtypes }; diff --git a/packages/idb-bridge/src/tree/b+tree.ts b/packages/idb-bridge/src/tree/b+tree.ts index 783c6b049..59a49baa3 100644 --- a/packages/idb-bridge/src/tree/b+tree.ts +++ b/packages/idb-bridge/src/tree/b+tree.ts @@ -24,14 +24,29 @@ SPDX-License-Identifier: MIT // Original repository: https://github.com/qwertie/btree-typescript - -import { ISortedMap, ISortedMapF } from './interfaces'; +import { ISortedMap, ISortedMapF } from "./interfaces"; export { - ISetSource, ISetSink, ISet, ISetF, ISortedSetSource, ISortedSet, ISortedSetF, - IMapSource, IMapSink, IMap, IMapF, ISortedMapSource, ISortedMap, ISortedMapF -} from './interfaces'; + ISetSource, + ISetSink, + ISet, + ISetF, + ISortedSetSource, + ISortedSet, + ISortedSetF, + IMapSource, + IMapSink, + IMap, + IMapF, + ISortedMapSource, + ISortedMap, + ISortedMapF, +} from "./interfaces"; -export type EditRangeResult = {value?:V, break?:R, delete?:boolean}; +export type EditRangeResult = { + value?: V; + break?: R; + delete?: boolean; +}; type index = number; @@ -57,7 +72,7 @@ type index = number; // - V8 source (NewElementsCapacity in src/objects.h): arrays grow by 50% + 16 elements /** Compares two numbers, strings, arrays of numbers/strings, Dates, - * or objects that have a valueOf() method returning a number or string. + * or objects that have a valueOf() method returning a number or string. * Optimized for numbers. Returns 1 if a>b, -1 if a b ? 1 : a == b ? 0 : c; -}; + return a < b ? -1 : a > b ? 1 : a == b ? 0 : c; +} /** - * A reasonably fast collection of key-value pairs with a powerful API. + * A reasonably fast collection of key-value pairs with a powerful API. * Largely compatible with the standard Map. BTree is a B+ tree data structure, * so the collection is sorted by key. - * + * * B+ trees tend to use memory more efficiently than hashtables such as the - * standard Map, especially when the collection contains a large number of - * items. However, maintaining the sort order makes them modestly slower: + * standard Map, especially when the collection contains a large number of + * items. However, maintaining the sort order makes them modestly slower: * O(log size) rather than O(1). This B+ tree implementation supports O(1) * fast cloning. It also supports freeze(), which can be used to ensure that * a BTree is not changed accidentally. - * + * * Confusingly, the ES6 Map.forEach(c) method calls c(value,key) instead of * c(key,value), in contrast to other methods such as set() and entries() - * which put the key first. I can only assume that the order was reversed on + * which put the key first. I can only assume that the order was reversed on * the theory that users would usually want to examine values and ignore keys. - * BTree's forEach() therefore works the same way, but a second method + * BTree's forEach() therefore works the same way, but a second method * `.forEachPair((key,value)=>{...})` is provided which sends you the key - * first and the value second; this method is slightly faster because it is + * first and the value second; this method is slightly faster because it is * the "native" for-each method for this class. - * - * Out of the box, BTree supports keys that are numbers, strings, arrays of - * numbers/strings, Date, and objects that have a valueOf() method returning a + * + * Out of the box, BTree supports keys that are numbers, strings, arrays of + * numbers/strings, Date, and objects that have a valueOf() method returning a * number or string. Other data types, such as arrays of Date or custom - * objects, require a custom comparator, which you must pass as the second - * argument to the constructor (the first argument is an optional list of + * objects, require a custom comparator, which you must pass as the second + * argument to the constructor (the first argument is an optional list of * initial items). Symbols cannot be used as keys because they are unordered * (one Symbol is never "greater" or "less" than another). - * + * * @example * Given a {name: string, age: number} object, you can create a tree sorted by * name and then by age like this: - * + * * var tree = new BTree(undefined, (a, b) => { * if (a.name > b.name) * return 1; // Return a number >0 when a > b @@ -110,36 +125,36 @@ export function defaultComparator(a: any, b: any) { * else // names are equal (or incomparable) * return a.age - b.age; // Return >0 when a.age > b.age * }); - * + * * tree.set({name:"Bill", age:17}, "happy"); * tree.set({name:"Fran", age:40}, "busy & stressed"); * tree.set({name:"Bill", age:55}, "recently laid off"); * tree.forEachPair((k, v) => { * console.log(`Name: ${k.name} Age: ${k.age} Status: ${v}`); * }); - * + * * @description * The "range" methods (`forEach, forRange, editRange`) will return the number * of elements that were scanned. In addition, the callback can return {break:R} * to stop early and return R from the outer function. - * + * * - TODO: Test performance of preallocating values array at max size * - TODO: Add fast initialization when a sorted array is provided to constructor - * + * * For more documentation see https://github.com/qwertie/btree-typescript * - * Are you a C# developer? You might like the similar data structures I made for C#: + * Are you a C# developer? You might like the similar data structures I made for C#: * BDictionary, BList, etc. See http://core.loyc.net/collections/ - * + * * @author David Piepgrass */ -export default class BTree implements ISortedMapF, ISortedMap -{ - private _root: BNode = EmptyLeaf as BNode; +export default class BTree + implements ISortedMapF, ISortedMap { + private _root: BNode = EmptyLeaf as BNode; _size: number = 0; _maxNodeSize: number; - _compare: (a:K, b:K) => number; - + _compare: (a: K, b: K) => number; + /** * Initializes an empty B+ tree. * @param compare Custom function to compare pairs of elements in the tree. @@ -148,60 +163,78 @@ export default class BTree implements ISortedMapF, ISortedMap * @param maxNodeSize Branching factor (maximum items or children per node) * Must be in range 4..256. If undefined or <4 then default is used; if >256 then 256. */ - public constructor(entries?: [K,V][], compare?: (a: K, b: K) => number, maxNodeSize?: number) { + public constructor( + entries?: [K, V][], + compare?: (a: K, b: K) => number, + maxNodeSize?: number, + ) { this._maxNodeSize = maxNodeSize! >= 4 ? Math.min(maxNodeSize!, 256) : 32; this._compare = compare || defaultComparator; - if (entries) - this.setPairs(entries); + if (entries) this.setPairs(entries); } - + // ES6 Map methods /////////////////////////////////////////////////// /** Gets the number of key-value pairs in the tree. */ - get size() { return this._size; } + get size() { + return this._size; + } /** Gets the number of key-value pairs in the tree. */ - get length() { return this._size; } + get length() { + return this._size; + } /** Returns true iff the tree contains no key-value pairs. */ - get isEmpty() { return this._size === 0; } + get isEmpty() { + return this._size === 0; + } /** Releases the tree so that its size is 0. */ clear() { - this._root = EmptyLeaf as BNode; + this._root = EmptyLeaf as BNode; this._size = 0; } - forEach(callback: (v:V, k:K, tree:BTree) => void, thisArg?: any): number; + forEach( + callback: (v: V, k: K, tree: BTree) => void, + thisArg?: any, + ): number; - /** Runs a function for each key-value pair, in order from smallest to + /** Runs a function for each key-value pair, in order from smallest to * largest key. For compatibility with ES6 Map, the argument order to - * the callback is backwards: value first, then key. Call forEachPair + * the callback is backwards: value first, then key. Call forEachPair * instead to receive the key as the first argument. * @param thisArg If provided, this parameter is assigned as the `this` * value for each callback. * @returns the number of values that were sent to the callback, * or the R value if the callback returned {break:R}. */ - forEach(callback: (v:V, k:K, tree:BTree) => {break?:R}|void, thisArg?: any): R|number { - if (thisArg !== undefined) - callback = callback.bind(thisArg); + forEach( + callback: (v: V, k: K, tree: BTree) => { break?: R } | void, + thisArg?: any, + ): R | number { + if (thisArg !== undefined) callback = callback.bind(thisArg); return this.forEachPair((k, v) => callback(v, k, this)); } - /** Runs a function for each key-value pair, in order from smallest to + /** Runs a function for each key-value pair, in order from smallest to * largest key. The callback can return {break:R} (where R is any value * except undefined) to stop immediately and return R from forEachPair. - * @param onFound A function that is called for each key-value pair. This + * @param onFound A function that is called for each key-value pair. This * function can return {break:R} to stop early with result R. - * The reason that you must return {break:R} instead of simply R - * itself is for consistency with editRange(), which allows + * The reason that you must return {break:R} instead of simply R + * itself is for consistency with editRange(), which allows * multiple actions, not just breaking. - * @param initialCounter This is the value of the third argument of - * `onFound` the first time it is called. The counter increases + * @param initialCounter This is the value of the third argument of + * `onFound` the first time it is called. The counter increases * by one each time `onFound` is called. Default value: 0 * @returns the number of pairs sent to the callback (plus initialCounter, * if you provided one). If the callback returned {break:R} then * the R value is returned instead. */ - forEachPair(callback: (k:K, v:V, counter:number) => {break?:R}|void, initialCounter?: number): R|number { - var low = this.minKey(), high = this.maxKey(); + forEachPair( + callback: (k: K, v: V, counter: number) => { break?: R } | void, + initialCounter?: number, + ): R | number { + var low = this.minKey(), + high = this.maxKey(); return this.forRange(low!, high!, true, callback, initialCounter); } @@ -214,13 +247,13 @@ export default class BTree implements ISortedMapF, ISortedMap get(key: K, defaultValue?: V): V | undefined { return this._root.get(key, defaultValue, this); } - + /** * Adds or overwrites a key-value pair in the B+ tree. * @param key the key is used to determine the sort order of * data in the tree. * @param value data to associate with the key (optional) - * @param overwrite Whether to overwrite an existing key-value pair + * @param overwrite Whether to overwrite an existing key-value pair * (default: true). If this is false and there is an existing * key-value pair then this method has no effect. * @returns true if a new key-value pair was added. @@ -229,14 +262,12 @@ export default class BTree implements ISortedMapF, ISortedMap * as well as the value. This has no effect unless the new key * has data that does not affect its sort order. */ - set(key: K, value: V, overwrite?: boolean): boolean { - if (this._root.isShared) - this._root = this._root.clone(); + set(key: K, value: V, overwrite?: boolean): boolean { + if (this._root.isShared) this._root = this._root.clone(); var result = this._root.set(key, value, overwrite, this); - if (result === true || result === false) - return result; + if (result === true || result === false) return result; // Root node has split, so create a new root node. - this._root = new BNodeInternal([this._root, result]); + this._root = new BNodeInternal([this._root, result]); return true; } @@ -247,7 +278,7 @@ export default class BTree implements ISortedMapF, ISortedMap * @param key Key to detect * @description Computational complexity: O(log size) */ - has(key: K): boolean { + has(key: K): boolean { return this.forRange(key, key, true, undefined) !== 0; } @@ -264,42 +295,50 @@ export default class BTree implements ISortedMapF, ISortedMap // Clone-mutators ///////////////////////////////////////////////////////// /** Returns a copy of the tree with the specified key set (the value is undefined). */ - with(key: K): BTree; + with(key: K): BTree; /** Returns a copy of the tree with the specified key-value pair set. */ - with(key: K, value: V2, overwrite?: boolean): BTree; - with(key: K, value?: V2, overwrite?: boolean): BTree { - let nu = this.clone() as BTree; + with(key: K, value: V2, overwrite?: boolean): BTree; + with( + key: K, + value?: V2, + overwrite?: boolean, + ): BTree { + let nu = this.clone() as BTree; return nu.set(key, value, overwrite) || overwrite ? nu : this; } /** Returns a copy of the tree with the specified key-value pairs set. */ - withPairs(pairs: [K,V|V2][], overwrite: boolean): BTree { - let nu = this.clone() as BTree; + withPairs(pairs: [K, V | V2][], overwrite: boolean): BTree { + let nu = this.clone() as BTree; return nu.setPairs(pairs, overwrite) !== 0 || overwrite ? nu : this; } - /** Returns a copy of the tree with the specified keys present. + /** Returns a copy of the tree with the specified keys present. * @param keys The keys to add. If a key is already present in the tree, * neither the existing key nor the existing value is modified. - * @param returnThisIfUnchanged if true, returns this if all keys already + * @param returnThisIfUnchanged if true, returns this if all keys already * existed. Performance note: due to the architecture of this class, all * node(s) leading to existing keys are cloned even if the collection is * ultimately unchanged. - */ - withKeys(keys: K[], returnThisIfUnchanged?: boolean): BTree { - let nu = this.clone() as BTree, changed = false; + */ + withKeys( + keys: K[], + returnThisIfUnchanged?: boolean, + ): BTree { + let nu = this.clone() as BTree, + changed = false; for (var i = 0; i < keys.length; i++) changed = nu.set(keys[i], undefined, false) || changed; return returnThisIfUnchanged && !changed ? this : nu; } - /** Returns a copy of the tree with the specified key removed. + /** Returns a copy of the tree with the specified key removed. * @param returnThisIfUnchanged if true, returns this if the key didn't exist. * Performance note: due to the architecture of this class, node(s) leading * to where the key would have been stored are cloned even when the key * turns out not to exist and the collection is unchanged. */ - without(key: K, returnThisIfUnchanged?: boolean): BTree { + without(key: K, returnThisIfUnchanged?: boolean): BTree { return this.withoutRange(key, key, true, returnThisIfUnchanged); } @@ -309,61 +348,92 @@ export default class BTree implements ISortedMapF, ISortedMap * node(s) leading to where the key would have been stored are cloned * even when the key turns out not to exist. */ - withoutKeys(keys: K[], returnThisIfUnchanged?: boolean): BTree { + withoutKeys(keys: K[], returnThisIfUnchanged?: boolean): BTree { let nu = this.clone(); return nu.deleteKeys(keys) || !returnThisIfUnchanged ? nu : this; } /** Returns a copy of the tree with the specified range of keys removed. */ - withoutRange(low: K, high: K, includeHigh: boolean, returnThisIfUnchanged?: boolean): BTree { + withoutRange( + low: K, + high: K, + includeHigh: boolean, + returnThisIfUnchanged?: boolean, + ): BTree { let nu = this.clone(); if (nu.deleteRange(low, high, includeHigh) === 0 && returnThisIfUnchanged) return this; return nu; } - /** Returns a copy of the tree with pairs removed whenever the callback + /** Returns a copy of the tree with pairs removed whenever the callback * function returns false. `where()` is a synonym for this method. */ - filter(callback: (k:K,v:V,counter:number) => boolean, returnThisIfUnchanged?: boolean): BTree { + filter( + callback: (k: K, v: V, counter: number) => boolean, + returnThisIfUnchanged?: boolean, + ): BTree { var nu = this.greedyClone(); var del: any; - nu.editAll((k,v,i) => { - if (!callback(k, v, i)) return del = Delete; + nu.editAll((k, v, i) => { + if (!callback(k, v, i)) return (del = Delete); }); - if (!del && returnThisIfUnchanged) - return this; + if (!del && returnThisIfUnchanged) return this; return nu; } /** Returns a copy of the tree with all values altered by a callback function. */ - mapValues(callback: (v:V,k:K,counter:number) => R): BTree { - var tmp = {} as {value:R}; + mapValues(callback: (v: V, k: K, counter: number) => R): BTree { + var tmp = {} as { value: R }; var nu = this.greedyClone(); - nu.editAll((k,v,i) => { - return tmp.value = callback(v, k, i), tmp as any; + nu.editAll((k, v, i) => { + return (tmp.value = callback(v, k, i)), tmp as any; }); - return nu as any as BTree; + return (nu as any) as BTree; } - /** Performs a reduce operation like the `reduce` method of `Array`. - * It is used to combine all pairs into a single value, or perform + /** Performs a reduce operation like the `reduce` method of `Array`. + * It is used to combine all pairs into a single value, or perform * conversions. `reduce` is best understood by example. For example, - * `tree.reduce((P, pair) => P * pair[0], 1)` multiplies all keys - * together. It means "start with P=1, and for each pair multiply - * it by the key in pair[0]". Another example would be converting + * `tree.reduce((P, pair) => P * pair[0], 1)` multiplies all keys + * together. It means "start with P=1, and for each pair multiply + * it by the key in pair[0]". Another example would be converting * the tree to a Map (in this example, note that M.set returns M): - * + * * var M = tree.reduce((M, pair) => M.set(pair[0],pair[1]), new Map()) - * + * * **Note**: the same array is sent to the callback on every iteration. */ - reduce(callback: (previous:R,currentPair:[K,V],counter:number,tree:BTree) => R, initialValue: R): R; - reduce(callback: (previous:R|undefined,currentPair:[K,V],counter:number,tree:BTree) => R): R|undefined; - reduce(callback: (previous:R|undefined,currentPair:[K,V],counter:number,tree:BTree) => R, initialValue?: R): R|undefined { - let i = 0, p = initialValue; - var it = this.entries(this.minKey(), ReusedArray), next; - while (!(next = it.next()).done) - p = callback(p, next.value, i++, this); + reduce( + callback: ( + previous: R, + currentPair: [K, V], + counter: number, + tree: BTree, + ) => R, + initialValue: R, + ): R; + reduce( + callback: ( + previous: R | undefined, + currentPair: [K, V], + counter: number, + tree: BTree, + ) => R, + ): R | undefined; + reduce( + callback: ( + previous: R | undefined, + currentPair: [K, V], + counter: number, + tree: BTree, + ) => R, + initialValue?: R, + ): R | undefined { + let i = 0, + p = initialValue; + var it = this.entries(this.minKey(), ReusedArray), + next; + while (!(next = it.next()).done) p = callback(p, next.value, i++, this); return p; } @@ -377,53 +447,59 @@ export default class BTree implements ISortedMapF, ISortedMap * @param reusedArray Optional array used repeatedly to store key-value * pairs, to avoid creating a new array on every iteration. */ - entries(lowestKey?: K, reusedArray?: (K|V)[]): IterableIterator<[K,V]> { + entries(lowestKey?: K, reusedArray?: (K | V)[]): IterableIterator<[K, V]> { var info = this.findPath(lowestKey); - if (info === undefined) return iterator<[K,V]>(); - var {nodequeue, nodeindex, leaf} = info; + if (info === undefined) return iterator<[K, V]>(); + var { nodequeue, nodeindex, leaf } = info; var state = reusedArray !== undefined ? 1 : 0; - var i = (lowestKey === undefined ? -1 : leaf.indexOf(lowestKey, 0, this._compare) - 1); + var i = + lowestKey === undefined + ? -1 + : leaf.indexOf(lowestKey, 0, this._compare) - 1; - return iterator<[K,V]>(() => { + return iterator<[K, V]>(() => { jump: for (;;) { - switch(state) { + switch (state) { case 0: if (++i < leaf.keys.length) - return {done: false, value: [leaf.keys[i], leaf.values[i]]}; + return { done: false, value: [leaf.keys[i], leaf.values[i]] }; state = 2; continue; case 1: if (++i < leaf.keys.length) { - reusedArray![0] = leaf.keys[i], reusedArray![1] = leaf.values[i]; - return {done: false, value: reusedArray as [K,V]}; + (reusedArray![0] = leaf.keys[i]), + (reusedArray![1] = leaf.values[i]); + return { done: false, value: reusedArray as [K, V] }; } state = 2; case 2: // Advance to the next leaf node - for (var level = -1;;) { + for (var level = -1; ; ) { if (++level >= nodequeue.length) { - state = 3; continue jump; + state = 3; + continue jump; } - if (++nodeindex[level] < nodequeue[level].length) - break; + if (++nodeindex[level] < nodequeue[level].length) break; } for (; level > 0; level--) { - nodequeue[level-1] = (nodequeue[level][nodeindex[level]] as BNodeInternal).children; - nodeindex[level-1] = 0; + nodequeue[level - 1] = (nodequeue[level][ + nodeindex[level] + ] as BNodeInternal).children; + nodeindex[level - 1] = 0; } leaf = nodequeue[0][nodeindex[0]]; i = -1; state = reusedArray !== undefined ? 1 : 0; continue; case 3: - return {done: true, value: undefined}; + return { done: true, value: undefined }; } } }); } /** Returns an iterator that provides items in reversed order. - * @param highestKey Key at which to start iterating, or undefined to + * @param highestKey Key at which to start iterating, or undefined to * start at minKey(). If the specified key doesn't exist then iteration * starts at the next lower key (according to the comparator). * @param reusedArray Optional array used repeatedly to store key-value @@ -431,49 +507,56 @@ export default class BTree implements ISortedMapF, ISortedMap * @param skipHighest Iff this flag is true and the highestKey exists in the * collection, the pair matching highestKey is skipped, not iterated. */ - entriesReversed(highestKey?: K, reusedArray?: (K|V)[], skipHighest?: boolean): IterableIterator<[K,V]> { + entriesReversed( + highestKey?: K, + reusedArray?: (K | V)[], + skipHighest?: boolean, + ): IterableIterator<[K, V]> { if ((highestKey = highestKey || this.maxKey()) === undefined) - return iterator<[K,V]>(); // collection is empty - var {nodequeue,nodeindex,leaf} = this.findPath(highestKey) || this.findPath(this.maxKey())!; + return iterator<[K, V]>(); // collection is empty + var { nodequeue, nodeindex, leaf } = + this.findPath(highestKey) || this.findPath(this.maxKey())!; check(!nodequeue[0] || leaf === nodequeue[0][nodeindex[0]], "wat!"); var i = leaf.indexOf(highestKey, 0, this._compare); - if (!(skipHighest || this._compare(leaf.keys[i], highestKey) > 0)) - i++; + if (!(skipHighest || this._compare(leaf.keys[i], highestKey) > 0)) i++; var state = reusedArray !== undefined ? 1 : 0; - return iterator<[K,V]>(() => { + return iterator<[K, V]>(() => { jump: for (;;) { - switch(state) { + switch (state) { case 0: if (--i >= 0) - return {done: false, value: [leaf.keys[i], leaf.values[i]]}; + return { done: false, value: [leaf.keys[i], leaf.values[i]] }; state = 2; continue; case 1: if (--i >= 0) { - reusedArray![0] = leaf.keys[i], reusedArray![1] = leaf.values[i]; - return {done: false, value: reusedArray as [K,V]}; + (reusedArray![0] = leaf.keys[i]), + (reusedArray![1] = leaf.values[i]); + return { done: false, value: reusedArray as [K, V] }; } state = 2; case 2: // Advance to the next leaf node - for (var level = -1;;) { + for (var level = -1; ; ) { if (++level >= nodequeue.length) { - state = 3; continue jump; + state = 3; + continue jump; } - if (--nodeindex[level] >= 0) - break; + if (--nodeindex[level] >= 0) break; } for (; level > 0; level--) { - nodequeue[level-1] = (nodequeue[level][nodeindex[level]] as BNodeInternal).children; - nodeindex[level-1] = nodequeue[level-1].length-1; + nodequeue[level - 1] = (nodequeue[level][ + nodeindex[level] + ] as BNodeInternal).children; + nodeindex[level - 1] = nodequeue[level - 1].length - 1; } leaf = nodequeue[0][nodeindex[0]]; i = leaf.keys.length; state = reusedArray !== undefined ? 1 : 0; continue; case 3: - return {done: true, value: undefined}; + return { done: true, value: undefined }; } } }); @@ -481,36 +564,39 @@ export default class BTree implements ISortedMapF, ISortedMap /* Used by entries() and entriesReversed() to prepare to start iterating. * It develops a "node queue" for each non-leaf level of the tree. - * Levels are numbered "bottom-up" so that level 0 is a list of leaf + * Levels are numbered "bottom-up" so that level 0 is a list of leaf * nodes from a low-level non-leaf node. The queue at a given level L - * consists of nodequeue[L] which is the children of a BNodeInternal, + * consists of nodequeue[L] which is the children of a BNodeInternal, * and nodeindex[L], the current index within that child list, such * such that nodequeue[L-1] === nodequeue[L][nodeindex[L]].children. * (However inside this function the order is reversed.) */ - private findPath(key?: K): { nodequeue: BNode[][], nodeindex: number[], leaf: BNode } | undefined - { + private findPath( + key?: K, + ): + | { nodequeue: BNode[][]; nodeindex: number[]; leaf: BNode } + | undefined { var nextnode = this._root; - var nodequeue: BNode[][], nodeindex: number[]; + var nodequeue: BNode[][], nodeindex: number[]; if (nextnode.isLeaf) { - nodequeue = EmptyArray, nodeindex = EmptyArray; // avoid allocations + (nodequeue = EmptyArray), (nodeindex = EmptyArray); // avoid allocations } else { - nodequeue = [], nodeindex = []; + (nodequeue = []), (nodeindex = []); for (var d = 0; !nextnode.isLeaf; d++) { - nodequeue[d] = (nextnode as BNodeInternal).children; - nodeindex[d] = key === undefined ? 0 : nextnode.indexOf(key, 0, this._compare); - if (nodeindex[d] >= nodequeue[d].length) - return; // first key > maxKey() + nodequeue[d] = (nextnode as BNodeInternal).children; + nodeindex[d] = + key === undefined ? 0 : nextnode.indexOf(key, 0, this._compare); + if (nodeindex[d] >= nodequeue[d].length) return; // first key > maxKey() nextnode = nodequeue[d][nodeindex[d]]; } nodequeue.reverse(); nodeindex.reverse(); } - return {nodequeue, nodeindex, leaf:nextnode}; + return { nodequeue, nodeindex, leaf: nextnode }; } - /** Returns a new iterator for iterating the keys of each pair in ascending order. + /** Returns a new iterator for iterating the keys of each pair in ascending order. * @param firstKey: Minimum key to include in the output. */ keys(firstKey?: K): IterableIterator { var it = this.entries(firstKey, ReusedArray); @@ -520,8 +606,8 @@ export default class BTree implements ISortedMapF, ISortedMap return n; }); } - - /** Returns a new iterator for iterating the values of each pair in order by key. + + /** Returns a new iterator for iterating the values of each pair in order by key. * @param firstKey: Minimum key whose associated value is included in the output. */ values(firstKey?: K): IterableIterator { var it = this.entries(firstKey, ReusedArray); @@ -540,57 +626,79 @@ export default class BTree implements ISortedMapF, ISortedMap } /** Gets the lowest key in the tree. Complexity: O(log size) */ - minKey(): K | undefined { return this._root.minKey(); } - - /** Gets the highest key in the tree. Complexity: O(1) */ - maxKey(): K | undefined { return this._root.maxKey(); } + minKey(): K | undefined { + return this._root.minKey(); + } - /** Quickly clones the tree by marking the root node as shared. + /** Gets the highest key in the tree. Complexity: O(1) */ + maxKey(): K | undefined { + return this._root.maxKey(); + } + + /** Quickly clones the tree by marking the root node as shared. * Both copies remain editable. When you modify either copy, any * nodes that are shared (or potentially shared) between the two * copies are cloned so that the changes do not affect other copies. * This is known as copy-on-write behavior, or "lazy copying". */ - clone(): BTree { + clone(): BTree { this._root.isShared = true; - var result = new BTree(undefined, this._compare, this._maxNodeSize); + var result = new BTree(undefined, this._compare, this._maxNodeSize); result._root = this._root; result._size = this._size; return result; } - /** Performs a greedy clone, immediately duplicating any nodes that are + /** Performs a greedy clone, immediately duplicating any nodes that are * not currently marked as shared, in order to avoid marking any nodes * as shared. * @param force Clone all nodes, even shared ones. */ - greedyClone(force?: boolean): BTree { - var result = new BTree(undefined, this._compare, this._maxNodeSize); + greedyClone(force?: boolean): BTree { + var result = new BTree(undefined, this._compare, this._maxNodeSize); result._root = this._root.greedyClone(force); result._size = this._size; return result; } /** Gets an array filled with the contents of the tree, sorted by key */ - toArray(maxLength: number = 0x7FFFFFFF): [K,V][] { - let min = this.minKey(), max = this.maxKey(); - if (min !== undefined) - return this.getRange(min, max!, true, maxLength) + toArray(maxLength: number = 0x7fffffff): [K, V][] { + let min = this.minKey(), + max = this.maxKey(); + if (min !== undefined) return this.getRange(min, max!, true, maxLength); return []; } /** Gets an array of all keys, sorted */ keysArray() { var results: K[] = []; - this._root.forRange(this.minKey()!, this.maxKey()!, true, false, this, 0, - (k,v) => { results.push(k); }); + this._root.forRange( + this.minKey()!, + this.maxKey()!, + true, + false, + this, + 0, + (k, v) => { + results.push(k); + }, + ); return results; } - + /** Gets an array of all values, sorted by key */ valuesArray() { var results: V[] = []; - this._root.forRange(this.minKey()!, this.maxKey()!, true, false, this, 0, - (k,v) => { results.push(v); }); + this._root.forRange( + this.minKey()!, + this.maxKey()!, + true, + false, + this, + 0, + (k, v) => { + results.push(v); + }, + ); return results; } @@ -599,45 +707,44 @@ export default class BTree implements ISortedMapF, ISortedMap return this.toArray().toString(); } - /** Stores a key-value pair only if the key doesn't already exist in the tree. + /** Stores a key-value pair only if the key doesn't already exist in the tree. * @returns true if a new key was added - */ + */ setIfNotPresent(key: K, value: V): boolean { return this.set(key, value, false); } /** Returns the next pair whose key is larger than the specified key (or undefined if there is none) */ - nextHigherPair(key: K): [K,V]|undefined { + nextHigherPair(key: K): [K, V] | undefined { var it = this.entries(key, ReusedArray); var r = it.next(); - if (!r.done && this._compare(r.value[0], key) <= 0) - r = it.next(); + if (!r.done && this._compare(r.value[0], key) <= 0) r = it.next(); return r.value; } - + /** Returns the next key larger than the specified key (or undefined if there is none) */ - nextHigherKey(key: K): K|undefined { + nextHigherKey(key: K): K | undefined { var p = this.nextHigherPair(key); return p ? p[0] : p; } /** Returns the next pair whose key is smaller than the specified key (or undefined if there is none) */ - nextLowerPair(key: K): [K,V]|undefined { + nextLowerPair(key: K): [K, V] | undefined { var it = this.entriesReversed(key, ReusedArray, true); return it.next().value; } - + /** Returns the next key smaller than the specified key (or undefined if there is none) */ - nextLowerKey(key: K): K|undefined { + nextLowerKey(key: K): K | undefined { var p = this.nextLowerPair(key); return p ? p[0] : p; } - /** Edits the value associated with a key in the tree, if it already exists. + /** Edits the value associated with a key in the tree, if it already exists. * @returns true if the key existed, false if not. - */ - changeIfPresent(key: K, value: V): boolean { - return this.editRange(key, key, true, (k,v) => ({value})) !== 0; + */ + changeIfPresent(key: K, value: V): boolean { + return this.editRange(key, key, true, (k, v) => ({ value })) !== 0; } /** @@ -648,106 +755,154 @@ export default class BTree implements ISortedMapF, ISortedMap * @param includeHigh If the `high` key is present, its pair will be included * in the output if and only if this parameter is true. Note: if the * `low` key is present, it is always included in the output. - * @param maxLength Length limit. getRange will stop scanning the tree when + * @param maxLength Length limit. getRange will stop scanning the tree when * the array reaches this size. * @description Computational complexity: O(result.length + log size) */ - getRange(low: K, high: K, includeHigh?: boolean, maxLength: number = 0x3FFFFFF): [K,V][] { - var results: [K,V][] = []; - this._root.forRange(low, high, includeHigh, false, this, 0, (k,v) => { - results.push([k,v]) + getRange( + low: K, + high: K, + includeHigh?: boolean, + maxLength: number = 0x3ffffff, + ): [K, V][] { + var results: [K, V][] = []; + this._root.forRange(low, high, includeHigh, false, this, 0, (k, v) => { + results.push([k, v]); return results.length > maxLength ? Break : undefined; }); return results; } /** Adds all pairs from a list of key-value pairs. - * @param pairs Pairs to add to this tree. If there are duplicate keys, - * later pairs currently overwrite earlier ones (e.g. [[0,1],[0,7]] + * @param pairs Pairs to add to this tree. If there are duplicate keys, + * later pairs currently overwrite earlier ones (e.g. [[0,1],[0,7]] * associates 0 with 7.) * @param overwrite Whether to overwrite pairs that already exist (if false, * pairs[i] is ignored when the key pairs[i][0] already exists.) * @returns The number of pairs added to the collection. * @description Computational complexity: O(pairs.length * log(size + pairs.length)) */ - setPairs(pairs: [K,V][], overwrite?: boolean): number { + setPairs(pairs: [K, V][], overwrite?: boolean): number { var added = 0; for (var i = 0; i < pairs.length; i++) - if (this.set(pairs[i][0], pairs[i][1], overwrite)) - added++; + if (this.set(pairs[i][0], pairs[i][1], overwrite)) added++; return added; } - forRange(low: K, high: K, includeHigh: boolean, onFound?: (k:K,v:V,counter:number) => void, initialCounter?: number): number; + forRange( + low: K, + high: K, + includeHigh: boolean, + onFound?: (k: K, v: V, counter: number) => void, + initialCounter?: number, + ): number; /** * Scans the specified range of keys, in ascending order by key. * Note: the callback `onFound` must not insert or remove items in the - * collection. Doing so may cause incorrect data to be sent to the + * collection. Doing so may cause incorrect data to be sent to the * callback afterward. * @param low The first key scanned will be greater than or equal to `low`. * @param high Scanning stops when a key larger than this is reached. * @param includeHigh If the `high` key is present, `onFound` is called for * that final pair if and only if this parameter is true. - * @param onFound A function that is called for each key-value pair. This + * @param onFound A function that is called for each key-value pair. This * function can return {break:R} to stop early with result R. - * @param initialCounter Initial third argument of onFound. This value + * @param initialCounter Initial third argument of onFound. This value * increases by one each time `onFound` is called. Default: 0 - * @returns The number of values found, or R if the callback returned + * @returns The number of values found, or R if the callback returned * `{break:R}` to stop early. * @description Computational complexity: O(number of items scanned + log size) */ - forRange(low: K, high: K, includeHigh: boolean, onFound?: (k:K,v:V,counter:number) => {break?:R}|void, initialCounter?: number): R|number { - var r = this._root.forRange(low, high, includeHigh, false, this, initialCounter || 0, onFound); + forRange( + low: K, + high: K, + includeHigh: boolean, + onFound?: (k: K, v: V, counter: number) => { break?: R } | void, + initialCounter?: number, + ): R | number { + var r = this._root.forRange( + low, + high, + includeHigh, + false, + this, + initialCounter || 0, + onFound, + ); return typeof r === "number" ? r : r.break!; } /** * Scans and potentially modifies values for a subsequence of keys. - * Note: the callback `onFound` should ideally be a pure function. - * Specfically, it must not insert items, call clone(), or change + * Note: the callback `onFound` should ideally be a pure function. + * Specfically, it must not insert items, call clone(), or change * the collection except via return value; out-of-band editing may * cause an exception or may cause incorrect data to be sent to - * the callback (duplicate or missed items). It must not cause a + * the callback (duplicate or missed items). It must not cause a * clone() of the collection, otherwise the clone could be modified * by changes requested by the callback. * @param low The first key scanned will be greater than or equal to `low`. * @param high Scanning stops when a key larger than this is reached. * @param includeHigh If the `high` key is present, `onFound` is called for * that final pair if and only if this parameter is true. - * @param onFound A function that is called for each key-value pair. This - * function can return `{value:v}` to change the value associated + * @param onFound A function that is called for each key-value pair. This + * function can return `{value:v}` to change the value associated * with the current key, `{delete:true}` to delete the current pair, * `{break:R}` to stop early with result R, or it can return nothing * (undefined or {}) to cause no effect and continue iterating. * `{break:R}` can be combined with one of the other two commands. - * The third argument `counter` is the number of items iterated + * The third argument `counter` is the number of items iterated * previously; it equals 0 when `onFound` is called the first time. - * @returns The number of values scanned, or R if the callback returned + * @returns The number of values scanned, or R if the callback returned * `{break:R}` to stop early. - * @description + * @description * Computational complexity: O(number of items scanned + log size) * Note: if the tree has been cloned with clone(), any shared - * nodes are copied before `onFound` is called. This takes O(n) time + * nodes are copied before `onFound` is called. This takes O(n) time * where n is proportional to the amount of shared data scanned. */ - editRange(low: K, high: K, includeHigh: boolean, onFound: (k:K,v:V,counter:number) => EditRangeResult|void, initialCounter?: number): R|number { + editRange( + low: K, + high: K, + includeHigh: boolean, + onFound: (k: K, v: V, counter: number) => EditRangeResult | void, + initialCounter?: number, + ): R | number { var root = this._root; - if (root.isShared) - this._root = root = root.clone(); + if (root.isShared) this._root = root = root.clone(); try { - var r = root.forRange(low, high, includeHigh, true, this, initialCounter || 0, onFound); + var r = root.forRange( + low, + high, + includeHigh, + true, + this, + initialCounter || 0, + onFound, + ); return typeof r === "number" ? r : r.break!; } finally { while (root.keys.length <= 1 && !root.isLeaf) - this._root = root = root.keys.length === 0 ? EmptyLeaf : - (root as any as BNodeInternal).children[0]; + this._root = root = + root.keys.length === 0 + ? EmptyLeaf + : ((root as any) as BNodeInternal).children[0]; } } /** Same as `editRange` except that the callback is called for all pairs. */ - editAll(onFound: (k:K,v:V,counter:number) => EditRangeResult|void, initialCounter?: number): R|number { - return this.editRange(this.minKey()!, this.maxKey()!, true, onFound, initialCounter); + editAll( + onFound: (k: K, v: V, counter: number) => EditRangeResult | void, + initialCounter?: number, + ): R | number { + return this.editRange( + this.minKey()!, + this.maxKey()!, + true, + onFound, + initialCounter, + ); } /** @@ -764,13 +919,11 @@ export default class BTree implements ISortedMapF, ISortedMap /** Deletes a series of keys from the collection. */ deleteKeys(keys: K[]): number { - for (var i = 0, r = 0; i < keys.length; i++) - if (this.delete(keys[i])) - r++; + for (var i = 0, r = 0; i < keys.length; i++) if (this.delete(keys[i])) r++; return r; } - /** Gets the height of the tree: the number of internal nodes between the + /** Gets the height of the tree: the number of internal nodes between the * BTree object and its leaf nodes (zero if there are no internal nodes). */ get height(): number { for (var node = this._root, h = -1; node != null; h++) @@ -780,15 +933,15 @@ export default class BTree implements ISortedMapF, ISortedMap /** Makes the object read-only to ensure it is not accidentally modified. * Freezing does not have to be permanent; unfreeze() reverses the effect. - * This is accomplished by replacing mutator functions with a function - * that throws an Error. Compared to using a property (e.g. this.isFrozen) + * This is accomplished by replacing mutator functions with a function + * that throws an Error. Compared to using a property (e.g. this.isFrozen) * this implementation gives better performance in non-frozen BTrees. */ freeze() { var t = this as any; - // Note: all other mutators ultimately call set() or editRange() + // Note: all other mutators ultimately call set() or editRange() // so we don't need to override those others. - t.clear = t.set = t.editRange = function() { + t.clear = t.set = t.editRange = function () { throw new Error("Attempted to modify a frozen BTree"); }; } @@ -802,7 +955,7 @@ export default class BTree implements ISortedMapF, ISortedMap /** Returns true if the tree appears to be frozen. */ get isFrozen() { - return this.hasOwnProperty('editRange'); + return this.hasOwnProperty("editRange"); } /** Scans the tree for signs of serious bugs (e.g. this.size doesn't match @@ -812,65 +965,81 @@ export default class BTree implements ISortedMapF, ISortedMap * does check that maxKey() of the children of internal nodes are sorted. */ checkValid() { var size = this._root.checkValid(0, this); - check(size === this.size, "size mismatch: counted ", size, "but stored", this.size); + check( + size === this.size, + "size mismatch: counted ", + size, + "but stored", + this.size, + ); } } declare const Symbol: any; -if (Symbol && Symbol.iterator) // iterator is equivalent to entries() +if (Symbol && Symbol.iterator) + // iterator is equivalent to entries() (BTree as any).prototype[Symbol.iterator] = BTree.prototype.entries; (BTree as any).prototype.where = BTree.prototype.filter; (BTree as any).prototype.setRange = BTree.prototype.setPairs; (BTree as any).prototype.add = BTree.prototype.set; -function iterator(next: () => {done?:boolean,value?:T} = (() => ({ done:true, value:undefined }))): IterableIterator { +function iterator( + next: () => { done?: boolean; value?: T } = () => ({ + done: true, + value: undefined, + }), +): IterableIterator { var result: any = { next }; if (Symbol && Symbol.iterator) - result[Symbol.iterator] = function() { return this; }; + result[Symbol.iterator] = function () { + return this; + }; return result; } - /** Leaf node / base class. **************************************************/ -class BNode { +class BNode { // If this is an internal node, _keys[i] is the highest key in children[i]. keys: K[]; values: V[]; isShared: true | undefined; - get isLeaf() { return (this as any).children === undefined; } - + get isLeaf() { + return (this as any).children === undefined; + } + constructor(keys: K[] = [], values?: V[]) { this.keys = keys; - this.values = values || undefVals as any[]; + this.values = values || (undefVals as any[]); this.isShared = undefined; } // Shared methods ///////////////////////////////////////////////////////// maxKey() { - return this.keys[this.keys.length-1]; + return this.keys[this.keys.length - 1]; } // If key not found, returns i^failXor where i is the insertion index. // Callers that don't care whether there was a match will set failXor=0. - indexOf(key: K, failXor: number, cmp: (a:K, b:K) => number): index { + indexOf(key: K, failXor: number, cmp: (a: K, b: K) => number): index { // TODO: benchmark multiple search strategies const keys = this.keys; - var lo = 0, hi = keys.length, mid = hi >> 1; - while(lo < hi) { + var lo = 0, + hi = keys.length, + mid = hi >> 1; + while (lo < hi) { var c = cmp(keys[mid], key); - if (c < 0) - lo = mid + 1; - else if (c > 0) // key < keys[mid] + if (c < 0) lo = mid + 1; + else if (c > 0) + // key < keys[mid] hi = mid; - else if (c === 0) - return mid; + else if (c === 0) return mid; else { // c is NaN or otherwise invalid - if (key === key) // at least the search key is not NaN + if (key === key) + // at least the search key is not NaN return keys.length; - else - throw new Error("BTree: NaN was used as a key"); + else throw new Error("BTree: NaN was used as a key"); } mid = (lo + hi) >> 1; } @@ -928,26 +1097,36 @@ class BNode { return this.keys[0]; } - clone(): BNode { + clone(): BNode { var v = this.values; - return new BNode(this.keys.slice(0), v === undefVals ? v : v.slice(0)); + return new BNode( + this.keys.slice(0), + v === undefVals ? v : v.slice(0), + ); } - greedyClone(force?: boolean): BNode { + greedyClone(force?: boolean): BNode { return this.isShared && !force ? this : this.clone(); } - get(key: K, defaultValue: V|undefined, tree: BTree): V|undefined { + get(key: K, defaultValue: V | undefined, tree: BTree): V | undefined { var i = this.indexOf(key, -1, tree._compare); return i < 0 ? defaultValue : this.values[i]; } - checkValid(depth: number, tree: BTree): number { - var kL = this.keys.length, vL = this.values.length; - check(this.values === undefVals ? kL <= vL : kL === vL, - "keys/values length mismatch: depth", depth, "with lengths", kL, vL); + checkValid(depth: number, tree: BTree): number { + var kL = this.keys.length, + vL = this.values.length; + check( + this.values === undefVals ? kL <= vL : kL === vL, + "keys/values length mismatch: depth", + depth, + "with lengths", + kL, + vL, + ); // Note: we don't check for "node too small" because sometimes a node - // can legitimately have size 1. This occurs if there is a batch + // can legitimately have size 1. This occurs if there is a batch // deletion, leaving a node of size 1, and the siblings are full so // it can't be merged with adjacent nodes. However, the parent will // verify that the average node size is at least half of the maximum. @@ -957,18 +1136,24 @@ class BNode { // Leaf Node: set & node splitting ////////////////////////////////////////// - set(key: K, value: V, overwrite: boolean|undefined, tree: BTree): boolean|BNode { + set( + key: K, + value: V, + overwrite: boolean | undefined, + tree: BTree, + ): boolean | BNode { var i = this.indexOf(key, -1, tree._compare); if (i < 0) { // key does not exist yet i = ~i; tree._size++; - + if (this.keys.length < tree._maxNodeSize) { return this.insertInLeaf(i, key, value, tree); } else { // This leaf node is full and must split - var newRightSibling = this.splitOffRightSide(), target: BNode = this; + var newRightSibling = this.splitOffRightSide(), + target: BNode = this; if (i > this.keys.length) { i -= this.keys.length; target = newRightSibling; @@ -979,8 +1164,7 @@ class BNode { } else { // Key already exists if (overwrite !== false) { - if (value !== undefined) - this.reifyValues(); + if (value !== undefined) this.reifyValues(); // usually this is a no-op, but some users may wish to edit the key this.keys[i] = key; this.values[i] = value; @@ -991,15 +1175,14 @@ class BNode { reifyValues() { if (this.values === undefVals) - return this.values = this.values.slice(0, this.keys.length); + return (this.values = this.values.slice(0, this.keys.length)); return this.values; } - insertInLeaf(i: index, key: K, value: V, tree: BTree) { + insertInLeaf(i: index, key: K, value: V, tree: BTree) { this.keys.splice(i, 0, key); if (this.values === undefVals) { - while (undefVals.length < tree._maxNodeSize) - undefVals.push(undefined); + while (undefVals.length < tree._maxNodeSize) undefVals.push(undefined); if (value === undefined) { return true; } else { @@ -1009,15 +1192,14 @@ class BNode { this.values.splice(i, 0, value); return true; } - - takeFromRight(rhs: BNode) { + + takeFromRight(rhs: BNode) { // Reminder: parent node must update its copy of key for this node // assert: neither node is shared // assert rhs.keys.length > (maxNodeSize/2 && this.keys.length { this.keys.push(rhs.keys.shift()!); } - takeFromLeft(lhs: BNode) { + takeFromLeft(lhs: BNode) { // Reminder: parent node must update its copy of key for this node // assert: neither node is shared // assert rhs.keys.length > (maxNodeSize/2 && this.keys.length { this.keys.unshift(lhs.keys.pop()!); } - splitOffRightSide(): BNode { + splitOffRightSide(): BNode { // Reminder: parent node must update its copy of key for this node - var half = this.keys.length >> 1, keys = this.keys.splice(half); - var values = this.values === undefVals ? undefVals : this.values.splice(half); - return new BNode(keys, values); + var half = this.keys.length >> 1, + keys = this.keys.splice(half); + var values = + this.values === undefVals ? undefVals : this.values.splice(half); + return new BNode(keys, values); } // Leaf Node: scanning & deletions ////////////////////////////////////////// - forRange(low: K, high: K, includeHigh: boolean|undefined, editMode: boolean, tree: BTree, count: number, - onFound?: (k:K, v:V, counter:number) => EditRangeResult|void): EditRangeResult|number { + forRange( + low: K, + high: K, + includeHigh: boolean | undefined, + editMode: boolean, + tree: BTree, + count: number, + onFound?: (k: K, v: V, counter: number) => EditRangeResult | void, + ): EditRangeResult | number { var cmp = tree._compare; var iLow, iHigh; if (high === low) { - if (!includeHigh) - return count; + if (!includeHigh) return count; iHigh = (iLow = this.indexOf(low, -1, cmp)) + 1; - if (iLow < 0) - return count; + if (iLow < 0) return count; } else { iLow = this.indexOf(low, 0, cmp); iHigh = this.indexOf(high, -1, cmp); - if (iHigh < 0) - iHigh = ~iHigh; - else if (includeHigh === true) - iHigh++; + if (iHigh < 0) iHigh = ~iHigh; + else if (includeHigh === true) iHigh++; } - var keys = this.keys, values = this.values; + var keys = this.keys, + values = this.values; if (onFound !== undefined) { - for(var i = iLow; i < iHigh; i++) { + for (var i = iLow; i < iHigh; i++) { var key = keys[i]; var result = onFound(key, values[i], count++); if (result !== undefined) { @@ -1078,30 +1265,26 @@ class BNode { throw new Error("BTree illegally changed or cloned in editRange"); if (result.delete) { this.keys.splice(i, 1); - if (this.values !== undefVals) - this.values.splice(i, 1); + if (this.values !== undefVals) this.values.splice(i, 1); tree._size--; i--; iHigh--; - } else if (result.hasOwnProperty('value')) { + } else if (result.hasOwnProperty("value")) { values![i] = result.value!; } } - if (result.break !== undefined) - return result; + if (result.break !== undefined) return result; } } - } else - count += iHigh - iLow; + } else count += iHigh - iLow; return count; } /** Adds entire contents of right-hand sibling (rhs is left unchanged) */ - mergeSibling(rhs: BNode, _: number) { + mergeSibling(rhs: BNode, _: number) { this.keys.push.apply(this.keys, rhs.keys); if (this.values === undefVals) { - if (rhs.values === undefVals) - return; + if (rhs.values === undefVals) return; this.values = this.values.slice(0, this.keys.length); } this.values.push.apply(this.values, rhs.reifyValues()); @@ -1109,33 +1292,33 @@ class BNode { } /** Internal node (non-leaf node) ********************************************/ -class BNodeInternal extends BNode { - // Note: conventionally B+ trees have one fewer key than the number of +class BNodeInternal extends BNode { + // Note: conventionally B+ trees have one fewer key than the number of // children, but I find it easier to keep the array lengths equal: each // keys[i] caches the value of children[i].maxKey(). - children: BNode[]; + children: BNode[]; - constructor(children: BNode[], keys?: K[]) { + constructor(children: BNode[], keys?: K[]) { if (!keys) { keys = []; - for (var i = 0; i < children.length; i++) - keys[i] = children[i].maxKey(); + for (var i = 0; i < children.length; i++) keys[i] = children[i].maxKey(); } super(keys); this.children = children; } - clone(): BNode { + clone(): BNode { var children = this.children.slice(0); - for (var i = 0; i < children.length; i++) - children[i].isShared = true; - return new BNodeInternal(children, this.keys.slice(0)); + for (var i = 0; i < children.length; i++) children[i].isShared = true; + return new BNodeInternal(children, this.keys.slice(0)); } - greedyClone(force?: boolean): BNode { - if (this.isShared && !force) - return this; - var nu = new BNodeInternal(this.children.slice(0), this.keys.slice(0)); + greedyClone(force?: boolean): BNode { + if (this.isShared && !force) return this; + var nu = new BNodeInternal( + this.children.slice(0), + this.keys.slice(0), + ); for (var i = 0; i < nu.children.length; i++) nu.children[i] = nu.children[i].greedyClone(); return nu; @@ -1145,141 +1328,229 @@ class BNodeInternal extends BNode { return this.children[0].minKey(); } - get(key: K, defaultValue: V|undefined, tree: BTree): V|undefined { - var i = this.indexOf(key, 0, tree._compare), children = this.children; - return i < children.length ? children[i].get(key, defaultValue, tree) : undefined; + get(key: K, defaultValue: V | undefined, tree: BTree): V | undefined { + var i = this.indexOf(key, 0, tree._compare), + children = this.children; + return i < children.length + ? children[i].get(key, defaultValue, tree) + : undefined; } - checkValid(depth: number, tree: BTree) : number { - var kL = this.keys.length, cL = this.children.length; - check(kL === cL, "keys/children length mismatch: depth", depth, "lengths", kL, cL); + checkValid(depth: number, tree: BTree): number { + var kL = this.keys.length, + cL = this.children.length; + check( + kL === cL, + "keys/children length mismatch: depth", + depth, + "lengths", + kL, + cL, + ); check(kL > 1, "internal node has length", kL, "at depth", depth); - var size = 0, c = this.children, k = this.keys, childSize = 0; + var size = 0, + c = this.children, + k = this.keys, + childSize = 0; for (var i = 0; i < cL; i++) { size += c[i].checkValid(depth + 1, tree); childSize += c[i].keys.length; check(size >= childSize, "wtf"); // no way this will ever fail - check(i === 0 || c[i-1].constructor === c[i].constructor, "type mismatch"); + check( + i === 0 || c[i - 1].constructor === c[i].constructor, + "type mismatch", + ); if (c[i].maxKey() != k[i]) - check(false, "keys[", i, "] =", k[i], "is wrong, should be ", c[i].maxKey(), "at depth", depth); - if (!(i === 0 || tree._compare(k[i-1], k[i]) < 0)) - check(false, "sort violation at depth", depth, "index", i, "keys", k[i-1], k[i]); + check( + false, + "keys[", + i, + "] =", + k[i], + "is wrong, should be ", + c[i].maxKey(), + "at depth", + depth, + ); + if (!(i === 0 || tree._compare(k[i - 1], k[i]) < 0)) + check( + false, + "sort violation at depth", + depth, + "index", + i, + "keys", + k[i - 1], + k[i], + ); } - var toofew = childSize < (tree.maxNodeSize >> 1)*cL; - if (toofew || childSize > tree.maxNodeSize*cL) - check(false, toofew ? "too few" : "too many", "children (", childSize, size, ") at depth", depth, ", maxNodeSize:", tree.maxNodeSize, "children.length:", cL); + var toofew = childSize < (tree.maxNodeSize >> 1) * cL; + if (toofew || childSize > tree.maxNodeSize * cL) + check( + false, + toofew ? "too few" : "too many", + "children (", + childSize, + size, + ") at depth", + depth, + ", maxNodeSize:", + tree.maxNodeSize, + "children.length:", + cL, + ); return size; } // Internal Node: set & node splitting ////////////////////////////////////// - set(key: K, value: V, overwrite: boolean|undefined, tree: BTree): boolean|BNodeInternal { - var c = this.children, max = tree._maxNodeSize, cmp = tree._compare; - var i = Math.min(this.indexOf(key, 0, cmp), c.length - 1), child = c[i]; - - if (child.isShared) - c[i] = child = child.clone(); + set( + key: K, + value: V, + overwrite: boolean | undefined, + tree: BTree, + ): boolean | BNodeInternal { + var c = this.children, + max = tree._maxNodeSize, + cmp = tree._compare; + var i = Math.min(this.indexOf(key, 0, cmp), c.length - 1), + child = c[i]; + + if (child.isShared) c[i] = child = child.clone(); if (child.keys.length >= max) { // child is full; inserting anything else will cause a split. // Shifting an item to the left or right sibling may avoid a split. // We can do a shift if the adjacent node is not full and if the // current key can still be placed in the same node after the shift. - var other: BNode; - if (i > 0 && (other = c[i-1]).keys.length < max && cmp(child.keys[0], key) < 0) { - if (other.isShared) - c[i-1] = other = other.clone(); + var other: BNode; + if ( + i > 0 && + (other = c[i - 1]).keys.length < max && + cmp(child.keys[0], key) < 0 + ) { + if (other.isShared) c[i - 1] = other = other.clone(); other.takeFromRight(child); - this.keys[i-1] = other.maxKey(); - } else if ((other = c[i+1]) !== undefined && other.keys.length < max && cmp(child.maxKey(), key) < 0) { - if (other.isShared) - c[i+1] = other = other.clone(); + this.keys[i - 1] = other.maxKey(); + } else if ( + (other = c[i + 1]) !== undefined && + other.keys.length < max && + cmp(child.maxKey(), key) < 0 + ) { + if (other.isShared) c[i + 1] = other = other.clone(); other.takeFromLeft(child); this.keys[i] = c[i].maxKey(); } } var result = child.set(key, value, overwrite, tree); - if (result === false) - return false; + if (result === false) return false; this.keys[i] = child.maxKey(); - if (result === true) - return true; + if (result === true) return true; // The child has split and `result` is a new right child... does it fit? - if (this.keys.length < max) { // yes - this.insert(i+1, result); + if (this.keys.length < max) { + // yes + this.insert(i + 1, result); return true; - } else { // no, we must split also - var newRightSibling = this.splitOffRightSide(), target: BNodeInternal = this; + } else { + // no, we must split also + var newRightSibling = this.splitOffRightSide(), + target: BNodeInternal = this; if (cmp(result.maxKey(), this.maxKey()) > 0) { target = newRightSibling; i -= this.keys.length; } - target.insert(i+1, result); + target.insert(i + 1, result); return newRightSibling; } } - insert(i: index, child: BNode) { + insert(i: index, child: BNode) { this.children.splice(i, 0, child); this.keys.splice(i, 0, child.maxKey()); } splitOffRightSide() { var half = this.children.length >> 1; - return new BNodeInternal(this.children.splice(half), this.keys.splice(half)); + return new BNodeInternal( + this.children.splice(half), + this.keys.splice(half), + ); } - takeFromRight(rhs: BNode) { + takeFromRight(rhs: BNode) { // Reminder: parent node must update its copy of key for this node // assert: neither node is shared // assert rhs.keys.length > (maxNodeSize/2 && this.keys.length).children.shift()!); + this.children.push((rhs as BNodeInternal).children.shift()!); } - takeFromLeft(lhs: BNode) { + takeFromLeft(lhs: BNode) { // Reminder: parent node must update its copy of key for this node // assert: neither node is shared // assert rhs.keys.length > (maxNodeSize/2 && this.keys.length).children.pop()!); + this.children.unshift((lhs as BNodeInternal).children.pop()!); } // Internal Node: scanning & deletions ////////////////////////////////////// - forRange(low: K, high: K, includeHigh: boolean|undefined, editMode: boolean, tree: BTree, count: number, - onFound?: (k:K, v:V, counter:number) => EditRangeResult|void): EditRangeResult|number - { + forRange( + low: K, + high: K, + includeHigh: boolean | undefined, + editMode: boolean, + tree: BTree, + count: number, + onFound?: (k: K, v: V, counter: number) => EditRangeResult | void, + ): EditRangeResult | number { var cmp = tree._compare; - var iLow = this.indexOf(low, 0, cmp), i = iLow; - var iHigh = Math.min(high === low ? iLow : this.indexOf(high, 0, cmp), this.keys.length-1); - var keys = this.keys, children = this.children; + var iLow = this.indexOf(low, 0, cmp), + i = iLow; + var iHigh = Math.min( + high === low ? iLow : this.indexOf(high, 0, cmp), + this.keys.length - 1, + ); + var keys = this.keys, + children = this.children; if (!editMode) { // Simple case - for(; i <= iHigh; i++) { - var result = children[i].forRange(low, high, includeHigh, editMode, tree, count, onFound); - if (typeof result !== 'number') - return result; + for (; i <= iHigh; i++) { + var result = children[i].forRange( + low, + high, + includeHigh, + editMode, + tree, + count, + onFound, + ); + if (typeof result !== "number") return result; count = result; } } else if (i <= iHigh) { try { - for(; i <= iHigh; i++) { - if (children[i].isShared) - children[i] = children[i].clone(); - var result = children[i].forRange(low, high, includeHigh, editMode, tree, count, onFound); + for (; i <= iHigh; i++) { + if (children[i].isShared) children[i] = children[i].clone(); + var result = children[i].forRange( + low, + high, + includeHigh, + editMode, + tree, + count, + onFound, + ); keys[i] = children[i].maxKey(); - if (typeof result !== 'number') - return result; + if (typeof result !== "number") return result; count = result; } } finally { // Deletions may have occurred, so look for opportunities to merge nodes. var half = tree._maxNodeSize >> 1; - if (iLow > 0) - iLow--; - for(i = iHigh; i >= iLow; i--) { + if (iLow > 0) iLow--; + for (i = iHigh; i >= iLow; i--) { if (children[i].keys.length <= half) this.tryMerge(i, tree._maxNodeSize); } @@ -1298,10 +1569,11 @@ class BNodeInternal extends BNode { tryMerge(i: index, maxSize: number): boolean { var children = this.children; if (i >= 0 && i + 1 < children.length) { - if (children[i].keys.length + children[i+1].keys.length <= maxSize) { - if (children[i].isShared) // cloned already UNLESS i is outside scan range + if (children[i].keys.length + children[i + 1].keys.length <= maxSize) { + if (children[i].isShared) + // cloned already UNLESS i is outside scan range children[i] = children[i].clone(); - children[i].mergeSibling(children[i+1], maxSize); + children[i].mergeSibling(children[i + 1], maxSize); children.splice(i + 1, 1); this.keys.splice(i + 1, 1); this.keys[i] = children[i].maxKey(); @@ -1311,15 +1583,18 @@ class BNodeInternal extends BNode { return false; } - mergeSibling(rhs: BNode, maxNodeSize: number) { + mergeSibling(rhs: BNode, maxNodeSize: number) { // assert !this.isShared; var oldLength = this.keys.length; this.keys.push.apply(this.keys, rhs.keys); - this.children.push.apply(this.children, (rhs as any as BNodeInternal).children); + this.children.push.apply( + this.children, + ((rhs as any) as BNodeInternal).children, + ); // If our children are themselves almost empty due to a mass-delete, // they may need to be merged too (but only the oldLength-1 and its // right sibling should need this). - this.tryMerge(oldLength-1, maxNodeSize); + this.tryMerge(oldLength - 1, maxNodeSize); } } @@ -1332,20 +1607,27 @@ class BNodeInternal extends BNode { // users from making this array too large, BTree has a maximum node size. var undefVals: any[] = []; -const Delete = {delete: true}, DeleteRange = () => Delete; -const Break = {break: true}; -const EmptyLeaf = (function() { - var n = new BNode(); n.isShared = true; return n; +const Delete = { delete: true }, + DeleteRange = () => Delete; +const Break = { break: true }; +const EmptyLeaf = (function () { + var n = new BNode(); + n.isShared = true; + return n; })(); const EmptyArray: any[] = []; const ReusedArray: any[] = []; // assumed thread-local function check(fact: boolean, ...args: any[]) { if (!fact) { - args.unshift('B+ tree '); // at beginning of message - throw new Error(args.join(' ')); + args.unshift("B+ tree "); // at beginning of message + throw new Error(args.join(" ")); } } /** A BTree frozen in the empty state. */ -export const EmptyBTree = (() => { let t = new BTree(); t.freeze(); return t; })(); +export const EmptyBTree = (() => { + let t = new BTree(); + t.freeze(); + return t; +})(); diff --git a/packages/idb-bridge/src/tree/interfaces.ts b/packages/idb-bridge/src/tree/interfaces.ts index 6bd0cdf58..ce8808d09 100644 --- a/packages/idb-bridge/src/tree/interfaces.ts +++ b/packages/idb-bridge/src/tree/interfaces.ts @@ -24,15 +24,13 @@ SPDX-License-Identifier: MIT // Original repository: https://github.com/qwertie/btree-typescript - /** Read-only set interface (subinterface of IMapSource). * The word "set" usually means that each item in the collection is unique - * (appears only once, based on a definition of equality used by the - * collection.) Objects conforming to this interface aren't guaranteed not - * to contain duplicates, but as an example, BTree implements this + * (appears only once, based on a definition of equality used by the + * collection.) Objects conforming to this interface aren't guaranteed not + * to contain duplicates, but as an example, BTree implements this * interface and does not allow duplicates. */ -export interface ISetSource -{ +export interface ISetSource { /** Returns the number of key/value pairs in the map object. */ size: number; /** Returns a boolean asserting whether the key exists in the map object or not. */ @@ -42,21 +40,23 @@ export interface ISetSource } /** Read-only map interface (i.e. a source of key-value pairs). */ -export interface IMapSource extends ISetSource -{ +export interface IMapSource extends ISetSource { /** Returns the number of key/value pairs in the map object. */ size: number; /** Returns the value associated to the key, or undefined if there is none. */ - get(key: K): V|undefined; + get(key: K): V | undefined; /** Returns a boolean asserting whether the key exists in the map object or not. */ has(key: K): boolean; /** Calls callbackFn once for each key-value pair present in the map object. * The ES6 Map class sends the value to the callback before the key, so * this interface must do likewise. */ - forEach(callbackFn: (v:V, k:K, map:IMapSource) => void, thisArg?: any): void; - + forEach( + callbackFn: (v: V, k: K, map: IMapSource) => void, + thisArg?: any, + ): void; + /** Returns an iterator that provides all key-value pairs from the collection (as arrays of length 2). */ - entries(): IterableIterator<[K,V]>; + entries(): IterableIterator<[K, V]>; /** Returns a new iterator for iterating the keys of each pair. */ keys(): IterableIterator; /** Returns a new iterator for iterating the values of each pair. */ @@ -65,14 +65,13 @@ export interface IMapSource extends ISetSource //[Symbol.iterator](): IterableIterator<[K,V]>; } -/** Write-only set interface (the set cannot be queried, but items can be added to it.) +/** Write-only set interface (the set cannot be queried, but items can be added to it.) * @description Note: BTree does not officially implement this interface, * but BTree can be used as an instance of ISetSink. */ -export interface ISetSink -{ +export interface ISetSink { /** Adds the specified item to the set, if it was not in the set already. */ add(key: K): any; - /** Returns true if an element in the map object existed and has been + /** Returns true if an element in the map object existed and has been * removed, or false if the element did not exist. */ delete(key: K): boolean; /** Removes everything so that the set is empty. */ @@ -80,12 +79,11 @@ export interface ISetSink } /** Write-only map interface (i.e. a drain into which key-value pairs can be "sunk") */ -export interface IMapSink -{ - /** Returns true if an element in the map object existed and has been +export interface IMapSink { + /** Returns true if an element in the map object existed and has been * removed, or false if the element did not exist. */ delete(key: K): boolean; - /** Sets the value for the key in the map object (the return value is + /** Sets the value for the key in the map object (the return value is * boolean in BTree but Map returns the Map itself.) */ set(key: K, value: V): any; /** Removes all key/value pairs from the IMap object. */ @@ -95,119 +93,154 @@ export interface IMapSink /** Set interface. * @description Note: BTree does not officially implement this interface, * but BTree can be used as an instance of ISet. */ -export interface ISet extends ISetSource, ISetSink { } +export interface ISet extends ISetSource, ISetSink {} /** An interface compatible with ES6 Map and BTree. This interface does not - * describe the complete interface of either class, but merely the common + * describe the complete interface of either class, but merely the common * interface shared by both. */ -export interface IMap extends IMapSource, IMapSink { } +export interface IMap + extends IMapSource, + IMapSink {} /** An data source that provides read-only access to a set of items called * "keys" in sorted order. This is a subinterface of ISortedMapSource. */ -export interface ISortedSetSource extends ISetSource -{ +export interface ISortedSetSource extends ISetSource { /** Gets the lowest key in the collection. */ minKey(): K | undefined; /** Gets the highest key in the collection. */ maxKey(): K | undefined; /** Returns the next key larger than the specified key (or undefined if there is none) */ - nextHigherKey(key: K): K|undefined; + nextHigherKey(key: K): K | undefined; /** Returns the next key smaller than the specified key (or undefined if there is none) */ - nextLowerKey(key: K): K|undefined; + nextLowerKey(key: K): K | undefined; /** Calls `callback` on the specified range of keys, in ascending order by key. * @param low The first key scanned will be greater than or equal to `low`. * @param high Scanning stops when a key larger than this is reached. - * @param includeHigh If the `high` key is present in the map, `onFound` is called + * @param includeHigh If the `high` key is present in the map, `onFound` is called * for that final pair if and only if this parameter is true. * @param onFound A function that is called for each key pair. Because this - * is a subinterface of ISortedMapSource, if there is a value + * is a subinterface of ISortedMapSource, if there is a value * associated with the key, it is passed as the second parameter. - * @param initialCounter Initial third argument of `onFound`. This value + * @param initialCounter Initial third argument of `onFound`. This value * increases by one each time `onFound` is called. Default: 0 * @returns Number of pairs found and the number of times `onFound` was called. */ - forRange(low: K, high: K, includeHigh: boolean, onFound?: (k:K,v:any,counter:number) => void, initialCounter?: number): number; - /** Returns a new iterator for iterating the keys of each pair in ascending order. + forRange( + low: K, + high: K, + includeHigh: boolean, + onFound?: (k: K, v: any, counter: number) => void, + initialCounter?: number, + ): number; + /** Returns a new iterator for iterating the keys of each pair in ascending order. * @param firstKey: Minimum key to include in the output. */ keys(firstKey?: K): IterableIterator; } /** An data source that provides read-only access to items in sorted order. */ -export interface ISortedMapSource extends IMapSource, ISortedSetSource -{ +export interface ISortedMapSource + extends IMapSource, + ISortedSetSource { /** Returns the next pair whose key is larger than the specified key (or undefined if there is none) */ - nextHigherPair(key: K): [K,V]|undefined; + nextHigherPair(key: K): [K, V] | undefined; /** Returns the next pair whose key is smaller than the specified key (or undefined if there is none) */ - nextLowerPair(key: K): [K,V]|undefined; + nextLowerPair(key: K): [K, V] | undefined; /** Builds an array of pairs from the specified range of keys, sorted by key. * Each returned pair is also an array: pair[0] is the key, pair[1] is the value. * @param low The first key in the array will be greater than or equal to `low`. * @param high This method returns when a key larger than this is reached. * @param includeHigh If the `high` key is present in the map, its pair will be - * included in the output if and only if this parameter is true. Note: + * included in the output if and only if this parameter is true. Note: * if the `low` key is present, it is always included in the output. * @param maxLength Maximum length of the returned array (default: unlimited) * @description Computational complexity: O(result.length + log size) */ - getRange(low: K, high: K, includeHigh?: boolean, maxLength?: number): [K,V][]; + getRange( + low: K, + high: K, + includeHigh?: boolean, + maxLength?: number, + ): [K, V][]; /** Calls `callback` on the specified range of keys, in ascending order by key. * @param low The first key scanned will be greater than or equal to `low`. * @param high Scanning stops when a key larger than this is reached. - * @param includeHigh If the `high` key is present in the map, `onFound` is called + * @param includeHigh If the `high` key is present in the map, `onFound` is called * for that final pair if and only if this parameter is true. * @param onFound A function that is called for each key-value pair. - * @param initialCounter Initial third argument of onFound. This value + * @param initialCounter Initial third argument of onFound. This value * increases by one each time `onFound` is called. Default: 0 * @returns Number of pairs found and the number of times `callback` was called. */ - forRange(low: K, high: K, includeHigh: boolean, onFound?: (k:K,v:V,counter:number) => void, initialCounter?: number): number; + forRange( + low: K, + high: K, + includeHigh: boolean, + onFound?: (k: K, v: V, counter: number) => void, + initialCounter?: number, + ): number; /** Returns an iterator that provides items in order by key. * @param firstKey: Minimum key to include in the output. */ - entries(firstKey?: K): IterableIterator<[K,V]>; - /** Returns a new iterator for iterating the keys of each pair in ascending order. + entries(firstKey?: K): IterableIterator<[K, V]>; + /** Returns a new iterator for iterating the keys of each pair in ascending order. * @param firstKey: Minimum key to include in the output. */ keys(firstKey?: K): IterableIterator; - /** Returns a new iterator for iterating the values of each pair in order by key. + /** Returns a new iterator for iterating the values of each pair in order by key. * @param firstKey: Minimum key whose associated value is included in the output. */ values(firstKey?: K): IterableIterator; - + // This method should logically be in IMapSource but is not supported by ES6 Map - /** Performs a reduce operation like the `reduce` method of `Array`. + /** Performs a reduce operation like the `reduce` method of `Array`. * It is used to combine all pairs into a single value, or perform conversions. */ - reduce(callback: (previous:R,currentPair:[K,V],counter:number,tree:IMapF) => R, initialValue: R): R; - /** Performs a reduce operation like the `reduce` method of `Array`. + reduce( + callback: ( + previous: R, + currentPair: [K, V], + counter: number, + tree: IMapF, + ) => R, + initialValue: R, + ): R; + /** Performs a reduce operation like the `reduce` method of `Array`. * It is used to combine all pairs into a single value, or perform conversions. */ - reduce(callback: (previous:R|undefined,currentPair:[K,V],counter:number,tree:IMapF) => R): R|undefined; + reduce( + callback: ( + previous: R | undefined, + currentPair: [K, V], + counter: number, + tree: IMapF, + ) => R, + ): R | undefined; } /** An interface for a set of keys (the combination of ISortedSetSource and ISetSink) */ -export interface ISortedSet extends ISortedSetSource, ISetSink { } +export interface ISortedSet extends ISortedSetSource, ISetSink {} -/** An interface for a sorted map (dictionary), +/** An interface for a sorted map (dictionary), * not including functional/persistent methods. */ -export interface ISortedMap extends IMap, ISortedMapSource -{ +export interface ISortedMap + extends IMap, + ISortedMapSource { // All of the following methods should be in IMap but are left out of IMap // so that IMap is compatible with ES6 Map. /** Adds or overwrites a key-value pair in the sorted map. * @param key the key is used to determine the sort order of data in the tree. * @param value data to associate with the key - * @param overwrite Whether to overwrite an existing key-value pair + * @param overwrite Whether to overwrite an existing key-value pair * (default: true). If this is false and there is an existing * key-value pair then the call to this method has no effect. - * @returns true if a new key-value pair was added, false if the key + * @returns true if a new key-value pair was added, false if the key * already existed. */ set(key: K, value: V, overwrite?: boolean): boolean; /** Adds all pairs from a list of key-value pairs. - * @param pairs Pairs to add to this tree. If there are duplicate keys, - * later pairs currently overwrite earlier ones (e.g. [[0,1],[0,7]] + * @param pairs Pairs to add to this tree. If there are duplicate keys, + * later pairs currently overwrite earlier ones (e.g. [[0,1],[0,7]] * associates 0 with 7.) * @param overwrite Whether to overwrite pairs that already exist (if false, * pairs[i] is ignored when the key pairs[i][0] already exists.) * @returns The number of pairs added to the collection. */ - setPairs(pairs: [K,V][], overwrite?: boolean): number; + setPairs(pairs: [K, V][], overwrite?: boolean): number; /** Deletes a series of keys from the collection. */ deleteKeys(keys: K[]): number; /** Removes a range of key-value pairs from the B+ tree. @@ -218,18 +251,18 @@ export interface ISortedMap extends IMap, ISortedMapSource; + entries(firstKey?: K): IterableIterator<[K, V]>; keys(firstKey?: K): IterableIterator; values(firstKey?: K): IterableIterator; } -/** An interface for a functional set, in which the set object could be read-only - * but new versions of the set can be created by calling "with" or "without" +/** An interface for a functional set, in which the set object could be read-only + * but new versions of the set can be created by calling "with" or "without" * methods to add or remove keys. This is a subinterface of IMapF, * so the items in the set may be referred to as "keys". */ -export interface ISetF extends ISetSource { - /** Returns a copy of the set with the specified key included. - * @description You might wonder why this method accepts only one key +export interface ISetF extends ISetSource { + /** Returns a copy of the set with the specified key included. + * @description You might wonder why this method accepts only one key * instead of `...keys: K[]`. The reason is that the derived interface * IMapF expects the second parameter to be a value. Therefore * withKeys() is provided to set multiple keys at once. */ @@ -239,91 +272,133 @@ export interface ISetF extends ISetSource { /** Returns a copy of the tree with all the keys in the specified array present. * @param keys The keys to add. * @param returnThisIfUnchanged If true, the method returns `this` when - * all of the keys are already present in the collection. The + * all of the keys are already present in the collection. The * default value may be true or false depending on the concrete * implementation of the interface (in BTree, the default is false.) */ withKeys(keys: K[], returnThisIfUnchanged?: boolean): ISetF; /** Returns a copy of the tree with all the keys in the specified array removed. */ withoutKeys(keys: K[], returnThisIfUnchanged?: boolean): ISetF; - /** Returns a copy of the tree with items removed whenever the callback + /** Returns a copy of the tree with items removed whenever the callback * function returns false. * @param callback A function to call for each item in the set. * The second parameter to `callback` exists because ISetF * is a subinterface of IMapF. If the object is a map, v * is the value associated with the key, otherwise v could be * undefined or another copy of the third parameter (counter). */ - filter(callback: (k:K,v:any,counter:number) => boolean, returnThisIfUnchanged?: boolean): ISetF; + filter( + callback: (k: K, v: any, counter: number) => boolean, + returnThisIfUnchanged?: boolean, + ): ISetF; } /** An interface for a functional map, in which the map object could be read-only - * but new versions of the map can be created by calling "with" or "without" - * methods to add or remove keys or key-value pairs. + * but new versions of the map can be created by calling "with" or "without" + * methods to add or remove keys or key-value pairs. */ -export interface IMapF extends IMapSource, ISetF { +export interface IMapF extends IMapSource, ISetF { /** Returns a copy of the tree with the specified key set (the value is undefined). */ - with(key: K): IMapF; + with(key: K): IMapF; /** Returns a copy of the tree with the specified key-value pair set. */ - with(key: K, value: V2, overwrite?: boolean): IMapF; + with(key: K, value: V2, overwrite?: boolean): IMapF; /** Returns a copy of the tree with the specified key-value pairs set. */ - withPairs(pairs: [K,V|V2][], overwrite: boolean): IMapF; + withPairs(pairs: [K, V | V2][], overwrite: boolean): IMapF; /** Returns a copy of the tree with all the keys in the specified array present. * @param keys The keys to add. If a key is already present in the tree, - * neither the existing key nor the existing value is modified. + * neither the existing key nor the existing value is modified. * @param returnThisIfUnchanged If true, the method returns `this` when - * all of the keys are already present in the collection. The + * all of the keys are already present in the collection. The * default value may be true or false depending on the concrete * implementation of the interface (in BTree, the default is false.) */ - withKeys(keys: K[], returnThisIfUnchanged?: boolean): IMapF; + withKeys(keys: K[], returnThisIfUnchanged?: boolean): IMapF; /** Returns a copy of the tree with all values altered by a callback function. */ - mapValues(callback: (v:V,k:K,counter:number) => R): IMapF; - /** Performs a reduce operation like the `reduce` method of `Array`. + mapValues(callback: (v: V, k: K, counter: number) => R): IMapF; + /** Performs a reduce operation like the `reduce` method of `Array`. * It is used to combine all pairs into a single value, or perform conversions. */ - reduce(callback: (previous:R,currentPair:[K,V],counter:number,tree:IMapF) => R, initialValue: R): R; - /** Performs a reduce operation like the `reduce` method of `Array`. + reduce( + callback: ( + previous: R, + currentPair: [K, V], + counter: number, + tree: IMapF, + ) => R, + initialValue: R, + ): R; + /** Performs a reduce operation like the `reduce` method of `Array`. * It is used to combine all pairs into a single value, or perform conversions. */ - reduce(callback: (previous:R|undefined,currentPair:[K,V],counter:number,tree:IMapF) => R): R|undefined; + reduce( + callback: ( + previous: R | undefined, + currentPair: [K, V], + counter: number, + tree: IMapF, + ) => R, + ): R | undefined; // Update return types in ISetF - without(key: K): IMapF; - withoutKeys(keys: K[], returnThisIfUnchanged?: boolean): IMapF; - /** Returns a copy of the tree with pairs removed whenever the callback + without(key: K): IMapF; + withoutKeys(keys: K[], returnThisIfUnchanged?: boolean): IMapF; + /** Returns a copy of the tree with pairs removed whenever the callback * function returns false. */ - filter(callback: (k:K,v:V,counter:number) => boolean, returnThisIfUnchanged?: boolean): IMapF; + filter( + callback: (k: K, v: V, counter: number) => boolean, + returnThisIfUnchanged?: boolean, + ): IMapF; } -/** An interface for a functional sorted set: a functional set in which the +/** An interface for a functional sorted set: a functional set in which the * keys (items) are sorted. This is a subinterface of ISortedMapF. */ -export interface ISortedSetF extends ISetF, ISortedSetSource -{ +export interface ISortedSetF extends ISetF, ISortedSetSource { // TypeScript requires this method of ISortedSetSource to be repeated keys(firstKey?: K): IterableIterator; } -export interface ISortedMapF extends ISortedSetF, IMapF, ISortedMapSource -{ +export interface ISortedMapF + extends ISortedSetF, + IMapF, + ISortedMapSource { /** Returns a copy of the tree with the specified range of keys removed. */ - withoutRange(low: K, high: K, includeHigh: boolean, returnThisIfUnchanged?: boolean): ISortedMapF; + withoutRange( + low: K, + high: K, + includeHigh: boolean, + returnThisIfUnchanged?: boolean, + ): ISortedMapF; // TypeScript requires these methods of ISortedSetF and ISortedMapSource to be repeated - entries(firstKey?: K): IterableIterator<[K,V]>; + entries(firstKey?: K): IterableIterator<[K, V]>; keys(firstKey?: K): IterableIterator; values(firstKey?: K): IterableIterator; - forRange(low: K, high: K, includeHigh: boolean, onFound?: (k:K,v:V,counter:number) => void, initialCounter?: number): number; + forRange( + low: K, + high: K, + includeHigh: boolean, + onFound?: (k: K, v: V, counter: number) => void, + initialCounter?: number, + ): number; // Update the return value of methods from base interfaces - with(key: K): ISortedMapF; - with(key: K, value: V2, overwrite?: boolean): ISortedMapF; - withKeys(keys: K[], returnThisIfUnchanged?: boolean): ISortedMapF; - withPairs(pairs: [K,V|V2][], overwrite: boolean): ISortedMapF; - mapValues(callback: (v:V,k:K,counter:number) => R): ISortedMapF; - without(key: K): ISortedMapF; - withoutKeys(keys: K[], returnThisIfUnchanged?: boolean): ISortedMapF; - filter(callback: (k:K,v:any,counter:number) => boolean, returnThisIfUnchanged?: boolean): ISortedMapF; + with(key: K): ISortedMapF; + with(key: K, value: V2, overwrite?: boolean): ISortedMapF; + withKeys( + keys: K[], + returnThisIfUnchanged?: boolean, + ): ISortedMapF; + withPairs( + pairs: [K, V | V2][], + overwrite: boolean, + ): ISortedMapF; + mapValues(callback: (v: V, k: K, counter: number) => R): ISortedMapF; + without(key: K): ISortedMapF; + withoutKeys(keys: K[], returnThisIfUnchanged?: boolean): ISortedMapF; + filter( + callback: (k: K, v: any, counter: number) => boolean, + returnThisIfUnchanged?: boolean, + ): ISortedMapF; } -export interface ISortedMapConstructor { - new (entries?: [K,V][], compare?: (a: K, b: K) => number): ISortedMap; +export interface ISortedMapConstructor { + new (entries?: [K, V][], compare?: (a: K, b: K) => number): ISortedMap; +} +export interface ISortedMapFConstructor { + new (entries?: [K, V][], compare?: (a: K, b: K) => number): ISortedMapF; } -export interface ISortedMapFConstructor { - new (entries?: [K,V][], compare?: (a: K, b: K) => number): ISortedMapF; -} \ No newline at end of file diff --git a/packages/idb-bridge/src/util/FakeEvent.ts b/packages/idb-bridge/src/util/FakeEvent.ts index ae62401c3..4457498f6 100644 --- a/packages/idb-bridge/src/util/FakeEvent.ts +++ b/packages/idb-bridge/src/util/FakeEvent.ts @@ -14,67 +14,64 @@ permissions and limitations under the License. */ - import FakeEventTarget from "./FakeEventTarget"; import { EventType } from "./types"; export class Event { - public eventPath: FakeEventTarget[] = []; - public type: EventType; + public eventPath: FakeEventTarget[] = []; + public type: EventType; - public readonly NONE = 0; - public readonly CAPTURING_PHASE = 1; - public readonly AT_TARGET = 2; - public readonly BUBBLING_PHASE = 3; + public readonly NONE = 0; + public readonly CAPTURING_PHASE = 1; + public readonly AT_TARGET = 2; + public readonly BUBBLING_PHASE = 3; - // Flags - public propagationStopped = false; - public immediatePropagationStopped = false; - public canceled = false; - public initialized = true; - public dispatched = false; + // Flags + public propagationStopped = false; + public immediatePropagationStopped = false; + public canceled = false; + public initialized = true; + public dispatched = false; - public target: FakeEventTarget | null = null; - public currentTarget: FakeEventTarget | null = null; + public target: FakeEventTarget | null = null; + public currentTarget: FakeEventTarget | null = null; - public eventPhase: 0 | 1 | 2 | 3 = 0; + public eventPhase: 0 | 1 | 2 | 3 = 0; - public defaultPrevented = false; + public defaultPrevented = false; - public isTrusted = false; - public timeStamp = Date.now(); + public isTrusted = false; + public timeStamp = Date.now(); - public bubbles: boolean; - public cancelable: boolean; + public bubbles: boolean; + public cancelable: boolean; - constructor( - type: EventType, - eventInitDict: { bubbles?: boolean; cancelable?: boolean } = {}, - ) { - this.type = type; + constructor( + type: EventType, + eventInitDict: { bubbles?: boolean; cancelable?: boolean } = {}, + ) { + this.type = type; - this.bubbles = - eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false; - this.cancelable = - eventInitDict.cancelable !== undefined - ? eventInitDict.cancelable - : false; + this.bubbles = + eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false; + this.cancelable = + eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false; + } + + public preventDefault() { + if (this.cancelable) { + this.canceled = true; } + } - public preventDefault() { - if (this.cancelable) { - this.canceled = true; - } - } + public stopPropagation() { + this.propagationStopped = true; + } - public stopPropagation() { - this.propagationStopped = true; - } - - public stopImmediatePropagation() { - this.propagationStopped = true; - this.immediatePropagationStopped = true; - } + public stopImmediatePropagation() { + this.propagationStopped = true; + this.immediatePropagationStopped = true; + } } export default Event; diff --git a/packages/idb-bridge/src/util/FakeEventTarget.ts b/packages/idb-bridge/src/util/FakeEventTarget.ts index 025f21b4c..291eaca7d 100644 --- a/packages/idb-bridge/src/util/FakeEventTarget.ts +++ b/packages/idb-bridge/src/util/FakeEventTarget.ts @@ -117,7 +117,7 @@ abstract class FakeEventTarget { callback: EventCallback, capture = false, ) { - const i = this.listeners.findIndex(listener => { + const i = this.listeners.findIndex((listener) => { return ( listener.type === type && listener.callback === callback && diff --git a/packages/idb-bridge/src/util/cmp.ts b/packages/idb-bridge/src/util/cmp.ts index 9d0dc99a2..ddd43f2a6 100644 --- a/packages/idb-bridge/src/util/cmp.ts +++ b/packages/idb-bridge/src/util/cmp.ts @@ -18,91 +18,91 @@ import { DataError } from "./errors"; import valueToKey from "./valueToKey"; const getType = (x: any) => { - if (typeof x === "number") { - return "Number"; - } - if (x instanceof Date) { - return "Date"; - } - if (Array.isArray(x)) { - return "Array"; - } - if (typeof x === "string") { - return "String"; - } - if (x instanceof ArrayBuffer) { - return "Binary"; - } + if (typeof x === "number") { + return "Number"; + } + if (x instanceof Date) { + return "Date"; + } + if (Array.isArray(x)) { + return "Array"; + } + if (typeof x === "string") { + return "String"; + } + if (x instanceof ArrayBuffer) { + return "Binary"; + } - throw new DataError(); + throw new DataError(); }; // https://w3c.github.io/IndexedDB/#compare-two-keys const compareKeys = (first: any, second: any): -1 | 0 | 1 => { - if (second === undefined) { - throw new TypeError(); + if (second === undefined) { + throw new TypeError(); + } + + first = valueToKey(first); + second = valueToKey(second); + + const t1 = getType(first); + const t2 = getType(second); + + if (t1 !== t2) { + if (t1 === "Array") { + return 1; + } + if ( + t1 === "Binary" && + (t2 === "String" || t2 === "Date" || t2 === "Number") + ) { + return 1; + } + if (t1 === "String" && (t2 === "Date" || t2 === "Number")) { + return 1; + } + if (t1 === "Date" && t2 === "Number") { + return 1; + } + return -1; + } + + if (t1 === "Binary") { + first = new Uint8Array(first); + second = new Uint8Array(second); + } + + if (t1 === "Array" || t1 === "Binary") { + const length = Math.min(first.length, second.length); + for (let i = 0; i < length; i++) { + const result = compareKeys(first[i], second[i]); + + if (result !== 0) { + return result; + } } - first = valueToKey(first); - second = valueToKey(second); - - const t1 = getType(first); - const t2 = getType(second); - - if (t1 !== t2) { - if (t1 === "Array") { - return 1; - } - if ( - t1 === "Binary" && - (t2 === "String" || t2 === "Date" || t2 === "Number") - ) { - return 1; - } - if (t1 === "String" && (t2 === "Date" || t2 === "Number")) { - return 1; - } - if (t1 === "Date" && t2 === "Number") { - return 1; - } - return -1; + if (first.length > second.length) { + return 1; } - - if (t1 === "Binary") { - first = new Uint8Array(first); - second = new Uint8Array(second); + if (first.length < second.length) { + return -1; } + return 0; + } - if (t1 === "Array" || t1 === "Binary") { - const length = Math.min(first.length, second.length); - for (let i = 0; i < length; i++) { - const result = compareKeys(first[i], second[i]); - - if (result !== 0) { - return result; - } - } - - if (first.length > second.length) { - return 1; - } - if (first.length < second.length) { - return -1; - } - return 0; + if (t1 === "Date") { + if (first.getTime() === second.getTime()) { + return 0; } - - if (t1 === "Date") { - if (first.getTime() === second.getTime()) { - return 0; - } - } else { - if (first === second) { - return 0; - } + } else { + if (first === second) { + return 0; } + } - return first > second ? 1 : -1; + return first > second ? 1 : -1; }; export default compareKeys; diff --git a/packages/idb-bridge/src/util/enforceRange.ts b/packages/idb-bridge/src/util/enforceRange.ts index 9ac472757..87e135798 100644 --- a/packages/idb-bridge/src/util/enforceRange.ts +++ b/packages/idb-bridge/src/util/enforceRange.ts @@ -18,18 +18,18 @@ // https://heycam.github.io/webidl/#EnforceRange const enforceRange = ( - num: number, - type: "MAX_SAFE_INTEGER" | "unsigned long", + num: number, + type: "MAX_SAFE_INTEGER" | "unsigned long", ) => { - const min = 0; - const max = type === "unsigned long" ? 4294967295 : 9007199254740991; + const min = 0; + const max = type === "unsigned long" ? 4294967295 : 9007199254740991; - if (isNaN(num) || num < min || num > max) { - throw new TypeError(); - } - if (num >= 0) { - return Math.floor(num); - } + if (isNaN(num) || num < min || num > max) { + throw new TypeError(); + } + if (num >= 0) { + return Math.floor(num); + } }; export default enforceRange; diff --git a/packages/idb-bridge/src/util/errors.ts b/packages/idb-bridge/src/util/errors.ts index 92de2ea90..6c8f81811 100644 --- a/packages/idb-bridge/src/util/errors.ts +++ b/packages/idb-bridge/src/util/errors.ts @@ -14,117 +14,116 @@ permissions and limitations under the License. */ - /* tslint:disable: max-classes-per-file max-line-length */ const messages = { - AbortError: - "A request was aborted, for example through a call to IDBTransaction.abort.", - ConstraintError: - "A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.", - DataCloneError: - "The data being stored could not be cloned by the internal structured cloning algorithm.", - DataError: "Data provided to an operation does not meet requirements.", - InvalidAccessError: - "An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.", - InvalidStateError: - "An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.", - NotFoundError: - "The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.", - ReadOnlyError: - 'The mutating operation was attempted in a "readonly" transaction.', - TransactionInactiveError: - "A request was placed against a transaction which is currently not active, or which is finished.", - VersionError: - "An attempt was made to open a database using a lower version than the existing version.", + AbortError: + "A request was aborted, for example through a call to IDBTransaction.abort.", + ConstraintError: + "A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.", + DataCloneError: + "The data being stored could not be cloned by the internal structured cloning algorithm.", + DataError: "Data provided to an operation does not meet requirements.", + InvalidAccessError: + "An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.", + InvalidStateError: + "An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.", + NotFoundError: + "The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.", + ReadOnlyError: + 'The mutating operation was attempted in a "readonly" transaction.', + TransactionInactiveError: + "A request was placed against a transaction which is currently not active, or which is finished.", + VersionError: + "An attempt was made to open a database using a lower version than the existing version.", }; export class AbortError extends Error { - constructor(message = messages.AbortError) { - super(); - Object.setPrototypeOf(this, ConstraintError.prototype); - this.name = "AbortError"; - this.message = message; - } + constructor(message = messages.AbortError) { + super(); + Object.setPrototypeOf(this, ConstraintError.prototype); + this.name = "AbortError"; + this.message = message; + } } export class ConstraintError extends Error { - constructor(message = messages.ConstraintError) { - super(); - Object.setPrototypeOf(this, ConstraintError.prototype); - this.name = "ConstraintError"; - this.message = message; - } + constructor(message = messages.ConstraintError) { + super(); + Object.setPrototypeOf(this, ConstraintError.prototype); + this.name = "ConstraintError"; + this.message = message; + } } export class DataCloneError extends Error { - constructor(message = messages.DataCloneError) { - super(); - Object.setPrototypeOf(this, DataCloneError.prototype); - this.name = "DataCloneError"; - this.message = message; - } + constructor(message = messages.DataCloneError) { + super(); + Object.setPrototypeOf(this, DataCloneError.prototype); + this.name = "DataCloneError"; + this.message = message; + } } export class DataError extends Error { - constructor(message = messages.DataError) { - super(); - Object.setPrototypeOf(this, DataError.prototype); - this.name = "DataError"; - this.message = message; - } + constructor(message = messages.DataError) { + super(); + Object.setPrototypeOf(this, DataError.prototype); + this.name = "DataError"; + this.message = message; + } } export class InvalidAccessError extends Error { - constructor(message = messages.InvalidAccessError) { - super(); - Object.setPrototypeOf(this, InvalidAccessError.prototype); - this.name = "InvalidAccessError"; - this.message = message; - } + constructor(message = messages.InvalidAccessError) { + super(); + Object.setPrototypeOf(this, InvalidAccessError.prototype); + this.name = "InvalidAccessError"; + this.message = message; + } } export class InvalidStateError extends Error { - constructor(message = messages.InvalidStateError) { - super(); - Object.setPrototypeOf(this, InvalidStateError.prototype); - this.name = "InvalidStateError"; - this.message = message; - } + constructor(message = messages.InvalidStateError) { + super(); + Object.setPrototypeOf(this, InvalidStateError.prototype); + this.name = "InvalidStateError"; + this.message = message; + } } export class NotFoundError extends Error { - constructor(message = messages.NotFoundError) { - super(); - Object.setPrototypeOf(this, NotFoundError.prototype); - this.name = "NotFoundError"; - this.message = message; - } + constructor(message = messages.NotFoundError) { + super(); + Object.setPrototypeOf(this, NotFoundError.prototype); + this.name = "NotFoundError"; + this.message = message; + } } export class ReadOnlyError extends Error { - constructor(message = messages.ReadOnlyError) { - super(); - Object.setPrototypeOf(this, ReadOnlyError.prototype); - this.name = "ReadOnlyError"; - this.message = message; - } + constructor(message = messages.ReadOnlyError) { + super(); + Object.setPrototypeOf(this, ReadOnlyError.prototype); + this.name = "ReadOnlyError"; + this.message = message; + } } export class TransactionInactiveError extends Error { - constructor(message = messages.TransactionInactiveError) { - super(); - Object.setPrototypeOf(this, TransactionInactiveError.prototype); - this.name = "TransactionInactiveError"; - this.message = message; - } + constructor(message = messages.TransactionInactiveError) { + super(); + Object.setPrototypeOf(this, TransactionInactiveError.prototype); + this.name = "TransactionInactiveError"; + this.message = message; + } } export class VersionError extends Error { - constructor(message = messages.VersionError) { - super(); - Object.setPrototypeOf(this, VersionError.prototype); - this.name = "VersionError"; - this.message = message; - } + constructor(message = messages.VersionError) { + super(); + Object.setPrototypeOf(this, VersionError.prototype); + this.name = "VersionError"; + this.message = message; + } } diff --git a/packages/idb-bridge/src/util/getIndexKeys.test.ts b/packages/idb-bridge/src/util/getIndexKeys.test.ts index b9cdc769d..782b3da2f 100644 --- a/packages/idb-bridge/src/util/getIndexKeys.test.ts +++ b/packages/idb-bridge/src/util/getIndexKeys.test.ts @@ -19,23 +19,31 @@ import test from "ava"; import { getIndexKeys } from "./getIndexKeys"; test("basics", (t) => { - t.deepEqual(getIndexKeys({foo: 42}, "foo", false), [42]); - t.deepEqual(getIndexKeys({foo: {bar: 42}}, "foo.bar", false), [42]); - t.deepEqual(getIndexKeys({foo: [42, 43]}, "foo.0", false), [42]); - t.deepEqual(getIndexKeys({foo: [42, 43]}, "foo.1", false), [43]); + t.deepEqual(getIndexKeys({ foo: 42 }, "foo", false), [42]); + t.deepEqual(getIndexKeys({ foo: { bar: 42 } }, "foo.bar", false), [42]); + t.deepEqual(getIndexKeys({ foo: [42, 43] }, "foo.0", false), [42]); + t.deepEqual(getIndexKeys({ foo: [42, 43] }, "foo.1", false), [43]); t.deepEqual(getIndexKeys([1, 2, 3], "", false), [[1, 2, 3]]); t.throws(() => { - getIndexKeys({foo: 42}, "foo.bar", false); + getIndexKeys({ foo: 42 }, "foo.bar", false); }); - t.deepEqual(getIndexKeys({foo: 42}, "foo", true), [42]); - t.deepEqual(getIndexKeys({foo: 42, bar: 10}, ["foo", "bar"], true), [42, 10]); - t.deepEqual(getIndexKeys({foo: 42, bar: 10}, ["foo", "bar"], false), [[42, 10]]); - t.deepEqual(getIndexKeys({foo: 42, bar: 10}, ["foo", "bar", "spam"], true), [42, 10]); + t.deepEqual(getIndexKeys({ foo: 42 }, "foo", true), [42]); + t.deepEqual(getIndexKeys({ foo: 42, bar: 10 }, ["foo", "bar"], true), [ + 42, + 10, + ]); + t.deepEqual(getIndexKeys({ foo: 42, bar: 10 }, ["foo", "bar"], false), [ + [42, 10], + ]); + t.deepEqual( + getIndexKeys({ foo: 42, bar: 10 }, ["foo", "bar", "spam"], true), + [42, 10], + ); t.throws(() => { - getIndexKeys({foo: 42, bar: 10}, ["foo", "bar", "spam"], false); + getIndexKeys({ foo: 42, bar: 10 }, ["foo", "bar", "spam"], false); }); }); diff --git a/packages/idb-bridge/src/util/injectKey.ts b/packages/idb-bridge/src/util/injectKey.ts index 78d0c217e..38add33bd 100644 --- a/packages/idb-bridge/src/util/injectKey.ts +++ b/packages/idb-bridge/src/util/injectKey.ts @@ -62,4 +62,4 @@ export function injectKey(keyPath: KeyPath, value: Value, key: Key): Value { return newValue; } -export default injectKey; \ No newline at end of file +export default injectKey; diff --git a/packages/idb-bridge/src/util/makeStoreKeyValue.test.ts b/packages/idb-bridge/src/util/makeStoreKeyValue.test.ts index ecbae6508..df9748316 100644 --- a/packages/idb-bridge/src/util/makeStoreKeyValue.test.ts +++ b/packages/idb-bridge/src/util/makeStoreKeyValue.test.ts @@ -14,7 +14,7 @@ permissions and limitations under the License. */ -import test from 'ava'; +import test from "ava"; import { makeStoreKeyValue } from "./makeStoreKeyValue"; test("basics", (t) => { @@ -26,19 +26,37 @@ test("basics", (t) => { t.is(result.value.name, "Florian"); t.is(result.value.id, 42); - result = makeStoreKeyValue({ name: "Florian", id: 10 }, undefined, 5, true, "id"); + result = makeStoreKeyValue( + { name: "Florian", id: 10 }, + undefined, + 5, + true, + "id", + ); t.is(result.updatedKeyGenerator, 11); t.is(result.key, 10); t.is(result.value.name, "Florian"); t.is(result.value.id, 10); - result = makeStoreKeyValue({ name: "Florian", id: 5 }, undefined, 10, true, "id"); + result = makeStoreKeyValue( + { name: "Florian", id: 5 }, + undefined, + 10, + true, + "id", + ); t.is(result.updatedKeyGenerator, 10); t.is(result.key, 5); t.is(result.value.name, "Florian"); t.is(result.value.id, 5); - result = makeStoreKeyValue({ name: "Florian", id: "foo" }, undefined, 10, true, "id"); + result = makeStoreKeyValue( + { name: "Florian", id: "foo" }, + undefined, + 10, + true, + "id", + ); t.is(result.updatedKeyGenerator, 10); t.is(result.key, "foo"); t.is(result.value.name, "Florian"); diff --git a/packages/idb-bridge/src/util/makeStoreKeyValue.ts b/packages/idb-bridge/src/util/makeStoreKeyValue.ts index 9b33158dd..f9006ef51 100644 --- a/packages/idb-bridge/src/util/makeStoreKeyValue.ts +++ b/packages/idb-bridge/src/util/makeStoreKeyValue.ts @@ -14,7 +14,6 @@ permissions and limitations under the License. */ - import { Value, Key, KeyPath } from "./types"; import extractKey from "./extractKey"; import { DataError } from "./errors"; @@ -93,7 +92,7 @@ export function makeStoreKeyValue( key: key, value: value, updatedKeyGenerator, - } + }; } else { // (no, yes, no) key = extractKey(keyPath!, value); @@ -111,7 +110,7 @@ export function makeStoreKeyValue( key: currentKeyGenerator, value: value, updatedKeyGenerator: currentKeyGenerator + 1, - } + }; } else { // (no, no, no) throw new DataError(); diff --git a/packages/idb-bridge/src/util/queueTask.ts b/packages/idb-bridge/src/util/queueTask.ts index 7d59c2263..53563ffd2 100644 --- a/packages/idb-bridge/src/util/queueTask.ts +++ b/packages/idb-bridge/src/util/queueTask.ts @@ -14,8 +14,8 @@ permissions and limitations under the License. */ - export function queueTask(fn: () => void) { - setImmediate(fn); - } +export function queueTask(fn: () => void) { + setImmediate(fn); +} - export default queueTask; \ No newline at end of file +export default queueTask; diff --git a/packages/idb-bridge/src/util/structuredClone.ts b/packages/idb-bridge/src/util/structuredClone.ts index 165ed2f32..c49d0377f 100644 --- a/packages/idb-bridge/src/util/structuredClone.ts +++ b/packages/idb-bridge/src/util/structuredClone.ts @@ -14,7 +14,6 @@ permissions and limitations under the License. */ - function structuredCloneImpl(val: any, visited: WeakMap): any { // FIXME: replace with real implementation! return JSON.parse(JSON.stringify(val)); @@ -28,4 +27,4 @@ export function structuredClone(val: any): any { return structuredCloneImpl(val, visited); } -export default structuredClone; \ No newline at end of file +export default structuredClone; diff --git a/packages/idb-bridge/src/util/types.ts b/packages/idb-bridge/src/util/types.ts index 9bf80366d..b0142b0d8 100644 --- a/packages/idb-bridge/src/util/types.ts +++ b/packages/idb-bridge/src/util/types.ts @@ -15,11 +15,11 @@ permissions and limitations under the License. */ -import BridgeIDBRequest from "../BridgeIDBRequest"; -import BridgeIDBKeyRange from "../BridgeIDBKeyRange"; -import BridgeIDBIndex from "../BridgeIDBIndex"; -import BridgeIBObjectStore from "../BridgeIDBObjectStore"; +import { BridgeIDBRequest } from "../BridgeIDBRequest"; +import { BridgeIDBKeyRange } from "../BridgeIDBKeyRange"; +import { BridgeIDBIndex } from "../BridgeIDBIndex"; import { Event } from "../util/FakeEvent"; +import { BridgeIDBObjectStore } from "../BridgeIDBObjectStore"; interface EventInCallback extends Event { target: any; @@ -37,15 +37,18 @@ export type EventType = | "upgradeneeded" | "versionchange"; -export type CursorSource = BridgeIDBIndex | BridgeIBObjectStore; - +export type CursorSource = BridgeIDBIndex | BridgeIDBObjectStore; export interface FakeDOMStringList extends Array { contains: (value: string) => boolean; item: (i: number) => string | undefined; } -export type BridgeIDBCursorDirection = "next" | "nextunique" | "prev" | "prevunique"; +export type BridgeIDBCursorDirection = + | "next" + | "nextunique" + | "prev" + | "prevunique"; export type KeyPath = string | string[]; @@ -64,8 +67,8 @@ export type TransactionMode = "readonly" | "readwrite" | "versionchange"; export interface BridgeIDBDatabaseInfo { name: string; - version: number -}; + version: number; +} export interface RequestObj { operation: () => Promise; diff --git a/packages/idb-bridge/src/util/validateKeyPath.ts b/packages/idb-bridge/src/util/validateKeyPath.ts index 18552a5d4..072832190 100644 --- a/packages/idb-bridge/src/util/validateKeyPath.ts +++ b/packages/idb-bridge/src/util/validateKeyPath.ts @@ -18,60 +18,60 @@ import { KeyPath } from "./types"; // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-valid-key-path const validateKeyPath = (keyPath: KeyPath, parent?: "array" | "string") => { - // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same - // comment in extractKey) - if ( - keyPath !== undefined && - keyPath !== null && - typeof keyPath !== "string" && - keyPath.toString && - (parent === "array" || !Array.isArray(keyPath)) - ) { - keyPath = keyPath.toString(); - } + // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same + // comment in extractKey) + if ( + keyPath !== undefined && + keyPath !== null && + typeof keyPath !== "string" && + keyPath.toString && + (parent === "array" || !Array.isArray(keyPath)) + ) { + keyPath = keyPath.toString(); + } - if (typeof keyPath === "string") { - if (keyPath === "" && parent !== "string") { - return; - } - try { - // https://mathiasbynens.be/demo/javascript-identifier-regex for ECMAScript 5.1 / Unicode v7.0.0, with - // reserved words at beginning removed - // tslint:disable-next-line max-line-length - const validIdentifierRegex = /^(?:[\$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])(?:[\$0-9A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])*$/; - if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) { - return; - } - } catch (err) { - throw new SyntaxError(err.message); - } - if (keyPath.indexOf(" ") >= 0) { - throw new SyntaxError( - "The keypath argument contains an invalid key path (no spaces allowed).", - ); - } + if (typeof keyPath === "string") { + if (keyPath === "" && parent !== "string") { + return; } - - if (Array.isArray(keyPath) && keyPath.length > 0) { - if (parent) { - // No nested arrays - throw new SyntaxError( - "The keypath argument contains an invalid key path (nested arrays).", - ); - } - for (const part of keyPath) { - validateKeyPath(part, "array"); - } - return; - } else if (typeof keyPath === "string" && keyPath.indexOf(".") >= 0) { - keyPath = keyPath.split("."); - for (const part of keyPath) { - validateKeyPath(part, "string"); - } + try { + // https://mathiasbynens.be/demo/javascript-identifier-regex for ECMAScript 5.1 / Unicode v7.0.0, with + // reserved words at beginning removed + // tslint:disable-next-line max-line-length + const validIdentifierRegex = /^(?:[\$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])(?:[\$0-9A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC])*$/; + if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) { return; + } + } catch (err) { + throw new SyntaxError(err.message); } + if (keyPath.indexOf(" ") >= 0) { + throw new SyntaxError( + "The keypath argument contains an invalid key path (no spaces allowed).", + ); + } + } - throw new SyntaxError(); + if (Array.isArray(keyPath) && keyPath.length > 0) { + if (parent) { + // No nested arrays + throw new SyntaxError( + "The keypath argument contains an invalid key path (nested arrays).", + ); + } + for (const part of keyPath) { + validateKeyPath(part, "array"); + } + return; + } else if (typeof keyPath === "string" && keyPath.indexOf(".") >= 0) { + keyPath = keyPath.split("."); + for (const part of keyPath) { + validateKeyPath(part, "string"); + } + return; + } + + throw new SyntaxError(); }; export default validateKeyPath; diff --git a/packages/idb-bridge/src/util/valueToKey.ts b/packages/idb-bridge/src/util/valueToKey.ts index 85c8c409f..5cf5b2b1b 100644 --- a/packages/idb-bridge/src/util/valueToKey.ts +++ b/packages/idb-bridge/src/util/valueToKey.ts @@ -62,7 +62,6 @@ function valueToKey(input: any, seen?: Set): Key | Key[] { } return keys; } else { - throw new DataError(); } } diff --git a/packages/idb-bridge/tsconfig.json b/packages/idb-bridge/tsconfig.json index 017afdae1..6e41df65d 100644 --- a/packages/idb-bridge/tsconfig.json +++ b/packages/idb-bridge/tsconfig.json @@ -1,16 +1,21 @@ { "compilerOptions": { + "composite": true, "lib": ["es6"], - "module": "commonjs", - "target": "es5", + "module": "ESNext", + "moduleResolution": "node", + "target": "ES6", "noImplicitAny": true, - "outDir": "build", + "outDir": "lib", "declaration": true, "noEmitOnError": true, "strict": true, "incremental": true, "sourceMap": true, - "types": [] + "rootDir": "./src", + "esModuleInterop": true, + "importHelpers": true, + "typeRoots": ["./node_modules/@types"] }, "include": ["src/**/*"] } diff --git a/packages/idb-bridge/yarn.lock b/packages/idb-bridge/yarn.lock deleted file mode 100644 index 9a5daad32..000000000 --- a/packages/idb-bridge/yarn.lock +++ /dev/null @@ -1,2689 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ava/babel-plugin-throws-helper@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@ava/babel-plugin-throws-helper/-/babel-plugin-throws-helper-4.0.0.tgz#8f5b45b7a0a79c6f4032de2101e0c221847efb62" - integrity sha512-3diBLIVBPPh3j4+hb5lo0I1D+S/O/VDJPI4Y502apBxmwEqjyXG4gTSPFUlm41sSZeZzMarT/Gzovw9kV7An0w== - -"@ava/babel-preset-stage-4@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@ava/babel-preset-stage-4/-/babel-preset-stage-4-4.0.0.tgz#9be5a59ead170062e228bb6ffd2b29f0489424fd" - integrity sha512-lZEV1ZANzfzSYBU6WHSErsy7jLPbD1iIgAboASPMcKo7woVni5/5IKWeT0RxC8rY802MFktur3OKEw2JY1Tv2w== - dependencies: - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-dynamic-import" "^7.5.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/plugin-transform-modules-commonjs" "^7.5.0" - -"@ava/babel-preset-transform-test-files@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@ava/babel-preset-transform-test-files/-/babel-preset-transform-test-files-6.0.0.tgz#639e8929d2cdc8863c1f16020ce644c525723cd4" - integrity sha512-8eKhFzZp7Qcq1VLfoC75ggGT8nQs9q8fIxltU47yCB7Wi7Y8Qf6oqY1Bm0z04fIec24vEgr0ENhDHEOUGVDqnA== - dependencies: - "@ava/babel-plugin-throws-helper" "^4.0.0" - babel-plugin-espower "^3.0.1" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/core@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.5.tgz#17b2686ef0d6bc58f963dddd68ab669755582c30" - integrity sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helpers" "^7.5.5" - "@babel/parser" "^7.5.5" - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.0.0", "@babel/generator@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf" - integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ== - dependencies: - "@babel/types" "^7.5.5" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - trim-right "^1.0.1" - -"@babel/helper-annotate-as-pure@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" - integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-function-name@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" - integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== - dependencies: - "@babel/helper-get-function-arity" "^7.0.0" - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-get-function-arity@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" - integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-imports@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" - integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== - dependencies: - "@babel/types" "^7.0.0" - -"@babel/helper-module-transforms@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" - integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/template" "^7.4.4" - "@babel/types" "^7.5.5" - lodash "^4.17.13" - -"@babel/helper-plugin-utils@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" - integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== - -"@babel/helper-regex@^7.4.4": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" - integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" - integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.0.0" - "@babel/helper-wrap-function" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-simple-access@^7.1.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" - integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== - dependencies: - "@babel/template" "^7.1.0" - "@babel/types" "^7.0.0" - -"@babel/helper-split-export-declaration@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" - integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== - dependencies: - "@babel/types" "^7.4.4" - -"@babel/helper-wrap-function@^7.1.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" - integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== - dependencies: - "@babel/helper-function-name" "^7.1.0" - "@babel/template" "^7.1.0" - "@babel/traverse" "^7.1.0" - "@babel/types" "^7.2.0" - -"@babel/helpers@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.5.tgz#63908d2a73942229d1e6685bc2a0e730dde3b75e" - integrity sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g== - dependencies: - "@babel/template" "^7.4.4" - "@babel/traverse" "^7.5.5" - "@babel/types" "^7.5.5" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.0.0", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b" - integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g== - -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" - integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-remap-async-to-generator" "^7.1.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - -"@babel/plugin-proposal-dynamic-import@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" - integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" - integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - -"@babel/plugin-syntax-async-generators@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" - integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-dynamic-import@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" - integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" - integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-regex" "^7.4.4" - regexpu-core "^4.5.4" - -"@babel/plugin-transform-modules-commonjs@^7.5.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" - integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== - dependencies: - "@babel/helper-module-transforms" "^7.4.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/helper-simple-access" "^7.1.0" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/template@^7.1.0", "@babel/template@^7.4.4": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" - integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.4.4" - "@babel/types" "^7.4.4" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb" - integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ== - dependencies: - "@babel/code-frame" "^7.5.5" - "@babel/generator" "^7.5.5" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.4.4" - "@babel/parser" "^7.5.5" - "@babel/types" "^7.5.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a" - integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw== - dependencies: - esutils "^2.0.2" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@concordance/react@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@concordance/react/-/react-2.0.0.tgz#aef913f27474c53731f4fd79cc2f54897de90fde" - integrity sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA== - dependencies: - arrify "^1.0.1" - -"@nodelib/fs.scandir@2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.1.tgz#7fa8fed654939e1a39753d286b48b4836d00e0eb" - integrity sha512-NT/skIZjgotDSiXs0WqYhgcuBKhUMgfekCmCGtkUAiLqZdOnrdjmZr9wRl3ll64J9NF79uZ4fk16Dx0yMc/Xbg== - dependencies: - "@nodelib/fs.stat" "2.0.1" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.1", "@nodelib/fs.stat@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.1.tgz#814f71b1167390cfcb6a6b3d9cdeb0951a192c14" - integrity sha512-+RqhBlLn6YRBGOIoVYthsG0J9dfpO79eJyN7BYBkZJtfqrBwf2KK+rD/M/yjZR6WBmIhAgOV7S60eCgaSWtbFw== - -"@nodelib/fs.walk@^1.2.1": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.2.tgz#6a6450c5e17012abd81450eb74949a4d970d2807" - integrity sha512-J/DR3+W12uCzAJkw7niXDcqcKBg6+5G5Q/ZpThpGNzAUz70eOR6RV4XnnSN01qHZiVl0eavoxJsBypQoKsV2QQ== - dependencies: - "@nodelib/fs.scandir" "2.1.1" - fastq "^1.6.0" - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*": - version "12.7.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.2.tgz#c4e63af5e8823ce9cc3f0b34f7b998c2171f0c44" - integrity sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg== - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-escapes@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228" - integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q== - dependencies: - type-fest "^0.5.2" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.0.0.tgz#f6b84e8fc97ea7add7a53b7530ef28f3fde0e048" - integrity sha512-8zjUtFJ3db/QoPXuuEMloS2AUf79/yeyttJ7Abr3hteopJu9HK8vsgGviGUMq+zyA6cZZO6gAyZoMTF6TgaEjA== - dependencies: - color-convert "^2.0.0" - -anymatch@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.0.3.tgz#2fb624fe0e84bccab00afee3d0006ed310f22f09" - integrity sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-uniq@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-2.1.0.tgz#46603d5e28e79bfd02b046fcc1d77c6820bd8e98" - integrity sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -ava@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/ava/-/ava-2.3.0.tgz#cac4d7f0a30077a852c6bf5bc7c0bc78c3021e63" - integrity sha512-4VaaSnl13vpTZmqW3aMqioSolT0/ozRkjQxTLi3p8wtyRONuX/uLKL3uF0j50w2BNRoLsJqztnkX2h8xeVp2lg== - dependencies: - "@ava/babel-preset-stage-4" "^4.0.0" - "@ava/babel-preset-transform-test-files" "^6.0.0" - "@babel/core" "^7.5.5" - "@babel/generator" "^7.5.5" - "@concordance/react" "^2.0.0" - ansi-escapes "^4.2.1" - ansi-styles "^4.0.0" - arr-flatten "^1.1.0" - array-union "^2.1.0" - array-uniq "^2.1.0" - arrify "^2.0.1" - bluebird "^3.5.5" - chalk "^2.4.2" - chokidar "^3.0.2" - chunkd "^1.0.0" - ci-parallel-vars "^1.0.0" - clean-stack "^2.2.0" - clean-yaml-object "^0.1.0" - cli-cursor "^3.1.0" - cli-truncate "^2.0.0" - code-excerpt "^2.1.1" - common-path-prefix "^1.0.0" - concordance "^4.0.0" - convert-source-map "^1.6.0" - currently-unhandled "^0.4.1" - debug "^4.1.1" - del "^4.1.1" - dot-prop "^5.1.0" - emittery "^0.4.1" - empower-core "^1.2.0" - equal-length "^1.0.0" - escape-string-regexp "^2.0.0" - esm "^3.2.25" - figures "^3.0.0" - find-up "^4.1.0" - get-port "^5.0.0" - globby "^10.0.1" - ignore-by-default "^1.0.0" - import-local "^3.0.2" - indent-string "^4.0.0" - is-ci "^2.0.0" - is-error "^2.2.2" - is-observable "^2.0.0" - is-plain-object "^3.0.0" - is-promise "^2.1.0" - lodash "^4.17.15" - loud-rejection "^2.1.0" - make-dir "^3.0.0" - matcher "^2.0.0" - md5-hex "^3.0.1" - meow "^5.0.0" - micromatch "^4.0.2" - ms "^2.1.2" - observable-to-promise "^1.0.0" - ora "^3.4.0" - package-hash "^4.0.0" - pkg-conf "^3.1.0" - plur "^3.1.1" - pretty-ms "^5.0.0" - require-precompiled "^0.1.0" - resolve-cwd "^3.0.0" - slash "^3.0.0" - source-map-support "^0.5.13" - stack-utils "^1.0.2" - strip-ansi "^5.2.0" - strip-bom-buf "^2.0.0" - supertap "^1.0.0" - supports-color "^7.0.0" - trim-off-newlines "^1.0.1" - trim-right "^1.0.1" - unique-temp-dir "^1.0.0" - update-notifier "^3.0.1" - write-file-atomic "^3.0.0" - -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-espower@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/babel-plugin-espower/-/babel-plugin-espower-3.0.1.tgz#180db17126f88e754105b8b5216d21e520a6bd4e" - integrity sha512-Ms49U7VIAtQ/TtcqRbD6UBmJBUCSxiC3+zPc+eGqxKUIFO1lTshyEDRUjhoAbd2rWfwYf3cZ62oXozrd8W6J0A== - dependencies: - "@babel/generator" "^7.0.0" - "@babel/parser" "^7.0.0" - call-matcher "^1.0.0" - core-js "^2.0.0" - espower-location-detector "^1.0.0" - espurify "^1.6.0" - estraverse "^4.1.1" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== - -bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== - -blueimp-md5@^2.10.0: - version "2.11.1" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.11.1.tgz#b1f6b6218d13cdedbf5743f32b3023b2afefcbd3" - integrity sha512-4UiOAmql2XO0Sws07OVzYdCKK0K2Va5g6AVgYXoGhEQiKrdSOefjUCm1frPk6E+xiIOHRqaFg+TUGo7cClKg5g== - -boxen@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb" - integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^2.4.2" - cli-boxes "^2.2.0" - string-width "^3.0.0" - term-size "^1.2.0" - type-fest "^0.3.0" - widest-line "^2.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.1, braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-matcher@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-1.1.0.tgz#23b2c1bc7a8394c8be28609d77ddbd5786680432" - integrity sha512-IoQLeNwwf9KTNbtSA7aEBb1yfDbdnzwjCetjkC8io5oGeOmK2CBNdg0xr+tadRYKO0p7uQyZzvon0kXlZbvGrw== - dependencies: - core-js "^2.0.0" - deep-equal "^1.0.0" - espurify "^1.6.0" - estraverse "^4.0.0" - -call-signature@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" - integrity sha1-qEq8glpV70yysCi9dOIFpluaSZY= - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chokidar@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.0.2.tgz#0d1cd6d04eb2df0327446188cd13736a3367d681" - integrity sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA== - dependencies: - anymatch "^3.0.1" - braces "^3.0.2" - glob-parent "^5.0.0" - is-binary-path "^2.1.0" - is-glob "^4.0.1" - normalize-path "^3.0.0" - readdirp "^3.1.1" - optionalDependencies: - fsevents "^2.0.6" - -chunkd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chunkd/-/chunkd-1.0.0.tgz#4ead4a3704bcce510c4bb4d4a8be30c557836dd1" - integrity sha512-xx3Pb5VF9QaqCotolyZ1ywFBgyuJmu6+9dLiqBxgelEse9Xsr3yUlpoX3O4Oh11M00GT2kYMsRByTKIMJW2Lkg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-parallel-vars@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.0.tgz#af97729ed1c7381911ca37bcea263d62638701b3" - integrity sha512-u6dx20FBXm+apMi+5x7UVm6EH7BL1gc4XrcnQewjcB7HWRcor/V5qWc3RG2HwpgDJ26gIi2DSEu3B7sXynAw/g== - -clean-stack@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" - integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= - -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" - integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== - -cli-truncate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.0.0.tgz#68ff6aaa53b203b52ad89b8b1a80f1f61ad1e1d5" - integrity sha512-C4hp+8GCIFVsUUiXcw+ce+7wexVWImw8rQrgMBFsqerx9LvvcGlwm6sMjQYAEmV/Xb87xc1b5Ttx505MSpZVqg== - dependencies: - slice-ansi "^2.1.0" - string-width "^4.1.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -code-excerpt@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-2.1.1.tgz#5fe3057bfbb71a5f300f659ef2cc0a47651ba77c" - integrity sha512-tJLhH3EpFm/1x7heIW0hemXJTUU5EWl2V0EIX558jp05Mt1U6DVryCgkp3l37cxqs+DNbNgxG43SkwJXpQ14Jw== - dependencies: - convert-to-spaces "^1.0.1" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.0.tgz#9851ac61cc0d3898a8a3088650d5bf447bf69d97" - integrity sha512-hzTicsCJIHdxih9+2aLR1tNGZX5qSJGRHDPVwSY26tVrEf55XNajLOBWz2UuWSIergszA09/bqnOiHyqx9fxQg== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -common-path-prefix@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-1.0.0.tgz#cd52f6f0712e0baab97d6f9732874f22f47752c0" - integrity sha1-zVL28HEuC6q5fW+XModPIvR3UsA= - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concordance@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/concordance/-/concordance-4.0.0.tgz#5932fdee397d129bdbc3a1885fbe69839b1b7e15" - integrity sha512-l0RFuB8RLfCS0Pt2Id39/oCPykE01pyxgAFypWTlaGRgvLkZrtczZ8atEHpTeEIW+zYWXTBuA9cCSeEOScxReQ== - dependencies: - date-time "^2.1.0" - esutils "^2.0.2" - fast-diff "^1.1.2" - js-string-escape "^1.0.1" - lodash.clonedeep "^4.5.0" - lodash.flattendeep "^4.4.0" - lodash.islength "^4.0.1" - lodash.merge "^4.6.1" - md5-hex "^2.0.0" - semver "^5.5.1" - well-known-symbols "^2.0.0" - -configstore@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" - integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -convert-source-map@^1.1.0, convert-source-map@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" - integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== - dependencies: - safe-buffer "~5.1.1" - -convert-to-spaces@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz#7e3e48bbe6d997b1417ddca2868204b4d3d85715" - integrity sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU= - -core-js@^2.0.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" - integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== - -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -date-time@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-2.1.0.tgz#0286d1b4c769633b3ca13e1e62558d2dbdc2eba2" - integrity sha512-/9+C44X7lot0IeiyfgJmETtRMhBidBYM2QFFIkGa0U1k+hSyY87Nw7PY3eDqpvCBm7I3WCSfPeZskW/YYq6m4g== - dependencies: - time-zone "^1.0.0" - -debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -deep-equal@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -defer-to-connect@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" - integrity sha512-k09hcQcTDY+cwgiwa6PYKLm3jlagNzQ+RSvhjzESOGOx+MNOuXkxTfEvPrO1IOQ81tArCFYQgi631clB70RpQw== - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -dot-prop@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.1.0.tgz#bdd8c986a77b83e3fca524e53786df916cabbd8a" - integrity sha512-n1oC6NBF+KM9oVXtjmen4Yo7HyAVWV2UUl50dCYJdw2924K6dX9bf9TTTWaKtYlRn0FEtxG27KS80ayVLixxJA== - dependencies: - is-obj "^2.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -emittery@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" - integrity sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -empower-core@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-1.2.0.tgz#ce3fb2484d5187fa29c23fba8344b0b2fdf5601c" - integrity sha512-g6+K6Geyc1o6FdXs9HwrXleCFan7d66G5xSCfSF7x1mJDCes6t0om9lFQG3zOrzh3Bkb/45N0cZ5Gqsf7YrzGQ== - dependencies: - call-signature "0.0.2" - core-js "^2.0.0" - -end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== - dependencies: - once "^1.4.0" - -equal-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c" - integrity sha1-IcoRLUirJLTh5//A5TOdMf38J0w= - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es6-error@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -esm@^3.2.25: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - -espower-location-detector@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/espower-location-detector/-/espower-location-detector-1.0.0.tgz#a17b7ecc59d30e179e2bef73fb4137704cb331b5" - integrity sha1-oXt+zFnTDheeK+9z+0E3cEyzMbU= - dependencies: - is-url "^1.2.1" - path-is-absolute "^1.0.0" - source-map "^0.5.0" - xtend "^4.0.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -espurify@^1.6.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.8.1.tgz#5746c6c1ab42d302de10bd1d5bf7f0e8c0515056" - integrity sha512-ZDko6eY/o+D/gHCWyHTU85mKDgYcS4FJj7S+YD6WIInm7GQ6AnOjmcL4+buFV/JOztVLELi/7MmuGU5NHta0Mg== - dependencies: - core-js "^2.0.0" - -estraverse@^4.0.0, estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602" - integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg== - dependencies: - "@nodelib/fs.stat" "^2.0.1" - "@nodelib/fs.walk" "^1.2.1" - glob-parent "^5.0.0" - is-glob "^4.0.1" - merge2 "^1.2.3" - micromatch "^4.0.2" - -fastq@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" - integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== - dependencies: - reusify "^1.0.0" - -figures@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.0.0.tgz#756275c964646163cc6f9197c7a0295dbfd04de9" - integrity sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g== - dependencies: - escape-string-regexp "^1.0.5" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.0.7.tgz#382c9b443c6cbac4c57187cdda23aa3bf1ccfc2a" - integrity sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -get-port@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.0.0.tgz#aa22b6b86fd926dd7884de3e23332c9f70c031a6" - integrity sha512-imzMU0FjsZqNa6BqOjbbW6w5BivHIuQKopjpPqcnx0AVHJQKCxK1O+Ab3OrVXhrekqfVMjwA9ZYu062R+KcIsQ== - dependencies: - type-fest "^0.3.0" - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.3, glob@^7.1.3: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" - integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -hasha@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.0.0.tgz#fdc3785caea03df29535fc8adb512c3d3a709004" - integrity sha512-PqWdhnQhq6tqD32hZv+l1e5mJHNSudjnaAzgAHfkGiU0ABN6lmbZF8abJIulQHbZ7oiHhP8yL6O910ICMc+5pw== - dependencies: - is-stream "^1.1.0" - type-fest "^0.3.0" - -hosted-git-info@^2.1.4: - version "2.8.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" - integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== - -http-cache-semantics@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5" - integrity sha512-TcIMG3qeVLgDr1TEd2XvHaTnMPwYQUQMIBLy+5pLSDKYFc7UIqj39w8EGzZkaxoLv/l2K8HaI0t5AVA+YYgUew== - -ignore-by-default@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - -ignore@^5.1.1: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" - integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.0.0, indent-string@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -irregular-plurals@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-2.0.0.tgz#39d40f05b00f656d0b7fa471230dd3b714af2872" - integrity sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-error@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" - integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-3.0.0.tgz#ec9147bfb629c43f494cf67936a961edec7e8053" - integrity sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-observable@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-2.0.0.tgz#327af1e8cdea9cd717f95911b87c5d34301721a6" - integrity sha512-fhBZv3eFKUbyHXZ1oHujdo2tZ+CNbdpdzzlENgCGZUC8keoGxUew2jYFLYcUB4qo7LDD03o4KK11m/QYD7kEjg== - -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-url@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.10.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json5@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== - dependencies: - minimist "^1.2.0" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.islength@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.islength/-/lodash.islength-4.0.1.tgz#4e9868d452575d750affd358c979543dc20ed577" - integrity sha1-Tpho1FJXXXUK/9NYyXlUPcIO1Xc= - -lodash.merge@^4.6.1: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash@^4.17.13, lodash@^4.17.15: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -loud-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-2.1.0.tgz#4020547ddbc39ed711c8434326df9fc7d2395355" - integrity sha512-g/6MQxUXYHeVqZ4PGpPL1fS1fOvlXoi7bay0pizmjAd/3JhyXwxzwrnr74yzdmhuerlslbRJ3x7IOXzFz0cE5w== - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.2" - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" - integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== - dependencies: - semver "^6.0.0" - -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -matcher@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-2.0.0.tgz#85fe38d97670dbd2a46590cf099401e2ffb4755c" - integrity sha512-nlmfSlgHBFx36j/Pl/KQPbIaqE8Zf0TqmSMjsuddHDg6PMSVgmyW9HpkLs0o0M1n2GIZ/S2BZBLIww/xjhiGng== - dependencies: - escape-string-regexp "^2.0.0" - -md5-hex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" - integrity sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM= - dependencies: - md5-o-matic "^0.1.1" - -md5-hex@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" - integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== - dependencies: - blueimp-md5 "^2.10.0" - -md5-o-matic@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" - integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge2@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3" - integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A== - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -ms@^2.1.1, ms@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee" - integrity sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -observable-to-promise@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/observable-to-promise/-/observable-to-promise-1.0.0.tgz#37e136f16a15385ac063411ada0e1202bfff58f4" - integrity sha512-cqnGUrNsE6vdVDTPAX9/WeVzwy/z37vdxupdQXU8vgTXRFH72KCZiZga8aca2ulRPIeem8W3vW9rQHBwfIl2WA== - dependencies: - is-observable "^2.0.0" - symbol-observable "^1.0.4" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - -os-tmpdir@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-hash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" - integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== - dependencies: - graceful-fs "^4.1.15" - hasha "^5.0.0" - lodash.flattendeep "^4.4.0" - release-zalgo "^1.0.0" - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picomatch@^2.0.4, picomatch@^2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" - integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pkg-conf@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" - integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== - dependencies: - find-up "^3.0.0" - load-json-file "^5.2.0" - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -plur@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/plur/-/plur-3.1.1.tgz#60267967866a8d811504fe58f2faaba237546a5b" - integrity sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w== - dependencies: - irregular-plurals "^2.0.0" - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -pretty-ms@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-5.0.0.tgz#6133a8f55804b208e4728f6aa7bf01085e951e24" - integrity sha512-94VRYjL9k33RzfKiGokPBPpsmloBYSf5Ri+Pq19zlsEcUKFob+admeXr5eFDRuPjFmEOcjJvPGdillYOJyvZ7Q== - dependencies: - parse-ms "^2.1.0" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -readdirp@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.1.2.tgz#fa85d2d14d4289920e4671dead96431add2ee78a" - integrity sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw== - dependencies: - picomatch "^2.0.4" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regexpu-core@^4.5.4: - version "4.5.5" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.5.tgz#aaffe61c2af58269b3e516b61a73790376326411" - integrity sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.1.0" - regjsgen "^0.5.0" - regjsparser "^0.6.0" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.1.0" - -registry-auth-token@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be" - integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw== - dependencies: - rc "^1.2.8" - safe-buffer "^5.0.1" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsgen@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" - integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== - -regjsparser@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" - integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== - dependencies: - jsesc "~0.5.0" - -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" - integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= - dependencies: - es6-error "^4.0.1" - -require-precompiled@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/require-precompiled/-/require-precompiled-0.1.0.tgz#5a1b52eb70ebed43eb982e974c85ab59571e56fa" - integrity sha1-WhtS63Dr7UPrmC6XTIWrWVceVvo= - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.10.0, resolve@^1.3.2: - version "1.12.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" - integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== - dependencies: - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== - -safe-buffer@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.4.1, semver@^5.5.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -serialize-error@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" - integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -source-map-support@^0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-utils@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" - integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^5.2.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-bom-buf@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-2.0.0.tgz#ff9c223937f8e7154b77e9de9bde094186885c15" - integrity sha512-gLFNHucd6gzb8jMsl5QmZ3QgnUJmp7qn4uUSHNwEXumAp7YizoGYw19ZUVfuq4aBOQUtyn2k8X/CwzWB73W2lQ== - dependencies: - is-utf8 "^0.2.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -supertap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supertap/-/supertap-1.0.0.tgz#bd9751c7fafd68c68cf8222a29892206a119fa9e" - integrity sha512-HZJ3geIMPgVwKk2VsmO5YHqnnJYl6bV5A9JW2uzqV43WmpgliNEYbuvukfor7URpaqpxuw3CfZ3ONdVbZjCgIA== - dependencies: - arrify "^1.0.1" - indent-string "^3.2.0" - js-yaml "^3.10.0" - serialize-error "^2.1.0" - strip-ansi "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.0.0.tgz#f2392c50ab35bb3cae7beebf24d254a19f880c06" - integrity sha512-WRt32iTpYEZWYOpcetGm0NPeSvaebccx7hhS/5M6sAiqnhedtFCHFxkjzZlJvFNCPowiKSFGiZk5USQDFy83vQ== - dependencies: - has-flag "^4.0.0" - -symbol-observable@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" - integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-off-newlines@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -type-fest@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2" - integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^3.7.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.2.tgz#27e489b95fa5909445e9fef5ee48d81697ad18fb" - integrity sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ== - -uid2@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" - integrity sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I= - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" - integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -unique-temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-temp-dir/-/unique-temp-dir-1.0.0.tgz#6dce95b2681ca003eebfb304a415f9cbabcc5385" - integrity sha1-bc6VsmgcoAPuv7MEpBX5y6vMU4U= - dependencies: - mkdirp "^0.5.1" - os-tmpdir "^1.0.1" - uid2 "0.0.3" - -update-notifier@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250" - integrity sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ== - dependencies: - boxen "^3.0.0" - chalk "^2.0.1" - configstore "^4.0.0" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.1.0" - is-npm "^3.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -well-known-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" - integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.0.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.0.tgz#1b64dbbf77cb58fd09056963d63e62667ab4fb21" - integrity sha512-EIgkf60l2oWsffja2Sf2AL384dx328c0B+cIYPTQq5q2rOYuDV00/iPFBOUiDKKwKMOhkymH8AidPaRvzfxY+Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" diff --git a/packages/pogen/package.json b/packages/pogen/package.json index 25dc6d850..ace5d2d73 100644 --- a/packages/pogen/package.json +++ b/packages/pogen/package.json @@ -5,7 +5,7 @@ "author": "Florian Dold", "license": "GPL-2.0+", "scripts": { - "build": "tsc" + "compile": "tsc" }, "devDependencies": { "typescript": "^3.3.4000" diff --git a/packages/pogen/tsconfig.json b/packages/pogen/tsconfig.json index a9e57e9e5..c4a2154ea 100644 --- a/packages/pogen/tsconfig.json +++ b/packages/pogen/tsconfig.json @@ -4,7 +4,8 @@ "target": "es5", "noImplicitAny": false, "sourceMap": false, - "outDir": "bin" + "outDir": "bin", + "incremental": true, }, "files": [ "pogen.ts" diff --git a/packages/taler-wallet-android/package.json b/packages/taler-wallet-android/package.json new file mode 100644 index 000000000..a24dbdbeb --- /dev/null +++ b/packages/taler-wallet-android/package.json @@ -0,0 +1,44 @@ +{ + "name": "taler-wallet-android", + "version": "0.6.12", + "description": "", + "engines": { + "node": ">=0.12.0" + }, + "repository": { + "type": "git", + "url": "git://git.taler.net/wallet-core.git" + }, + "main": "dist/taler-wallet-android.js", + "author": "Florian Dold", + "license": "GPL-3.0", + "scripts": { + "compile": "rollup -c && tsc", + "pretty": "prettier --config ../../.prettierrc --write src", + "test": "tsc && ava", + "coverage": "tsc && nyc ava", + "clean": "rimraf lib dist" + }, + "files": [ + "AUTHORS", + "README", + "COPYING", + "bin/", + "dist/node", + "src/" + ], + "devDependencies": { + "rimraf": "^3.0.2", + "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^8.4.0", + "@rollup/plugin-replace": "^2.3.3", + "rollup": "^2.23.0", + "rollup-plugin-sourcemaps": "^0.6.2", + "rollup-plugin-terser": "^6.1.0" + }, + "dependencies": { + "taler-wallet-core": "workspace:*", + "tslib": "^2.0.0" + } +} diff --git a/packages/taler-wallet-android/rollup.config.js b/packages/taler-wallet-android/rollup.config.js new file mode 100644 index 000000000..7cdca3b98 --- /dev/null +++ b/packages/taler-wallet-android/rollup.config.js @@ -0,0 +1,30 @@ +// rollup.config.js +import commonjs from "@rollup/plugin-commonjs"; +import nodeResolve from "@rollup/plugin-node-resolve"; +import json from "@rollup/plugin-json"; +import builtins from "builtin-modules"; +import pkg from "./package.json"; + +export default { + input: "lib/index.js", + output: { + file: pkg.main, + format: "cjs", + }, + external: builtins, + plugins: [ + nodeResolve({ + preferBuiltins: true, + }), + + commonjs({ + include: [/node_modules/, /dist/], + extensions: [".js", ".ts"], + ignoreGlobal: false, + sourceMap: false, + }), + + json(), + ], +} + diff --git a/packages/taler-wallet-android/src/index.d.ts b/packages/taler-wallet-android/src/index.d.ts new file mode 100644 index 000000000..18e240f35 --- /dev/null +++ b/packages/taler-wallet-android/src/index.d.ts @@ -0,0 +1,26 @@ +import { + HttpRequestLibrary, + HttpResponse, + HttpRequestOptions, +} from "../../taler-wallet-core/src/util/http"; +export { + handleWorkerError, + handleWorkerMessage, +} from "../../taler-wallet-core/src/crypto/workers/nodeThreadWorker"; +export declare class AndroidHttpLib implements HttpRequestLibrary { + private sendMessage; + useNfcTunnel: boolean; + private nodeHttpLib; + private requestId; + private requestMap; + constructor(sendMessage: (m: string) => void); + get(url: string, opt?: HttpRequestOptions): Promise; + postJson( + url: string, + body: any, + opt?: HttpRequestOptions, + ): Promise; + handleTunnelResponse(msg: any): void; +} +export declare function installAndroidWalletListener(): void; +//# sourceMappingURL=index.d.ts.map diff --git a/packages/taler-wallet-android/src/index.js b/packages/taler-wallet-android/src/index.js new file mode 100644 index 000000000..ca4b7f971 --- /dev/null +++ b/packages/taler-wallet-android/src/index.js @@ -0,0 +1,284 @@ +"use strict"; +/* + This file is part of GNU Taler + (C) 2019 GNUnet e.V. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.installAndroidWalletListener = exports.AndroidHttpLib = void 0; +const tslib_1 = require("tslib"); +/** + * Imports. + */ +const taler_wallet_core_1 = require("taler-wallet-core"); +const promiseUtils_1 = require("../../taler-wallet-core/src/util/promiseUtils"); +const fs_1 = tslib_1.__importDefault(require("fs")); +const http_1 = require("../../taler-wallet-core/src/util/http"); +const NodeHttpLib_1 = require("../../taler-wallet-core/src/headless/NodeHttpLib"); +const walletCoreApiHandler_1 = require("../../taler-wallet-core/src/walletCoreApiHandler"); +const errors_1 = require("../../taler-wallet-core/src/operations/errors"); +const TalerErrorCode_1 = require("../../taler-wallet-core/src/TalerErrorCode"); +// @ts-ignore: special built-in module +//import akono = require("akono"); +var nodeThreadWorker_1 = require("../../taler-wallet-core/src/crypto/workers/nodeThreadWorker"); +Object.defineProperty(exports, "handleWorkerError", { + enumerable: true, + get: function () { + return nodeThreadWorker_1.handleWorkerError; + }, +}); +Object.defineProperty(exports, "handleWorkerMessage", { + enumerable: true, + get: function () { + return nodeThreadWorker_1.handleWorkerMessage; + }, +}); +class AndroidHttpLib { + constructor(sendMessage) { + this.sendMessage = sendMessage; + this.useNfcTunnel = false; + this.nodeHttpLib = new NodeHttpLib_1.NodeHttpLib(); + this.requestId = 1; + this.requestMap = {}; + } + get(url, opt) { + if (this.useNfcTunnel) { + const myId = this.requestId++; + const p = promiseUtils_1.openPromise(); + this.requestMap[myId] = p; + const request = { + method: "get", + url, + }; + this.sendMessage( + JSON.stringify({ + type: "tunnelHttp", + request, + id: myId, + }), + ); + return p.promise; + } else { + return this.nodeHttpLib.get(url, opt); + } + } + postJson(url, body, opt) { + if (this.useNfcTunnel) { + const myId = this.requestId++; + const p = promiseUtils_1.openPromise(); + this.requestMap[myId] = p; + const request = { + method: "postJson", + url, + body, + }; + this.sendMessage( + JSON.stringify({ type: "tunnelHttp", request, id: myId }), + ); + return p.promise; + } else { + return this.nodeHttpLib.postJson(url, body, opt); + } + } + handleTunnelResponse(msg) { + const myId = msg.id; + const p = this.requestMap[myId]; + if (!p) { + console.error( + `no matching request for tunneled HTTP response, id=${myId}`, + ); + } + const headers = new http_1.Headers(); + if (msg.status != 0) { + const resp = { + // FIXME: pass through this URL + requestUrl: "", + headers, + status: msg.status, + json: () => + tslib_1.__awaiter(this, void 0, void 0, function* () { + return JSON.parse(msg.responseText); + }), + text: () => + tslib_1.__awaiter(this, void 0, void 0, function* () { + return msg.responseText; + }), + }; + p.resolve(resp); + } else { + p.reject(new Error(`unexpected HTTP status code ${msg.status}`)); + } + delete this.requestMap[myId]; + } +} +exports.AndroidHttpLib = AndroidHttpLib; +function sendAkonoMessage(ev) { + // @ts-ignore + const sendMessage = globalThis.__akono_sendMessage; + if (typeof sendMessage !== "function") { + const errMsg = + "FATAL: cannot install android wallet listener: akono functions missing"; + console.error(errMsg); + throw new Error(errMsg); + } + const m = JSON.stringify(ev); + // @ts-ignore + sendMessage(m); +} +class AndroidWalletMessageHandler { + constructor() { + this.wp = promiseUtils_1.openPromise(); + this.httpLib = new NodeHttpLib_1.NodeHttpLib(); + } + /** + * Handle a request from the Android wallet. + */ + handleMessage(operation, id, args) { + return tslib_1.__awaiter(this, void 0, void 0, function* () { + const wrapResponse = (result) => { + return { + type: "response", + id, + operation, + result, + }; + }; + switch (operation) { + case "init": { + this.walletArgs = { + notifyHandler: (notification) => + tslib_1.__awaiter(this, void 0, void 0, function* () { + sendAkonoMessage({ + type: "notification", + payload: notification, + }); + }), + persistentStoragePath: args.persistentStoragePath, + httpLib: this.httpLib, + }; + const w = yield taler_wallet_core_1.getDefaultNodeWallet( + this.walletArgs, + ); + this.maybeWallet = w; + w.runRetryLoop().catch((e) => { + console.error("Error during wallet retry loop", e); + }); + this.wp.resolve(w); + return wrapResponse({ + supported_protocol_versions: { + exchange: + taler_wallet_core_1.versions.WALLET_EXCHANGE_PROTOCOL_VERSION, + merchant: + taler_wallet_core_1.versions.WALLET_MERCHANT_PROTOCOL_VERSION, + }, + }); + } + case "getHistory": { + return wrapResponse({ history: [] }); + } + case "startTunnel": { + // this.httpLib.useNfcTunnel = true; + throw Error("not implemented"); + } + case "stopTunnel": { + // this.httpLib.useNfcTunnel = false; + throw Error("not implemented"); + } + case "tunnelResponse": { + // httpLib.handleTunnelResponse(msg.args); + throw Error("not implemented"); + } + case "reset": { + const oldArgs = this.walletArgs; + this.walletArgs = Object.assign({}, oldArgs); + if (oldArgs && oldArgs.persistentStoragePath) { + try { + fs_1.default.unlinkSync(oldArgs.persistentStoragePath); + } catch (e) { + console.error("Error while deleting the wallet db:", e); + } + // Prevent further storage! + this.walletArgs.persistentStoragePath = undefined; + } + const wallet = yield this.wp.promise; + wallet.stop(); + this.wp = promiseUtils_1.openPromise(); + this.maybeWallet = undefined; + const w = yield taler_wallet_core_1.getDefaultNodeWallet( + this.walletArgs, + ); + this.maybeWallet = w; + w.runRetryLoop().catch((e) => { + console.error("Error during wallet retry loop", e); + }); + this.wp.resolve(w); + return wrapResponse({}); + } + default: { + const wallet = yield this.wp.promise; + return yield walletCoreApiHandler_1.handleCoreApiRequest( + wallet, + operation, + id, + args, + ); + } + } + }); + } +} +function installAndroidWalletListener() { + const handler = new AndroidWalletMessageHandler(); + const onMessage = (msgStr) => + tslib_1.__awaiter(this, void 0, void 0, function* () { + if (typeof msgStr !== "string") { + console.error("expected string as message"); + return; + } + const msg = JSON.parse(msgStr); + const operation = msg.operation; + if (typeof operation !== "string") { + console.error( + "message to android wallet helper must contain operation of type string", + ); + return; + } + const id = msg.id; + console.log(`android listener: got request for ${operation} (${id})`); + try { + const respMsg = yield handler.handleMessage(operation, id, msg.args); + console.log( + `android listener: sending success response for ${operation} (${id})`, + ); + sendAkonoMessage(respMsg); + } catch (e) { + const respMsg = { + type: "error", + id, + operation, + error: errors_1.makeErrorDetails( + TalerErrorCode_1.TalerErrorCode.WALLET_UNEXPECTED_EXCEPTION, + "unexpected exception", + {}, + ), + }; + sendAkonoMessage(respMsg); + return; + } + }); + // @ts-ignore + globalThis.__akono_onMessage = onMessage; + console.log("android wallet listener installed"); +} +exports.installAndroidWalletListener = installAndroidWalletListener; +//# sourceMappingURL=index.js.map diff --git a/packages/taler-wallet-android/src/index.js.map b/packages/taler-wallet-android/src/index.js.map new file mode 100644 index 000000000..2c6d50b9f --- /dev/null +++ b/packages/taler-wallet-android/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/android/index.ts b/packages/taler-wallet-android/src/index.ts similarity index 76% rename from src/android/index.ts rename to packages/taler-wallet-android/src/index.ts index 389a081b7..d0001e991 100644 --- a/src/android/index.ts +++ b/packages/taler-wallet-android/src/index.ts @@ -17,57 +17,46 @@ /** * Imports. */ -import { Wallet } from "../wallet"; import { + Wallet, getDefaultNodeWallet, DefaultNodeWalletArgs, -} from "../headless/helpers"; -import { openPromise, OpenedPromise } from "../util/promiseUtils"; + versions, + httpLib, + nodeThreadWorker, + promiseUtil, + NodeHttpLib, + walletCoreApi, + walletNotifications, + TalerErrorCode, + makeErrorDetails, +} from "taler-wallet-core"; + import fs from "fs"; -import { - HttpRequestLibrary, - HttpResponse, - HttpRequestOptions, - Headers, -} from "../util/http"; -import { NodeHttpLib } from "../headless/NodeHttpLib"; -import { WalletNotification } from "../types/notifications"; -import { - WALLET_EXCHANGE_PROTOCOL_VERSION, - WALLET_MERCHANT_PROTOCOL_VERSION, -} from "../operations/versions"; -import { - handleCoreApiRequest, - CoreApiResponseSuccess, - CoreApiResponse, - CoreApiEnvelope, -} from "../walletCoreApiHandler"; -import { makeErrorDetails } from "../operations/errors"; -import { TalerErrorCode } from "../TalerErrorCode"; -// @ts-ignore: special built-in module -//import akono = require("akono"); +export const handleWorkerError = nodeThreadWorker.handleWorkerError; +export const handleWorkerMessage = nodeThreadWorker.handleWorkerMessage; -export { - handleWorkerError, - handleWorkerMessage, -} from "../crypto/workers/nodeThreadWorker"; - -export class AndroidHttpLib implements HttpRequestLibrary { +export class AndroidHttpLib implements httpLib.HttpRequestLibrary { useNfcTunnel = false; - private nodeHttpLib: HttpRequestLibrary = new NodeHttpLib(); + private nodeHttpLib: httpLib.HttpRequestLibrary = new NodeHttpLib(); private requestId = 1; - private requestMap: { [id: number]: OpenedPromise } = {}; + private requestMap: { + [id: number]: promiseUtil.OpenedPromise; + } = {}; constructor(private sendMessage: (m: string) => void) {} - get(url: string, opt?: HttpRequestOptions): Promise { + get( + url: string, + opt?: httpLib.HttpRequestOptions, + ): Promise { if (this.useNfcTunnel) { const myId = this.requestId++; - const p = openPromise(); + const p = promiseUtil.openPromise(); this.requestMap[myId] = p; const request = { method: "get", @@ -89,11 +78,11 @@ export class AndroidHttpLib implements HttpRequestLibrary { postJson( url: string, body: any, - opt?: HttpRequestOptions, - ): Promise { + opt?: httpLib.HttpRequestOptions, + ): Promise { if (this.useNfcTunnel) { const myId = this.requestId++; - const p = openPromise(); + const p = promiseUtil.openPromise(); this.requestMap[myId] = p; const request = { method: "postJson", @@ -117,9 +106,9 @@ export class AndroidHttpLib implements HttpRequestLibrary { `no matching request for tunneled HTTP response, id=${myId}`, ); } - const headers = new Headers(); + const headers = new httpLib.Headers(); if (msg.status != 0) { - const resp: HttpResponse = { + const resp: httpLib.HttpResponse = { // FIXME: pass through this URL requestUrl: "", headers, @@ -135,7 +124,7 @@ export class AndroidHttpLib implements HttpRequestLibrary { } } -function sendAkonoMessage(ev: CoreApiEnvelope): void { +function sendAkonoMessage(ev: walletCoreApi.CoreApiEnvelope): void { // @ts-ignore const sendMessage = globalThis.__akono_sendMessage; if (typeof sendMessage !== "function") { @@ -152,7 +141,7 @@ function sendAkonoMessage(ev: CoreApiEnvelope): void { class AndroidWalletMessageHandler { walletArgs: DefaultNodeWalletArgs | undefined; maybeWallet: Wallet | undefined; - wp = openPromise(); + wp = promiseUtil.openPromise(); httpLib = new NodeHttpLib(); /** @@ -162,8 +151,10 @@ class AndroidWalletMessageHandler { operation: string, id: string, args: any, - ): Promise { - const wrapResponse = (result: unknown): CoreApiResponseSuccess => { + ): Promise { + const wrapResponse = ( + result: unknown, + ): walletCoreApi.CoreApiResponseSuccess => { return { type: "response", id, @@ -174,7 +165,9 @@ class AndroidWalletMessageHandler { switch (operation) { case "init": { this.walletArgs = { - notifyHandler: async (notification: WalletNotification) => { + notifyHandler: async ( + notification: walletNotifications.WalletNotification, + ) => { sendAkonoMessage({ type: "notification", payload: notification }); }, persistentStoragePath: args.persistentStoragePath, @@ -188,8 +181,8 @@ class AndroidWalletMessageHandler { this.wp.resolve(w); return wrapResponse({ supported_protocol_versions: { - exchange: WALLET_EXCHANGE_PROTOCOL_VERSION, - merchant: WALLET_MERCHANT_PROTOCOL_VERSION, + exchange: versions.WALLET_EXCHANGE_PROTOCOL_VERSION, + merchant: versions.WALLET_MERCHANT_PROTOCOL_VERSION, }, }); } @@ -222,7 +215,7 @@ class AndroidWalletMessageHandler { } const wallet = await this.wp.promise; wallet.stop(); - this.wp = openPromise(); + this.wp = promiseUtil.openPromise(); this.maybeWallet = undefined; const w = await getDefaultNodeWallet(this.walletArgs); this.maybeWallet = w; @@ -234,7 +227,12 @@ class AndroidWalletMessageHandler { } default: { const wallet = await this.wp.promise; - return await handleCoreApiRequest(wallet, operation, id, args); + return await walletCoreApi.handleCoreApiRequest( + wallet, + operation, + id, + args, + ); } } } @@ -265,7 +263,7 @@ export function installAndroidWalletListener(): void { ); sendAkonoMessage(respMsg); } catch (e) { - const respMsg: CoreApiResponse = { + const respMsg: walletCoreApi.CoreApiResponse = { type: "error", id, operation, diff --git a/tsconfig.json b/packages/taler-wallet-android/tsconfig.json similarity index 79% rename from tsconfig.json rename to packages/taler-wallet-android/tsconfig.json index a6fa12f9b..abb21b4db 100644 --- a/tsconfig.json +++ b/packages/taler-wallet-android/tsconfig.json @@ -1,6 +1,9 @@ { "compileOnSave": true, "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, "target": "ES6", "jsx": "react", "reactNamespace": "React", @@ -15,14 +18,15 @@ "noFallthroughCasesInSwitch": true, "strict": true, "strictPropertyInitialization": false, - "outDir": "dist/node", + "outDir": "lib", "noImplicitAny": true, "noImplicitThis": true, "allowJs": true, "checkJs": true, "incremental": true, "esModuleInterop": true, - "importHelpers": true + "importHelpers": true, + "rootDir": "./src" }, "include": ["src/**/*"] } diff --git a/packages/taler-wallet-cli/bin/taler-wallet-cli b/packages/taler-wallet-cli/bin/taler-wallet-cli new file mode 100755 index 000000000..871514024 --- /dev/null +++ b/packages/taler-wallet-cli/bin/taler-wallet-cli @@ -0,0 +1,7 @@ +#!/usr/bin/env node +try { + require('source-map-support').install(); +} catch (e) { + // Do nothing. +} +require('../dist/taler-wallet-cli.js') diff --git a/packages/taler-wallet-cli/package.json b/packages/taler-wallet-cli/package.json new file mode 100644 index 000000000..1d4460021 --- /dev/null +++ b/packages/taler-wallet-cli/package.json @@ -0,0 +1,48 @@ +{ + "name": "taler-wallet-cli", + "version": "0.6.12", + "description": "", + "engines": { + "node": ">=0.12.0" + }, + "repository": { + "type": "git", + "url": "git://git.taler.net/wallet-core.git" + }, + "author": "Florian Dold", + "license": "GPL-3.0", + "main": "dist/taler-wallet-cli.js", + "bin": { + "taler-wallet-cli": "./bin/taler-wallet-cli" + }, + "scripts": { + "compile": "tsc && rollup -c", + "clean": "rimraf lib dist", + "pretty": "prettier --config ../../.prettierrc --write src" + }, + "files": [ + "AUTHORS", + "README", + "COPYING", + "bin/", + "dist/node", + "src/" + ], + "devDependencies": { + "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^8.4.0", + "@rollup/plugin-replace": "^2.3.3", + "rimraf": "^3.0.2", + "rollup": "^2.23.0", + "rollup-plugin-sourcemaps": "^0.6.2", + "rollup-plugin-terser": "^6.1.0", + "typedoc": "^0.17.8", + "typescript": "^3.9.7" + }, + "dependencies": { + "source-map-support": "^0.5.19", + "taler-wallet-core": "workspace:*", + "tslib": "^2.0.0" + } +} diff --git a/packages/taler-wallet-cli/rollup.config.js b/packages/taler-wallet-cli/rollup.config.js new file mode 100644 index 000000000..7cdca3b98 --- /dev/null +++ b/packages/taler-wallet-cli/rollup.config.js @@ -0,0 +1,30 @@ +// rollup.config.js +import commonjs from "@rollup/plugin-commonjs"; +import nodeResolve from "@rollup/plugin-node-resolve"; +import json from "@rollup/plugin-json"; +import builtins from "builtin-modules"; +import pkg from "./package.json"; + +export default { + input: "lib/index.js", + output: { + file: pkg.main, + format: "cjs", + }, + external: builtins, + plugins: [ + nodeResolve({ + preferBuiltins: true, + }), + + commonjs({ + include: [/node_modules/, /dist/], + extensions: [".js", ".ts"], + ignoreGlobal: false, + sourceMap: false, + }), + + json(), + ], +} + diff --git a/src/headless/clk.ts b/packages/taler-wallet-cli/src/clk.ts similarity index 100% rename from src/headless/clk.ts rename to packages/taler-wallet-cli/src/clk.ts diff --git a/src/headless/taler-wallet-cli.ts b/packages/taler-wallet-cli/src/index.ts similarity index 88% rename from src/headless/taler-wallet-cli.ts rename to packages/taler-wallet-cli/src/index.ts index a7f306ec3..c8e517e53 100644 --- a/src/headless/taler-wallet-cli.ts +++ b/packages/taler-wallet-cli/src/index.ts @@ -16,31 +16,24 @@ import os from "os"; import fs from "fs"; -import { getDefaultNodeWallet } from "./helpers"; -import { Wallet } from "../wallet"; -import qrcodeGenerator from "qrcode-generator"; -import * as clk from "./clk"; -import { BridgeIDBFactory } from "idb-bridge"; -import { Logger } from "../util/logging"; -import { Amounts } from "../util/amounts"; -import { - decodeCrock, - setupRefreshPlanchet, - encodeCrock, -} from "../crypto/talerCrypto"; import { + getDefaultNodeWallet, + Logger, + Amounts, + Wallet, OperationFailedAndReportedError, OperationFailedError, -} from "../operations/errors"; -import { classifyTalerUri, TalerUriType } from "../util/taleruri"; -import { Configuration } from "../util/talerconfig"; -import { setDangerousTimetravel } from "../util/time"; -import { makeCodecForList, codecForString } from "../util/codec"; -import { NodeHttpLib } from "./NodeHttpLib"; -import * as nacl from "../crypto/primitives/nacl-fast"; -import { addPaytoQueryParams } from "../util/payto"; -import { handleCoreApiRequest } from "../walletCoreApiHandler"; -import { PreparePayResultType } from "../types/walletTypes"; + time, + taleruri, + walletTypes, + talerCrypto, + payto, + codec, + testvectors, + walletCoreApi, + NodeHttpLib, +} from "taler-wallet-core"; +import * as clk from "./clk"; const logger = new Logger("taler-wallet-cli.ts"); @@ -56,19 +49,19 @@ async function doPay( options: { alwaysYes: boolean } = { alwaysYes: true }, ): Promise { const result = await wallet.preparePayForUri(payUrl); - if (result.status === PreparePayResultType.InsufficientBalance) { + if (result.status === walletTypes.PreparePayResultType.InsufficientBalance) { console.log("contract", result.contractTerms); console.error("insufficient balance"); process.exit(1); return; } - if (result.status === PreparePayResultType.AlreadyConfirmed) { + if (result.status === walletTypes.PreparePayResultType.AlreadyConfirmed) { if (result.paid) { console.log("already paid!"); } else { console.log("payment already in progress"); } - + process.exit(0); return; } @@ -106,10 +99,7 @@ async function doPay( } function applyVerbose(verbose: boolean): void { - if (verbose) { - console.log("enabled verbose logging"); - BridgeIDBFactory.enableTracing = true; - } + // TODO } function printVersion(): void { @@ -131,7 +121,7 @@ const walletCli = clk onPresentHandler: (x) => { // Convert microseconds to milliseconds and do timetravel logger.info(`timetravelling ${x} microseconds`); - setDangerousTimetravel(x / 1000); + time.setDangerousTimetravel(x / 1000); }, }) .maybeOption("inhibit", ["--inhibit"], clk.STRING, { @@ -212,7 +202,7 @@ walletCli console.error("Invalid JSON"); process.exit(1); } - const resp = await handleCoreApiRequest( + const resp = await walletCoreApi.handleCoreApiRequest( wallet, args.api.operation, "reqid-1", @@ -281,22 +271,22 @@ walletCli .action(async (args) => { await withWallet(args, async (wallet) => { const uri: string = args.handleUri.uri; - const uriType = classifyTalerUri(uri); + const uriType = taleruri.classifyTalerUri(uri); switch (uriType) { - case TalerUriType.TalerPay: + case taleruri.TalerUriType.TalerPay: await doPay(wallet, uri, { alwaysYes: args.handleUri.autoYes }); break; - case TalerUriType.TalerTip: + case taleruri.TalerUriType.TalerTip: { const res = await wallet.getTipStatus(uri); console.log("tip status", res); await wallet.acceptTip(res.tipId); } break; - case TalerUriType.TalerRefund: + case taleruri.TalerUriType.TalerRefund: await wallet.applyRefund(uri); break; - case TalerUriType.TalerWithdraw: + case taleruri.TalerUriType.TalerWithdraw: { const withdrawInfo = await wallet.getWithdrawalDetailsForUri(uri); const selectedExchange = withdrawInfo.defaultExchangeBaseUrl; @@ -423,7 +413,7 @@ advancedCli }) .action((args) => { const enc = fs.readFileSync(0, "utf8"); - fs.writeFileSync(1, decodeCrock(enc.trim())); + fs.writeFileSync(1, talerCrypto.decodeCrock(enc.trim())); }); advancedCli @@ -450,7 +440,7 @@ advancedCli exchange.baseUrl, Amounts.parseOrThrow(args.withdrawManually.amount), ); - const completePaytoUri = addPaytoQueryParams(acct.payto_uri, { + const completePaytoUri = payto.addPaytoQueryParams(acct.payto_uri, { amount: args.withdrawManually.amount, message: `Taler top-up ${reserve.reservePub}`, }); @@ -494,17 +484,17 @@ advancedCli await withWallet(args, async (wallet) => { const res = await wallet.preparePayForUri(args.payPrepare.url); switch (res.status) { - case PreparePayResultType.InsufficientBalance: + case walletTypes.PreparePayResultType.InsufficientBalance: console.log("insufficient balance"); break; - case PreparePayResultType.AlreadyConfirmed: + case walletTypes.PreparePayResultType.AlreadyConfirmed: if (res.paid) { console.log("already paid!"); } else { console.log("payment in progress"); } break; - case PreparePayResultType.PaymentPossible: + case walletTypes.PreparePayResultType.PaymentPossible: console.log("payment possible"); break; default: @@ -550,7 +540,7 @@ advancedCli }); }); -const coinPubListCodec = makeCodecForList(codecForString); +const coinPubListCodec = codec.makeCodecForList(codec.codecForString); advancedCli .subcommand("suspendCoins", "suspend-coins", { @@ -644,15 +634,7 @@ const testCli = walletCli.subcommand("testingArgs", "testing", { }); testCli.subcommand("vectors", "vectors").action(async (args) => { - const secretSeed = nacl.randomBytes(64); - const coinIndex = Math.ceil(Math.random() * 100); - const p = setupRefreshPlanchet(secretSeed, coinIndex); - console.log("setupRefreshPlanchet"); - console.log(` (in) secret seed: ${encodeCrock(secretSeed)}`); - console.log(` (in) coin index: ${coinIndex}`); - console.log(` (out) blinding secret: ${encodeCrock(p.bks)}`); - console.log(` (out) coin priv: ${encodeCrock(p.coinPriv)}`); - console.log(` (out) coin pub: ${encodeCrock(p.coinPub)}`); + testvectors.printTestVectors(); }); walletCli.run(); diff --git a/packages/taler-wallet-cli/tsconfig.json b/packages/taler-wallet-cli/tsconfig.json new file mode 100644 index 000000000..34767d1e0 --- /dev/null +++ b/packages/taler-wallet-cli/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "composite": true, + "target": "ES6", + "module": "ESNext", + "moduleResolution": "node", + "sourceMap": true, + "lib": ["es6"], + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "strict": true, + "strictPropertyInitialization": false, + "outDir": "lib", + "noImplicitAny": true, + "noImplicitThis": true, + "incremental": true, + "esModuleInterop": true, + "importHelpers": true, + "rootDir": "src", + "baseUrl": "./src", + "types": ["node"] + }, + "include": ["src/**/*"], + "references": [ + { + "path": "../taler-wallet-core/" + } + ] +} diff --git a/packages/taler-wallet-core/.gitignore b/packages/taler-wallet-core/.gitignore new file mode 100644 index 000000000..502167fa0 --- /dev/null +++ b/packages/taler-wallet-core/.gitignore @@ -0,0 +1 @@ +/lib diff --git a/packages/taler-wallet-core/package.json b/packages/taler-wallet-core/package.json new file mode 100644 index 000000000..20240bab4 --- /dev/null +++ b/packages/taler-wallet-core/package.json @@ -0,0 +1,81 @@ +{ + "name": "taler-wallet-core", + "version": "0.6.12", + "description": "", + "engines": { + "node": ">=0.12.0" + }, + "repository": { + "type": "git", + "url": "git://git.taler.net/wallet-core.git" + }, + "author": "Florian Dold", + "license": "GPL-3.0", + "scripts": { + "compile": "tsc && rollup -c", + "pretty": "prettier --config ../../.prettierrc --write src", + "test": "tsc && ava", + "coverage": "tsc && nyc ava", + "clean": "rimraf dist lib" + }, + "files": [ + "AUTHORS", + "README", + "COPYING", + "bin/", + "dist/node", + "src/" + ], + "main": "./dist/taler-wallet-core.js", + "module": "./lib/index.js", + "types": "./lib/index.d.ts", + "devDependencies": { + "@ava/typescript": "^1.1.1", + "@typescript-eslint/eslint-plugin": "^3.6.1", + "@typescript-eslint/parser": "^3.6.1", + "ava": "^3.10.1", + "eslint": "^7.4.0", + "eslint-config-airbnb-typescript": "^8.0.2", + "eslint-plugin-import": "^2.22.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-react": "^7.20.3", + "eslint-plugin-react-hooks": "^4.0.8", + "jed": "^1.1.1", + "moment": "^2.27.0", + "nyc": "^15.1.0", + "po2json": "^0.4.5", + "pogen": "workspace:*", + "prettier": "^2.0.5", + "source-map-resolve": "^0.6.0", + "structured-clone": "^0.2.2", + "typedoc": "^0.17.8", + "typescript": "^3.9.7", + "rollup": "^2.23.0", + "esm": "^3.2.25", + "rimraf": "^3.0.2" + }, + "dependencies": { + "@types/node": "^14.0.27", + "axios": "^0.19.2", + "big-integer": "^1.6.48", + "idb-bridge": "workspace:*", + "source-map-support": "^0.5.19", + "tslib": "^2.0.0" + }, + "ava": { + "require": ["esm"], + "files": [ + "src/**/*-test.*" + ], + "typescript": { + "extensions": [ + "js", + "ts", + "tsx" + ], + "rewritePaths": { + "src/": "lib/" + } + } + } +} diff --git a/packages/taler-wallet-core/rollup.config.js b/packages/taler-wallet-core/rollup.config.js new file mode 100644 index 000000000..2f0a86b2a --- /dev/null +++ b/packages/taler-wallet-core/rollup.config.js @@ -0,0 +1,31 @@ +// rollup.config.js +import commonjs from "@rollup/plugin-commonjs"; +import nodeResolve from "@rollup/plugin-node-resolve"; +import json from "@rollup/plugin-json"; +import builtins from "builtin-modules"; +import pkg from "./package.json"; + +export default { + input: "lib/index.js", + output: { + file: pkg.main, + format: "cjs", + sourcemap: false, + }, + external: builtins, + plugins: [ + nodeResolve({ + preferBuiltins: true, + }), + + commonjs({ + include: [/node_modules/, /dist/], + extensions: [".js"], + ignoreGlobal: false, + sourceMap: false, + }), + + json(), + ], +} + diff --git a/packages/taler-wallet-core/src/TalerErrorCode.d.ts.map b/packages/taler-wallet-core/src/TalerErrorCode.d.ts.map new file mode 100644 index 000000000..87926875d --- /dev/null +++ b/packages/taler-wallet-core/src/TalerErrorCode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"TalerErrorCode.d.ts","sourceRoot":"","sources":["TalerErrorCode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/TalerErrorCode.ts b/packages/taler-wallet-core/src/TalerErrorCode.ts similarity index 99% rename from src/TalerErrorCode.ts rename to packages/taler-wallet-core/src/TalerErrorCode.ts index 56c28ee20..d45b1064f 100644 --- a/src/TalerErrorCode.ts +++ b/packages/taler-wallet-core/src/TalerErrorCode.ts @@ -22,8 +22,6 @@ */ export enum TalerErrorCode { - - /** * Special code to indicate no error (or no "code" present). * Returned with an HTTP status code of #MHD_HTTP_UNINITIALIZED (0). @@ -3096,5 +3094,4 @@ export enum TalerErrorCode { * (A value of 0 indicates that the error is generated client-side). */ END = 9999, - } diff --git a/packages/taler-wallet-core/src/crypto/primitives/kdf.d.ts.map b/packages/taler-wallet-core/src/crypto/primitives/kdf.d.ts.map new file mode 100644 index 000000000..0495859a5 --- /dev/null +++ b/packages/taler-wallet-core/src/crypto/primitives/kdf.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"kdf.d.ts","sourceRoot":"","sources":["kdf.ts"],"names":[],"mappings":"AAmBA,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAEnD;AAED,wBAAgB,IAAI,CAClB,MAAM,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,EACrC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,UAAU,GAClB,UAAU,CAuBZ;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAE3E;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAE3E;AAED,wBAAgB,GAAG,CACjB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,GACf,UAAU,CAyBZ"} \ No newline at end of file diff --git a/src/crypto/primitives/kdf.ts b/packages/taler-wallet-core/src/crypto/primitives/kdf.ts similarity index 100% rename from src/crypto/primitives/kdf.ts rename to packages/taler-wallet-core/src/crypto/primitives/kdf.ts diff --git a/packages/taler-wallet-core/src/crypto/primitives/nacl-fast.d.ts.map b/packages/taler-wallet-core/src/crypto/primitives/nacl-fast.d.ts.map new file mode 100644 index 000000000..6dab0be11 --- /dev/null +++ b/packages/taler-wallet-core/src/crypto/primitives/nacl-fast.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"nacl-fast.d.ts","sourceRoot":"","sources":["nacl-fast.ts"],"names":[],"mappings":"AA8zCA;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,EAAE,CAAqB;IAE/B,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,KAAK,CAAK;;IAsBlB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS;IAuBnC,MAAM,IAAI,UAAU;CAgBrB;AAqTD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAIjD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAOnE;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAMzD;AAED,eAAO,MAAM,uBAAuB,KAAgC,CAAC;AACrE,eAAO,MAAM,6BAA6B,KAA0B,CAAC;AAErE,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,UAAU,CAOvE;AAED,wBAAgB,SAAS,CACvB,SAAS,EAAE,UAAU,EACrB,SAAS,EAAE,UAAU,GACpB,UAAU,GAAG,IAAI,CAUnB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,UAAU,GACpB,UAAU,CAKZ;AAED,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,UAAU,GACpB,OAAO,CAWT;AAED,wBAAgB,YAAY,IAAI;IAC9B,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;CACvB,CAKA;AAED,wBAAgB,oCAAoC,CAClD,SAAS,EAAE,UAAU,GACpB,UAAU,CAmBZ;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,UAAU,GACpB;IACD,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;CACvB,CAOA;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,UAAU,GACf;IACD,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,UAAU,CAAC;CACvB,CAQA;AAED,eAAO,MAAM,oBAAoB,KAA6B,CAAC;AAC/D,eAAO,MAAM,oBAAoB,KAA6B,CAAC;AAC/D,eAAO,MAAM,eAAe,KAAwB,CAAC;AACrD,eAAO,MAAM,oBAAoB,KAAoB,CAAC;AAEtD,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAKhD;AAED,eAAO,MAAM,eAAe,KAAoB,CAAC;AAEjD,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAM5D;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAEpE;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,UAAU,GACrB,UAAU,CAqBZ"} \ No newline at end of file diff --git a/src/crypto/primitives/nacl-fast.ts b/packages/taler-wallet-core/src/crypto/primitives/nacl-fast.ts similarity index 99% rename from src/crypto/primitives/nacl-fast.ts rename to packages/taler-wallet-core/src/crypto/primitives/nacl-fast.ts index 8d4aaeb63..c2d40691a 100644 --- a/src/crypto/primitives/nacl-fast.ts +++ b/packages/taler-wallet-core/src/crypto/primitives/nacl-fast.ts @@ -1912,8 +1912,8 @@ export function sign_ed25519_pk_to_curve25519( (function () { // Initialize PRNG if environment provides CSPRNG. // If not, methods calling randombytes will throw. - const cr = - typeof self !== "undefined" ? self.crypto || (self as any).msCrypto : null; + // @ts-ignore-error + const cr = typeof self !== "undefined" ? self.crypto || self.msCrypto : null; if (cr && cr.getRandomValues) { // Browsers. const QUOTA = 65536; diff --git a/packages/taler-wallet-core/src/crypto/primitives/sha256.d.ts.map b/packages/taler-wallet-core/src/crypto/primitives/sha256.d.ts.map new file mode 100644 index 000000000..91ebcd392 --- /dev/null +++ b/packages/taler-wallet-core/src/crypto/primitives/sha256.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"sha256.d.ts","sourceRoot":"","sources":["sha256.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,SAAS,KAAK,CAAC;AAwK5B,qBAAa,UAAU;IACrB,YAAY,EAAE,MAAM,CAAgB;IACpC,SAAS,EAAE,MAAM,CAAa;IAG9B,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,IAAI,CAAkC;IAC9C,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAK;IAExB,QAAQ,UAAS;;IAQjB,KAAK,IAAI,IAAI;IAgBb,KAAK,IAAI,IAAI;IAiBb,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,GAAE,MAAoB,GAAG,IAAI;IA8BhE,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAqC7B,MAAM,IAAI,UAAU;IAOpB,UAAU,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAOlC,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;CAQ5D;AAGD,qBAAa,IAAI;IACf,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,KAAK,CAAgC;IAE7C,SAAS,EAAE,MAAM,CAAwB;IACzC,YAAY,EAAE,MAAM,CAA2B;IAI/C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAc;gBAEhB,GAAG,EAAE,UAAU;IAiC3B,KAAK,IAAI,IAAI;IAOb,KAAK,IAAI,IAAI;IASb,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAM9B,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI;IAW7B,MAAM,IAAI,UAAU;CAKrB;AAGD,wBAAgB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAKnD;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAKxE"} \ No newline at end of file diff --git a/src/crypto/primitives/sha256.ts b/packages/taler-wallet-core/src/crypto/primitives/sha256.ts similarity index 100% rename from src/crypto/primitives/sha256.ts rename to packages/taler-wallet-core/src/crypto/primitives/sha256.ts diff --git a/src/crypto/talerCrypto-test.ts b/packages/taler-wallet-core/src/crypto/talerCrypto-test.ts similarity index 97% rename from src/crypto/talerCrypto-test.ts rename to packages/taler-wallet-core/src/crypto/talerCrypto-test.ts index 1cd9da3e2..b273b0188 100644 --- a/src/crypto/talerCrypto-test.ts +++ b/packages/taler-wallet-core/src/crypto/talerCrypto-test.ts @@ -27,18 +27,18 @@ import { keyExchangeEcdheEddsa, rsaBlind, rsaUnblind, + stringToBytes, + bytesToString, rsaVerify, } from "./talerCrypto"; import { sha512, kdf } from "./primitives/kdf"; import * as nacl from "./primitives/nacl-fast"; test("encoding", (t) => { - const utf8decoder = new TextDecoder("utf-8"); - const utf8encoder = new TextEncoder(); const s = "Hello, World"; - const encStr = encodeCrock(utf8encoder.encode(s)); + const encStr = encodeCrock(stringToBytes(s)); const outBuf = decodeCrock(encStr); - const sOut = utf8decoder.decode(outBuf); + const sOut = bytesToString(outBuf); t.deepEqual(s, sOut); }); diff --git a/packages/taler-wallet-core/src/crypto/talerCrypto.d.ts.map b/packages/taler-wallet-core/src/crypto/talerCrypto.d.ts.map new file mode 100644 index 000000000..cbc5ba16c --- /dev/null +++ b/packages/taler-wallet-core/src/crypto/talerCrypto.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"talerCrypto.d.ts","sourceRoot":"","sources":["talerCrypto.ts"],"names":[],"mappings":"AAgBA;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,wBAAwB,CAAC;AAgB/C,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAEpD;AA6CD,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAuBrD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CA0BvD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAGhE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,UAAU,CAEhE;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,UAAU,GACnB,UAAU,CAQZ;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,UAAU,GACnB,UAAU,CAIZ;AAwCD,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAEnD;AAuED,wBAAgB,QAAQ,CACtB,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,UAAU,GACpB,UAAU,CAOZ;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,UAAU,EACrB,GAAG,EAAE,UAAU,GACd,UAAU,CAOZ;AAED,wBAAgB,SAAS,CACvB,EAAE,EAAE,UAAU,EACd,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,UAAU,GACpB,OAAO,CAMT;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,UAAU,CAAC;CACvB;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAIjD;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAIjD;AAED,wBAAgB,uBAAuB,IAAI,UAAU,CAEpD;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAE9C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,GAAG,UAAU,CAG5E;AAED,wBAAgB,WAAW,CACzB,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,UAAU,GACnB,OAAO,CAET;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAAC,SAAS,CAElD;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,UAAU,CAAC;IACpB,QAAQ,EAAE,UAAU,CAAC;IACrB,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,GACjB,SAAS,CAcX"} \ No newline at end of file diff --git a/src/crypto/talerCrypto.ts b/packages/taler-wallet-core/src/crypto/talerCrypto.ts similarity index 96% rename from src/crypto/talerCrypto.ts rename to packages/taler-wallet-core/src/crypto/talerCrypto.ts index 457009a04..3ce5491c1 100644 --- a/src/crypto/talerCrypto.ts +++ b/packages/taler-wallet-core/src/crypto/talerCrypto.ts @@ -22,6 +22,18 @@ import * as nacl from "./primitives/nacl-fast"; import bigint from "big-integer"; import { kdf } from "./primitives/kdf"; +// @ts-ignore +const decoder = new TextDecoder(); +if (typeof decoder !== "object") { + throw Error("FATAL: TextDecoder not available"); +} + +// @ts-ignore +const encoder = new TextEncoder(); +if (typeof encoder !== "object") { + throw Error("FATAL: TextEncoder not available"); +} + export function getRandomBytes(n: number): Uint8Array { return nacl.randomBytes(n); } @@ -192,8 +204,11 @@ function kdfMod( } export function stringToBytes(s: string): Uint8Array { - const te = new TextEncoder(); - return te.encode(s); + return encoder.encode(s); +} + +export function bytesToString(b: Uint8Array): string { + return decoder.decode(b); } function loadBigInt(arr: Uint8Array): bigint.BigInteger { diff --git a/packages/taler-wallet-core/src/crypto/workers/cryptoApi.d.ts.map b/packages/taler-wallet-core/src/crypto/workers/cryptoApi.d.ts.map new file mode 100644 index 000000000..d8ab05823 --- /dev/null +++ b/packages/taler-wallet-core/src/crypto/workers/cryptoApi.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"cryptoApi.d.ts","sourceRoot":"","sources":["cryptoApi.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/crypto/workers/cryptoApi.ts b/packages/taler-wallet-core/src/crypto/workers/cryptoApi.ts similarity index 92% rename from src/crypto/workers/cryptoApi.ts rename to packages/taler-wallet-core/src/crypto/workers/cryptoApi.ts index 5e922ec02..a272d5724 100644 --- a/src/crypto/workers/cryptoApi.ts +++ b/packages/taler-wallet-core/src/crypto/workers/cryptoApi.ts @@ -105,27 +105,6 @@ export interface CryptoWorkerFactory { getConcurrency(): number; } -export class BrowserCryptoWorkerFactory implements CryptoWorkerFactory { - startWorker(): CryptoWorker { - const workerCtor = Worker; - const workerPath = "/browserWorkerEntry.js"; - return new workerCtor(workerPath) as CryptoWorker; - } - - getConcurrency(): number { - let concurrency = 2; - try { - // only works in the browser - // tslint:disable-next-line:no-string-literal - concurrency = (navigator as any)["hardwareConcurrency"]; - concurrency = Math.max(1, Math.ceil(concurrency / 2)); - } catch (e) { - concurrency = 2; - } - return concurrency; - } -} - /** * Crypto API that interfaces manages a background crypto thread * for the execution of expensive operations. @@ -189,8 +168,8 @@ export class CryptoApi { let worker: CryptoWorker; if (!ws.w) { worker = this.workerFactory.startWorker(); - worker.onmessage = (m: MessageEvent) => this.handleWorkerMessage(ws, m); - worker.onerror = (e: ErrorEvent) => this.handleWorkerError(ws, e); + worker.onmessage = (m: any) => this.handleWorkerMessage(ws, m); + worker.onerror = (e: any) => this.handleWorkerError(ws, e); ws.w = worker; } else { worker = ws.w; @@ -221,7 +200,7 @@ export class CryptoApi { ws.terminationTimerHandle = timer.after(15 * 1000, destroy); } - handleWorkerError(ws: WorkerState, e: ErrorEvent): void { + handleWorkerError(ws: WorkerState, e: any): void { if (ws.currentWorkItem) { console.error( `error in worker during ${ws.currentWorkItem.operation}`, @@ -262,7 +241,7 @@ export class CryptoApi { } } - handleWorkerMessage(ws: WorkerState, msg: MessageEvent): void { + handleWorkerMessage(ws: WorkerState, msg: any): void { const id = msg.data.id; if (typeof id !== "number") { console.error("rpc id must be number"); diff --git a/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.d.ts.map b/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.d.ts.map new file mode 100644 index 000000000..192c54d05 --- /dev/null +++ b/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"cryptoImplementation.d.ts","sourceRoot":"","sources":["cryptoImplementation.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AAEH;;GAEG;AAEH,OAAO,EACL,UAAU,EACV,kBAAkB,EAElB,oBAAoB,EACpB,WAAW,EACX,OAAO,EAEP,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAW,MAAM,oBAAoB,CAAC;AAgGzD,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,aAAa,UAAS;IAE7B;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,uBAAuB,GAAG,sBAAsB;IAoCpE;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,WAAW;IAmBzD;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa;IAoBpD;;OAEG;IACH,uBAAuB,CACrB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO;IASV;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAarE;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAmBnE,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO;IAWV;;OAEG;IACH,kBAAkB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAQnD;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;IAS9D;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAIvD;;;OAGG;IACH,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,qBAAqB;IAyBtE;;OAEG;IACH,oBAAoB,CAClB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,UAAU,EACpB,aAAa,EAAE,yBAAyB,EACxC,OAAO,EAAE,UAAU,GAClB,oBAAoB;IA2HvB;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAK/B;;OAEG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAIzC,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACb,MAAM;IAaT,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe;CAsDhD"} \ No newline at end of file diff --git a/src/crypto/workers/cryptoImplementation.ts b/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts similarity index 99% rename from src/crypto/workers/cryptoImplementation.ts rename to packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts index 979fe41d8..4195ebded 100644 --- a/src/crypto/workers/cryptoImplementation.ts +++ b/packages/taler-wallet-core/src/crypto/workers/cryptoImplementation.ts @@ -90,8 +90,7 @@ function amountToBuffer(amount: AmountJson): Uint8Array { const buffer = new ArrayBuffer(8 + 4 + 12); const dvbuf = new DataView(buffer); const u8buf = new Uint8Array(buffer); - const te = new TextEncoder(); - const curr = te.encode(amount.currency); + const curr = stringToBytes(amount.currency); dvbuf.setBigUint64(0, BigInt(amount.value)); dvbuf.setUint32(8, amount.fraction); u8buf.set(curr, 8 + 4); @@ -493,8 +492,7 @@ export class CryptoImplementation { * Hash a string including the zero terminator. */ hashString(str: string): string { - const ts = new TextEncoder(); - const b = ts.encode(str + "\0"); + const b = stringToBytes(str + "\0"); return encodeCrock(hash(b)); } diff --git a/packages/taler-wallet-core/src/crypto/workers/cryptoWorker.d.ts.map b/packages/taler-wallet-core/src/crypto/workers/cryptoWorker.d.ts.map new file mode 100644 index 000000000..cfdedef09 --- /dev/null +++ b/packages/taler-wallet-core/src/crypto/workers/cryptoWorker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"cryptoWorker.d.ts","sourceRoot":"","sources":["cryptoWorker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAEhC,SAAS,IAAI,IAAI,CAAC;IAElB,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACzC"} \ No newline at end of file diff --git a/src/crypto/workers/cryptoWorker.ts b/packages/taler-wallet-core/src/crypto/workers/cryptoWorker.ts similarity index 100% rename from src/crypto/workers/cryptoWorker.ts rename to packages/taler-wallet-core/src/crypto/workers/cryptoWorker.ts diff --git a/packages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.d.ts.map b/packages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.d.ts.map new file mode 100644 index 000000000..d89774cd5 --- /dev/null +++ b/packages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"nodeThreadWorker.d.ts","sourceRoot":"","sources":["nodeThreadWorker.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiC9C;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA6ClD;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,CAEhD;AAED,qBAAa,6BAA8B,YAAW,mBAAmB;IACvE,WAAW,IAAI,YAAY;IAO3B,cAAc,IAAI,MAAM;CAGzB"} \ No newline at end of file diff --git a/src/crypto/workers/nodeThreadWorker.ts b/packages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.ts similarity index 100% rename from src/crypto/workers/nodeThreadWorker.ts rename to packages/taler-wallet-core/src/crypto/workers/nodeThreadWorker.ts diff --git a/src/crypto/workers/synchronousWorker.ts b/packages/taler-wallet-core/src/crypto/workers/synchronousWorker.ts similarity index 97% rename from src/crypto/workers/synchronousWorker.ts rename to packages/taler-wallet-core/src/crypto/workers/synchronousWorker.ts index 2cc740975..5327670bd 100644 --- a/src/crypto/workers/synchronousWorker.ts +++ b/packages/taler-wallet-core/src/crypto/workers/synchronousWorker.ts @@ -28,8 +28,7 @@ export class SynchronousCryptoWorkerFactory implements CryptoWorkerFactory { if (typeof require === "undefined") { throw Error("cannot make worker, require(...) not defined"); } - const workerCtor = require("./synchronousWorker").SynchronousCryptoWorker; - return new workerCtor(); + return new SynchronousCryptoWorker(); } getConcurrency(): number { diff --git a/src/db.ts b/packages/taler-wallet-core/src/db.ts similarity index 89% rename from src/db.ts rename to packages/taler-wallet-core/src/db.ts index 5571c869c..a6eeb1205 100644 --- a/src/db.ts +++ b/packages/taler-wallet-core/src/db.ts @@ -1,5 +1,6 @@ import { Stores } from "./types/dbTypes"; import { openDatabase, Database, Store, Index } from "./util/query"; +import type { idbtypes } from "idb-bridge"; /** * Name of the Taler database. The name includes the @@ -23,11 +24,11 @@ export const WALLET_DB_MINOR_VERSION = 1; * to the taler wallet db. */ export function openTalerDatabase( - idbFactory: IDBFactory, + idbFactory: idbtypes.IDBFactory, onVersionChange: () => void, -): Promise { +): Promise { const onUpgradeNeeded = ( - db: IDBDatabase, + db: idbtypes.IDBDatabase, oldVersion: number, newVersion: number, ): void => { @@ -60,6 +61,6 @@ export function openTalerDatabase( ); } -export function deleteTalerDatabase(idbFactory: IDBFactory): void { +export function deleteTalerDatabase(idbFactory: idbtypes.IDBFactory): void { Database.deleteDatabase(idbFactory, TALER_DB_NAME); } diff --git a/packages/taler-wallet-core/src/headless/NodeHttpLib.d.ts.map b/packages/taler-wallet-core/src/headless/NodeHttpLib.d.ts.map new file mode 100644 index 000000000..06ba7a3e1 --- /dev/null +++ b/packages/taler-wallet-core/src/headless/NodeHttpLib.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"NodeHttpLib.d.ts","sourceRoot":"","sources":["NodeHttpLib.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,OAAO,EAEL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACb,MAAM,cAAc,CAAC;AAMtB;;GAEG;AACH,qBAAa,WAAY,YAAW,kBAAkB;IACpD,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,iBAAiB,CAAQ;IAEjC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;YAIvB,GAAG;IA2EX,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAIjE,QAAQ,CACZ,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,GAAG,EACT,GAAG,CAAC,EAAE,kBAAkB,GACvB,OAAO,CAAC,YAAY,CAAC;CAGzB"} \ No newline at end of file diff --git a/src/headless/NodeHttpLib.ts b/packages/taler-wallet-core/src/headless/NodeHttpLib.ts similarity index 100% rename from src/headless/NodeHttpLib.ts rename to packages/taler-wallet-core/src/headless/NodeHttpLib.ts diff --git a/src/headless/helpers.ts b/packages/taler-wallet-core/src/headless/helpers.ts similarity index 98% rename from src/headless/helpers.ts rename to packages/taler-wallet-core/src/headless/helpers.ts index 570ec9e69..953493299 100644 --- a/src/headless/helpers.ts +++ b/packages/taler-wallet-core/src/headless/helpers.ts @@ -33,6 +33,7 @@ import { Database } from "../util/query"; import { NodeHttpLib } from "./NodeHttpLib"; import { Logger } from "../util/logging"; import { SynchronousCryptoWorkerFactory } from "../crypto/workers/synchronousWorker"; +import type { IDBFactory } from "idb-bridge/lib/idbtypes"; const logger = new Logger("headless/helpers.ts"); diff --git a/src/i18n/de.po b/packages/taler-wallet-core/src/i18n/de.po similarity index 100% rename from src/i18n/de.po rename to packages/taler-wallet-core/src/i18n/de.po diff --git a/src/i18n/en-US.po b/packages/taler-wallet-core/src/i18n/en-US.po similarity index 100% rename from src/i18n/en-US.po rename to packages/taler-wallet-core/src/i18n/en-US.po diff --git a/src/i18n/fr.po b/packages/taler-wallet-core/src/i18n/fr.po similarity index 100% rename from src/i18n/fr.po rename to packages/taler-wallet-core/src/i18n/fr.po diff --git a/packages/taler-wallet-core/src/i18n/index.ts b/packages/taler-wallet-core/src/i18n/index.ts new file mode 100644 index 000000000..b248d2666 --- /dev/null +++ b/packages/taler-wallet-core/src/i18n/index.ts @@ -0,0 +1,78 @@ +/* + This file is part of TALER + (C) 2016 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see + */ + +/** + * Translation helpers for React components and template literals. + */ + +/** + * Imports. + */ +import { strings } from "./strings"; +export { strings } from "./strings"; + +// @ts-ignore: no type decl for this library +import * as jedLib from "jed"; + +export let jed: any = undefined; + +/** + * Set up jed library for internationalization, + * based on browser language settings. + */ +export function setupI18n(lang: string): any { + lang = lang.replace("_", "-"); + + if (!strings[lang]) { + lang = "en-US"; + console.log(`language ${lang} not found, defaulting to english`); + } + jed = new jedLib.Jed(strings[lang]); +} + +/** + * Use different translations for testing. Should not be used outside + * of test cases. + */ +export function internalSetStrings(langStrings: any): void { + jed = new jedLib.Jed(langStrings); +} + +/** + * Convert template strings to a msgid + */ +function toI18nString(stringSeq: ReadonlyArray): string { + let s = ""; + for (let i = 0; i < stringSeq.length; i++) { + s += stringSeq[i]; + if (i < stringSeq.length - 1) { + s += `%${i + 1}$s`; + } + } + return s; +} + +/** + * Internationalize a string template with arbitrary serialized values. + */ +export function str(stringSeq: TemplateStringsArray, ...values: any[]): string { + const s = toI18nString(stringSeq); + const tr = jed + .translate(s) + .ifPlural(1, s) + .fetch(...values); + return tr; +} diff --git a/src/i18n/it.po b/packages/taler-wallet-core/src/i18n/it.po similarity index 100% rename from src/i18n/it.po rename to packages/taler-wallet-core/src/i18n/it.po diff --git a/src/i18n/poheader b/packages/taler-wallet-core/src/i18n/poheader similarity index 100% rename from src/i18n/poheader rename to packages/taler-wallet-core/src/i18n/poheader diff --git a/src/i18n/strings-prelude b/packages/taler-wallet-core/src/i18n/strings-prelude similarity index 100% rename from src/i18n/strings-prelude rename to packages/taler-wallet-core/src/i18n/strings-prelude diff --git a/src/i18n/strings.ts b/packages/taler-wallet-core/src/i18n/strings.ts similarity index 100% rename from src/i18n/strings.ts rename to packages/taler-wallet-core/src/i18n/strings.ts diff --git a/src/i18n/sv.po b/packages/taler-wallet-core/src/i18n/sv.po similarity index 100% rename from src/i18n/sv.po rename to packages/taler-wallet-core/src/i18n/sv.po diff --git a/src/i18n/taler-wallet-webex.pot b/packages/taler-wallet-core/src/i18n/taler-wallet-webex.pot similarity index 100% rename from src/i18n/taler-wallet-webex.pot rename to packages/taler-wallet-core/src/i18n/taler-wallet-webex.pot diff --git a/packages/taler-wallet-core/src/index.ts b/packages/taler-wallet-core/src/index.ts new file mode 100644 index 000000000..e70fc44f6 --- /dev/null +++ b/packages/taler-wallet-core/src/index.ts @@ -0,0 +1,75 @@ +/* + This file is part of TALER + (C) 2019 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see + */ + +/** + * Module entry point for the wallet when used as a node module. + */ + +export { Wallet } from "./wallet"; +export { + getDefaultNodeWallet, + DefaultNodeWalletArgs, +} from "./headless/helpers"; +export { Amounts, AmountJson } from "./util/amounts"; +export { Logger } from "./util/logging"; + +export * as talerCrypto from "./crypto/talerCrypto"; +export { + OperationFailedAndReportedError, + OperationFailedError, + makeErrorDetails, +} from "./operations/errors"; + +export * as walletTypes from "./types/walletTypes"; + +export * as talerTypes from "./types/talerTypes"; + +export * as walletCoreApi from "./walletCoreApiHandler"; + +export * as taleruri from "./util/taleruri"; + +export * as time from "./util/time"; + +export * as codec from "./util/codec"; + +export { NodeHttpLib } from "./headless/NodeHttpLib"; + +export * as payto from "./util/payto"; + +export * as testvectors from "./util/testvectors"; + +export * as versions from "./operations/versions"; + +export type { CryptoWorker } from "./crypto/workers/cryptoWorker"; +export type { CryptoWorkerFactory } from "./crypto/workers/cryptoApi"; + +export * as httpLib from "./util/http"; + +export { TalerErrorCode } from "./TalerErrorCode"; + +export * as queryLib from "./util/query"; + +export { CryptoImplementation } from "./crypto/workers/cryptoImplementation"; + +export * as db from "./db"; + +export * as promiseUtil from "./util/promiseUtils"; + +export * as i18n from "./i18n"; + +export * as nodeThreadWorker from "./crypto/workers/nodeThreadWorker"; + +export * as walletNotifications from "./types/notifications"; diff --git a/packages/taler-wallet-core/src/operations/balance.d.ts.map b/packages/taler-wallet-core/src/operations/balance.d.ts.map new file mode 100644 index 000000000..264d3139b --- /dev/null +++ b/packages/taler-wallet-core/src/operations/balance.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["balance.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAc9C;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,mBAAmB,EACvB,EAAE,EAAE,iBAAiB,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAqF3B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,mBAAmB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAmB3B"} \ No newline at end of file diff --git a/src/operations/balance.ts b/packages/taler-wallet-core/src/operations/balance.ts similarity index 100% rename from src/operations/balance.ts rename to packages/taler-wallet-core/src/operations/balance.ts diff --git a/packages/taler-wallet-core/src/operations/errors.d.ts.map b/packages/taler-wallet-core/src/operations/errors.d.ts.map new file mode 100644 index 000000000..e5763f31a --- /dev/null +++ b/packages/taler-wallet-core/src/operations/errors.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["errors.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AAEH;;GAEG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,KAAK;IACrC,cAAc,EAAE,qBAAqB;gBAArC,cAAc,EAAE,qBAAqB;CAMzD;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAS1B,cAAc,EAAE,qBAAqB;IARxD,MAAM,CAAC,QAAQ,CACb,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,oBAAoB;gBAIJ,cAAc,EAAE,qBAAqB;CAMzD;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,qBAAqB,CAOvB;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAC7C,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,SAAS,EAAE,CAAC,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,GACrD,OAAO,CAAC,CAAC,CAAC,CAqCZ"} \ No newline at end of file diff --git a/src/operations/errors.ts b/packages/taler-wallet-core/src/operations/errors.ts similarity index 100% rename from src/operations/errors.ts rename to packages/taler-wallet-core/src/operations/errors.ts diff --git a/packages/taler-wallet-core/src/operations/exchanges.d.ts.map b/packages/taler-wallet-core/src/operations/exchanges.d.ts.map new file mode 100644 index 000000000..963a271fd --- /dev/null +++ b/packages/taler-wallet-core/src/operations/exchanges.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"exchanges.d.ts","sourceRoot":"","sources":["exchanges.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAO9C,OAAO,EACL,cAAc,EAQf,MAAM,kBAAkB,CAAC;AA0R1B,wBAAsB,4BAA4B,CAChD,EAAE,EAAE,mBAAmB,EACvB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,OAAO,CAAC,IAAI,CAAC,CAUf;AAsFD,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,mBAAmB,EACvB,OAAO,EAAE,MAAM,EACf,QAAQ,UAAQ,GACf,OAAO,CAAC,cAAc,CAAC,CAOzB;AAoED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,mBAAmB,EACvB,YAAY,EAAE,cAAc,GAC3B,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CA4BrD;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,mBAAmB,EACvB,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,MAAM,CAAC,CAqBjB"} \ No newline at end of file diff --git a/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts similarity index 99% rename from src/operations/exchanges.ts rename to packages/taler-wallet-core/src/operations/exchanges.ts index 6b995b5e9..ee49fddb5 100644 --- a/src/operations/exchanges.ts +++ b/packages/taler-wallet-core/src/operations/exchanges.ts @@ -52,6 +52,7 @@ import { readSuccessResponseTextOrThrow, } from "../util/http"; import { Logger } from "../util/logging"; +import { URL } from "../util/url"; const logger = new Logger("exchanges.ts"); diff --git a/packages/taler-wallet-core/src/operations/pay.d.ts.map b/packages/taler-wallet-core/src/operations/pay.d.ts.map new file mode 100644 index 000000000..7ab4d7be6 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/pay.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pay.d.ts","sourceRoot":"","sources":["pay.ts"],"names":[],"mappings":"AA6CA,OAAO,EACL,gBAAgB,EAEhB,gBAAgB,EAGjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAK7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAY9C;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,aAAa,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAEhC;;OAEG;IACH,gBAAgB,EAAE,UAAU,CAAC;IAE7B;;OAEG;IACH,mBAAmB,EAAE,UAAU,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,eAAe,EAAE,UAAU,CAAC;IAE5B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,mBAAmB,EACvB,GAAG,EAAE,gBAAgB,GACpB,OAAO,CAAC,WAAW,CAAC,CA+BtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,iBAAiB,EAAE,EACzB,mBAAmB,EAAE,UAAU,EAC/B,gBAAgB,EAAE,UAAU,EAC5B,eAAe,EAAE,UAAU,GAC1B,gBAAgB,GAAG,SAAS,CAsF9B;AA+RD,wBAAsB,uBAAuB,CAC3C,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAwMD,wBAAsB,SAAS,CAC7B,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAmF3B;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,mBAAmB,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAgH3B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM,GAAG,SAAS,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAwF3B;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAiCD,wBAAsB,cAAc,CAClC,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAsBf"} \ No newline at end of file diff --git a/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts similarity index 99% rename from src/operations/pay.ts rename to packages/taler-wallet-core/src/operations/pay.ts index 9cbda5ba5..f23e326f8 100644 --- a/src/operations/pay.ts +++ b/packages/taler-wallet-core/src/operations/pay.ts @@ -61,6 +61,7 @@ import { getTimestampNow, timestampAddDuration } from "../util/time"; import { strcmp, canonicalJson } from "../util/helpers"; import { readSuccessResponseJsonOrThrow } from "../util/http"; import { TalerErrorCode } from "../TalerErrorCode"; +import { URL } from "../util/url"; /** * Logger. @@ -604,7 +605,7 @@ async function processDownloadProposalImpl( logger.trace("downloading contract from '" + orderClaimUrl + "'"); const requestBody: { - nonce: string, + nonce: string; token?: string; } = { nonce: proposal.noncePub, diff --git a/packages/taler-wallet-core/src/operations/pending.d.ts.map b/packages/taler-wallet-core/src/operations/pending.d.ts.map new file mode 100644 index 000000000..08897f538 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/pending.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pending.d.ts","sourceRoot":"","sources":["pending.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,yBAAyB,EAI1B,MAAM,kBAAkB,CAAC;AAS1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA6X9C,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,mBAAmB,EACvB,EAAE,OAAe,EAAE;;CAAK,GACvB,OAAO,CAAC,yBAAyB,CAAC,CAkCpC"} \ No newline at end of file diff --git a/src/operations/pending.ts b/packages/taler-wallet-core/src/operations/pending.ts similarity index 100% rename from src/operations/pending.ts rename to packages/taler-wallet-core/src/operations/pending.ts diff --git a/packages/taler-wallet-core/src/operations/recoup.d.ts.map b/packages/taler-wallet-core/src/operations/recoup.d.ts.map new file mode 100644 index 000000000..c5c9254d1 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/recoup.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"recoup.d.ts","sourceRoot":"","sources":["recoup.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AAEH;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAqB9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAyPlD,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,mBAAmB,EACvB,aAAa,EAAE,MAAM,EACrB,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AA0BD,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,mBAAmB,EACvB,EAAE,EAAE,iBAAiB,EACrB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,CAmCjB"} \ No newline at end of file diff --git a/src/operations/recoup.ts b/packages/taler-wallet-core/src/operations/recoup.ts similarity index 99% rename from src/operations/recoup.ts rename to packages/taler-wallet-core/src/operations/recoup.ts index e5f14c6ee..cc91ab0e9 100644 --- a/src/operations/recoup.ts +++ b/packages/taler-wallet-core/src/operations/recoup.ts @@ -50,6 +50,7 @@ import { encodeCrock, getRandomBytes } from "../crypto/talerCrypto"; import { getTimestampNow } from "../util/time"; import { guardOperationException } from "./errors"; import { readSuccessResponseJsonOrThrow } from "../util/http"; +import { URL } from "../util/url"; async function incrementRecoupRetry( ws: InternalWalletState, diff --git a/packages/taler-wallet-core/src/operations/refresh.d.ts.map b/packages/taler-wallet-core/src/operations/refresh.d.ts.map new file mode 100644 index 000000000..01cbe7458 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/refresh.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"refresh.d.ts","sourceRoot":"","sources":["refresh.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAW,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAUnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAI9C,OAAO,EAEL,aAAa,EACb,aAAa,EACb,cAAc,EACf,MAAM,sBAAsB,CAAC;AAc9B;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,kBAAkB,EAAE,EAC5B,cAAc,EAAE,kBAAkB,EAClC,UAAU,EAAE,UAAU,GACrB,UAAU,CAiBZ;AA0WD,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,mBAAmB,EACvB,cAAc,EAAE,MAAM,EACtB,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAyED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,mBAAmB,EACvB,EAAE,EAAE,iBAAiB,EACrB,WAAW,EAAE,aAAa,EAAE,EAC5B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,cAAc,CAAC,CA8BzB"} \ No newline at end of file diff --git a/src/operations/refresh.ts b/packages/taler-wallet-core/src/operations/refresh.ts similarity index 99% rename from src/operations/refresh.ts rename to packages/taler-wallet-core/src/operations/refresh.ts index 74b032b91..646bc2edf 100644 --- a/src/operations/refresh.ts +++ b/packages/taler-wallet-core/src/operations/refresh.ts @@ -48,6 +48,7 @@ import { codecForExchangeMeltResponse, codecForExchangeRevealResponse, } from "../types/talerTypes"; +import { URL } from "../util/url"; const logger = new Logger("refresh.ts"); @@ -560,7 +561,7 @@ export async function createRefreshGroup( try { await processRefreshGroup(ws, refreshGroupId); } catch (e) { - logger.trace(`Error during refresh: ${e}`) + logger.trace(`Error during refresh: ${e}`); } }; diff --git a/packages/taler-wallet-core/src/operations/refund.d.ts.map b/packages/taler-wallet-core/src/operations/refund.d.ts.map new file mode 100644 index 000000000..77efa7cae --- /dev/null +++ b/packages/taler-wallet-core/src/operations/refund.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"refund.d.ts","sourceRoot":"","sources":["refund.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AAEH;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA0S9C;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,EAAE,EAAE,mBAAmB,EACvB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;IAAE,iBAAiB,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B5D;AAED,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CAOf"} \ No newline at end of file diff --git a/src/operations/refund.ts b/packages/taler-wallet-core/src/operations/refund.ts similarity index 96% rename from src/operations/refund.ts rename to packages/taler-wallet-core/src/operations/refund.ts index 35384c087..9792d2268 100644 --- a/src/operations/refund.ts +++ b/packages/taler-wallet-core/src/operations/refund.ts @@ -53,6 +53,7 @@ import { getTimestampNow } from "../util/time"; import { Logger } from "../util/logging"; import { readSuccessResponseJsonOrThrow } from "../util/http"; import { TransactionHandle } from "../util/query"; +import { URL } from "../util/url"; const logger = new Logger("refund.ts"); @@ -120,7 +121,10 @@ async function applySuccessfulRefund( await tx.put(Stores.coins, coin); const allDenoms = await tx - .iterIndexed(Stores.denominations.exchangeBaseUrlIndex, coin.exchangeBaseUrl) + .iterIndexed( + Stores.denominations.exchangeBaseUrlIndex, + coin.exchangeBaseUrl, + ) .toArray(); const amountLeft = Amounts.sub( @@ -166,7 +170,10 @@ async function storePendingRefund( } const allDenoms = await tx - .iterIndexed(Stores.denominations.exchangeBaseUrlIndex, coin.exchangeBaseUrl) + .iterIndexed( + Stores.denominations.exchangeBaseUrlIndex, + coin.exchangeBaseUrl, + ) .toArray(); const amountLeft = Amounts.sub( @@ -200,7 +207,13 @@ async function acceptRefunds( const now = getTimestampNow(); await ws.db.runWithWriteTransaction( - [Stores.purchases, Stores.coins, Stores.denominations, Stores.refreshGroups, Stores.refundEvents], + [ + Stores.purchases, + Stores.coins, + Stores.denominations, + Stores.refreshGroups, + Stores.refundEvents, + ], async (tx) => { const p = await tx.get(Stores.purchases, proposalId); if (!p) { diff --git a/packages/taler-wallet-core/src/operations/reserves.d.ts.map b/packages/taler-wallet-core/src/operations/reserves.d.ts.map new file mode 100644 index 000000000..33d646ba5 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/reserves.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"reserves.d.ts","sourceRoot":"","sources":["reserves.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EAErB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA+C9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAyBlD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,mBAAmB,EACvB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CA+JhC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,EAClB,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AA+CD,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,mBAAmB,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAOf;AA8ZD,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,mBAAmB,EACvB,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,wBAAwB,CAAC,CAqBnC;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,iBAAiB,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB"} \ No newline at end of file diff --git a/src/operations/reserves.ts b/packages/taler-wallet-core/src/operations/reserves.ts similarity index 99% rename from src/operations/reserves.ts rename to packages/taler-wallet-core/src/operations/reserves.ts index 405a02f9e..58095affd 100644 --- a/src/operations/reserves.ts +++ b/packages/taler-wallet-core/src/operations/reserves.ts @@ -77,6 +77,7 @@ import { readSuccessResponseJsonOrThrow, } from "../util/http"; import { codecForAny } from "../util/codec"; +import { URL } from "../util/url"; const logger = new Logger("reserves.ts"); diff --git a/packages/taler-wallet-core/src/operations/state.d.ts.map b/packages/taler-wallet-core/src/operations/state.d.ts.map new file mode 100644 index 000000000..275197839 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/state.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["state.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,aAAK,oBAAoB,GAAG,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAI5D,qBAAa,mBAAmB;IAerB,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,kBAAkB;IAfjC,aAAa,EAAE;QAAE,CAAC,cAAc,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAM;IAChE,kBAAkB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAwB;IAChE,gBAAgB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAwB;IAC9D,cAAc,EAAE,iBAAiB,CAC/B,yBAAyB,CAC1B,CAA2B;IAC5B,cAAc,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAA2B;IAC9E,kBAAkB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAwB;IAChE,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAwB;IAC/D,SAAS,EAAE,SAAS,CAAC;IAErB,SAAS,EAAE,oBAAoB,EAAE,CAAM;gBAG9B,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,kBAAkB,EAC/B,mBAAmB,EAAE,mBAAmB;IAKnC,MAAM,CAAC,CAAC,EAAE,kBAAkB,GAAG,IAAI;IAU1C,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,kBAAkB,KAAK,IAAI,GAAG,IAAI;CAGlE"} \ No newline at end of file diff --git a/src/operations/state.ts b/packages/taler-wallet-core/src/operations/state.ts similarity index 100% rename from src/operations/state.ts rename to packages/taler-wallet-core/src/operations/state.ts diff --git a/packages/taler-wallet-core/src/operations/testing.d.ts.map b/packages/taler-wallet-core/src/operations/testing.d.ts.map new file mode 100644 index 000000000..d7b3ceaec --- /dev/null +++ b/packages/taler-wallet-core/src/operations/testing.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["testing.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAuC9C,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,mBAAmB,EACvB,MAAM,SAAiB,EACvB,WAAW,SAAiC,EAC5C,eAAe,SAAqC,GACnD,OAAO,CAAC,IAAI,CAAC,CAuBf"} \ No newline at end of file diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts new file mode 100644 index 000000000..71cee1f3a --- /dev/null +++ b/packages/taler-wallet-core/src/operations/testing.ts @@ -0,0 +1,156 @@ +/* + This file is part of GNU Taler + (C) 2020 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +import { Logger } from "../util/logging"; +import { + HttpRequestLibrary, + readSuccessResponseJsonOrThrow, + checkSuccessResponseOrThrow, +} from "../util/http"; +import { codecForAny } from "../util/codec"; +import { AmountString } from "../types/talerTypes"; +import { InternalWalletState } from "./state"; +import { createTalerWithdrawReserve } from "./reserves"; +import { URL } from "../util/url"; + +const logger = new Logger("operations/testing.ts"); + +interface BankUser { + username: string; + password: string; +} + +interface BankWithdrawalResponse { + taler_withdraw_uri: string; + withdrawal_id: string; +} + +/** + * Generate a random alphanumeric ID. Does *not* use cryptographically + * secure randomness. + */ +function makeId(length: number): string { + let result = ""; + const characters = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * characters.length)); + } + return result; +} + +/** + * Helper function to generate the "Authorization" HTTP header. + */ +function makeAuth(username: string, password: string): string { + const auth = `${username}:${password}`; + const authEncoded: string = Buffer.from(auth).toString("base64"); + return `Basic ${authEncoded}`; +} + +export async function withdrawTestBalance( + ws: InternalWalletState, + amount = "TESTKUDOS:10", + bankBaseUrl = "https://bank.test.taler.net/", + exchangeBaseUrl = "https://exchange.test.taler.net/", +): Promise { + const bankUser = await registerRandomBankUser(ws.http, bankBaseUrl); + logger.trace(`Registered bank user ${JSON.stringify(bankUser)}`); + + const wresp = await createBankWithdrawalUri( + ws.http, + bankBaseUrl, + bankUser, + amount, + ); + + await createTalerWithdrawReserve( + ws, + wresp.taler_withdraw_uri, + exchangeBaseUrl, + ); + + await confirmBankWithdrawalUri( + ws.http, + bankBaseUrl, + bankUser, + wresp.withdrawal_id, + ); +} + +async function createBankWithdrawalUri( + http: HttpRequestLibrary, + bankBaseUrl: string, + bankUser: BankUser, + amount: AmountString, +): Promise { + const reqUrl = new URL( + `accounts/${bankUser.username}/withdrawals`, + bankBaseUrl, + ).href; + const resp = await http.postJson( + reqUrl, + { + amount, + }, + { + headers: { + Authorization: makeAuth(bankUser.username, bankUser.password), + }, + }, + ); + const respJson = await readSuccessResponseJsonOrThrow(resp, codecForAny); + return respJson; +} + +async function confirmBankWithdrawalUri( + http: HttpRequestLibrary, + bankBaseUrl: string, + bankUser: BankUser, + withdrawalId: string, +): Promise { + const reqUrl = new URL( + `accounts/${bankUser.username}/withdrawals/${withdrawalId}/confirm`, + bankBaseUrl, + ).href; + const resp = await http.postJson( + reqUrl, + {}, + { + headers: { + Authorization: makeAuth(bankUser.username, bankUser.password), + }, + }, + ); + await readSuccessResponseJsonOrThrow(resp, codecForAny); + return; +} + +async function registerRandomBankUser( + http: HttpRequestLibrary, + bankBaseUrl: string, +): Promise { + const reqUrl = new URL("testing/register", bankBaseUrl).href; + const randId = makeId(8); + const bankUser: BankUser = { + username: `testuser-${randId}`, + password: `testpw-${randId}`, + }; + + const resp = await http.postJson(reqUrl, bankUser); + await checkSuccessResponseOrThrow(resp); + return bankUser; +} diff --git a/packages/taler-wallet-core/src/operations/tip.d.ts.map b/packages/taler-wallet-core/src/operations/tip.d.ts.map new file mode 100644 index 000000000..8d8a72fb8 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/tip.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"tip.d.ts","sourceRoot":"","sources":["tip.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAyB,MAAM,sBAAsB,CAAC;AA8BxE,wBAAsB,YAAY,CAChC,EAAE,EAAE,mBAAmB,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC,CAgFpB;AAuBD,wBAAsB,UAAU,CAC9B,EAAE,EAAE,mBAAmB,EACvB,KAAK,EAAE,MAAM,EACb,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAkKD,wBAAsB,SAAS,CAC7B,EAAE,EAAE,mBAAmB,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAYf"} \ No newline at end of file diff --git a/src/operations/tip.ts b/packages/taler-wallet-core/src/operations/tip.ts similarity index 99% rename from src/operations/tip.ts rename to packages/taler-wallet-core/src/operations/tip.ts index 17f7ee90d..d6768bdb6 100644 --- a/src/operations/tip.ts +++ b/packages/taler-wallet-core/src/operations/tip.ts @@ -44,6 +44,7 @@ import { guardOperationException } from "./errors"; import { NotificationType } from "../types/notifications"; import { getTimestampNow } from "../util/time"; import { readSuccessResponseJsonOrThrow } from "../util/http"; +import { URL } from "../util/url"; export async function getTipStatus( ws: InternalWalletState, diff --git a/packages/taler-wallet-core/src/operations/transactions.d.ts.map b/packages/taler-wallet-core/src/operations/transactions.d.ts.map new file mode 100644 index 000000000..5a462e4d6 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/transactions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["transactions.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAO9C,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EAMrB,MAAM,uBAAuB,CAAC;AAoC/B;;GAEG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,mBAAmB,EACvB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,oBAAoB,CAAC,CAuN/B"} \ No newline at end of file diff --git a/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts similarity index 99% rename from src/operations/transactions.ts rename to packages/taler-wallet-core/src/operations/transactions.ts index 647949d22..2d66b5e9d 100644 --- a/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -18,10 +18,7 @@ * Imports. */ import { InternalWalletState } from "./state"; -import { - Stores, - WithdrawalSourceType, -} from "../types/dbTypes"; +import { Stores, WithdrawalSourceType } from "../types/dbTypes"; import { Amounts, AmountJson } from "../util/amounts"; import { timestampCmp } from "../util/time"; import { @@ -277,7 +274,6 @@ export async function getTransactions( // amountRaw: Amounts.stringify(stats.amountRaw), // }); // } - }); }, ); diff --git a/packages/taler-wallet-core/src/operations/versions.d.ts.map b/packages/taler-wallet-core/src/operations/versions.d.ts.map new file mode 100644 index 000000000..15ba8d27e --- /dev/null +++ b/packages/taler-wallet-core/src/operations/versions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["versions.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,UAAU,CAAC;AAExD;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,UAAU,CAAC;AAExD;;;;;;GAMG;AACH,eAAO,MAAM,mCAAmC,MAAM,CAAC"} \ No newline at end of file diff --git a/src/operations/versions.ts b/packages/taler-wallet-core/src/operations/versions.ts similarity index 100% rename from src/operations/versions.ts rename to packages/taler-wallet-core/src/operations/versions.ts diff --git a/src/operations/withdraw-test.ts b/packages/taler-wallet-core/src/operations/withdraw-test.ts similarity index 100% rename from src/operations/withdraw-test.ts rename to packages/taler-wallet-core/src/operations/withdraw-test.ts diff --git a/packages/taler-wallet-core/src/operations/withdraw.d.ts.map b/packages/taler-wallet-core/src/operations/withdraw.d.ts.map new file mode 100644 index 000000000..51eeb1888 --- /dev/null +++ b/packages/taler-wallet-core/src/operations/withdraw.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"withdraw.d.ts","sourceRoot":"","sources":["withdraw.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAW,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,kBAAkB,EAQlB,yBAAyB,EAGzB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EAGxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAgC9C;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,UAAU,EAC3B,MAAM,EAAE,kBAAkB,EAAE,GAC3B,yBAAyB,CAiD3B;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,mBAAmB,EACvB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,mBAAmB,CAAC,CAyB9B;AA2QD,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,yBAAyB,GAC7B,mBAAmB,CAWrB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,mBAAmB,EACvB,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,yBAAyB,CAAC,CA8CpC;AAyBD,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,mBAAmB,EACvB,iBAAiB,EAAE,MAAM,EACzB,QAAQ,UAAQ,GACf,OAAO,CAAC,IAAI,CAAC,CAOf;AAsED,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,mBAAmB,EACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,uBAAuB,CAAC,CA8FlC;AAED,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,mBAAmB,EACvB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,uBAAuB,CAAC,CA2ClC"} \ No newline at end of file diff --git a/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts similarity index 96% rename from src/operations/withdraw.ts rename to packages/taler-wallet-core/src/operations/withdraw.ts index 486375300..3b0aa0095 100644 --- a/src/operations/withdraw.ts +++ b/packages/taler-wallet-core/src/operations/withdraw.ts @@ -56,6 +56,7 @@ import { timestampSubtractDuraction, } from "../util/time"; import { readSuccessResponseJsonOrThrow } from "../util/http"; +import { URL } from "../util/url"; const logger = new Logger("withdraw.ts"); @@ -720,37 +721,39 @@ export async function getWithdrawalDetailsForUri( } catch (e) { // We still continued if it failed, as other exchanges might be available. // We don't want to fail if the bank-suggested exchange is broken/offline. - logger.trace(`querying bank-suggested exchange (${info.suggestedExchange}) failed`) + logger.trace( + `querying bank-suggested exchange (${info.suggestedExchange}) failed`, + ); } } const exchangesRes: (ExchangeListItem | undefined)[] = await ws.db - .iter(Stores.exchanges) - .map((x) => { - const details = x.details; - if (!details) { - return undefined; - } - if (!x.addComplete) { - return undefined; - } - if (!x.wireInfo) { - return undefined; - } - if (details.currency !== info.amount.currency) { - return undefined; - } - return { - exchangeBaseUrl: x.baseUrl, - currency: details.currency, - paytoUris: x.wireInfo.accounts.map((x) => x.payto_uri), - }; - }); - const exchanges = exchangesRes.filter((x) => !!x) as ExchangeListItem[]; + .iter(Stores.exchanges) + .map((x) => { + const details = x.details; + if (!details) { + return undefined; + } + if (!x.addComplete) { + return undefined; + } + if (!x.wireInfo) { + return undefined; + } + if (details.currency !== info.amount.currency) { + return undefined; + } + return { + exchangeBaseUrl: x.baseUrl, + currency: details.currency, + paytoUris: x.wireInfo.accounts.map((x) => x.payto_uri), + }; + }); + const exchanges = exchangesRes.filter((x) => !!x) as ExchangeListItem[]; return { amount: Amounts.stringify(info.amount), defaultExchangeBaseUrl: info.suggestedExchange, possibleExchanges: exchanges, - } + }; } diff --git a/packages/taler-wallet-core/src/types/ReserveStatus.d.ts.map b/packages/taler-wallet-core/src/types/ReserveStatus.d.ts.map new file mode 100644 index 000000000..6b84dde85 --- /dev/null +++ b/packages/taler-wallet-core/src/types/ReserveStatus.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ReserveStatus.d.ts","sourceRoot":"","sources":["ReserveStatus.ts"],"names":[],"mappings":"AAgBA;;GAEG;AAEH;;GAEG;AACH,OAAO,EAIL,KAAK,EACN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAEnB,MAAM,sBAAsB,CAAC;AAE9B;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC;IAEtB;;OAEG;IACH,OAAO,EAAE,kBAAkB,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,qBAAqB,QAAO,KAAK,CAAC,aAAa,CAIjC,CAAC"} \ No newline at end of file diff --git a/src/types/ReserveStatus.ts b/packages/taler-wallet-core/src/types/ReserveStatus.ts similarity index 100% rename from src/types/ReserveStatus.ts rename to packages/taler-wallet-core/src/types/ReserveStatus.ts diff --git a/packages/taler-wallet-core/src/types/ReserveTransaction.d.ts.map b/packages/taler-wallet-core/src/types/ReserveTransaction.d.ts.map new file mode 100644 index 000000000..c4672bc45 --- /dev/null +++ b/packages/taler-wallet-core/src/types/ReserveTransaction.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ReserveTransaction.d.ts","sourceRoot":"","sources":["ReserveTransaction.ts"],"names":[],"mappings":"AAgBA;;GAEG;AAEH;;GAEG;AACH,OAAO,EAKL,KAAK,EACN,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;AAE5D,0BAAkB,sBAAsB;IACtC,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,sBAAsB,CAAC,QAAQ,CAAC;IAEtC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,YAAY,CAAC;IAE1B;;OAEG;IACH,eAAe,EAAE,YAAY,CAAC;IAE9B;;;OAGG;IACH,WAAW,EAAE,oBAAoB,CAAC;IAElC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC;IAEpC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC;IAErC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,YAAY,CAAC;IAE1B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,YAAY,EAAE,oBAAoB,CAAC;IAEnC;;OAEG;IACH,YAAY,EAAE,oBAAoB,CAAC;IAEnC;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,sBAAsB,CAAC,MAAM,CAAC;IAEpC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;;;OAIG;IACH,YAAY,EAAE,oBAAoB,CAAC;IAEnC;;OAEG;IACH,YAAY,EAAE,oBAAoB,CAAC;IAEnC;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED;;GAEG;AACH,oBAAY,kBAAkB,GAC1B,0BAA0B,GAC1B,wBAAwB,GACxB,yBAAyB,GACzB,wBAAwB,CAAC;AAE7B,eAAO,MAAM,kCAAkC,QAAO,KAAK,CACzD,0BAA0B,CASY,CAAC;AAEzC,eAAO,MAAM,gCAAgC,QAAO,KAAK,CACvD,wBAAwB,CAQY,CAAC;AAEvC,eAAO,MAAM,iCAAiC,QAAO,KAAK,CACxD,yBAAyB,CAWY,CAAC;AAExC,eAAO,MAAM,gCAAgC,QAAO,KAAK,CACvD,wBAAwB,CASY,CAAC;AAEvC,eAAO,MAAM,0BAA0B,QAAO,KAAK,CAAC,kBAAkB,CAmBlB,CAAC"} \ No newline at end of file diff --git a/src/types/ReserveTransaction.ts b/packages/taler-wallet-core/src/types/ReserveTransaction.ts similarity index 100% rename from src/types/ReserveTransaction.ts rename to packages/taler-wallet-core/src/types/ReserveTransaction.ts diff --git a/packages/taler-wallet-core/src/types/dbTypes.d.ts.map b/packages/taler-wallet-core/src/types/dbTypes.d.ts.map new file mode 100644 index 000000000..7b89c4de4 --- /dev/null +++ b/packages/taler-wallet-core/src/types/dbTypes.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"dbTypes.d.ts","sourceRoot":"","sources":["dbTypes.ts"],"names":[],"mappings":"AAgBA;;;;GAIG;AAEH;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,OAAO,EACP,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,OAAO,EACR,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAmB,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIlE,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,gBAAgB,qBAAqB;IAErC;;;;OAIG;IACH,iBAAiB,sBAAsB;IAEvC;;OAEG;IACH,eAAe,oBAAoB;IAEnC;;;OAGG;IACH,WAAW,gBAAgB;IAE3B;;;;OAIG;IACH,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAOD,wBAAgB,sBAAsB,CACpC,CAAC,EAAE,SAAS,EACZ,CAAC,GAAE,WAAgC,GAClC,IAAI,CAYN;AAED,wBAAgB,aAAa,CAC3B,MAAM,UAAO,EACb,CAAC,GAAE,WAAgC,GAClC,SAAS,CAiBX;AAED,0BAAkB,4BAA4B;IAC5C,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,4BAA4B,CAAC,MAAM,CAAC;IAE1C;;OAEG;IACH,cAAc,CAAC,EAAE,UAAU,CAAC;IAE5B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,wBAAwB,CAAC;CACvD;AAED,MAAM,WAAW,gCAAgC;IAC/C,cAAc,CAAC,EAAE,UAAU,CAAC;IAE5B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,IAAI,EAAE,4BAA4B,CAAC,QAAQ,CAAC;IAE5C;;;OAGG;IACH,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;CACzD;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,4BAA4B,CAAC,OAAO,CAAC;IAE3C;;;OAGG;IACH,0BAA0B,CAAC,EAAE,yBAAyB,CAAC;CACxD;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,4BAA4B,CAAC,MAAM,CAAC;IAE1C;;OAEG;IACH,cAAc,CAAC,EAAE,UAAU,CAAC;IAE5B;;;OAGG;IACH,0BAA0B,CAAC,EAAE,wBAAwB,CAAC;CACvD;AAED,oBAAY,wBAAwB,GAChC,8BAA8B,GAC9B,gCAAgC,GAChC,8BAA8B,GAC9B,+BAA+B,CAAC;AAEpC,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,wBAAwB,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,gBAAgB,EAAE,SAAS,CAAC;IAE5B;;;;;;OAMG;IACH,0BAA0B,EAAE,SAAS,GAAG,SAAS,CAAC;IAElD;;;;OAIG;IACH,sBAAsB,EAAE,SAAS,GAAG,SAAS,CAAC;IAE9C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,gBAAgB,EAAE,UAAU,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B,wBAAwB,EAAE,MAAM,CAAC;IAEjC;;;;;OAKG;IACH,wBAAwB,EAAE,OAAO,CAAC;IAClC,eAAe,EAAE,mBAAmB,CAAC;IAErC,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,yBAAyB,EAAE,SAAS,GAAG,SAAS,CAAC;IAEjD;;;;OAIG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B;;OAEG;IACH,SAAS,EAAE,yBAAyB,EAAE,CAAC;CACxC;AAED;;GAEG;AACH,oBAAY,kBAAkB;IAC5B;;OAEG;IACH,UAAU,IAAA;IACV;;OAEG;IACH,YAAY,IAAA;IACZ;;OAEG;IACH,WAAW,IAAA;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,KAAK,EAAE,UAAU,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,WAAW,EAAE,UAAU,CAAC;IAExB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC;IAEtB;;OAEG;IACH,UAAU,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,mBAAmB,EAAE,SAAS,CAAC;IAE/B;;OAEG;IACH,gBAAgB,EAAE,SAAS,CAAC;IAE5B;;OAEG;IACH,kBAAkB,EAAE,SAAS,CAAC;IAE9B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,MAAM,EAAE,kBAAkB,CAAC;IAE3B;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,EAAE,OAAO,EAAE,CAAC;IAEpB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,WAAW,EAAE,mBAAmB,EAAE,CAAC;IAEnC;;OAEG;IACH,cAAc,EAAE,SAAS,CAAC;CAC3B;AAED,0BAAkB,oBAAoB;IACpC,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB,UAAU,gBAAgB;IAC1B,cAAc,oBAAoB;IAClC,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;KAAE,CAAC;IACjD,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED;;GAEG;AAEH,MAAM,WAAW,kBAAkB;CAElC;AAED,0BAAkB,oBAAoB;IACpC,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,OAAO,EAAE,eAAe,GAAG,SAAS,CAAC;IAErC;;OAEG;IACH,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAEvC;;OAEG;IACH,cAAc,EAAE,SAAS,CAAC;IAE1B;;OAEG;IACH,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvC;;OAEG;IACH,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C;;OAEG;IACH,0BAA0B,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/C;;OAEG;IACH,+BAA+B,EAAE,SAAS,GAAG,SAAS,CAAC;IAEvD;;;OAGG;IACH,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;IAErC;;OAEG;IACH,YAAY,EAAE,oBAAoB,CAAC;IAEnC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAEpC;;OAEG;IACH,UAAU,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAE3C,SAAS,CAAC,EAAE,qBAAqB,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB,cAAc,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,0BAAkB,UAAU;IAC1B;;OAEG;IACH,KAAK,UAAU;IACf;;OAEG;IACH,OAAO,YAAY;CACpB;AAED,0BAAkB,cAAc;IAC9B,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC;CAC1B;AAED,oBAAY,UAAU,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,aAAa,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE,UAAU,CAAC;IAE1B;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,0BAAkB,cAAc;IAC9B;;OAEG;IACH,WAAW,gBAAgB;IAC3B;;OAEG;IACH,QAAQ,aAAa;IACrB;;OAEG;IACH,QAAQ,aAAa;IACrB;;OAEG;IACH,OAAO,YAAY;IACnB;;OAEG;IACH,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB,YAAY,EAAE,kBAAkB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAEhB,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,QAAQ,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAEvC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAE/B,cAAc,EAAE,cAAc,CAAC;IAE/B,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAE7C;;;OAGG;IACH,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC;IAEzC;;OAEG;IACH,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC;IAEzC;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IAEnB,SAAS,EAAE,UAAU,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAE1B,SAAS,EAAE,mBAAmB,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAEzB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,gBAAgB,EAAE,SAAS,CAAC;IAE5B;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAE7C,gBAAgB,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;IAEjE,cAAc,EAAE,MAAM,CAAC;IAEvB,MAAM,EAAE,aAAa,CAAC;IAEtB,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,qBAAqB,EAAE,CAAC,oBAAoB,GAAG,SAAS,CAAC,EAAE,CAAC;IAE5D;;;;;OAKG;IACH,eAAe,EAAE,OAAO,EAAE,CAAC;IAE3B;;OAEG;IACH,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAE7C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,kBAAkB,EAAE,UAAU,CAAC;IAE/B;;;OAGG;IACH,mBAAmB,EAAE,UAAU,CAAC;IAEhC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB;;OAEG;IACH,kBAAkB,EAAE,qBAAqB,EAAE,EAAE,CAAC;IAE9C;;OAEG;IACH,YAAY,EAAE,MAAM,EAAE,CAAC;IAEvB;;OAEG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC;IAEzC;;OAEG;IACH,gBAAgB,EAAE,SAAS,CAAC;IAE5B;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,UAAU,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,OAAO,EAAE,UAAU,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,0BAA0B,EAAE,SAAS,CAAC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0BAAkB,WAAW;IAC3B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,gBAAgB,GACxB,sBAAsB,GACtB,uBAAuB,GACvB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,SAAS,CAAC;IACzB,YAAY,EAAE,UAAU,CAAC;IACzB,SAAS,EAAE,UAAU,CAAC;IAEtB;;;;;;OAMG;IACH,qBAAqB,EAAE,UAAU,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;CAC3B;AAED,0BAAkB,YAAY;IAC5B;;OAEG;IACH,YAAY,kBAAkB;IAC9B;;OAEG;IACH,WAAW,qBAAqB;CACjC;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,yBAAyB;IACxC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,kBAAkB,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,WAAW,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,SAAS,CAAC;IACvB,cAAc,EAAE,SAAS,CAAC;IAC1B,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;IACxC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,UAAU,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB,YAAY,EAAE,kBAAkB,CAAC;IAEjC;;OAEG;IACH,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;IAEhD,gBAAgB,EAAE,gBAAgB,CAAC;IAEnC,WAAW,EAAE,WAAW,CAAC;IAEzB;;;OAGG;IACH,2BAA2B,EAAE,SAAS,GAAG,SAAS,CAAC;IAEnD;;;OAGG;IACH,eAAe,EAAE,SAAS,CAAC;IAE3B;;;OAGG;IACH,OAAO,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAA;KAAE,CAAC;IAEnD;;;OAGG;IACH,yBAAyB,EAAE,SAAS,GAAG,SAAS,CAAC;IAEjD;;OAEG;IACH,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC;;OAEG;IACH,oBAAoB,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB,YAAY,EAAE,SAAS,CAAC;IAExB,YAAY,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAEhD;;OAEG;IACH,qBAAqB,EAAE,SAAS,CAAC;IAEjC;;OAEG;IACH,qBAAqB,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAEzD;;OAEG;IACH,kBAAkB,EAAE,SAAS,GAAG,SAAS,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,qBAAqB,CAAC;IAElC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,YAAY,EAAE,kBAAkB,CAAC;IAEjC;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,EAAE,WAAW,EAAE,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC;CACX;AAED,0BAAkB,oBAAoB;IACpC,GAAG,QAAQ;IACX,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,oBAAoB,CAAC,GAAG,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oBAAY,gBAAgB,GAAG,mBAAmB,GAAG,uBAAuB,CAAC;AAE7E,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,UAAU,CAAC;IAC3B,iBAAiB,EAAE,UAAU,CAAC;IAC9B,cAAc,EAAE;QACd;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,kBAAkB,CAAC;KAC3B,EAAE,CAAC;CACL;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,UAAU,CAAC;IAC3B,iBAAiB,EAAE,UAAU,CAAC;IAC9B,cAAc,EAAE;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;KACf,EAAE,CAAC;CACL;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,MAAM,EAAE,gBAAgB,CAAC;IAEzB,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,cAAc,EAAE,SAAS,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC;IAE5B;;;OAGG;IACH,mBAAmB,EAAE,UAAU,CAAC;IAEhC,SAAS,EAAE,mBAAmB,CAAC;IAE/B;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;;OAGG;IACH,gBAAgB,EAAE;QAAE,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;IAEjE,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB,gBAAgB,EAAE,SAAS,CAAC;IAE5B,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC;IAEzC;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,qBAAqB,EAAE,OAAO,EAAE,CAAC;IAEjC;;;;OAIG;IACH,gBAAgB,EAAE,UAAU,EAAE,CAAC;IAE/B;;;OAGG;IACH,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAE/B;;OAEG;IACH,SAAS,EAAE,SAAS,CAAC;IAErB;;OAEG;IACH,SAAS,EAAE,qBAAqB,GAAG,SAAS,CAAC;CAC9C;AAED,0BAAkB,iBAAiB;IACjC,UAAU,gBAAgB;CAC3B;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,sBAAsB,EAAE,SAAS,CAAC;IAElC,uBAAuB,EAAE,SAAS,GAAG,SAAS,CAAC;IAE/C,WAAW,EAAE,iBAAiB,CAAC;IAE/B;;OAEG;IACH,OAAO,EAAE,GAAG,CAAC;CACd;AAID;;GAEG;AAEH,yBAAiB,MAAM,CAAC;IACtB,MAAM,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC;;KAIjD;IAED,MAAM,UAAW,SAAQ,KAAK,CAAC,UAAU,CAAC;;QAKxC,oBAAoB,4BAIlB;QACF,aAAa,4BAIX;QACF,iBAAiB,4BAIf;KACH;IAED,MAAM,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC;;QAIhD,kBAAkB,gCAGf;KACJ;IAED,MAAM,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC;;QAKhD,mBAAmB,gCAIjB;QACF,YAAY,gCAGT;KACJ;IAED,MAAM,kBAAmB,SAAQ,KAAK,CAAC,kBAAkB,CAAC;;QAQxD,iBAAiB,oCAIf;QACF,oBAAoB,oCAIlB;QACF,aAAa,oCAIX;KACH;IAED,MAAM,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC;;KAIlD;IAED,MAAM,WAAY,SAAQ,KAAK,CAAC,YAAY,CAAC;;KAI5C;IAED,MAAM,aAAc,SAAQ,KAAK,CAAC,aAAa,CAAC;;KAI/C;IAED,MAAM,mBAAoB,SAAQ,KAAK,CAAC,oBAAoB,CAAC;;KAI5D;IAED,MAAM,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;;KAIvC;IAED,MAAM,gBAAiB,SAAQ,KAAK,CAAC,gBAAgB,CAAC;;KAIrD;IAED,MAAM,qBAAsB,SAAQ,KAAK,CAAC,qBAAqB,CAAC;;KAI/D;IAED,MAAM,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC;;QAIhD,eAAe,gCAIb;QACF,OAAO,gCAIL;KACH;IAED,MAAM,iBAAkB,SAAQ,KAAK,CAAC,iBAAiB,CAAC;;KAIvD;IAED,MAAM,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC;;KAIjD;IAED,MAAM,0BAA2B,SAAQ,KAAK,CAAC,0BAA0B,CAAC;;KAIzE;IAED,MAAM,yBAA0B,SAAQ,KAAK,CAAC,yBAAyB,CAAC;;KAIvE;IAED,MAAM,qBAAsB,SAAQ,KAAK,CAAC,qBAAqB,CAAC;;KAI/D;IAED,MAAM,kBAAmB,SAAQ,KAAK,CAAC,kBAAkB,CAAC;;KAIzD;IAED,MAAM,CAAC,MAAM,KAAK,YAAmB,CAAC;IACtC,MAAM,CAAC,MAAM,YAAY,0BAEvB,CAAC;IACH,MAAM,CAAC,MAAM,MAAM,aAAoB,CAAC;IACxC,MAAM,CAAC,MAAM,UAAU,iBAAwB,CAAC;IAChD,MAAM,CAAC,MAAM,aAAa,oBAA2B,CAAC;IACtD,MAAM,CAAC,MAAM,SAAS,gBAAuB,CAAC;IAC9C,MAAM,CAAC,MAAM,SAAS,gBAAuB,CAAC;IAC9C,MAAM,CAAC,MAAM,aAAa,2BAExB,CAAC;IACH,MAAM,CAAC,MAAM,YAAY,0BAEvB,CAAC;IACH,MAAM,CAAC,MAAM,QAAQ,eAAsB,CAAC;IAC5C,MAAM,CAAC,MAAM,cAAc,qBAA4B,CAAC;IACxD,MAAM,CAAC,MAAM,SAAS,gBAAuB,CAAC;IAC9C,MAAM,CAAC,MAAM,IAAI,WAAkB,CAAC;IACpC,MAAM,CAAC,MAAM,WAAW,kBAAyB,CAAC;IAClD,MAAM,CAAC,MAAM,gBAAgB,uBAA8B,CAAC;IAC5D,MAAM,CAAC,MAAM,SAAS,gBAAuB,CAAC;IAC9C,MAAM,CAAC,MAAM,gBAAgB,uBAA8B,CAAC;IAC5D,MAAM,CAAC,MAAM,YAAY,mBAA0B,CAAC;IACpD,MAAM,CAAC,MAAM,SAAS,gBAAuB,CAAC;IAC9C,MAAM,CAAC,MAAM,oBAAoB,2BAAkC,CAAC;IACpE,MAAM,CAAC,MAAM,qBAAqB,4BAAmC,CAAC;IACtE,MAAM,CAAC,MAAM,aAAa,oBAA2B,CAAC;;CACvD"} \ No newline at end of file diff --git a/src/types/dbTypes.ts b/packages/taler-wallet-core/src/types/dbTypes.ts similarity index 85% rename from src/types/dbTypes.ts rename to packages/taler-wallet-core/src/types/dbTypes.ts index e03d46417..3e1fdfe25 100644 --- a/src/types/dbTypes.ts +++ b/packages/taler-wallet-core/src/types/dbTypes.ts @@ -44,6 +44,7 @@ import { } from "./ReserveTransaction"; import { Timestamp, Duration, getTimestampNow } from "../util/time"; import { PayCoinSelection, PayCostInfo } from "../operations/pay"; +import { idbtypes } from "idb-bridge"; export enum ReserveRecordStatus { /** @@ -1168,7 +1169,7 @@ export interface WalletRefundItemCommon { /** * Upper bound on the refresh cost incurred by * applying this refund. - * + * * Might be lower in practice when two refunds on the same * coin are refreshed in the same refresh operation. */ @@ -1607,212 +1608,212 @@ export class WalletImportRecord { /* tslint:disable:completed-docs */ +class ExchangesStore extends Store { + constructor() { + super("exchanges", { keyPath: "baseUrl" }); + } +} + +class CoinsStore extends Store { + constructor() { + super("coins", { keyPath: "coinPub" }); + } + + exchangeBaseUrlIndex = new Index( + this, + "exchangeBaseUrl", + "exchangeBaseUrl", + ); + denomPubIndex = new Index( + this, + "denomPubIndex", + "denomPub", + ); + denomPubHashIndex = new Index( + this, + "denomPubHashIndex", + "denomPubHash", + ); +} + +class ProposalsStore extends Store { + constructor() { + super("proposals", { keyPath: "proposalId" }); + } + urlAndOrderIdIndex = new Index(this, "urlIndex", [ + "merchantBaseUrl", + "orderId", + ]); +} + +class PurchasesStore extends Store { + constructor() { + super("purchases", { keyPath: "proposalId" }); + } + + fulfillmentUrlIndex = new Index( + this, + "fulfillmentUrlIndex", + "contractData.fulfillmentUrl", + ); + orderIdIndex = new Index(this, "orderIdIndex", [ + "contractData.merchantBaseUrl", + "contractData.orderId", + ]); +} + +class DenominationsStore extends Store { + constructor() { + // cast needed because of bug in type annotations + super("denominations", { + keyPath: (["exchangeBaseUrl", "denomPub"] as any) as idbtypes.IDBKeyPath, + }); + } + + denomPubHashIndex = new Index( + this, + "denomPubHashIndex", + "denomPubHash", + ); + exchangeBaseUrlIndex = new Index( + this, + "exchangeBaseUrlIndex", + "exchangeBaseUrl", + ); + denomPubIndex = new Index( + this, + "denomPubIndex", + "denomPub", + ); +} + +class CurrenciesStore extends Store { + constructor() { + super("currencies", { keyPath: "name" }); + } +} + +class ConfigStore extends Store { + constructor() { + super("config", { keyPath: "key" }); + } +} + +class ReservesStore extends Store { + constructor() { + super("reserves", { keyPath: "reservePub" }); + } +} + +class ReserveHistoryStore extends Store { + constructor() { + super("reserveHistory", { keyPath: "reservePub" }); + } +} + +class TipsStore extends Store { + constructor() { + super("tips", { keyPath: "tipId" }); + } +} + +class SenderWiresStore extends Store { + constructor() { + super("senderWires", { keyPath: "paytoUri" }); + } +} + +class WithdrawalGroupsStore extends Store { + constructor() { + super("withdrawals", { keyPath: "withdrawalGroupId" }); + } +} + +class PlanchetsStore extends Store { + constructor() { + super("planchets", { keyPath: "coinPub" }); + } + byGroupAndIndex = new Index( + this, + "withdrawalGroupAndCoinIdxIndex", + ["withdrawalGroupId", "coinIdx"], + ); + byGroup = new Index( + this, + "withdrawalGroupIndex", + "withdrawalGroupId", + ); +} + +class RefundEventsStore extends Store { + constructor() { + super("refundEvents", { keyPath: "refundGroupId" }); + } +} + +class PayEventsStore extends Store { + constructor() { + super("payEvents", { keyPath: "proposalId" }); + } +} + +class ExchangeUpdatedEventsStore extends Store { + constructor() { + super("exchangeUpdatedEvents", { keyPath: "exchangeBaseUrl" }); + } +} + +class ReserveUpdatedEventsStore extends Store { + constructor() { + super("reserveUpdatedEvents", { keyPath: "reservePub" }); + } +} + +class BankWithdrawUrisStore extends Store { + constructor() { + super("bankWithdrawUris", { keyPath: "talerWithdrawUri" }); + } +} + +class WalletImportsStore extends Store { + constructor() { + super("walletImports", { keyPath: "walletImportId" }); + } +} + /** * The stores and indices for the wallet database. */ -// eslint-disable-next-line @typescript-eslint/no-namespace -export namespace Stores { - class ExchangesStore extends Store { - constructor() { - super("exchanges", { keyPath: "baseUrl" }); - } - } - class CoinsStore extends Store { - constructor() { - super("coins", { keyPath: "coinPub" }); - } - - exchangeBaseUrlIndex = new Index( - this, - "exchangeBaseUrl", - "exchangeBaseUrl", - ); - denomPubIndex = new Index( - this, - "denomPubIndex", - "denomPub", - ); - denomPubHashIndex = new Index( - this, - "denomPubHashIndex", - "denomPubHash", - ); - } - - class ProposalsStore extends Store { - constructor() { - super("proposals", { keyPath: "proposalId" }); - } - urlAndOrderIdIndex = new Index(this, "urlIndex", [ - "merchantBaseUrl", - "orderId", - ]); - } - - class PurchasesStore extends Store { - constructor() { - super("purchases", { keyPath: "proposalId" }); - } - - fulfillmentUrlIndex = new Index( - this, - "fulfillmentUrlIndex", - "contractData.fulfillmentUrl", - ); - orderIdIndex = new Index(this, "orderIdIndex", [ - "contractData.merchantBaseUrl", - "contractData.orderId", - ]); - } - - class DenominationsStore extends Store { - constructor() { - // cast needed because of bug in type annotations - super("denominations", { - keyPath: (["exchangeBaseUrl", "denomPub"] as any) as IDBKeyPath, - }); - } - - denomPubHashIndex = new Index( - this, - "denomPubHashIndex", - "denomPubHash", - ); - exchangeBaseUrlIndex = new Index( - this, - "exchangeBaseUrlIndex", - "exchangeBaseUrl", - ); - denomPubIndex = new Index( - this, - "denomPubIndex", - "denomPub", - ); - } - - class CurrenciesStore extends Store { - constructor() { - super("currencies", { keyPath: "name" }); - } - } - - class ConfigStore extends Store { - constructor() { - super("config", { keyPath: "key" }); - } - } - - class ReservesStore extends Store { - constructor() { - super("reserves", { keyPath: "reservePub" }); - } - } - - class ReserveHistoryStore extends Store { - constructor() { - super("reserveHistory", { keyPath: "reservePub" }); - } - } - - class TipsStore extends Store { - constructor() { - super("tips", { keyPath: "tipId" }); - } - } - - class SenderWiresStore extends Store { - constructor() { - super("senderWires", { keyPath: "paytoUri" }); - } - } - - class WithdrawalGroupsStore extends Store { - constructor() { - super("withdrawals", { keyPath: "withdrawalGroupId" }); - } - } - - class PlanchetsStore extends Store { - constructor() { - super("planchets", { keyPath: "coinPub" }); - } - byGroupAndIndex = new Index( - this, - "withdrawalGroupAndCoinIdxIndex", - ["withdrawalGroupId", "coinIdx"], - ); - byGroup = new Index( - this, - "withdrawalGroupIndex", - "withdrawalGroupId", - ); - } - - class RefundEventsStore extends Store { - constructor() { - super("refundEvents", { keyPath: "refundGroupId" }); - } - } - - class PayEventsStore extends Store { - constructor() { - super("payEvents", { keyPath: "proposalId" }); - } - } - - class ExchangeUpdatedEventsStore extends Store { - constructor() { - super("exchangeUpdatedEvents", { keyPath: "exchangeBaseUrl" }); - } - } - - class ReserveUpdatedEventsStore extends Store { - constructor() { - super("reserveUpdatedEvents", { keyPath: "reservePub" }); - } - } - - class BankWithdrawUrisStore extends Store { - constructor() { - super("bankWithdrawUris", { keyPath: "talerWithdrawUri" }); - } - } - - class WalletImportsStore extends Store { - constructor() { - super("walletImports", { keyPath: "walletImportId" }); - } - } - - export const coins = new CoinsStore(); - export const coinsReturns = new Store("coinsReturns", { +export const Stores = { + coins: new CoinsStore(), + coinsReturns: new Store("coinsReturns", { keyPath: "contractTermsHash", - }); - export const config = new ConfigStore(); - export const currencies = new CurrenciesStore(); - export const denominations = new DenominationsStore(); - export const exchanges = new ExchangesStore(); - export const proposals = new ProposalsStore(); - export const refreshGroups = new Store("refreshGroups", { + }), + config: new ConfigStore(), + currencies: new CurrenciesStore(), + denominations: new DenominationsStore(), + exchanges: new ExchangesStore(), + proposals: new ProposalsStore(), + refreshGroups: new Store("refreshGroups", { keyPath: "refreshGroupId", - }); - export const recoupGroups = new Store("recoupGroups", { + }), + recoupGroups: new Store("recoupGroups", { keyPath: "recoupGroupId", - }); - export const reserves = new ReservesStore(); - export const reserveHistory = new ReserveHistoryStore(); - export const purchases = new PurchasesStore(); - export const tips = new TipsStore(); - export const senderWires = new SenderWiresStore(); - export const withdrawalGroups = new WithdrawalGroupsStore(); - export const planchets = new PlanchetsStore(); - export const bankWithdrawUris = new BankWithdrawUrisStore(); - export const refundEvents = new RefundEventsStore(); - export const payEvents = new PayEventsStore(); - export const reserveUpdatedEvents = new ReserveUpdatedEventsStore(); - export const exchangeUpdatedEvents = new ExchangeUpdatedEventsStore(); - export const walletImports = new WalletImportsStore(); -} + }), + reserves: new ReservesStore(), + reserveHistory: new ReserveHistoryStore(), + purchases: new PurchasesStore(), + tips: new TipsStore(), + senderWires: new SenderWiresStore(), + withdrawalGroups: new WithdrawalGroupsStore(), + planchets: new PlanchetsStore(), + bankWithdrawUris: new BankWithdrawUrisStore(), + refundEvents: new RefundEventsStore(), + payEvents: new PayEventsStore(), + reserveUpdatedEvents: new ReserveUpdatedEventsStore(), + exchangeUpdatedEvents: new ExchangeUpdatedEventsStore(), + walletImports: new WalletImportsStore(), +}; /* tslint:enable:completed-docs */ diff --git a/packages/taler-wallet-core/src/types/notifications.d.ts.map b/packages/taler-wallet-core/src/types/notifications.d.ts.map new file mode 100644 index 000000000..f1b3318d5 --- /dev/null +++ b/packages/taler-wallet-core/src/types/notifications.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["notifications.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AAEH;;GAEG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,0BAAkB,gBAAgB;IAChC,aAAa,mBAAmB;IAChC,gBAAgB,sBAAsB;IACtC,kBAAkB,wBAAwB;IAC1C,gBAAgB,sBAAsB;IACtC,aAAa,mBAAmB;IAChC,cAAc,oBAAoB;IAClC,eAAe,qBAAqB;IACpC,aAAa,mBAAmB;IAChC,cAAc,oBAAoB;IAClC,kBAAkB,wBAAwB;IAC1C,cAAc,oBAAoB;IAClC,gBAAgB,sBAAsB;IACtC,cAAc,oBAAoB;IAClC,oBAAoB,2BAA2B;IAC/C,qBAAqB,4BAA4B;IACjD,eAAe,sBAAsB;IACrC,aAAa,mBAAmB;IAChC,aAAa,mBAAmB;IAChC,cAAc,oBAAoB;IAClC,sBAAsB,6BAA6B;IACnD,qBAAqB,4BAA4B;IACjD,oBAAoB,2BAA2B;IAC/C,yBAAyB,uBAAuB;IAChD,0BAA0B,wBAAwB;IAClD,sBAAsB,mBAAmB;IACzC,iBAAiB,cAAc;IAC/B,iBAAiB,cAAc;IAC/B,sBAAsB,mBAAmB;IACzC,kBAAkB,0BAA0B;IAC5C,qBAAqB,kBAAkB;IACvC,aAAa,mBAAmB;IAChC,yBAAyB,gCAAgC;IACzD,eAAe,qBAAqB;IACpC,yBAAyB,iCAAiC;CAC3D;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,GAAG,CAAC;CAChB;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,gBAAgB,CAAC,kBAAkB,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;CACtC;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,gBAAgB,CAAC,kBAAkB,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;CACtC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;CACtC;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAC;CACxC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC,kBAAkB,CAAC;CAC3C;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;CACzC;AAED,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAC5C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,gBAAgB,CAAC,qBAAqB,CAAC;IAC7C,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC;CACvC;AAED,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,gBAAgB,CAAC,sBAAsB,CAAC;IAC9C,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,gBAAgB,CAAC,qBAAqB,CAAC;IAC7C,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,sCAAsC;IACrD,IAAI,EAAE,gBAAgB,CAAC,0BAA0B,CAAC;IAClD,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,qCAAqC;IACpD,IAAI,EAAE,gBAAgB,CAAC,yBAAyB,CAAC;IACjD,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;IACzC,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,gBAAgB,CAAC,sBAAsB,CAAC;IAC9C,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;CAC1C;AAED,MAAM,WAAW,kCAAkC;IACjD,IAAI,EAAE,gBAAgB,CAAC,sBAAsB,CAAC;IAC9C,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAC5C,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,gBAAgB,CAAC,qBAAqB,CAAC;IAC7C,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qCAAqC;IACpD,IAAI,EAAE,gBAAgB,CAAC,yBAAyB,CAAC;CAClD;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAC;CACxC;AAED,MAAM,WAAW,qCAAqC;IACpD,IAAI,EAAE,gBAAgB,CAAC,yBAAyB,CAAC;CAClD;AAED,oBAAY,kBAAkB,GAC1B,kCAAkC,GAClC,iCAAiC,GACjC,kCAAkC,GAClC,iCAAiC,GACjC,sCAAsC,GACtC,qCAAqC,GACrC,kCAAkC,GAClC,6BAA6B,GAC7B,6BAA6B,GAC7B,4BAA4B,GAC5B,8BAA8B,GAC9B,4BAA4B,GAC5B,yBAAyB,GACzB,0BAA0B,GAC1B,yBAAyB,GACzB,2BAA2B,GAC3B,0BAA0B,GAC1B,0BAA0B,GAC1B,0BAA0B,GAC1B,0BAA0B,GAC1B,4BAA4B,GAC5B,mCAAmC,GACnC,2BAA2B,GAC3B,yBAAyB,GACzB,0BAA0B,GAC1B,yBAAyB,GACzB,kCAAkC,GAClC,yBAAyB,GACzB,gCAAgC,GAChC,yBAAyB,GACzB,qCAAqC,GACrC,2BAA2B,GAC3B,qCAAqC,GACrC,8BAA8B,CAAC"} \ No newline at end of file diff --git a/src/types/notifications.ts b/packages/taler-wallet-core/src/types/notifications.ts similarity index 100% rename from src/types/notifications.ts rename to packages/taler-wallet-core/src/types/notifications.ts diff --git a/packages/taler-wallet-core/src/types/pending.d.ts.map b/packages/taler-wallet-core/src/types/pending.d.ts.map new file mode 100644 index 000000000..2f88198fa --- /dev/null +++ b/packages/taler-wallet-core/src/types/pending.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"pending.d.ts","sourceRoot":"","sources":["pending.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/types/pending.ts b/packages/taler-wallet-core/src/types/pending.ts similarity index 100% rename from src/types/pending.ts rename to packages/taler-wallet-core/src/types/pending.ts diff --git a/src/types/schemacore.ts b/packages/taler-wallet-core/src/types/schemacore.ts similarity index 100% rename from src/types/schemacore.ts rename to packages/taler-wallet-core/src/types/schemacore.ts diff --git a/packages/taler-wallet-core/src/types/talerTypes.d.ts.map b/packages/taler-wallet-core/src/types/talerTypes.d.ts.map new file mode 100644 index 000000000..0419ea14f --- /dev/null +++ b/packages/taler-wallet-core/src/types/talerTypes.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"talerTypes.d.ts","sourceRoot":"","sources":["talerTypes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/types/talerTypes.ts b/packages/taler-wallet-core/src/types/talerTypes.ts similarity index 99% rename from src/types/talerTypes.ts rename to packages/taler-wallet-core/src/types/talerTypes.ts index 95c1a711c..acebbda95 100644 --- a/src/types/talerTypes.ts +++ b/packages/taler-wallet-core/src/types/talerTypes.ts @@ -839,7 +839,6 @@ export interface ExchangeRevealResponse { } interface MerchantOrderStatusPaid { - /** * Was the payment refunded (even partially, via refund or abort)? */ @@ -949,7 +948,9 @@ export interface BankWithdrawalOperationPostResponse { transfer_done: boolean; } -export const codecForBankWithdrawalOperationPostResponse = (): Codec => +export const codecForBankWithdrawalOperationPostResponse = (): Codec< + BankWithdrawalOperationPostResponse +> => makeCodecForObject() .property("transfer_done", codecForBoolean) .build("BankWithdrawalOperationPostResponse"); @@ -1219,7 +1220,7 @@ export const codecForMerchantCoinRefundSuccessStatus = (): Codec< MerchantCoinRefundSuccessStatus > => makeCodecForObject() - .property("type", makeCodecForConstString("success")) + .property("type", makeCodecForConstString("success")) .property("coin_pub", codecForString) .property("exchange_status", makeCodecForConstNumber(200)) .property("exchange_sig", codecForString) diff --git a/packages/taler-wallet-core/src/types/transactions.d.ts.map b/packages/taler-wallet-core/src/types/transactions.d.ts.map new file mode 100644 index 000000000..95e19a21c --- /dev/null +++ b/packages/taler-wallet-core/src/types/transactions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["transactions.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/types/transactions.ts b/packages/taler-wallet-core/src/types/transactions.ts similarity index 98% rename from src/types/transactions.ts rename to packages/taler-wallet-core/src/types/transactions.ts index a6ea37e7a..de378f51a 100644 --- a/src/types/transactions.ts +++ b/packages/taler-wallet-core/src/types/transactions.ts @@ -26,7 +26,12 @@ */ import { Timestamp } from "../util/time"; import { AmountString, Product } from "./talerTypes"; -import { Codec, makeCodecForObject, makeCodecOptional, codecForString } from "../util/codec"; +import { + Codec, + makeCodecForObject, + makeCodecOptional, + codecForString, +} from "../util/codec"; export interface TransactionsRequest { /** @@ -302,9 +307,8 @@ interface TransactionRefresh extends TransactionCommon { amountEffective: AmountString; } - -export const codecForTransactionsRequest = (): Codec => +export const codecForTransactionsRequest = (): Codec => makeCodecForObject() .property("currency", makeCodecOptional(codecForString)) .property("search", makeCodecOptional(codecForString)) - .build("TransactionsRequest"); \ No newline at end of file + .build("TransactionsRequest"); diff --git a/src/types/types-test.ts b/packages/taler-wallet-core/src/types/types-test.ts similarity index 100% rename from src/types/types-test.ts rename to packages/taler-wallet-core/src/types/types-test.ts diff --git a/packages/taler-wallet-core/src/types/walletTypes.d.ts.map b/packages/taler-wallet-core/src/types/walletTypes.d.ts.map new file mode 100644 index 000000000..d802110fd --- /dev/null +++ b/packages/taler-wallet-core/src/types/walletTypes.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"walletTypes.d.ts","sourceRoot":"","sources":["walletTypes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/types/walletTypes.ts b/packages/taler-wallet-core/src/types/walletTypes.ts similarity index 99% rename from src/types/walletTypes.ts rename to packages/taler-wallet-core/src/types/walletTypes.ts index 767b4c703..04f50f29a 100644 --- a/src/types/walletTypes.ts +++ b/packages/taler-wallet-core/src/types/walletTypes.ts @@ -146,7 +146,6 @@ export interface ExchangeWithdrawDetails { walletVersion: string; } - export interface Balance { available: AmountString; pendingIncoming: AmountString; @@ -165,7 +164,6 @@ export interface BalancesResponse { balances: Balance[]; } - /** * For terseness. */ @@ -454,10 +452,6 @@ export interface DepositInfo { denomSig: string; } -export interface ExtendedPermissionsResponse { - newValue: boolean; -} - export interface ExchangesListRespose { exchanges: ExchangeListItem[]; } diff --git a/packages/taler-wallet-core/src/util/RequestThrottler.d.ts.map b/packages/taler-wallet-core/src/util/RequestThrottler.d.ts.map new file mode 100644 index 000000000..3a2fa1081 --- /dev/null +++ b/packages/taler-wallet-core/src/util/RequestThrottler.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"RequestThrottler.d.ts","sourceRoot":"","sources":["RequestThrottler.ts"],"names":[],"mappings":"AAiGA;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAyC;IAE9D;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAShB;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;CAI3C"} \ No newline at end of file diff --git a/src/util/RequestThrottler.ts b/packages/taler-wallet-core/src/util/RequestThrottler.ts similarity index 99% rename from src/util/RequestThrottler.ts rename to packages/taler-wallet-core/src/util/RequestThrottler.ts index d979fbfcf..6f51a72bc 100644 --- a/src/util/RequestThrottler.ts +++ b/packages/taler-wallet-core/src/util/RequestThrottler.ts @@ -22,6 +22,7 @@ * Imports. */ import { getTimestampNow, timestampDifference } from "../util/time"; +import { URL } from "./url"; /** * Maximum request per second, per origin. diff --git a/src/util/amounts-test.ts b/packages/taler-wallet-core/src/util/amounts-test.ts similarity index 100% rename from src/util/amounts-test.ts rename to packages/taler-wallet-core/src/util/amounts-test.ts diff --git a/packages/taler-wallet-core/src/util/amounts.d.ts.map b/packages/taler-wallet-core/src/util/amounts.d.ts.map new file mode 100644 index 000000000..c70d06fb7 --- /dev/null +++ b/packages/taler-wallet-core/src/util/amounts.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"amounts.d.ts","sourceRoot":"","sources":["amounts.ts"],"names":[],"mappings":"AAgBA;;GAEG;AAEH;;GAEG;AACH,OAAO,EAIL,KAAK,EACN,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,cAAc,YAAM,CAAC;AAElC;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;GAEG;AACH,eAAO,MAAM,cAAc,QAAU,CAAC;AAEtC;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,QAAO,KAAK,CAAC,UAAU,CAK9B,CAAC;AAEzB;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAMpD;AAED,wBAAgB,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CA8BpE;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAyBhE;AAED;;;GAGG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAsB5D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,UAAU,GAAG,UAAU,CAM9C;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,CAa3D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAEhD;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAkBvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU,CAMlD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,CAMxE;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAkB/C;AAED;;GAEG;AACH,iBAAS,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAU9B;AAED,iBAAS,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA8B9C;AAGD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;CAgBnB,CAAC"} \ No newline at end of file diff --git a/src/util/amounts.ts b/packages/taler-wallet-core/src/util/amounts.ts similarity index 99% rename from src/util/amounts.ts rename to packages/taler-wallet-core/src/util/amounts.ts index 1e7f192f4..00f4b17d7 100644 --- a/src/util/amounts.ts +++ b/packages/taler-wallet-core/src/util/amounts.ts @@ -380,4 +380,5 @@ export const Amounts = { maxAmountValue: maxAmountValue, fromFloat: fromFloat, copy: copy, + fractionalBase: fractionalBase, }; diff --git a/packages/taler-wallet-core/src/util/assertUnreachable.d.ts.map b/packages/taler-wallet-core/src/util/assertUnreachable.d.ts.map new file mode 100644 index 000000000..64a1ed8e8 --- /dev/null +++ b/packages/taler-wallet-core/src/util/assertUnreachable.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"assertUnreachable.d.ts","sourceRoot":"","sources":["assertUnreachable.ts"],"names":[],"mappings":"AAgBA,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAEjD"} \ No newline at end of file diff --git a/src/util/assertUnreachable.ts b/packages/taler-wallet-core/src/util/assertUnreachable.ts similarity index 100% rename from src/util/assertUnreachable.ts rename to packages/taler-wallet-core/src/util/assertUnreachable.ts diff --git a/packages/taler-wallet-core/src/util/asyncMemo.d.ts.map b/packages/taler-wallet-core/src/util/asyncMemo.d.ts.map new file mode 100644 index 000000000..0b764b61b --- /dev/null +++ b/packages/taler-wallet-core/src/util/asyncMemo.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"asyncMemo.d.ts","sourceRoot":"","sources":["asyncMemo.ts"],"names":[],"mappings":"AAsBA,qBAAa,cAAc,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,OAAO,CAAqC;IAEpD,OAAO,CAAC,OAAO;IAOf,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAiBnD,KAAK,IAAI,IAAI;CAGd;AAED,qBAAa,iBAAiB,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC,CAAK;IACd,OAAO,CAAC,SAAS,CAA2B;IAE5C,OAAO,CAAC,OAAO;IAMf,IAAI,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAkBtC,KAAK,IAAI,IAAI;CAGd"} \ No newline at end of file diff --git a/src/util/asyncMemo.ts b/packages/taler-wallet-core/src/util/asyncMemo.ts similarity index 100% rename from src/util/asyncMemo.ts rename to packages/taler-wallet-core/src/util/asyncMemo.ts diff --git a/src/util/codec-test.ts b/packages/taler-wallet-core/src/util/codec-test.ts similarity index 100% rename from src/util/codec-test.ts rename to packages/taler-wallet-core/src/util/codec-test.ts diff --git a/packages/taler-wallet-core/src/util/codec.d.ts.map b/packages/taler-wallet-core/src/util/codec.d.ts.map new file mode 100644 index 000000000..4304f5cef --- /dev/null +++ b/packages/taler-wallet-core/src/util/codec.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["codec.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/util/codec.ts b/packages/taler-wallet-core/src/util/codec.ts similarity index 97% rename from src/util/codec.ts rename to packages/taler-wallet-core/src/util/codec.ts index 383a2d99e..2ce3c2cba 100644 --- a/src/util/codec.ts +++ b/packages/taler-wallet-core/src/util/codec.ts @@ -18,7 +18,7 @@ * Type-safe codecs for converting from/to JSON. */ - /* eslint-disable @typescript-eslint/ban-types */ +/* eslint-disable @typescript-eslint/ban-types */ /** * Error thrown when decoding fails. @@ -352,9 +352,7 @@ export function makeCodecForConstTrue(): Codec { return x; } throw new DecodingError( - `expected boolean true at ${renderContext( - c, - )} but got ${typeof x}`, + `expected boolean true at ${renderContext(c)} but got ${typeof x}`, ); }, }; @@ -370,9 +368,7 @@ export function makeCodecForConstFalse(): Codec { return x; } throw new DecodingError( - `expected boolean false at ${renderContext( - c, - )} but got ${typeof x}`, + `expected boolean false at ${renderContext(c)} but got ${typeof x}`, ); }, }; diff --git a/src/util/helpers-test.ts b/packages/taler-wallet-core/src/util/helpers-test.ts similarity index 100% rename from src/util/helpers-test.ts rename to packages/taler-wallet-core/src/util/helpers-test.ts diff --git a/packages/taler-wallet-core/src/util/helpers.d.ts.map b/packages/taler-wallet-core/src/util/helpers.d.ts.map new file mode 100644 index 000000000..789c5c81c --- /dev/null +++ b/packages/taler-wallet-core/src/util/helpers.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["helpers.ts"],"names":[],"mappings":"AAgBA;;GAEG;AAEH;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIvC;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAGzD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAwB9C;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CAclD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAGpC;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,CAE5D;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAarC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAQrD"} \ No newline at end of file diff --git a/src/util/helpers.ts b/packages/taler-wallet-core/src/util/helpers.ts similarity index 99% rename from src/util/helpers.ts rename to packages/taler-wallet-core/src/util/helpers.ts index 7cd9e4234..ae4b0359e 100644 --- a/src/util/helpers.ts +++ b/packages/taler-wallet-core/src/util/helpers.ts @@ -23,6 +23,7 @@ */ import { AmountJson } from "./amounts"; import * as Amounts from "./amounts"; +import { URL } from "./url"; /** * Show an amount in a form suitable for the user. diff --git a/packages/taler-wallet-core/src/util/http.d.ts.map b/packages/taler-wallet-core/src/util/http.d.ts.map new file mode 100644 index 000000000..edbe41970 --- /dev/null +++ b/packages/taler-wallet-core/src/util/http.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["http.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AAEH;;GAEG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAOhC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACtC;AAED,oBAAY,kBAAkB;IAC5B,EAAE,MAAM;IACR,IAAI,MAAM;CACX;AAED;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,SAAS,CAA6B;IAE9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQhC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CASvC;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAElE;;OAEG;IACH,QAAQ,CACN,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,GAAG,EACT,GAAG,CAAC,EAAE,kBAAkB,GACvB,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1B;AAED,aAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC;AAEZ,aAAK,eAAe,CAAC,CAAC,IAClB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,CAAC,CAAA;CAAE,GAC/B;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,kBAAkB,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAE9D,wBAAsB,kCAAkC,CAAC,CAAC,EACxD,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAuC7B;AAED,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,kBAAkB,GACrC,KAAK,CAYP;AAED,wBAAsB,8BAA8B,CAAC,CAAC,EACpD,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GACd,OAAO,CAAC,CAAC,CAAC,CAMZ;AAGD,wBAAsB,kCAAkC,CAAC,CAAC,EACxD,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAyBlC;AAED,wBAAsB,2BAA2B,CAC/C,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,8BAA8B,CAAC,CAAC,EACpD,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,MAAM,CAAC,CAMjB"} \ No newline at end of file diff --git a/src/util/http.ts b/packages/taler-wallet-core/src/util/http.ts similarity index 63% rename from src/util/http.ts rename to packages/taler-wallet-core/src/util/http.ts index 38892491b..ad9f0293c 100644 --- a/src/util/http.ts +++ b/packages/taler-wallet-core/src/util/http.ts @@ -96,130 +96,6 @@ export interface HttpRequestLibrary { ): Promise; } -/** - * An implementation of the [[HttpRequestLibrary]] using the - * browser's XMLHttpRequest. - */ -export class BrowserHttpLib implements HttpRequestLibrary { - private req( - method: string, - url: string, - requestBody?: any, - options?: HttpRequestOptions, - ): Promise { - return new Promise((resolve, reject) => { - const myRequest = new XMLHttpRequest(); - myRequest.open(method, url); - if (options?.headers) { - for (const headerName in options.headers) { - myRequest.setRequestHeader(headerName, options.headers[headerName]); - } - } - myRequest.setRequestHeader; - if (requestBody) { - myRequest.send(requestBody); - } else { - myRequest.send(); - } - - myRequest.onerror = (e) => { - logger.error("http request error"); - reject( - OperationFailedError.fromCode( - TalerErrorCode.WALLET_NETWORK_ERROR, - "Could not make request", - { - requestUrl: url, - }, - ), - ); - }; - - myRequest.addEventListener("readystatechange", (e) => { - if (myRequest.readyState === XMLHttpRequest.DONE) { - if (myRequest.status === 0) { - const exc = OperationFailedError.fromCode( - TalerErrorCode.WALLET_NETWORK_ERROR, - "HTTP request failed (status 0, maybe URI scheme was wrong?)", - { - requestUrl: url, - }, - ); - reject(exc); - return; - } - const makeJson = async (): Promise => { - let responseJson; - try { - responseJson = JSON.parse(myRequest.responseText); - } catch (e) { - throw OperationFailedError.fromCode( - TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, - "Invalid JSON from HTTP response", - { - requestUrl: url, - httpStatusCode: myRequest.status, - }, - ); - } - if (responseJson === null || typeof responseJson !== "object") { - throw OperationFailedError.fromCode( - TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, - "Invalid JSON from HTTP response", - { - requestUrl: url, - httpStatusCode: myRequest.status, - }, - ); - } - return responseJson; - }; - - const headers = myRequest.getAllResponseHeaders(); - const arr = headers.trim().split(/[\r\n]+/); - - // Create a map of header names to values - const headerMap = new Headers(); - arr.forEach(function (line) { - const parts = line.split(": "); - const headerName = parts.shift(); - if (!headerName) { - logger.warn("skipping invalid header"); - return; - } - const value = parts.join(": "); - headerMap.set(headerName, value); - }); - const resp: HttpResponse = { - requestUrl: url, - status: myRequest.status, - headers: headerMap, - json: makeJson, - text: async () => myRequest.responseText, - }; - resolve(resp); - } - }); - }); - } - - get(url: string, opt?: HttpRequestOptions): Promise { - return this.req("get", url, undefined, opt); - } - - postJson( - url: string, - body: unknown, - opt?: HttpRequestOptions, - ): Promise { - return this.req("post", url, JSON.stringify(body), opt); - } - - stop(): void { - // Nothing to do - } -} - type TalerErrorResponse = { code: number; } & unknown; @@ -300,7 +176,6 @@ export async function readSuccessResponseJsonOrThrow( throwUnexpectedRequestError(httpResponse, r.talerErrorResponse); } - export async function readSuccessResponseTextOrErrorCode( httpResponse: HttpResponse, ): Promise> { diff --git a/src/util/libtoolVersion-test.ts b/packages/taler-wallet-core/src/util/libtoolVersion-test.ts similarity index 100% rename from src/util/libtoolVersion-test.ts rename to packages/taler-wallet-core/src/util/libtoolVersion-test.ts diff --git a/packages/taler-wallet-core/src/util/libtoolVersion.d.ts.map b/packages/taler-wallet-core/src/util/libtoolVersion.d.ts.map new file mode 100644 index 000000000..d0e111aa1 --- /dev/null +++ b/packages/taler-wallet-core/src/util/libtoolVersion.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"libtoolVersion.d.ts","sourceRoot":"","sources":["libtoolVersion.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAQD;;GAEG;AACH,wBAAgB,OAAO,CACrB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GACZ,kBAAkB,GAAG,SAAS,CAehC"} \ No newline at end of file diff --git a/src/util/libtoolVersion.ts b/packages/taler-wallet-core/src/util/libtoolVersion.ts similarity index 100% rename from src/util/libtoolVersion.ts rename to packages/taler-wallet-core/src/util/libtoolVersion.ts diff --git a/packages/taler-wallet-core/src/util/logging.d.ts.map b/packages/taler-wallet-core/src/util/logging.d.ts.map new file mode 100644 index 000000000..3e289d866 --- /dev/null +++ b/packages/taler-wallet-core/src/util/logging.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["logging.ts"],"names":[],"mappings":"AAuCA;;;GAGG;AACH,qBAAa,MAAM;IACL,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,MAAM;IAE/B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAW3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAW3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAW5C,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAU1C"} \ No newline at end of file diff --git a/src/util/logging.ts b/packages/taler-wallet-core/src/util/logging.ts similarity index 91% rename from src/util/logging.ts rename to packages/taler-wallet-core/src/util/logging.ts index 83e8d2192..e4f3be2ff 100644 --- a/src/util/logging.ts +++ b/packages/taler-wallet-core/src/util/logging.ts @@ -15,9 +15,11 @@ */ /** - * Imports. + * Check if we are running under nodejs. */ -import { isNode } from "../webex/compat"; + +const isNode = + typeof process !== "undefined" && process.release.name === "node"; function writeNodeLog( message: string, @@ -42,7 +44,7 @@ export class Logger { constructor(private tag: string) {} info(message: string, ...args: any[]): void { - if (isNode()) { + if (isNode) { writeNodeLog(message, this.tag, "INFO", args); } else { console.info( @@ -53,7 +55,7 @@ export class Logger { } warn(message: string, ...args: any[]): void { - if (isNode()) { + if (isNode) { writeNodeLog(message, this.tag, "WARN", args); } else { console.warn( @@ -64,7 +66,7 @@ export class Logger { } error(message: string, ...args: any[]): void { - if (isNode()) { + if (isNode) { writeNodeLog(message, this.tag, "ERROR", args); } else { console.info( @@ -75,7 +77,7 @@ export class Logger { } trace(message: any, ...args: any[]): void { - if (isNode()) { + if (isNode) { writeNodeLog(message, this.tag, "TRACE", args); } else { console.info( diff --git a/src/util/payto-test.ts b/packages/taler-wallet-core/src/util/payto-test.ts similarity index 100% rename from src/util/payto-test.ts rename to packages/taler-wallet-core/src/util/payto-test.ts diff --git a/packages/taler-wallet-core/src/util/payto.d.ts.map b/packages/taler-wallet-core/src/util/payto.d.ts.map new file mode 100644 index 000000000..a23c5f5d4 --- /dev/null +++ b/packages/taler-wallet-core/src/util/payto.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"payto.d.ts","sourceRoot":"","sources":["payto.ts"],"names":[],"mappings":"AAkBA,UAAU,QAAQ;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACpC;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,MAAM,EACT,MAAM,EAAE;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACjC,MAAM,CAOR;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CA6B7D"} \ No newline at end of file diff --git a/src/util/payto.ts b/packages/taler-wallet-core/src/util/payto.ts similarity index 97% rename from src/util/payto.ts rename to packages/taler-wallet-core/src/util/payto.ts index 835214b86..a1c47eb2f 100644 --- a/src/util/payto.ts +++ b/packages/taler-wallet-core/src/util/payto.ts @@ -14,6 +14,8 @@ GNU Taler; see the file COPYING. If not, see */ +import { URLSearchParams } from "./url"; + interface PaytoUri { targetType: string; targetPath: string; diff --git a/packages/taler-wallet-core/src/util/promiseUtils.d.ts.map b/packages/taler-wallet-core/src/util/promiseUtils.d.ts.map new file mode 100644 index 000000000..1ca9a4c99 --- /dev/null +++ b/packages/taler-wallet-core/src/util/promiseUtils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"promiseUtils.d.ts","sourceRoot":"","sources":["promiseUtils.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC1B,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAYjD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,mBAAmB,CAAsB;;IAOjD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,OAAO,IAAI,IAAI;CAMhB"} \ No newline at end of file diff --git a/src/util/promiseUtils.ts b/packages/taler-wallet-core/src/util/promiseUtils.ts similarity index 100% rename from src/util/promiseUtils.ts rename to packages/taler-wallet-core/src/util/promiseUtils.ts diff --git a/packages/taler-wallet-core/src/util/query.d.ts.map b/packages/taler-wallet-core/src/util/query.d.ts.map new file mode 100644 index 000000000..4b3fc92ea --- /dev/null +++ b/packages/taler-wallet-core/src/util/query.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["query.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,cAAc,EAAa,WAAW,EAAE,WAAW,EAAE,UAAU,EAAgC,MAAM,yBAAyB,CAAC;AAGnL;;GAEG;AACH,eAAO,MAAM,gBAAgB,eAA8B,CAAC;AAE5D;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC;IAET,IAAI,EAAE,MAAM;IACZ,WAAW,CAAC;IACZ,SAAS,CAAC,OAAM,CAAC,KAAK,CAAC;gBAFvB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,sCAA0B,EACtC,SAAS,CAAC,OAAM,CAAC,KAAK,CAAC,aAAA;CAEjC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA+DD,aAAK,YAAY,CAAC,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAEnE,UAAU,iBAAiB,CAAC,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC;CACjB;AAED,UAAU,iBAAiB,CAAC,CAAC;IAC3B,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,CAAC,CAAC;CACV;AAED,cAAM,YAAY,CAAC,CAAC;IAKN,OAAO,CAAC,GAAG;IAJvB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAS;gBAEX,GAAG,EAAE,UAAU;IAwB7B,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAavB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAapC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAe1C,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAsBvC;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,cAAc;IAEtC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAK1D,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAK1D,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKzD,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,EACjC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQzB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC;IAKpD,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,EAClC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,GAAG,CAAC,EAAE,GAAG,GACR,YAAY,CAAC,CAAC,CAAC;IAQlB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnD,MAAM,CAAC,CAAC,EACN,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,GAAG,EAAE,GAAG,EACR,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,GACzB,OAAO,CAAC,IAAI,CAAC;CAIjB;AA+DD;;GAEG;AACH,qBAAa,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC;IAahC,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE;IAbnC;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,EAAE,YAAY,CAAC;gBAGpB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EACJ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EACjC,OAAO,CAAC,EAAE,YAAY;IASxB;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,IAAI,EAC3B,eAAe,EAAE,CACf,EAAE,EAAE,WAAW,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,KACf,IAAI,GACR,OAAO,CAAC,WAAW,CAAC,CA0BtB;AAED,qBAAa,QAAQ;IACP,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,WAAW;IAEnC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7D,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IA+BpC,cAAc,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQzD,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,EACvC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQnB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAQ1D,MAAM,CAAC,CAAC,EACZ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,GAAG,EAAE,GAAG,EACR,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,GACzB,OAAO,CAAC,IAAI,CAAC;IAOhB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAMzC,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,EAChC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB,KAAK,CAAC,EAAE,GAAG,GACV,YAAY,CAAC,CAAC,CAAC;IASZ,sBAAsB,CAAC,CAAC,EAC5B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EACpB,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GACtC,OAAO,CAAC,CAAC,CAAC;IAIP,uBAAuB,CAAC,CAAC,EAC7B,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EACpB,CAAC,EAAE,CAAC,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GACtC,OAAO,CAAC,CAAC,CAAC;CAGd"} \ No newline at end of file diff --git a/src/util/query.ts b/packages/taler-wallet-core/src/util/query.ts similarity index 91% rename from src/util/query.ts rename to packages/taler-wallet-core/src/util/query.ts index be319049b..53359752e 100644 --- a/src/util/query.ts +++ b/packages/taler-wallet-core/src/util/query.ts @@ -24,6 +24,7 @@ * Imports. */ import { openPromise } from "./promiseUtils"; +import type { idbtypes } from "idb-bridge"; /** * Exception that should be thrown by client code to abort a transaction. @@ -36,7 +37,7 @@ export const TransactionAbort = Symbol("transaction_abort"); export class Store { constructor( public name: string, - public storeParams?: IDBObjectStoreParameters, + public storeParams?: idbtypes.IDBObjectStoreParameters, public validator?: (v: T) => T, ) {} } @@ -54,7 +55,7 @@ export interface IndexOptions { multiEntry?: boolean; } -function requestToPromise(req: IDBRequest): Promise { +function requestToPromise(req: idbtypes.IDBRequest): Promise { const stack = Error("Failed request was started here."); return new Promise((resolve, reject) => { req.onsuccess = () => { @@ -68,7 +69,7 @@ function requestToPromise(req: IDBRequest): Promise { }); } -function transactionToPromise(tx: IDBTransaction): Promise { +function transactionToPromise(tx: idbtypes.IDBTransaction): Promise { const stack = Error("Failed transaction was started here."); return new Promise((resolve, reject) => { tx.onabort = () => { @@ -85,7 +86,7 @@ function transactionToPromise(tx: IDBTransaction): Promise { } function applyMutation( - req: IDBRequest, + req: idbtypes.IDBRequest, f: (x: T) => T | undefined, ): Promise { return new Promise((resolve, reject) => { @@ -95,7 +96,7 @@ function applyMutation( const val = cursor.value; const modVal = f(val); if (modVal !== undefined && modVal !== null) { - const req2: IDBRequest = cursor.update(modVal); + const req2: idbtypes.IDBRequest = cursor.update(modVal); req2.onerror = () => { reject(req2.error); }; @@ -131,7 +132,7 @@ class ResultStream { private gotCursorEnd = false; private awaitingResult = false; - constructor(private req: IDBRequest) { + constructor(private req: idbtypes.IDBRequest) { this.awaitingResult = true; let p = openPromise(); this.currentPromise = p.promise; @@ -223,7 +224,7 @@ class ResultStream { return { hasValue: false }; } if (!this.awaitingResult) { - const cursor: IDBCursor | undefined = this.req.result; + const cursor: idbtypes.IDBCursor | undefined = this.req.result; if (!cursor) { throw Error("assertion failed"); } @@ -243,7 +244,7 @@ class ResultStream { } export class TransactionHandle { - constructor(private tx: IDBTransaction) {} + constructor(private tx: idbtypes.IDBTransaction) {} put(store: Store, value: T, key?: any): Promise { const req = this.tx.objectStore(store.name).put(value, key); @@ -260,7 +261,7 @@ export class TransactionHandle { return requestToPromise(req); } - getIndexed( + getIndexed( index: Index, key: any, ): Promise { @@ -276,7 +277,7 @@ export class TransactionHandle { return new ResultStream(req); } - iterIndexed( + iterIndexed( index: Index, key?: any, ): ResultStream { @@ -303,7 +304,7 @@ export class TransactionHandle { } function runWithTransaction( - db: IDBDatabase, + db: idbtypes.IDBDatabase, stores: Store[], f: (t: TransactionHandle) => Promise, mode: "readonly" | "readwrite", @@ -366,7 +367,7 @@ function runWithTransaction( /** * Definition of an index. */ -export class Index { +export class Index { /** * Name of the store that this index is associated with. */ @@ -403,24 +404,24 @@ export class Index { * to the taler wallet db. */ export function openDatabase( - idbFactory: IDBFactory, + idbFactory: idbtypes.IDBFactory, databaseName: string, databaseVersion: number, onVersionChange: () => void, onUpgradeNeeded: ( - db: IDBDatabase, + db: idbtypes.IDBDatabase, oldVersion: number, newVersion: number, ) => void, -): Promise { - return new Promise((resolve, reject) => { +): Promise { + return new Promise((resolve, reject) => { const req = idbFactory.open(databaseName, databaseVersion); req.onerror = (e) => { console.log("taler database error", e); reject(new Error("database error")); }; req.onsuccess = (e) => { - req.result.onversionchange = (evt: IDBVersionChangeEvent) => { + req.result.onversionchange = (evt: idbtypes.IDBVersionChangeEvent) => { console.log( `handling live db version change from ${evt.oldVersion} to ${evt.newVersion}`, ); @@ -441,9 +442,9 @@ export function openDatabase( } export class Database { - constructor(private db: IDBDatabase) {} + constructor(private db: idbtypes.IDBDatabase) {} - static deleteDatabase(idbFactory: IDBFactory, dbName: string): void { + static deleteDatabase(idbFactory: idbtypes.IDBFactory, dbName: string): void { idbFactory.deleteDatabase(dbName); } @@ -467,7 +468,7 @@ export class Database { dump.stores[name] = storeDump; tx.objectStore(name) .openCursor() - .addEventListener("success", (e: Event) => { + .addEventListener("success", (e: idbtypes.Event) => { const cursor = (e.target as any).result; if (cursor) { storeDump[cursor.key] = cursor.value; @@ -511,7 +512,7 @@ export class Database { return v; } - async getIndexed( + async getIndexed( index: Index, key: any, ): Promise { @@ -547,7 +548,7 @@ export class Database { return new ResultStream(req); } - iterIndex( + iterIndex( index: Index, query?: any, ): ResultStream { diff --git a/src/util/reserveHistoryUtil-test.ts b/packages/taler-wallet-core/src/util/reserveHistoryUtil-test.ts similarity index 100% rename from src/util/reserveHistoryUtil-test.ts rename to packages/taler-wallet-core/src/util/reserveHistoryUtil-test.ts diff --git a/packages/taler-wallet-core/src/util/reserveHistoryUtil.d.ts.map b/packages/taler-wallet-core/src/util/reserveHistoryUtil.d.ts.map new file mode 100644 index 000000000..aec8f0715 --- /dev/null +++ b/packages/taler-wallet-core/src/util/reserveHistoryUtil.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"reserveHistoryUtil.d.ts","sourceRoot":"","sources":["reserveHistoryUtil.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,OAAO,EACL,wBAAwB,EAEzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAK3C;;;;GAIG;AAEH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,mBAAmB,EAAE,wBAAwB,EAAE,CAAC;IAEhD;;;OAGG;IACH,aAAa,EAAE,wBAAwB,EAAE,CAAC;IAE1C;;;OAGG;IACH,eAAe,EAAE,wBAAwB,EAAE,CAAC;CAC7C;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,sBAAsB,EAAE,OAAO,CAAC,UAAU,CAAC;IAE3C;;OAEG;IACH,sBAAsB,EAAE,OAAO,CAAC,UAAU,CAAC;IAE3C;;OAEG;IACH,oBAAoB,EAAE,OAAO,CAAC,UAAU,CAAC;IAEzC;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC,UAAU,CAAC;CACrC;AA6BD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,wBAAwB,EAC5B,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAwBT;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,wBAAwB,EAAE,EACxC,QAAQ,EAAE,MAAM,GACf,qBAAqB,CAmFvB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,wBAAwB,EAAE,EACxC,aAAa,EAAE,kBAAkB,EAAE,GAClC,2BAA2B,CAqH7B"} \ No newline at end of file diff --git a/src/util/reserveHistoryUtil.ts b/packages/taler-wallet-core/src/util/reserveHistoryUtil.ts similarity index 100% rename from src/util/reserveHistoryUtil.ts rename to packages/taler-wallet-core/src/util/reserveHistoryUtil.ts diff --git a/src/util/talerconfig.ts b/packages/taler-wallet-core/src/util/talerconfig.ts similarity index 100% rename from src/util/talerconfig.ts rename to packages/taler-wallet-core/src/util/talerconfig.ts diff --git a/src/util/taleruri-test.ts b/packages/taler-wallet-core/src/util/taleruri-test.ts similarity index 94% rename from src/util/taleruri-test.ts rename to packages/taler-wallet-core/src/util/taleruri-test.ts index 44edbe1c1..b6c326119 100644 --- a/src/util/taleruri-test.ts +++ b/packages/taler-wallet-core/src/util/taleruri-test.ts @@ -148,10 +148,7 @@ test("taler refund uri parsing with instance", (t) => { return; } t.is(r1.orderId, "1234"); - t.is( - r1.merchantBaseUrl, - "https://merchant.example.com/instances/myinst/", - ); + t.is(r1.merchantBaseUrl, "https://merchant.example.com/instances/myinst/"); }); test("taler tip pickup uri", (t) => { @@ -171,10 +168,7 @@ test("taler tip pickup uri with instance", (t) => { t.fail(); return; } - t.is( - r1.merchantBaseUrl, - "https://merchant.example.com/instances/tipm/", - ); + t.is(r1.merchantBaseUrl, "https://merchant.example.com/instances/tipm/"); t.is(r1.merchantTipId, "tipid"); }); @@ -185,9 +179,6 @@ test("taler tip pickup uri with instance and prefix", (t) => { t.fail(); return; } - t.is( - r1.merchantBaseUrl, - "https://merchant.example.com/my/pfx/tipm/", - ); + t.is(r1.merchantBaseUrl, "https://merchant.example.com/my/pfx/tipm/"); t.is(r1.merchantTipId, "tipid"); }); diff --git a/packages/taler-wallet-core/src/util/taleruri.d.ts.map b/packages/taler-wallet-core/src/util/taleruri.d.ts.map new file mode 100644 index 000000000..36c16c889 --- /dev/null +++ b/packages/taler-wallet-core/src/util/taleruri.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"taleruri.d.ts","sourceRoot":"","sources":["taleruri.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,yBAAyB,EAAE,MAAM,CAAC;IAClC,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAoBzE;AAED,0BAAkB,YAAY;IAC5B,QAAQ,cAAc;IACtB,aAAa,mBAAmB;IAChC,QAAQ,cAAc;IACtB,WAAW,iBAAiB;IAC5B,kBAAkB,yBAAyB;IAC3C,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,CA2BxD;AA0BD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAyB/D;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAoB/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAoBrE"} \ No newline at end of file diff --git a/src/util/taleruri.ts b/packages/taler-wallet-core/src/util/taleruri.ts similarity index 96% rename from src/util/taleruri.ts rename to packages/taler-wallet-core/src/util/taleruri.ts index c26c4a5db..43a869afe 100644 --- a/src/util/taleruri.ts +++ b/packages/taler-wallet-core/src/util/taleruri.ts @@ -14,6 +14,8 @@ GNU Taler; see the file COPYING. If not, see */ +import { URLSearchParams } from "./url"; + export interface PayUriResult { merchantBaseUrl: string; orderId: string; @@ -104,24 +106,26 @@ export function classifyTalerUri(s: string): TalerUriType { } interface TalerUriProtoInfo { - innerProto: "http" | "https"; + innerProto: "http" | "https"; rest: string; } - -function parseProtoInfo(s: string, action: string): TalerUriProtoInfo | undefined { +function parseProtoInfo( + s: string, + action: string, +): TalerUriProtoInfo | undefined { const pfxPlain = `taler://${action}/`; const pfxHttp = `taler+http://${action}/`; if (s.toLowerCase().startsWith(pfxPlain)) { return { innerProto: "https", rest: s.substring(pfxPlain.length), - } + }; } else if (s.toLowerCase().startsWith(pfxHttp)) { return { innerProto: "http", rest: s.substring(pfxHttp.length), - } + }; } else { return undefined; } diff --git a/packages/taler-wallet-core/src/util/testvectors.ts b/packages/taler-wallet-core/src/util/testvectors.ts new file mode 100644 index 000000000..57ac6e992 --- /dev/null +++ b/packages/taler-wallet-core/src/util/testvectors.ts @@ -0,0 +1,36 @@ +/* + This file is part of GNU Taler + (C) 2020 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** + * Imports + */ +import { + setupRefreshPlanchet, + encodeCrock, + getRandomBytes, +} from "../crypto/talerCrypto"; + +export function printTestVectors() { + const secretSeed = getRandomBytes(64); + const coinIndex = Math.ceil(Math.random() * 100); + const p = setupRefreshPlanchet(secretSeed, coinIndex); + console.log("setupRefreshPlanchet"); + console.log(` (in) secret seed: ${encodeCrock(secretSeed)}`); + console.log(` (in) coin index: ${coinIndex}`); + console.log(` (out) blinding secret: ${encodeCrock(p.bks)}`); + console.log(` (out) coin priv: ${encodeCrock(p.coinPriv)}`); + console.log(` (out) coin pub: ${encodeCrock(p.coinPub)}`); +} diff --git a/packages/taler-wallet-core/src/util/time.d.ts.map b/packages/taler-wallet-core/src/util/time.d.ts.map new file mode 100644 index 000000000..c38a23356 --- /dev/null +++ b/packages/taler-wallet-core/src/util/time.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["time.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA0B,MAAM,SAAS,CAAC;AAkBxD;;GAEG;AAEH,qBAAa,SAAS;IACpB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAID,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED,wBAAgB,eAAe,IAAI,SAAS,CAI3C;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,EACnB,GAAG,YAAoB,GACtB,QAAQ,CAWV;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,CAQpE;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAOlE;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,GAAG,QAAQ,CAQhE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAiBjE;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,GAAG,SAAS,CAK1E;AAED,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,SAAS,EACb,CAAC,EAAE,QAAQ,GACV,SAAS,CAQX;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAKvD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,QAAQ,CAQ1E;AAED,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,SAAS,EACZ,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,GACb,OAAO,CAQT;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAc9C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAc5C,CAAC"} \ No newline at end of file diff --git a/src/util/time.ts b/packages/taler-wallet-core/src/util/time.ts similarity index 100% rename from src/util/time.ts rename to packages/taler-wallet-core/src/util/time.ts diff --git a/packages/taler-wallet-core/src/util/timer.d.ts.map b/packages/taler-wallet-core/src/util/timer.d.ts.map new file mode 100644 index 000000000..c2b5e536e --- /dev/null +++ b/packages/taler-wallet-core/src/util/timer.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["timer.ts"],"names":[],"mappings":"AAgBA;;;;;GAKG;AAEH;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAKlC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf;AAkBD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,MAa/B,CAAC;AAEL;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAExE;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW,CAExE;AASD;;GAEG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,QAAQ,CAAwC;IAExD,OAAO,CAAC,KAAK,CAAK;IAElB,0BAA0B,IAAI,IAAI;IAWlC,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAU9C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW;IAmBzD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW;CAkB1D"} \ No newline at end of file diff --git a/src/util/timer.ts b/packages/taler-wallet-core/src/util/timer.ts similarity index 96% rename from src/util/timer.ts rename to packages/taler-wallet-core/src/util/timer.ts index 5f37a6f4d..8eab1399c 100644 --- a/src/util/timer.ts +++ b/packages/taler-wallet-core/src/util/timer.ts @@ -56,16 +56,21 @@ class TimeoutHandle { * Get a performance counter in milliseconds. */ export const performanceNow: () => number = (() => { + // @ts-ignore if (typeof process !== "undefined" && process.hrtime) { return () => { const t = process.hrtime(); return t[0] * 1e9 + t[1]; }; - } else if (typeof performance !== "undefined") { - return () => performance.now(); - } else { - return () => 0; } + + // @ts-ignore + if (typeof performance !== "undefined") { + // @ts-ignore + return () => performance.now(); + } + + return () => 0; })(); /** diff --git a/packages/taler-wallet-core/src/util/url.d.ts.map b/packages/taler-wallet-core/src/util/url.d.ts.map new file mode 100644 index 000000000..f238a9b5a --- /dev/null +++ b/packages/taler-wallet-core/src/util/url.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["url.ts"],"names":[],"mappings":"AAgBA,UAAU,GAAG;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,IAAI,MAAM,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,IAAI,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,IAAI,IAAI,IAAI,CAAC;IACb,QAAQ,IAAI,MAAM,CAAC;IACnB,OAAO,CACL,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,KAAK,IAAI,EACzE,OAAO,CAAC,EAAE,GAAG,GACZ,IAAI,CAAC;CACT;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAI,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,eAAe,GAAG,eAAe,CAAC;CAC7F;AAED,MAAM,WAAW,OAAO;IACtB,KAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;CAC5C;AAQD,eAAO,MAAM,GAAG,EAAE,OAAc,CAAC;AASjC,eAAO,MAAM,eAAe,EAAE,mBAAsC,CAAC"} \ No newline at end of file diff --git a/packages/taler-wallet-core/src/util/url.ts b/packages/taler-wallet-core/src/util/url.ts new file mode 100644 index 000000000..b50b4b466 --- /dev/null +++ b/packages/taler-wallet-core/src/util/url.ts @@ -0,0 +1,74 @@ +/* + This file is part of GNU Taler + (C) 2020 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +interface URL { + hash: string; + host: string; + hostname: string; + href: string; + toString(): string; + readonly origin: string; + password: string; + pathname: string; + port: string; + protocol: string; + search: string; + readonly searchParams: URLSearchParams; + username: string; + toJSON(): string; +} + +interface URLSearchParams { + append(name: string, value: string): void; + delete(name: string): void; + get(name: string): string | null; + getAll(name: string): string[]; + has(name: string): boolean; + set(name: string, value: string): void; + sort(): void; + toString(): string; + forEach( + callbackfn: (value: string, key: string, parent: URLSearchParams) => void, + thisArg?: any, + ): void; +} + +export interface URLSearchParamsCtor { + new ( + init?: string[][] | Record | string | URLSearchParams, + ): URLSearchParams; +} + +export interface URLCtor { + new (url: string, base?: string | URL): URL; +} + +// @ts-ignore +const _URL = globalThis.URL; +if (!_URL) { + throw Error("FATAL: URL not available"); +} + +export const URL: URLCtor = _URL; + +// @ts-ignore +const _URLSearchParams = globalThis.URLSearchParams; + +if (!_URLSearchParams) { + throw Error("FATAL: URLSearchParams not available"); +} + +export const URLSearchParams: URLSearchParamsCtor = _URLSearchParams; diff --git a/src/util/wire.ts b/packages/taler-wallet-core/src/util/wire.ts similarity index 97% rename from src/util/wire.ts rename to packages/taler-wallet-core/src/util/wire.ts index 21ad600fc..95e324f3c 100644 --- a/src/util/wire.ts +++ b/packages/taler-wallet-core/src/util/wire.ts @@ -24,7 +24,7 @@ /** * Imports. */ -import * as i18n from "../webex/i18n"; +import * as i18n from "../i18n"; /** * Short summary of the wire information. diff --git a/src/wallet-test.ts b/packages/taler-wallet-core/src/wallet-test.ts similarity index 100% rename from src/wallet-test.ts rename to packages/taler-wallet-core/src/wallet-test.ts diff --git a/packages/taler-wallet-core/src/wallet.d.ts.map b/packages/taler-wallet-core/src/wallet.d.ts.map new file mode 100644 index 000000000..4c6b1964c --- /dev/null +++ b/packages/taler-wallet-core/src/wallet.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["wallet.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts similarity index 99% rename from src/wallet.ts rename to packages/taler-wallet-core/src/wallet.ts index 4d22bd591..4a409f58d 100644 --- a/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -479,7 +479,9 @@ export class Wallet { return getExchangeTrust(this.ws, exchangeInfo); } - async getWithdrawalDetailsForUri(talerWithdrawUri: string): Promise { + async getWithdrawalDetailsForUri( + talerWithdrawUri: string, + ): Promise { return getWithdrawalDetailsForUri(this.ws, talerWithdrawUri); } @@ -870,7 +872,6 @@ export class Wallet { return getTransactions(this.ws, request); } - async withdrawTestBalance( amount = "TESTKUDOS:10", bankBaseUrl = "https://bank.test.taler.net/", diff --git a/packages/taler-wallet-core/src/walletCoreApiHandler.d.ts.map b/packages/taler-wallet-core/src/walletCoreApiHandler.d.ts.map new file mode 100644 index 000000000..e7ab1011a --- /dev/null +++ b/packages/taler-wallet-core/src/walletCoreApiHandler.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"walletCoreApiHandler.d.ts","sourceRoot":"","sources":["walletCoreApiHandler.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAelC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AA+N5D,oBAAY,eAAe,GACxB,sBAAsB,GACtB,oBAAoB,CAAC;AAExB,oBAAY,eAAe,GACxB,eAAe,GACf,mBAAmB,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IAErC,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IAEnC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,CAAC,EAAE,MAAM,EACT,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,eAAe,CAAC,CAiC1B"} \ No newline at end of file diff --git a/src/walletCoreApiHandler.ts b/packages/taler-wallet-core/src/walletCoreApiHandler.ts similarity index 96% rename from src/walletCoreApiHandler.ts rename to packages/taler-wallet-core/src/walletCoreApiHandler.ts index 7ab6a6284..a0b205485 100644 --- a/src/walletCoreApiHandler.ts +++ b/packages/taler-wallet-core/src/walletCoreApiHandler.ts @@ -202,10 +202,7 @@ async function dispatchRequestInternal( } case "setExchangeTosAccepted": { const req = codecForAcceptExchangeTosRequest().decode(payload); - await wallet.acceptExchangeTermsOfService( - req.exchangeBaseUrl, - req.etag, - ); + await wallet.acceptExchangeTermsOfService(req.exchangeBaseUrl, req.etag); return {}; } case "applyRefund": { @@ -252,13 +249,9 @@ async function dispatchRequestInternal( ); } -export type CoreApiResponse = - | CoreApiResponseSuccess - | CoreApiResponseError; +export type CoreApiResponse = CoreApiResponseSuccess | CoreApiResponseError; -export type CoreApiEnvelope = - | CoreApiResponse - | CoreApiNotification; +export type CoreApiEnvelope = CoreApiResponse | CoreApiNotification; export interface CoreApiNotification { type: "notification"; @@ -268,7 +261,7 @@ export interface CoreApiNotification { export interface CoreApiResponseSuccess { // To distinguish the message from notifications type: "response"; - operation: string, + operation: string; id: string; result: unknown; } @@ -276,7 +269,7 @@ export interface CoreApiResponseSuccess { export interface CoreApiResponseError { // To distinguish the message from notifications type: "error"; - operation: string, + operation: string; id: string; error: OperationErrorDetails; } diff --git a/packages/taler-wallet-core/tsconfig.json b/packages/taler-wallet-core/tsconfig.json new file mode 100644 index 000000000..4e8b71d50 --- /dev/null +++ b/packages/taler-wallet-core/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compileOnSave": true, + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": false, + "target": "ES6", + "module": "ESNext", + "moduleResolution": "node", + "sourceMap": true, + "lib": ["es6"], + "types": ["node"], + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "strict": true, + "strictPropertyInitialization": false, + "outDir": "lib", + "noImplicitAny": true, + "noImplicitThis": true, + "incremental": true, + "esModuleInterop": true, + "importHelpers": true, + "rootDir": "./src" + }, + "references": [ + { + "path": "../idb-bridge/" + } + ], + "include": ["src/**/*"] +} diff --git a/packages/taler-wallet-webextension/package.json b/packages/taler-wallet-webextension/package.json new file mode 100644 index 000000000..b60d4ea98 --- /dev/null +++ b/packages/taler-wallet-webextension/package.json @@ -0,0 +1,41 @@ +{ + "name": "taler-wallet-webextension", + "version": "0.0.15", + "description": "GNU Taler Wallet browser extension", + "main": "./build/index.js", + "types": "./build/index.d.ts", + "author": "Florian Dold", + "license": "AGPL-3.0-or-later", + "private": false, + "scripts": { + "test": "tsc && ava", + "compile": "tsc" + }, + "dependencies": { + "moment": "^2.27.0", + "taler-wallet-core": "workspace:*", + "tslib": "^2.0.0" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^8.4.0", + "@rollup/plugin-replace": "^2.3.3", + "@rollup/plugin-typescript": "^5.0.2", + "@types/chrome": "^0.0.103", + "@types/enzyme": "^3.10.5", + "@types/enzyme-adapter-react-16": "^1.0.6", + "@types/node": "^14.0.27", + "@types/react": "^16.9.44", + "@types/react-dom": "^16.9.8", + "ava": "3.11.0", + "enzyme": "^3.11.0", + "enzyme-adapter-react-16": "^1.15.2", + "react": "^16.13.1", + "react-dom": "^16.13.1", + "rollup": "^2.23.0", + "rollup-plugin-sourcemaps": "^0.6.2", + "rollup-plugin-terser": "^6.1.0", + "typescript": "^3.9.7" + } +} diff --git a/rollup.config.js b/packages/taler-wallet-webextension/rollup.config.js similarity index 100% rename from rollup.config.js rename to packages/taler-wallet-webextension/rollup.config.js diff --git a/src/webex/background.ts b/packages/taler-wallet-webextension/src/background.ts similarity index 100% rename from src/webex/background.ts rename to packages/taler-wallet-webextension/src/background.ts diff --git a/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.js b/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.js new file mode 100644 index 000000000..e9492a2fb --- /dev/null +++ b/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.js @@ -0,0 +1,44 @@ +"use strict"; +/* + This file is part of TALER + (C) 2016 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BrowserCryptoWorkerFactory = void 0; +/** + * API to access the Taler crypto worker thread. + * @author Florian Dold + */ +class BrowserCryptoWorkerFactory { + startWorker() { + const workerCtor = Worker; + const workerPath = "/browserWorkerEntry.js"; + return new workerCtor(workerPath); + } + getConcurrency() { + let concurrency = 2; + try { + // only works in the browser + // tslint:disable-next-line:no-string-literal + concurrency = navigator["hardwareConcurrency"]; + concurrency = Math.max(1, Math.ceil(concurrency / 2)); + } + catch (e) { + concurrency = 2; + } + return concurrency; + } +} +exports.BrowserCryptoWorkerFactory = BrowserCryptoWorkerFactory; +//# sourceMappingURL=browserCryptoWorkerFactory.js.map \ No newline at end of file diff --git a/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.js.map b/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.js.map new file mode 100644 index 000000000..db56d4451 --- /dev/null +++ b/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.js.map @@ -0,0 +1 @@ +{"version":3,"file":"browserCryptoWorkerFactory.js","sourceRoot":"","sources":["browserCryptoWorkerFactory.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAEH;;;GAGG;AAEH,MAAa,0BAA0B;IACrC,WAAW;QACT,MAAM,UAAU,GAAG,MAAM,CAAC;QAC1B,MAAM,UAAU,GAAG,wBAAwB,CAAC;QAC5C,OAAO,IAAI,UAAU,CAAC,UAAU,CAAiB,CAAC;IACpD,CAAC;IAED,cAAc;QACZ,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI;YACF,4BAA4B;YAC5B,6CAA6C;YAC7C,WAAW,GAAI,SAAiB,CAAC,qBAAqB,CAAC,CAAC;YACxD,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;SACvD;QAAC,OAAO,CAAC,EAAE;YACV,WAAW,GAAG,CAAC,CAAC;SACjB;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAnBD,gEAmBC"} \ No newline at end of file diff --git a/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.ts b/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.ts new file mode 100644 index 000000000..b91f49f17 --- /dev/null +++ b/packages/taler-wallet-webextension/src/browserCryptoWorkerFactory.ts @@ -0,0 +1,43 @@ +/* + This file is part of TALER + (C) 2016 GNUnet e.V. + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see + */ + +/** + * API to access the Taler crypto worker thread. + * @author Florian Dold + */ + +import type { CryptoWorker, CryptoWorkerFactory } from "taler-wallet-core"; + +export class BrowserCryptoWorkerFactory implements CryptoWorkerFactory { + startWorker(): CryptoWorker { + const workerCtor = Worker; + const workerPath = "/browserWorkerEntry.js"; + return new workerCtor(workerPath) as CryptoWorker; + } + + getConcurrency(): number { + let concurrency = 2; + try { + // only works in the browser + // tslint:disable-next-line:no-string-literal + concurrency = (navigator as any)["hardwareConcurrency"]; + concurrency = Math.max(1, Math.ceil(concurrency / 2)); + } catch (e) { + concurrency = 2; + } + return concurrency; + } +} diff --git a/packages/taler-wallet-webextension/src/browserHttpLib.ts b/packages/taler-wallet-webextension/src/browserHttpLib.ts new file mode 100644 index 000000000..2782e4a14 --- /dev/null +++ b/packages/taler-wallet-webextension/src/browserHttpLib.ts @@ -0,0 +1,129 @@ + +import { httpLib, OperationFailedError, Logger } from "taler-wallet-core"; +import { TalerErrorCode } from "taler-wallet-core/lib/TalerErrorCode"; + +const logger = new Logger("browserHttpLib"); + +/** + * An implementation of the [[HttpRequestLibrary]] using the + * browser's XMLHttpRequest. + */ +export class BrowserHttpLib implements httpLib.HttpRequestLibrary { + private req( + method: string, + url: string, + requestBody?: any, + options?: httpLib.HttpRequestOptions, + ): Promise { + return new Promise((resolve, reject) => { + const myRequest = new XMLHttpRequest(); + myRequest.open(method, url); + if (options?.headers) { + for (const headerName in options.headers) { + myRequest.setRequestHeader(headerName, options.headers[headerName]); + } + } + myRequest.setRequestHeader; + if (requestBody) { + myRequest.send(requestBody); + } else { + myRequest.send(); + } + + myRequest.onerror = (e) => { + logger.error("http request error"); + reject( + OperationFailedError.fromCode( + TalerErrorCode.WALLET_NETWORK_ERROR, + "Could not make request", + { + requestUrl: url, + }, + ), + ); + }; + + myRequest.addEventListener("readystatechange", (e) => { + if (myRequest.readyState === XMLHttpRequest.DONE) { + if (myRequest.status === 0) { + const exc = OperationFailedError.fromCode( + TalerErrorCode.WALLET_NETWORK_ERROR, + "HTTP request failed (status 0, maybe URI scheme was wrong?)", + { + requestUrl: url, + }, + ); + reject(exc); + return; + } + const makeJson = async (): Promise => { + let responseJson; + try { + responseJson = JSON.parse(myRequest.responseText); + } catch (e) { + throw OperationFailedError.fromCode( + TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, + "Invalid JSON from HTTP response", + { + requestUrl: url, + httpStatusCode: myRequest.status, + }, + ); + } + if (responseJson === null || typeof responseJson !== "object") { + throw OperationFailedError.fromCode( + TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE, + "Invalid JSON from HTTP response", + { + requestUrl: url, + httpStatusCode: myRequest.status, + }, + ); + } + return responseJson; + }; + + const headers = myRequest.getAllResponseHeaders(); + const arr = headers.trim().split(/[\r\n]+/); + + // Create a map of header names to values + const headerMap: httpLib.Headers = new httpLib.Headers(); + arr.forEach(function (line) { + const parts = line.split(": "); + const headerName = parts.shift(); + if (!headerName) { + logger.warn("skipping invalid header"); + return; + } + const value = parts.join(": "); + headerMap.set(headerName, value); + }); + const resp: httpLib.HttpResponse = { + requestUrl: url, + status: myRequest.status, + headers: headerMap, + json: makeJson, + text: async () => myRequest.responseText, + }; + resolve(resp); + } + }); + }); + } + + get(url: string, opt?: httpLib.HttpRequestOptions): Promise { + return this.req("get", url, undefined, opt); + } + + postJson( + url: string, + body: unknown, + opt?: httpLib.HttpRequestOptions, + ): Promise { + return this.req("post", url, JSON.stringify(body), opt); + } + + stop(): void { + // Nothing to do + } +} \ No newline at end of file diff --git a/src/crypto/workers/browserWorkerEntry.ts b/packages/taler-wallet-webextension/src/browserWorkerEntry.ts similarity index 96% rename from src/crypto/workers/browserWorkerEntry.ts rename to packages/taler-wallet-webextension/src/browserWorkerEntry.ts index 87cb0b28b..77c38fda9 100644 --- a/src/crypto/workers/browserWorkerEntry.ts +++ b/packages/taler-wallet-webextension/src/browserWorkerEntry.ts @@ -22,7 +22,7 @@ * Imports. */ -import { CryptoImplementation } from "./cryptoImplementation"; +import { CryptoImplementation } from "taler-wallet-core"; const worker: Worker = (self as any) as Worker; diff --git a/src/webex/chromeBadge.ts b/packages/taler-wallet-webextension/src/chromeBadge.ts similarity index 100% rename from src/webex/chromeBadge.ts rename to packages/taler-wallet-webextension/src/chromeBadge.ts diff --git a/packages/taler-wallet-webextension/src/compat.js b/packages/taler-wallet-webextension/src/compat.js new file mode 100644 index 000000000..fdfcbd4b9 --- /dev/null +++ b/packages/taler-wallet-webextension/src/compat.js @@ -0,0 +1,61 @@ +"use strict"; +/* + This file is part of TALER + (C) 2017 INRIA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see + */ +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getPermissionsApi = exports.isNode = exports.isFirefox = void 0; +/** + * Compatibility helpers needed for browsers that don't implement + * WebExtension APIs consistently. + */ +function isFirefox() { + const rt = chrome.runtime; + if (typeof rt.getBrowserInfo === "function") { + return true; + } + return false; +} +exports.isFirefox = isFirefox; +/** + * Check if we are running under nodejs. + */ +function isNode() { + return typeof process !== "undefined" && process.release.name === "node"; +} +exports.isNode = isNode; +function getPermissionsApi() { + const myBrowser = globalThis.browser; + if (typeof myBrowser === "object" && + typeof myBrowser.permissions === "object") { + return { + addPermissionsListener: () => { + // Not supported yet. + }, + contains: myBrowser.permissions.contains, + request: myBrowser.permissions.request, + remove: myBrowser.permissions.remove, + }; + } + else { + return { + addPermissionsListener: chrome.permissions.onAdded.addListener.bind(chrome.permissions.onAdded), + contains: chrome.permissions.contains, + request: chrome.permissions.request, + remove: chrome.permissions.remove, + }; + } +} +exports.getPermissionsApi = getPermissionsApi; +//# sourceMappingURL=compat.js.map \ No newline at end of file diff --git a/src/webex/compat.ts b/packages/taler-wallet-webextension/src/compat.ts similarity index 100% rename from src/webex/compat.ts rename to packages/taler-wallet-webextension/src/compat.ts diff --git a/src/webex/i18n-test.tsx b/packages/taler-wallet-webextension/src/i18n-test.tsx similarity index 94% rename from src/webex/i18n-test.tsx rename to packages/taler-wallet-webextension/src/i18n-test.tsx index 4a1c40254..e17a455ce 100644 --- a/src/webex/i18n-test.tsx +++ b/packages/taler-wallet-webextension/src/i18n-test.tsx @@ -15,8 +15,7 @@ */ import test from "ava"; -import { internalSetStrings, str, Translate } from "./i18n"; -import { strings } from "../i18n/strings"; +import { internalSetStrings, str, Translate, strings } from "./i18n"; import React from "react"; import { render } from "enzyme"; import { configure } from "enzyme"; diff --git a/src/webex/i18n.tsx b/packages/taler-wallet-webextension/src/i18n.tsx similarity index 77% rename from src/webex/i18n.tsx rename to packages/taler-wallet-webextension/src/i18n.tsx index 6b5c2318d..afbb0e278 100644 --- a/src/webex/i18n.tsx +++ b/packages/taler-wallet-webextension/src/i18n.tsx @@ -19,49 +19,11 @@ */ /** - * Imports. + * Imports */ -import { strings } from "../i18n/strings"; - -// @ts-ignore: no type decl for this library -import * as jedLib from "jed"; - -import * as React from "react"; - -let jed = setupJed(); - -const enableTracing = false; - -/** - * Set up jed library for internationalization, - * based on browser language settings. - */ -function setupJed(): any { - let lang: string; - try { - lang = chrome.i18n.getUILanguage(); - // Chrome gives e.g. "en-US", but Firefox gives us "en_US" - lang = lang.replace("_", "-"); - } catch (e) { - lang = "en"; - console.warn("i18n default language not available"); - } - - if (!strings[lang]) { - lang = "en-US"; - console.log(`language ${lang} not found, defaulting to english`); - } - return new jedLib.Jed(strings[lang]); -} - -/** - * Use different translations for testing. Should not be used outside - * of test cases. - */ -export function internalSetStrings(langStrings: any): void { - jed = new jedLib.Jed(langStrings); -} +import React from "react"; +import { i18n as i18nCore } from "taler-wallet-core"; /** * Convert template strings to a msgid */ @@ -76,17 +38,11 @@ function toI18nString(stringSeq: ReadonlyArray): string { return s; } -/** - * Internationalize a string template with arbitrary serialized values. - */ -export function str(stringSeq: TemplateStringsArray, ...values: any[]): string { - const s = toI18nString(stringSeq); - const tr = jed - .translate(s) - .ifPlural(1, s) - .fetch(...values); - return tr; -} + +export const str = i18nCore.str; +export const internalSetStrings = i18nCore.internalSetStrings; +export const strings = i18nCore.strings; + interface TranslateSwitchProps { target: number; @@ -101,7 +57,7 @@ function stringifyChildren(children: any): string { return `%${n++}$s`; }); const s = ss.join("").replace(/ +/g, " ").trim(); - enableTracing && console.log("translation lookup", JSON.stringify(s)); + console.log("translation lookup", JSON.stringify(s)); return s; } @@ -164,7 +120,7 @@ function getTranslatedChildren( export class Translate extends React.Component { render(): JSX.Element { const s = stringifyChildren(this.props.children); - const translation: string = jed.ngettext(s, s, 1); + const translation: string = i18nCore.jed.ngettext(s, s, 1); const result = getTranslatedChildren(translation, this.props.children); if (!this.props.wrap) { return
{result}
; @@ -228,7 +184,7 @@ export class TranslatePlural extends React.Component< > { render(): JSX.Element { const s = stringifyChildren(this.props.children); - const translation = jed.ngettext(s, s, 1); + const translation = i18nCore.jed.ngettext(s, s, 1); const result = getTranslatedChildren(translation, this.props.children); return
{result}
; } @@ -243,7 +199,7 @@ export class TranslateSingular extends React.Component< > { render(): JSX.Element { const s = stringifyChildren(this.props.children); - const translation = jed.ngettext(s, s, this.props.target); + const translation = i18nCore.jed.ngettext(s, s, this.props.target); const result = getTranslatedChildren(translation, this.props.children); return
{result}
; } diff --git a/src/webex/pageEntryPoint.ts b/packages/taler-wallet-webextension/src/pageEntryPoint.ts similarity index 100% rename from src/webex/pageEntryPoint.ts rename to packages/taler-wallet-webextension/src/pageEntryPoint.ts diff --git a/src/webex/pages/pay.tsx b/packages/taler-wallet-webextension/src/pages/pay.tsx similarity index 89% rename from src/webex/pages/pay.tsx rename to packages/taler-wallet-webextension/src/pages/pay.tsx index ce44c0040..2abd423bd 100644 --- a/src/webex/pages/pay.tsx +++ b/packages/taler-wallet-webextension/src/pages/pay.tsx @@ -24,22 +24,20 @@ */ import * as i18n from "../i18n"; -import { PreparePayResult, PreparePayResultType } from "../../types/walletTypes"; import { renderAmount, ProgressButton } from "../renderHtml"; import * as wxApi from "../wxApi"; import React, { useState, useEffect } from "react"; -import * as Amounts from "../../util/amounts"; -import { codecForContractTerms, ContractTerms } from "../../types/talerTypes"; +import { Amounts, AmountJson, walletTypes, talerTypes } from "taler-wallet-core"; function TalerPayDialog({ talerPayUri }: { talerPayUri: string }): JSX.Element { - const [payStatus, setPayStatus] = useState(); + const [payStatus, setPayStatus] = useState(); const [payErrMsg, setPayErrMsg] = useState(""); const [numTries, setNumTries] = useState(0); const [loading, setLoading] = useState(false); - let amountEffective: Amounts.AmountJson | undefined = undefined; + let amountEffective: AmountJson | undefined = undefined; useEffect(() => { const doFetch = async (): Promise => { @@ -62,7 +60,7 @@ function TalerPayDialog({ talerPayUri }: { talerPayUri: string }): JSX.Element { amountEffective = Amounts.parseOrThrow(payStatus.amountEffective); } - if (payStatus.status === PreparePayResultType.AlreadyConfirmed && numTries === 0) { + if (payStatus.status === walletTypes.PreparePayResultType.AlreadyConfirmed && numTries === 0) { return ( You have already paid for this article. Click{" "} @@ -71,10 +69,10 @@ function TalerPayDialog({ talerPayUri }: { talerPayUri: string }): JSX.Element { ); } - let contractTerms: ContractTerms; + let contractTerms: talerTypes.ContractTerms; try { - contractTerms = codecForContractTerms().decode(payStatus.contractTerms); + contractTerms = talerTypes.codecForContractTerms().decode(payStatus.contractTerms); } catch (e) { // This should never happen, as the wallet is supposed to check the contract terms // before storing them. diff --git a/src/webex/pages/payback.tsx b/packages/taler-wallet-webextension/src/pages/payback.tsx similarity index 100% rename from src/webex/pages/payback.tsx rename to packages/taler-wallet-webextension/src/pages/payback.tsx diff --git a/src/webex/pages/popup.tsx b/packages/taler-wallet-webextension/src/pages/popup.tsx similarity index 94% rename from src/webex/pages/popup.tsx rename to packages/taler-wallet-webextension/src/pages/popup.tsx index 8a99a6d90..72c9f4bcb 100644 --- a/src/webex/pages/popup.tsx +++ b/packages/taler-wallet-webextension/src/pages/popup.tsx @@ -26,8 +26,14 @@ */ import * as i18n from "../i18n"; -import { AmountJson } from "../../util/amounts"; -import * as Amounts from "../../util/amounts"; +import { + AmountJson, + Amounts, + time, + taleruri, + walletTypes, +} from "taler-wallet-core"; + import { abbrev, renderAmount, PageLink } from "../renderHtml"; import * as wxApi from "../wxApi"; @@ -35,10 +41,7 @@ import * as wxApi from "../wxApi"; import React, { Fragment, useState, useEffect } from "react"; import moment from "moment"; -import { Timestamp } from "../../util/time"; -import { classifyTalerUri, TalerUriType } from "../../util/taleruri"; import { PermissionsCheckbox } from "./welcome"; -import { BalancesResponse, Balance } from "../../types/walletTypes"; // FIXME: move to newer react functions /* eslint-disable react/no-deprecated */ @@ -171,7 +174,7 @@ function EmptyBalanceView(): JSX.Element { } class WalletBalanceView extends React.Component { - private balance: BalancesResponse; + private balance?: walletTypes.BalancesResponse; private gotError = false; private canceler: (() => void) | undefined = undefined; private unmount = false; @@ -195,7 +198,7 @@ class WalletBalanceView extends React.Component { return; } this.updateBalanceRunning = true; - let balance: BalancesResponse; + let balance: walletTypes.BalancesResponse; try { balance = await wxApi.getBalance(); } catch (e) { @@ -218,7 +221,7 @@ class WalletBalanceView extends React.Component { this.setState({}); } - formatPending(entry: Balance): JSX.Element { + formatPending(entry: walletTypes.Balance): JSX.Element { let incoming: JSX.Element | undefined; let payment: JSX.Element | undefined; @@ -235,7 +238,7 @@ class WalletBalanceView extends React.Component { entry.pendingIncoming ? renderAmount(entry.pendingIncoming) : null, ); - if (Amounts.isNonZero(pendingIncoming)) { + if (!Amounts.isZero(pendingIncoming)) { incoming = ( @@ -390,25 +393,25 @@ function makeExtensionUrlWithParams( } function actionForTalerUri(talerUri: string): string | undefined { - const uriType = classifyTalerUri(talerUri); + const uriType = taleruri.classifyTalerUri(talerUri); switch (uriType) { - case TalerUriType.TalerWithdraw: + case taleruri.TalerUriType.TalerWithdraw: return makeExtensionUrlWithParams("withdraw.html", { talerWithdrawUri: talerUri, }); - case TalerUriType.TalerPay: + case taleruri.TalerUriType.TalerPay: return makeExtensionUrlWithParams("pay.html", { talerPayUri: talerUri, }); - case TalerUriType.TalerTip: + case taleruri.TalerUriType.TalerTip: return makeExtensionUrlWithParams("tip.html", { talerTipUri: talerUri, }); - case TalerUriType.TalerRefund: + case taleruri.TalerUriType.TalerRefund: return makeExtensionUrlWithParams("refund.html", { talerRefundUri: talerUri, }); - case TalerUriType.TalerNotifyReserve: + case taleruri.TalerUriType.TalerNotifyReserve: // FIXME: implement break; default: diff --git a/src/webex/pages/refund.tsx b/packages/taler-wallet-webextension/src/pages/refund.tsx similarity index 96% rename from src/webex/pages/refund.tsx rename to packages/taler-wallet-webextension/src/pages/refund.tsx index c5d6a00df..7326dfc88 100644 --- a/src/webex/pages/refund.tsx +++ b/packages/taler-wallet-webextension/src/pages/refund.tsx @@ -23,13 +23,13 @@ import React, { useEffect, useState } from "react"; import * as wxApi from "../wxApi"; -import { PurchaseDetails } from "../../types/walletTypes"; import { AmountView } from "../renderHtml"; +import { walletTypes } from "taler-wallet-core"; function RefundStatusView(props: { talerRefundUri: string }): JSX.Element { const [applied, setApplied] = useState(false); const [purchaseDetails, setPurchaseDetails] = useState< - PurchaseDetails | undefined + walletTypes.PurchaseDetails | undefined >(undefined); const [errMsg, setErrMsg] = useState(undefined); diff --git a/src/webex/pages/reset-required.tsx b/packages/taler-wallet-webextension/src/pages/reset-required.tsx similarity index 99% rename from src/webex/pages/reset-required.tsx rename to packages/taler-wallet-webextension/src/pages/reset-required.tsx index 9e40e7981..0ef5fe8b7 100644 --- a/src/webex/pages/reset-required.tsx +++ b/packages/taler-wallet-webextension/src/pages/reset-required.tsx @@ -24,7 +24,7 @@ import * as React from "react"; import * as wxApi from "../wxApi"; -class State { +interface State { /** * Did the user check the confirmation check box? */ diff --git a/src/webex/pages/return-coins.tsx b/packages/taler-wallet-webextension/src/pages/return-coins.tsx similarity index 100% rename from src/webex/pages/return-coins.tsx rename to packages/taler-wallet-webextension/src/pages/return-coins.tsx diff --git a/src/webex/pages/tip.tsx b/packages/taler-wallet-webextension/src/pages/tip.tsx similarity index 95% rename from src/webex/pages/tip.tsx rename to packages/taler-wallet-webextension/src/pages/tip.tsx index 4a1d3743a..6cf4e1875 100644 --- a/src/webex/pages/tip.tsx +++ b/packages/taler-wallet-webextension/src/pages/tip.tsx @@ -28,10 +28,10 @@ import { acceptTip, getTipStatus } from "../wxApi"; import { renderAmount, ProgressButton } from "../renderHtml"; import { useState, useEffect } from "react"; -import { TipStatus } from "../../types/walletTypes"; +import { walletTypes } from "taler-wallet-core"; function TipDisplay(props: { talerTipUri: string }): JSX.Element { - const [tipStatus, setTipStatus] = useState(undefined); + const [tipStatus, setTipStatus] = useState(undefined); const [discarded, setDiscarded] = useState(false); const [loading, setLoading] = useState(false); const [finished, setFinished] = useState(false); diff --git a/src/webex/pages/welcome.tsx b/packages/taler-wallet-webextension/src/pages/welcome.tsx similarity index 97% rename from src/webex/pages/welcome.tsx rename to packages/taler-wallet-webextension/src/pages/welcome.tsx index a7c24d659..ff5de572c 100644 --- a/src/webex/pages/welcome.tsx +++ b/packages/taler-wallet-webextension/src/pages/welcome.tsx @@ -23,14 +23,14 @@ import React, { useState, useEffect } from "react"; import { getDiagnostics } from "../wxApi"; import { PageLink } from "../renderHtml"; -import { WalletDiagnostics } from "../../types/walletTypes"; import * as wxApi from "../wxApi"; import { getPermissionsApi } from "../compat"; import { extendedPermissions } from "../permissions"; +import { walletTypes } from "taler-wallet-core"; function Diagnostics(): JSX.Element | null { const [timedOut, setTimedOut] = useState(false); - const [diagnostics, setDiagnostics] = useState( + const [diagnostics, setDiagnostics] = useState( undefined, ); diff --git a/src/webex/pages/withdraw.tsx b/packages/taler-wallet-webextension/src/pages/withdraw.tsx similarity index 100% rename from src/webex/pages/withdraw.tsx rename to packages/taler-wallet-webextension/src/pages/withdraw.tsx diff --git a/src/webex/permissions.ts b/packages/taler-wallet-webextension/src/permissions.ts similarity index 100% rename from src/webex/permissions.ts rename to packages/taler-wallet-webextension/src/permissions.ts diff --git a/src/webex/renderHtml.tsx b/packages/taler-wallet-webextension/src/renderHtml.tsx similarity index 94% rename from src/webex/renderHtml.tsx rename to packages/taler-wallet-webextension/src/renderHtml.tsx index 39ff470a2..89f6c12e8 100644 --- a/src/webex/renderHtml.tsx +++ b/packages/taler-wallet-webextension/src/renderHtml.tsx @@ -23,12 +23,9 @@ /** * Imports. */ -import { AmountJson } from "../util/amounts"; -import * as Amounts from "../util/amounts"; -import { ExchangeWithdrawDetails } from "../types/walletTypes"; +import { AmountJson, Amounts, time, walletTypes } from "taler-wallet-core"; import * as i18n from "./i18n"; import React from "react"; -import { stringifyTimestamp } from "../util/time"; /** * Render amount as HTML, which non-breaking space between @@ -130,7 +127,7 @@ export class Collapsible extends React.Component< function WireFee(props: { s: string; - rci: ExchangeWithdrawDetails; + rci: walletTypes.ExchangeWithdrawDetails; }): JSX.Element { return ( <> @@ -147,7 +144,7 @@ function WireFee(props: { {props.rci.wireFees.feesForType[props.s].map((f) => ( - {stringifyTimestamp(f.endStamp)} + {time.stringifyTimestamp(f.endStamp)} {renderAmount(f.wireFee)} {renderAmount(f.closingFee)} @@ -158,7 +155,7 @@ function WireFee(props: { } function AuditorDetailsView(props: { - rci: ExchangeWithdrawDetails | null; + rci: walletTypes.ExchangeWithdrawDetails | null; }): JSX.Element { const rci = props.rci; console.log("rci", rci); @@ -195,7 +192,7 @@ function AuditorDetailsView(props: { } function FeeDetailsView(props: { - rci: ExchangeWithdrawDetails | null; + rci: walletTypes.ExchangeWithdrawDetails | null; }): JSX.Element { const rci = props.rci; if (!rci) { @@ -225,7 +222,7 @@ function FeeDetailsView(props: {

{i18n.str`Rounding loss:`} {overhead}

-

{i18n.str`Earliest expiration (for deposit): ${stringifyTimestamp( +

{i18n.str`Earliest expiration (for deposit): ${time.stringifyTimestamp( rci.earliestDepositExpiration, )}`}

Coin Fees

@@ -271,7 +268,7 @@ function FeeDetailsView(props: { * Shows details about a withdraw request. */ export function WithdrawDetailView(props: { - rci: ExchangeWithdrawDetails | null; + rci: walletTypes.ExchangeWithdrawDetails | null; }): JSX.Element { const rci = props.rci; return ( diff --git a/src/webex/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts similarity index 67% rename from src/webex/wxApi.ts rename to packages/taler-wallet-webextension/src/wxApi.ts index 4e11463d6..ee86d90e5 100644 --- a/src/webex/wxApi.ts +++ b/packages/taler-wallet-webextension/src/wxApi.ts @@ -21,26 +21,13 @@ /** * Imports. */ -import { AmountJson } from "../util/amounts"; -import { - CoinRecord, - CurrencyRecord, - DenominationRecord, - ExchangeRecord, - ReserveRecord, -} from "../types/dbTypes"; -import { - BenchmarkResult, - ConfirmPayResult, - SenderWireInfos, - TipStatus, - PurchaseDetails, - WalletDiagnostics, - PreparePayResult, - AcceptWithdrawalResponse, - ExtendedPermissionsResponse, - BalancesResponse, -} from "../types/walletTypes"; +import { AmountJson, walletTypes } from "taler-wallet-core"; + + +export interface ExtendedPermissionsResponse { + newValue: boolean; +} + /** * Response with information about available version upgrades. @@ -99,57 +86,7 @@ async function callBackend( }); } -/** - * Get all exchanges the wallet knows about. - */ -export function getExchanges(): Promise { - return callBackend("get-exchanges", {}); -} -/** - * Get all currencies the exchange knows about. - */ -export function getCurrencies(): Promise { - return callBackend("get-currencies", {}); -} - -/** - * Get information about a specific exchange. - */ -export function getExchangeInfo(baseUrl: string): Promise { - return callBackend("exchange-info", { baseUrl }); -} - -/** - * Replace an existing currency record with the one given. The currency to - * replace is specified inside the currency record. - */ -export function updateCurrency(currencyRecord: CurrencyRecord): Promise { - return callBackend("update-currency", { currencyRecord }); -} - -/** - * Get all reserves the wallet has at an exchange. - */ -export function getReserves(exchangeBaseUrl: string): Promise { - return callBackend("get-reserves", { exchangeBaseUrl }); -} - -/** - * Get all coins withdrawn from the given exchange. - */ -export function getCoins(exchangeBaseUrl: string): Promise { - return callBackend("get-coins", { exchangeBaseUrl }); -} - -/** - * Get all denoms offered by the given exchange. - */ -export function getDenoms( - exchangeBaseUrl: string, -): Promise { - return callBackend("get-denoms", { exchangeBaseUrl }); -} /** * Start refreshing a coin. @@ -164,7 +101,7 @@ export function refresh(coinPub: string): Promise { export function confirmPay( proposalId: string, sessionId: string | undefined, -): Promise { +): Promise { return callBackend("confirm-pay", { proposalId, sessionId }); } @@ -185,18 +122,10 @@ export function resetDb(): Promise { /** * Get balances for all currencies/exchanges. */ -export function getBalance(): Promise { +export function getBalance(): Promise { return callBackend("balances", {}); } -/** - * Get possible sender wire infos for getting money - * wired from an exchange. - */ -export function getSenderWireInfos(): Promise { - return callBackend("get-sender-wire-infos", {}); -} - /** * Return coins to a bank account. */ @@ -214,14 +143,14 @@ export function returnCoins(args: { */ export function getPurchaseDetails( proposalId: string, -): Promise { +): Promise { return callBackend("get-purchase-details", { proposalId }); } /** * Get the status of processing a tip. */ -export function getTipStatus(talerTipUri: string): Promise { +export function getTipStatus(talerTipUri: string): Promise { return callBackend("get-tip-status", { talerTipUri }); } @@ -251,14 +180,14 @@ export function abortFailedPayment(contractTermsHash: string): Promise { /** * Abort a failed payment and try to get a refund. */ -export function benchmarkCrypto(repetitions: number): Promise { +export function benchmarkCrypto(repetitions: number): Promise { return callBackend("benchmark-crypto", { repetitions }); } /** * Get details about a pay operation. */ -export function preparePay(talerPayUri: string): Promise { +export function preparePay(talerPayUri: string): Promise { return callBackend("prepare-pay", { talerPayUri }); } @@ -268,7 +197,7 @@ export function preparePay(talerPayUri: string): Promise { export function acceptWithdrawal( talerWithdrawUri: string, selectedExchange: string, -): Promise { +): Promise { return callBackend("accept-withdrawal", { talerWithdrawUri, selectedExchange, @@ -278,7 +207,7 @@ export function acceptWithdrawal( /** * Get diagnostics information */ -export function getDiagnostics(): Promise { +export function getDiagnostics(): Promise { return callBackend("get-diagnostics", {}); } diff --git a/src/webex/wxBackend.ts b/packages/taler-wallet-webextension/src/wxBackend.ts similarity index 93% rename from src/webex/wxBackend.ts rename to packages/taler-wallet-webextension/src/wxBackend.ts index 39fcf899e..3adc9a82d 100644 --- a/src/webex/wxBackend.ts +++ b/packages/taler-wallet-webextension/src/wxBackend.ts @@ -23,23 +23,15 @@ /** * Imports. */ -import { BrowserCryptoWorkerFactory } from "../crypto/workers/cryptoApi"; -import { - deleteTalerDatabase, - openTalerDatabase, - WALLET_DB_MINOR_VERSION, -} from "../db"; -import { ReturnCoinsRequest, WalletDiagnostics } from "../types/walletTypes"; -import { BrowserHttpLib } from "../util/http"; -import { OpenedPromise, openPromise } from "../util/promiseUtils"; -import { classifyTalerUri, TalerUriType } from "../util/taleruri"; -import { Wallet } from "../wallet"; import { isFirefox, getPermissionsApi } from "./compat"; import * as wxApi from "./wxApi"; import MessageSender = chrome.runtime.MessageSender; -import { Database } from "../util/query"; import { extendedPermissions } from "./permissions"; +import { Wallet, promiseUtil, db, walletTypes, taleruri, queryLib } from "taler-wallet-core"; +import { BrowserHttpLib } from "./browserHttpLib"; +import { BrowserCryptoWorkerFactory } from "./browserCryptoWorkerFactory"; + const NeedsWallet = Symbol("NeedsWallet"); /** @@ -55,7 +47,7 @@ let currentDatabase: IDBDatabase | undefined; */ let outdatedDbVersion: number | undefined; -const walletInit: OpenedPromise = openPromise(); +const walletInit: promiseUtil.OpenedPromise = promiseUtil.openPromise(); const notificationPorts: chrome.runtime.Port[] = []; @@ -86,7 +78,7 @@ async function handleMessage( return Promise.resolve(); } case "reset-db": { - deleteTalerDatabase(indexedDB); + db.deleteTalerDatabase(indexedDB); setBadgeText({ text: "" }); console.log("reset done"); if (!currentWallet) { @@ -148,8 +140,7 @@ async function handleMessage( exchange: detail.exchange, senderWire: detail.senderWire, }; - const req = ReturnCoinsRequest.checked(d); - return needsWallet().returnCoins(req); + return needsWallet().returnCoins(d); } case "check-upgrade": { let dbResetRequired = false; @@ -157,7 +148,7 @@ async function handleMessage( dbResetRequired = true; } const resp: wxApi.UpgradeResponse = { - currentDbVersion: WALLET_DB_MINOR_VERSION.toString(), + currentDbVersion: db.WALLET_DB_MINOR_VERSION.toString(), dbResetRequired, oldDbVersion: (outdatedDbVersion || "unknown").toString(), }; @@ -226,7 +217,7 @@ async function handleMessage( errors.push(`Outdated DB version: ${outdatedDbVersion}`); dbOutdated = true; } - const diagnostics: WalletDiagnostics = { + const diagnostics: walletTypes.WalletDiagnostics = { walletManifestDisplayVersion: manifestData.version_name || "(undefined)", walletManifestVersion: manifestData.version, @@ -377,7 +368,7 @@ async function reinitWallet(): Promise { currentDatabase = undefined; setBadgeText({ text: "" }); try { - currentDatabase = await openTalerDatabase(indexedDB, reinitWallet); + currentDatabase = await db.openTalerDatabase(indexedDB, reinitWallet); } catch (e) { console.error("could not open database", e); walletInit.reject(e); @@ -386,7 +377,7 @@ async function reinitWallet(): Promise { const http = new BrowserHttpLib(); console.log("setting wallet"); const wallet = new Wallet( - new Database(currentDatabase), + new queryLib.Database(currentDatabase), http, new BrowserCryptoWorkerFactory(), ); @@ -441,9 +432,9 @@ function headerListener( for (const header of details.responseHeaders || []) { if (header.name.toLowerCase() === "taler") { const talerUri = header.value || ""; - const uriType = classifyTalerUri(talerUri); + const uriType = taleruri.classifyTalerUri(talerUri); switch (uriType) { - case TalerUriType.TalerWithdraw: + case taleruri.TalerUriType.TalerWithdraw: return makeSyncWalletRedirect( "withdraw.html", details.tabId, @@ -452,7 +443,7 @@ function headerListener( talerWithdrawUri: talerUri, }, ); - case TalerUriType.TalerPay: + case taleruri.TalerUriType.TalerPay: return makeSyncWalletRedirect( "pay.html", details.tabId, @@ -461,7 +452,7 @@ function headerListener( talerPayUri: talerUri, }, ); - case TalerUriType.TalerTip: + case taleruri.TalerUriType.TalerTip: return makeSyncWalletRedirect( "tip.html", details.tabId, @@ -470,7 +461,7 @@ function headerListener( talerTipUri: talerUri, }, ); - case TalerUriType.TalerRefund: + case taleruri.TalerUriType.TalerRefund: return makeSyncWalletRedirect( "refund.html", details.tabId, @@ -479,7 +470,7 @@ function headerListener( talerRefundUri: talerUri, }, ); - case TalerUriType.TalerNotifyReserve: + case taleruri.TalerUriType.TalerNotifyReserve: Promise.resolve().then(() => { const w = currentWallet; if (!w) { diff --git a/packages/taler-wallet-webextension/tsconfig.json b/packages/taler-wallet-webextension/tsconfig.json new file mode 100644 index 000000000..c3c4144bf --- /dev/null +++ b/packages/taler-wallet-webextension/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "composite": true, + "lib": ["es6", "DOM"], + "jsx": "react", + "reactNamespace": "React", + "module": "commonjs", + "target": "es5", + "noImplicitAny": true, + "outDir": "lib", + "declaration": true, + "noEmitOnError": true, + "strict": true, + "incremental": true, + "sourceMap": true, + "esModuleInterop": true + }, + "include": ["src/**/*"] +} diff --git a/webextension/manifest.json b/packages/taler-wallet-webextension/webextension/manifest.json similarity index 100% rename from webextension/manifest.json rename to packages/taler-wallet-webextension/webextension/manifest.json diff --git a/webextension/pack.sh b/packages/taler-wallet-webextension/webextension/pack.sh similarity index 100% rename from webextension/pack.sh rename to packages/taler-wallet-webextension/webextension/pack.sh diff --git a/webextension/static/add-auditor.html b/packages/taler-wallet-webextension/webextension/static/add-auditor.html similarity index 100% rename from webextension/static/add-auditor.html rename to packages/taler-wallet-webextension/webextension/static/add-auditor.html diff --git a/webextension/static/auditors.html b/packages/taler-wallet-webextension/webextension/static/auditors.html similarity index 100% rename from webextension/static/auditors.html rename to packages/taler-wallet-webextension/webextension/static/auditors.html diff --git a/webextension/static/background.html b/packages/taler-wallet-webextension/webextension/static/background.html similarity index 100% rename from webextension/static/background.html rename to packages/taler-wallet-webextension/webextension/static/background.html diff --git a/webextension/static/benchmark.html b/packages/taler-wallet-webextension/webextension/static/benchmark.html similarity index 100% rename from webextension/static/benchmark.html rename to packages/taler-wallet-webextension/webextension/static/benchmark.html diff --git a/webextension/static/img/icon.png b/packages/taler-wallet-webextension/webextension/static/img/icon.png similarity index 100% rename from webextension/static/img/icon.png rename to packages/taler-wallet-webextension/webextension/static/img/icon.png diff --git a/webextension/static/img/logo-2015-medium.png b/packages/taler-wallet-webextension/webextension/static/img/logo-2015-medium.png similarity index 100% rename from webextension/static/img/logo-2015-medium.png rename to packages/taler-wallet-webextension/webextension/static/img/logo-2015-medium.png diff --git a/webextension/static/img/logo.png b/packages/taler-wallet-webextension/webextension/static/img/logo.png similarity index 100% rename from webextension/static/img/logo.png rename to packages/taler-wallet-webextension/webextension/static/img/logo.png diff --git a/webextension/static/img/spinner-bars.svg b/packages/taler-wallet-webextension/webextension/static/img/spinner-bars.svg similarity index 100% rename from webextension/static/img/spinner-bars.svg rename to packages/taler-wallet-webextension/webextension/static/img/spinner-bars.svg diff --git a/webextension/static/pay.html b/packages/taler-wallet-webextension/webextension/static/pay.html similarity index 100% rename from webextension/static/pay.html rename to packages/taler-wallet-webextension/webextension/static/pay.html diff --git a/webextension/static/payback.html b/packages/taler-wallet-webextension/webextension/static/payback.html similarity index 100% rename from webextension/static/payback.html rename to packages/taler-wallet-webextension/webextension/static/payback.html diff --git a/webextension/static/popup.html b/packages/taler-wallet-webextension/webextension/static/popup.html similarity index 100% rename from webextension/static/popup.html rename to packages/taler-wallet-webextension/webextension/static/popup.html diff --git a/webextension/static/refund.html b/packages/taler-wallet-webextension/webextension/static/refund.html similarity index 100% rename from webextension/static/refund.html rename to packages/taler-wallet-webextension/webextension/static/refund.html diff --git a/webextension/static/reset-required.html b/packages/taler-wallet-webextension/webextension/static/reset-required.html similarity index 100% rename from webextension/static/reset-required.html rename to packages/taler-wallet-webextension/webextension/static/reset-required.html diff --git a/webextension/static/return-coins.html b/packages/taler-wallet-webextension/webextension/static/return-coins.html similarity index 100% rename from webextension/static/return-coins.html rename to packages/taler-wallet-webextension/webextension/static/return-coins.html diff --git a/webextension/static/style/popup.css b/packages/taler-wallet-webextension/webextension/static/style/popup.css similarity index 100% rename from webextension/static/style/popup.css rename to packages/taler-wallet-webextension/webextension/static/style/popup.css diff --git a/webextension/static/style/pure.css b/packages/taler-wallet-webextension/webextension/static/style/pure.css similarity index 100% rename from webextension/static/style/pure.css rename to packages/taler-wallet-webextension/webextension/static/style/pure.css diff --git a/webextension/static/style/wallet.css b/packages/taler-wallet-webextension/webextension/static/style/wallet.css similarity index 100% rename from webextension/static/style/wallet.css rename to packages/taler-wallet-webextension/webextension/static/style/wallet.css diff --git a/webextension/static/tip.html b/packages/taler-wallet-webextension/webextension/static/tip.html similarity index 100% rename from webextension/static/tip.html rename to packages/taler-wallet-webextension/webextension/static/tip.html diff --git a/webextension/static/welcome.html b/packages/taler-wallet-webextension/webextension/static/welcome.html similarity index 100% rename from webextension/static/welcome.html rename to packages/taler-wallet-webextension/webextension/static/welcome.html diff --git a/webextension/static/withdraw.html b/packages/taler-wallet-webextension/webextension/static/withdraw.html similarity index 100% rename from webextension/static/withdraw.html rename to packages/taler-wallet-webextension/webextension/static/withdraw.html diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..a3a05aae6 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4749 @@ +importers: + .: + dependencies: + prettier: 2.0.5 + specifiers: + prettier: ^2.0.5 + packages/idb-bridge: + dependencies: + '@types/node': 14.0.27 + tslib: 2.0.0 + devDependencies: + '@rollup/plugin-typescript': 5.0.2_d508d998c8e6588bf77175f7541372d0 + ava: 3.11.0 + esm: 3.2.25 + rimraf: 3.0.2 + rollup: 2.23.0 + typescript: 3.9.7 + specifiers: + '@rollup/plugin-typescript': ^5.0.2 + '@types/node': ^14.0.27 + ava: ^3.10.1 + esm: ^3.2.25 + rimraf: ^3.0.2 + rollup: ^2.23.0 + tslib: ^2.0.0 + typescript: ^3.7.0 + packages/pogen: + dependencies: + '@types/node': 11.15.20 + devDependencies: + typescript: 3.9.7 + specifiers: + '@types/node': ^11.12.0 + typescript: ^3.3.4000 + packages/taler-wallet-android: + dependencies: + taler-wallet-core: 'link:../taler-wallet-core' + tslib: 2.0.0 + devDependencies: + '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.0 + '@rollup/plugin-json': 4.1.0_rollup@2.23.0 + '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.0 + '@rollup/plugin-replace': 2.3.3_rollup@2.23.0 + rimraf: 3.0.2 + rollup: 2.23.0 + rollup-plugin-sourcemaps: 0.6.2_rollup@2.23.0 + rollup-plugin-terser: 6.1.0_rollup@2.23.0 + specifiers: + '@rollup/plugin-commonjs': ^14.0.0 + '@rollup/plugin-json': ^4.1.0 + '@rollup/plugin-node-resolve': ^8.4.0 + '@rollup/plugin-replace': ^2.3.3 + rimraf: ^3.0.2 + rollup: ^2.23.0 + rollup-plugin-sourcemaps: ^0.6.2 + rollup-plugin-terser: ^6.1.0 + taler-wallet-core: 'workspace:*' + tslib: ^2.0.0 + packages/taler-wallet-cli: + dependencies: + source-map-support: 0.5.19 + taler-wallet-core: 'link:../taler-wallet-core' + tslib: 2.0.0 + devDependencies: + '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.0 + '@rollup/plugin-json': 4.1.0_rollup@2.23.0 + '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.0 + '@rollup/plugin-replace': 2.3.3_rollup@2.23.0 + rimraf: 3.0.2 + rollup: 2.23.0 + rollup-plugin-sourcemaps: 0.6.2_rollup@2.23.0 + rollup-plugin-terser: 6.1.0_rollup@2.23.0 + typedoc: 0.17.8_typescript@3.9.7 + typescript: 3.9.7 + specifiers: + '@rollup/plugin-commonjs': ^14.0.0 + '@rollup/plugin-json': ^4.1.0 + '@rollup/plugin-node-resolve': ^8.4.0 + '@rollup/plugin-replace': ^2.3.3 + rimraf: ^3.0.2 + rollup: ^2.23.0 + rollup-plugin-sourcemaps: ^0.6.2 + rollup-plugin-terser: ^6.1.0 + source-map-support: ^0.5.19 + taler-wallet-core: 'workspace:*' + tslib: ^2.0.0 + typedoc: ^0.17.8 + typescript: ^3.9.7 + packages/taler-wallet-core: + dependencies: + '@types/node': 14.0.27 + axios: 0.19.2 + big-integer: 1.6.48 + idb-bridge: 'link:../idb-bridge' + source-map-support: 0.5.19 + tslib: 2.0.0 + devDependencies: + '@ava/typescript': 1.1.1 + '@typescript-eslint/eslint-plugin': 3.7.1_98f5354ad0bbc327ab4925c12674a6b1 + '@typescript-eslint/parser': 3.7.1_eslint@7.6.0+typescript@3.9.7 + ava: 3.11.0 + eslint: 7.6.0 + eslint-config-airbnb-typescript: 8.0.2_de36c6f68d63a4142de06a31bab9d790 + eslint-plugin-import: 2.22.0_eslint@7.6.0 + eslint-plugin-jsx-a11y: 6.3.1_eslint@7.6.0 + eslint-plugin-react: 7.20.5_eslint@7.6.0 + eslint-plugin-react-hooks: 4.0.8_eslint@7.6.0 + esm: 3.2.25 + jed: 1.1.1 + moment: 2.27.0 + nyc: 15.1.0 + po2json: 0.4.5 + pogen: 'link:../pogen' + prettier: 2.0.5 + rimraf: 3.0.2 + rollup: 2.23.0 + source-map-resolve: 0.6.0 + structured-clone: 0.2.2 + typedoc: 0.17.8_typescript@3.9.7 + typescript: 3.9.7 + specifiers: + '@ava/typescript': ^1.1.1 + '@types/node': ^14.0.27 + '@typescript-eslint/eslint-plugin': ^3.6.1 + '@typescript-eslint/parser': ^3.6.1 + ava: ^3.10.1 + axios: ^0.19.2 + big-integer: ^1.6.48 + eslint: ^7.4.0 + eslint-config-airbnb-typescript: ^8.0.2 + eslint-plugin-import: ^2.22.0 + eslint-plugin-jsx-a11y: ^6.3.1 + eslint-plugin-react: ^7.20.3 + eslint-plugin-react-hooks: ^4.0.8 + esm: ^3.2.25 + idb-bridge: 'workspace:*' + jed: ^1.1.1 + moment: ^2.27.0 + nyc: ^15.1.0 + po2json: ^0.4.5 + pogen: 'workspace:*' + prettier: ^2.0.5 + rimraf: ^3.0.2 + rollup: ^2.23.0 + source-map-resolve: ^0.6.0 + source-map-support: ^0.5.19 + structured-clone: ^0.2.2 + tslib: ^2.0.0 + typedoc: ^0.17.8 + typescript: ^3.9.7 + packages/taler-wallet-webextension: + dependencies: + moment: 2.27.0 + taler-wallet-core: 'link:../taler-wallet-core' + tslib: 2.0.0 + devDependencies: + '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.0 + '@rollup/plugin-json': 4.1.0_rollup@2.23.0 + '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.0 + '@rollup/plugin-replace': 2.3.3_rollup@2.23.0 + '@rollup/plugin-typescript': 5.0.2_d508d998c8e6588bf77175f7541372d0 + '@types/chrome': 0.0.103 + '@types/enzyme': 3.10.5 + '@types/enzyme-adapter-react-16': 1.0.6 + '@types/node': 14.0.27 + '@types/react': 16.9.44 + '@types/react-dom': 16.9.8 + ava: 3.11.0 + enzyme: 3.11.0 + enzyme-adapter-react-16: 1.15.2_df2dc313d8031f8c2dbd009d86ca7fc7 + react: 16.13.1 + react-dom: 16.13.1_react@16.13.1 + rollup: 2.23.0 + rollup-plugin-sourcemaps: 0.6.2_1bb4f16ce5b550396581a296af208cfa + rollup-plugin-terser: 6.1.0_rollup@2.23.0 + typescript: 3.9.7 + specifiers: + '@rollup/plugin-commonjs': ^14.0.0 + '@rollup/plugin-json': ^4.1.0 + '@rollup/plugin-node-resolve': ^8.4.0 + '@rollup/plugin-replace': ^2.3.3 + '@rollup/plugin-typescript': ^5.0.2 + '@types/chrome': ^0.0.103 + '@types/enzyme': ^3.10.5 + '@types/enzyme-adapter-react-16': ^1.0.6 + '@types/node': ^14.0.27 + '@types/react': ^16.9.44 + '@types/react-dom': ^16.9.8 + ava: 3.11.0 + enzyme: ^3.11.0 + enzyme-adapter-react-16: ^1.15.2 + moment: ^2.27.0 + react: ^16.13.1 + react-dom: ^16.13.1 + rollup: ^2.23.0 + rollup-plugin-sourcemaps: ^0.6.2 + rollup-plugin-terser: ^6.1.0 + taler-wallet-core: 'workspace:*' + tslib: ^2.0.0 + typescript: ^3.9.7 +lockfileVersion: 5.1 +packages: + /@ava/typescript/1.1.1: + dependencies: + escape-string-regexp: 2.0.0 + dev: true + engines: + node: '>=10.18.0 <11 || >=12.14.0 <13 || >=13.5.0' + resolution: + integrity: sha512-KbLUAe2cWXK63WLK6LnOJonjwEDU/8MNXCOA1ooX/YFZgKRmeAD1kZu+2K0ks5fnOCEcckNQAooyBNGdZUmMQA== + /@babel/code-frame/7.10.4: + dependencies: + '@babel/highlight': 7.10.4 + dev: true + resolution: + integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + /@babel/core/7.11.0: + dependencies: + '@babel/code-frame': 7.10.4 + '@babel/generator': 7.11.0 + '@babel/helper-module-transforms': 7.11.0 + '@babel/helpers': 7.10.4 + '@babel/parser': 7.11.0 + '@babel/template': 7.10.4 + '@babel/traverse': 7.11.0 + '@babel/types': 7.11.0 + convert-source-map: 1.7.0 + debug: 4.1.1 + gensync: 1.0.0-beta.1 + json5: 2.1.3 + lodash: 4.17.19 + resolve: 1.17.0 + semver: 5.7.1 + source-map: 0.5.7 + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg== + /@babel/generator/7.11.0: + dependencies: + '@babel/types': 7.11.0 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + resolution: + integrity: sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== + /@babel/helper-function-name/7.10.4: + dependencies: + '@babel/helper-get-function-arity': 7.10.4 + '@babel/template': 7.10.4 + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + /@babel/helper-get-function-arity/7.10.4: + dependencies: + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + /@babel/helper-member-expression-to-functions/7.11.0: + dependencies: + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== + /@babel/helper-module-imports/7.10.4: + dependencies: + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + /@babel/helper-module-transforms/7.11.0: + dependencies: + '@babel/helper-module-imports': 7.10.4 + '@babel/helper-replace-supers': 7.10.4 + '@babel/helper-simple-access': 7.10.4 + '@babel/helper-split-export-declaration': 7.11.0 + '@babel/template': 7.10.4 + '@babel/types': 7.11.0 + lodash: 4.17.19 + dev: true + resolution: + integrity: sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== + /@babel/helper-optimise-call-expression/7.10.4: + dependencies: + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + /@babel/helper-replace-supers/7.10.4: + dependencies: + '@babel/helper-member-expression-to-functions': 7.11.0 + '@babel/helper-optimise-call-expression': 7.10.4 + '@babel/traverse': 7.11.0 + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== + /@babel/helper-simple-access/7.10.4: + dependencies: + '@babel/template': 7.10.4 + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== + /@babel/helper-split-export-declaration/7.11.0: + dependencies: + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + /@babel/helper-validator-identifier/7.10.4: + dev: true + resolution: + integrity: sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + /@babel/helpers/7.10.4: + dependencies: + '@babel/template': 7.10.4 + '@babel/traverse': 7.11.0 + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + /@babel/highlight/7.10.4: + dependencies: + '@babel/helper-validator-identifier': 7.10.4 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + resolution: + integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + /@babel/parser/7.11.0: + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw== + /@babel/runtime-corejs3/7.11.0: + dependencies: + core-js-pure: 3.6.5 + regenerator-runtime: 0.13.7 + dev: true + resolution: + integrity: sha512-K0ioacsw8JgzDSPpUiGWokMvLzGvnZPXLrTsJfyHPrFsnp4yoKn+Ap/8NNZgWKZG9o5+qotH8tAa8AXn8gTN5A== + /@babel/runtime/7.11.0: + dependencies: + regenerator-runtime: 0.13.7 + dev: true + resolution: + integrity: sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw== + /@babel/template/7.10.4: + dependencies: + '@babel/code-frame': 7.10.4 + '@babel/parser': 7.11.0 + '@babel/types': 7.11.0 + dev: true + resolution: + integrity: sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + /@babel/traverse/7.11.0: + dependencies: + '@babel/code-frame': 7.10.4 + '@babel/generator': 7.11.0 + '@babel/helper-function-name': 7.10.4 + '@babel/helper-split-export-declaration': 7.11.0 + '@babel/parser': 7.11.0 + '@babel/types': 7.11.0 + debug: 4.1.1 + globals: 11.12.0 + lodash: 4.17.19 + dev: true + resolution: + integrity: sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== + /@babel/types/7.11.0: + dependencies: + '@babel/helper-validator-identifier': 7.10.4 + lodash: 4.17.19 + to-fast-properties: 2.0.0 + dev: true + resolution: + integrity: sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== + /@concordance/react/2.0.0: + dependencies: + arrify: 1.0.1 + dev: true + engines: + node: '>=6.12.3 <7 || >=8.9.4 <9 || >=10.0.0' + resolution: + integrity: sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA== + /@istanbuljs/load-nyc-config/1.1.0: + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.0 + resolve-from: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + /@istanbuljs/schema/0.1.2: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + /@nodelib/fs.scandir/2.1.3: + dependencies: + '@nodelib/fs.stat': 2.0.3 + run-parallel: 1.1.9 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + /@nodelib/fs.stat/2.0.3: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + /@nodelib/fs.walk/1.2.4: + dependencies: + '@nodelib/fs.scandir': 2.1.3 + fastq: 1.8.0 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + /@rollup/plugin-commonjs/14.0.0_rollup@2.23.0: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.23.0 + commondir: 1.0.1 + estree-walker: 1.0.1 + glob: 7.1.6 + is-reference: 1.2.1 + magic-string: 0.25.7 + resolve: 1.17.0 + rollup: 2.23.0 + dev: true + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^2.3.4 + resolution: + integrity: sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw== + /@rollup/plugin-json/4.1.0_rollup@2.23.0: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.23.0 + rollup: 2.23.0 + dev: true + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + resolution: + integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== + /@rollup/plugin-node-resolve/8.4.0_rollup@2.23.0: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.23.0 + '@types/resolve': 1.17.1 + builtin-modules: 3.1.0 + deep-freeze: 0.0.1 + deepmerge: 4.2.2 + is-module: 1.0.0 + resolve: 1.17.0 + rollup: 2.23.0 + dev: true + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^1.20.0||^2.0.0 + resolution: + integrity: sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ== + /@rollup/plugin-replace/2.3.3_rollup@2.23.0: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.23.0 + magic-string: 0.25.7 + rollup: 2.23.0 + dev: true + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + resolution: + integrity: sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ== + /@rollup/plugin-typescript/5.0.2_d508d998c8e6588bf77175f7541372d0: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.23.0 + resolve: 1.17.0 + rollup: 2.23.0 + tslib: 2.0.0 + typescript: 3.9.7 + dev: true + engines: + node: '>=8.0.0' + peerDependencies: + rollup: ^2.14.0 + tslib: '*' + typescript: '>=3.4.0' + resolution: + integrity: sha512-CkS028Itwjqm1uLbFVfpJgtVtnNvZ+og/m6UlNRR5wOOnNTWPcVQzOu5xGdEX+WWJxdvWIqUq2uR/RBt2ZipWg== + /@rollup/pluginutils/3.1.0_rollup@2.23.0: + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.2.2 + rollup: 2.23.0 + dev: true + engines: + node: '>= 8.0.0' + peerDependencies: + rollup: ^1.20.0||^2.0.0 + resolution: + integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + /@sindresorhus/is/0.14.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + /@szmarczak/http-timer/1.1.2: + dependencies: + defer-to-connect: 1.1.3 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + /@types/cheerio/0.22.21: + dependencies: + '@types/node': 14.0.27 + dev: true + resolution: + integrity: sha512-aGI3DfswwqgKPiEOTaiHV2ZPC9KEhprpgEbJnv0fZl3SGX0cGgEva1126dGrMC6AJM6v/aihlUgJn9M5DbDZ/Q== + /@types/chrome/0.0.103: + dependencies: + '@types/filesystem': 0.0.29 + '@types/har-format': 1.2.4 + dev: true + resolution: + integrity: sha512-s8So1IG1fIu2dg2MRV3k6W5OjlVaJriNXIxIWDHi+Rdz5dLeuzPKcWzkVlcaVL4gONfn44JKC0RhW+P0UohLfg== + /@types/color-name/1.1.1: + dev: true + resolution: + integrity: sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + /@types/enzyme-adapter-react-16/1.0.6: + dependencies: + '@types/enzyme': 3.10.5 + dev: true + resolution: + integrity: sha512-VonDkZ15jzqDWL8mPFIQnnLtjwebuL9YnDkqeCDYnB4IVgwUm0mwKkqhrxLL6mb05xm7qqa3IE95m8CZE9imCg== + /@types/enzyme/3.10.5: + dependencies: + '@types/cheerio': 0.22.21 + '@types/react': 16.9.44 + dev: true + resolution: + integrity: sha512-R+phe509UuUYy9Tk0YlSbipRpfVtIzb/9BHn5pTEtjJTF5LXvUjrIQcZvNyANNEyFrd2YGs196PniNT1fgvOQA== + /@types/eslint-visitor-keys/1.0.0: + dev: true + resolution: + integrity: sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + /@types/estree/0.0.39: + dev: true + resolution: + integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + /@types/estree/0.0.45: + dev: true + resolution: + integrity: sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + /@types/filesystem/0.0.29: + dependencies: + '@types/filewriter': 0.0.28 + dev: true + resolution: + integrity: sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw== + /@types/filewriter/0.0.28: + dev: true + resolution: + integrity: sha1-wFTor02d11205jq8dviFFocU1LM= + /@types/glob/7.1.3: + dependencies: + '@types/minimatch': 3.0.3 + '@types/node': 14.0.27 + dev: true + resolution: + integrity: sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + /@types/har-format/1.2.4: + dev: true + resolution: + integrity: sha512-iUxzm1meBm3stxUMzRqgOVHjj4Kgpgu5w9fm4X7kPRfSgVRzythsucEN7/jtOo8SQzm+HfcxWWzJS0mJDH/3DQ== + /@types/json-schema/7.0.5: + dev: true + resolution: + integrity: sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + /@types/json5/0.0.29: + dev: true + resolution: + integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + /@types/minimatch/3.0.3: + dev: true + resolution: + integrity: sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + /@types/node/11.15.20: + dev: false + resolution: + integrity: sha512-DY2QwdrBqNlsxdMehwzUtSsWHgYYPLVCAuXvOcu3wkzYmchbRunQ7OEZFOrmFoBLfA1ysz2Ypr6vtNP9WQkUaQ== + /@types/node/14.0.27: + resolution: + integrity: sha512-kVrqXhbclHNHGu9ztnAwSncIgJv/FaxmzXJvGXNdcCpV1b8u1/Mi6z6m0vwy0LzKeXFTPLH0NzwmoJ3fNCIq0g== + /@types/normalize-package-data/2.4.0: + dev: true + resolution: + integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + /@types/prop-types/15.7.3: + dev: true + resolution: + integrity: sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + /@types/react-dom/16.9.8: + dependencies: + '@types/react': 16.9.44 + dev: true + resolution: + integrity: sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== + /@types/react/16.9.44: + dependencies: + '@types/prop-types': 15.7.3 + csstype: 3.0.2 + dev: true + resolution: + integrity: sha512-BtLoJrXdW8DVZauKP+bY4Kmiq7ubcJq+H/aCpRfvPF7RAT3RwR73Sg8szdc2YasbAlWBDrQ6Q+AFM0KwtQY+WQ== + /@types/resolve/1.17.1: + dependencies: + '@types/node': 14.0.27 + dev: true + resolution: + integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + /@typescript-eslint/eslint-plugin/3.7.1_98f5354ad0bbc327ab4925c12674a6b1: + dependencies: + '@typescript-eslint/experimental-utils': 3.7.1_eslint@7.6.0+typescript@3.9.7 + '@typescript-eslint/parser': 3.7.1_eslint@7.6.0+typescript@3.9.7 + debug: 4.1.1 + eslint: 7.6.0 + functional-red-black-tree: 1.0.1 + regexpp: 3.1.0 + semver: 7.3.2 + tsutils: 3.17.1_typescript@3.9.7 + typescript: 3.9.7 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + '@typescript-eslint/parser': ^3.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-3DB9JDYkMrc8Au00rGFiJLK2Ja9CoMP6Ut0sHsXp3ZtSugjNxvSSHTnKLfo4o+QmjYBJqEznDqsG1zj4F2xnsg== + /@typescript-eslint/experimental-utils/3.7.1_eslint@7.6.0+typescript@3.9.7: + dependencies: + '@types/json-schema': 7.0.5 + '@typescript-eslint/types': 3.7.1 + '@typescript-eslint/typescript-estree': 3.7.1_typescript@3.9.7 + eslint: 7.6.0 + eslint-scope: 5.1.0 + eslint-utils: 2.1.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: '*' + typescript: '*' + resolution: + integrity: sha512-TqE97pv7HrqWcGJbLbZt1v59tcqsSVpWTOf1AqrWK7n8nok2sGgVtYRuGXeNeLw3wXlLEbY1MKP3saB2HsO/Ng== + /@typescript-eslint/parser/3.7.1_eslint@7.6.0+typescript@3.9.7: + dependencies: + '@types/eslint-visitor-keys': 1.0.0 + '@typescript-eslint/experimental-utils': 3.7.1_eslint@7.6.0+typescript@3.9.7 + '@typescript-eslint/types': 3.7.1 + '@typescript-eslint/typescript-estree': 3.7.1_typescript@3.9.7 + eslint: 7.6.0 + eslint-visitor-keys: 1.3.0 + typescript: 3.9.7 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-W4QV/gXvfIsccN8225784LNOorcm7ch68Fi3V4Wg7gmkWSQRKevO4RrRqWo6N/Z/myK1QAiGgeaXN57m+R/8iQ== + /@typescript-eslint/types/3.7.1: + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-PZe8twm5Z4b61jt7GAQDor6KiMhgPgf4XmUb9zdrwTbgtC/Sj29gXP1dws9yEn4+aJeyXrjsD9XN7AWFhmnUfg== + /@typescript-eslint/typescript-estree/3.7.1_typescript@3.9.7: + dependencies: + '@typescript-eslint/types': 3.7.1 + '@typescript-eslint/visitor-keys': 3.7.1 + debug: 4.1.1 + glob: 7.1.6 + is-glob: 4.0.1 + lodash: 4.17.19 + semver: 7.3.2 + tsutils: 3.17.1_typescript@3.9.7 + typescript: 3.9.7 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + resolution: + integrity: sha512-m97vNZkI08dunYOr2lVZOHoyfpqRs0KDpd6qkGaIcLGhQ2WPtgHOd/eVbsJZ0VYCQvupKrObAGTOvk3tfpybYA== + /@typescript-eslint/visitor-keys/3.7.1: + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: ^8.10.0 || ^10.13.0 || >=11.10.1 + resolution: + integrity: sha512-xn22sQbEya+Utj2IqJHGLA3i1jDzR43RzWupxojbSWnj3nnPLavaQmWe5utw03CwYao3r00qzXfgJMGNkrzrAA== + /acorn-jsx/5.2.0_acorn@7.3.1: + dependencies: + acorn: 7.3.1 + dev: true + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 + resolution: + integrity: sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + /acorn-walk/7.2.0: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + /acorn/7.3.1: + dev: true + engines: + node: '>=0.4.0' + hasBin: true + resolution: + integrity: sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== + /aggregate-error/3.0.1: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + /airbnb-prop-types/2.16.0_react@16.13.1: + dependencies: + array.prototype.find: 2.1.1 + function.prototype.name: 1.1.2 + is-regex: 1.1.0 + object-is: 1.1.2 + object.assign: 4.1.0 + object.entries: 1.1.2 + prop-types: 15.7.2 + prop-types-exact: 1.2.0 + react: 16.13.1 + react-is: 16.13.1 + dev: true + peerDependencies: + react: ^0.14 || ^15.0.0 || ^16.0.0-alpha + resolution: + integrity: sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== + /ajv/6.12.3: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.2.2 + dev: true + resolution: + integrity: sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + /ansi-align/3.0.0: + dependencies: + string-width: 3.1.0 + dev: true + resolution: + integrity: sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + /ansi-colors/4.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + /ansi-regex/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + /ansi-regex/4.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + /ansi-regex/5.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + /ansi-styles/1.0.0: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= + /ansi-styles/3.2.1: + dependencies: + color-convert: 1.9.3 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + /ansi-styles/4.2.1: + dependencies: + '@types/color-name': 1.1.1 + color-convert: 2.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + /anymatch/3.1.1: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.2.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + /append-transform/2.0.0: + dependencies: + default-require-extensions: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + /archy/1.0.0: + dev: true + resolution: + integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + /argparse/1.0.10: + dependencies: + sprintf-js: 1.0.3 + dev: true + resolution: + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + /aria-query/4.2.2: + dependencies: + '@babel/runtime': 7.11.0 + '@babel/runtime-corejs3': 7.11.0 + dev: true + engines: + node: '>=6.0' + resolution: + integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + /array-filter/1.0.0: + dev: true + resolution: + integrity: sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= + /array-find-index/1.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + /array-includes/3.1.1: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + is-string: 1.0.5 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + /array-union/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + /array.prototype.find/2.1.1: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + dev: true + resolution: + integrity: sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA== + /array.prototype.flat/1.2.3: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + /array.prototype.flatmap/1.2.3: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== + /arrgv/1.0.2: + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== + /arrify/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + /arrify/2.0.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + /ast-types-flow/0.0.7: + dev: true + resolution: + integrity: sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + /astral-regex/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + /astral-regex/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + /atob/2.1.2: + dev: true + engines: + node: '>= 4.5.0' + hasBin: true + resolution: + integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + /ava/3.11.0: + dependencies: + '@concordance/react': 2.0.0 + acorn: 7.3.1 + acorn-walk: 7.2.0 + ansi-styles: 4.2.1 + arrgv: 1.0.2 + arrify: 2.0.1 + callsites: 3.1.0 + chalk: 4.1.0 + chokidar: 3.4.1 + chunkd: 2.0.1 + ci-info: 2.0.0 + ci-parallel-vars: 1.0.1 + clean-yaml-object: 0.1.0 + cli-cursor: 3.1.0 + cli-truncate: 2.1.0 + code-excerpt: 3.0.0 + common-path-prefix: 3.0.0 + concordance: 5.0.0 + convert-source-map: 1.7.0 + currently-unhandled: 0.4.1 + debug: 4.1.1 + del: 5.1.0 + emittery: 0.7.1 + equal-length: 1.0.1 + figures: 3.2.0 + globby: 11.0.1 + ignore-by-default: 2.0.0 + import-local: 3.0.2 + indent-string: 4.0.0 + is-error: 2.2.2 + is-plain-object: 4.1.1 + is-promise: 4.0.0 + lodash: 4.17.19 + matcher: 3.0.0 + md5-hex: 3.0.1 + mem: 6.1.0 + ms: 2.1.2 + ora: 4.0.5 + p-map: 4.0.0 + picomatch: 2.2.2 + pkg-conf: 3.1.0 + plur: 4.0.0 + pretty-ms: 7.0.0 + read-pkg: 5.2.0 + resolve-cwd: 3.0.0 + slash: 3.0.0 + source-map-support: 0.5.19 + stack-utils: 2.0.2 + strip-ansi: 6.0.0 + supertap: 1.0.0 + temp-dir: 2.0.0 + trim-off-newlines: 1.0.1 + update-notifier: 4.1.0 + write-file-atomic: 3.0.3 + yargs: 15.4.1 + dev: true + engines: + node: '>=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0' + hasBin: true + resolution: + integrity: sha512-y5U8BGeSRjs/OypsC4CJxr+L1KtLKU5kUyHr5hcghXn7HNr2f4LE/4gvl0Q5lNkLX1obdRW1oODphNdU/glwmA== + /axe-core/3.5.5: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== + /axios/0.19.2: + dependencies: + follow-redirects: 1.5.10 + dev: false + resolution: + integrity: sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + /axobject-query/2.2.0: + dev: true + resolution: + integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + /balanced-match/1.0.0: + dev: true + resolution: + integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + /big-integer/1.6.48: + dev: false + engines: + node: '>=0.6' + resolution: + integrity: sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== + /binary-extensions/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + /blueimp-md5/2.17.0: + dev: true + resolution: + integrity: sha512-x5PKJHY5rHQYaADj6NwPUR2QRCUVSggPzrUKkeENpj871o9l9IefJbO2jkT5UvYykeOK9dx0VmkIo6dZ+vThYw== + /boolbase/1.0.0: + dev: true + resolution: + integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24= + /boxen/4.2.0: + dependencies: + ansi-align: 3.0.0 + camelcase: 5.3.1 + chalk: 3.0.0 + cli-boxes: 2.2.0 + string-width: 4.2.0 + term-size: 2.2.0 + type-fest: 0.8.1 + widest-line: 3.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.0 + concat-map: 0.0.1 + dev: true + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /braces/3.0.2: + dependencies: + fill-range: 7.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + /buffer-from/1.1.1: + resolution: + integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + /builtin-modules/3.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + /cacheable-request/6.1.0: + dependencies: + clone-response: 1.0.2 + get-stream: 5.1.0 + http-cache-semantics: 4.1.0 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.0 + responselike: 1.0.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + /caching-transform/4.0.0: + dependencies: + hasha: 5.2.0 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + /callsites/3.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + /camelcase/5.3.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + /chalk/0.4.0: + dependencies: + ansi-styles: 1.0.0 + has-color: 0.1.7 + strip-ansi: 0.1.1 + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= + /chalk/2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + /chalk/3.0.0: + dependencies: + ansi-styles: 4.2.1 + supports-color: 7.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + /chalk/4.1.0: + dependencies: + ansi-styles: 4.2.1 + supports-color: 7.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + /cheerio/1.0.0-rc.3: + dependencies: + css-select: 1.2.0 + dom-serializer: 0.1.1 + entities: 1.1.2 + htmlparser2: 3.10.1 + lodash: 4.17.19 + parse5: 3.0.3 + dev: true + engines: + node: '>= 0.6' + resolution: + integrity: sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== + /chokidar/3.4.1: + dependencies: + anymatch: 3.1.1 + braces: 3.0.2 + glob-parent: 5.1.1 + is-binary-path: 2.1.0 + is-glob: 4.0.1 + normalize-path: 3.0.0 + readdirp: 3.4.0 + dev: true + engines: + node: '>= 8.10.0' + optionalDependencies: + fsevents: 2.1.3 + resolution: + integrity: sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== + /chunkd/2.0.1: + dev: true + resolution: + integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== + /ci-info/2.0.0: + dev: true + resolution: + integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + /ci-parallel-vars/1.0.1: + dev: true + resolution: + integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== + /clean-stack/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + /clean-yaml-object/0.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= + /cli-boxes/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== + /cli-cursor/3.1.0: + dependencies: + restore-cursor: 3.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + /cli-spinners/2.4.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== + /cli-truncate/2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + /cliui/6.0.0: + dependencies: + string-width: 4.2.0 + strip-ansi: 6.0.0 + wrap-ansi: 6.2.0 + dev: true + resolution: + integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + /clone-response/1.0.2: + dependencies: + mimic-response: 1.0.1 + dev: true + resolution: + integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + /clone/1.0.4: + dev: true + engines: + node: '>=0.8' + resolution: + integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + /code-excerpt/3.0.0: + dependencies: + convert-to-spaces: 1.0.2 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw== + /color-convert/1.9.3: + dependencies: + color-name: 1.1.3 + dev: true + resolution: + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + /color-convert/2.0.1: + dependencies: + color-name: 1.1.4 + dev: true + engines: + node: '>=7.0.0' + resolution: + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + /color-name/1.1.3: + dev: true + resolution: + integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + /color-name/1.1.4: + dev: true + resolution: + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + /commander/2.20.3: + dev: true + resolution: + integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + /common-path-prefix/3.0.0: + dev: true + resolution: + integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + /commondir/1.0.1: + dev: true + resolution: + integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + /concat-map/0.0.1: + dev: true + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /concordance/5.0.0: + dependencies: + date-time: 3.1.0 + esutils: 2.0.3 + fast-diff: 1.2.0 + js-string-escape: 1.0.1 + lodash: 4.17.19 + md5-hex: 3.0.1 + semver: 7.3.2 + well-known-symbols: 2.0.0 + dev: true + engines: + node: '>=10.18.0 <11 || >=12.14.0 <13 || >=13.5.0' + resolution: + integrity: sha512-stOCz9ffg0+rytwTaL2njUOIyMfANwfwmqc9Dr4vTUS/x/KkVFlWx9Zlzu6tHYtjKxxaCF/cEAZgPDac+n35sg== + /configstore/5.0.1: + dependencies: + dot-prop: 5.2.0 + graceful-fs: 4.2.4 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + /confusing-browser-globals/1.0.9: + dev: true + resolution: + integrity: sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== + /contains-path/0.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + /convert-source-map/1.7.0: + dependencies: + safe-buffer: 5.1.2 + dev: true + resolution: + integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + /convert-to-spaces/1.0.2: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU= + /core-js-pure/3.6.5: + dev: true + requiresBuild: true + resolution: + integrity: sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== + /cross-spawn/7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + /crypto-random-string/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + /css-select/1.2.0: + dependencies: + boolbase: 1.0.0 + css-what: 2.1.3 + domutils: 1.5.1 + nth-check: 1.0.2 + dev: true + resolution: + integrity: sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + /css-what/2.1.3: + dev: true + resolution: + integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + /csstype/3.0.2: + dev: true + resolution: + integrity: sha512-ofovWglpqoqbfLNOTBNZLSbMuGrblAf1efvvArGKOZMBrIoJeu5UsAipQolkijtyQx5MtAzT/J9IHj/CEY1mJw== + /currently-unhandled/0.4.1: + dependencies: + array-find-index: 1.0.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o= + /damerau-levenshtein/1.0.6: + dev: true + resolution: + integrity: sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + /date-time/3.1.0: + dependencies: + time-zone: 1.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== + /debug/2.6.9: + dependencies: + ms: 2.0.0 + dev: true + resolution: + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /debug/3.1.0: + dependencies: + ms: 2.0.0 + dev: false + resolution: + integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + /debug/4.1.1: + dependencies: + ms: 2.1.2 + dev: true + resolution: + integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + /decamelize/1.2.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + /decode-uri-component/0.2.0: + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + /decompress-response/3.3.0: + dependencies: + mimic-response: 1.0.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + /deep-extend/0.6.0: + dev: true + engines: + node: '>=4.0.0' + resolution: + integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + /deep-freeze/0.0.1: + dev: true + resolution: + integrity: sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ= + /deep-is/0.1.3: + dev: true + resolution: + integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + /deepmerge/4.2.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + /default-require-extensions/3.0.0: + dependencies: + strip-bom: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + /defaults/1.0.3: + dependencies: + clone: 1.0.4 + dev: true + resolution: + integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + /defer-to-connect/1.1.3: + dev: true + resolution: + integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + /define-properties/1.1.3: + dependencies: + object-keys: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + /del/5.1.0: + dependencies: + globby: 10.0.2 + graceful-fs: 4.2.4 + is-glob: 4.0.1 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.2 + p-map: 3.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + /dir-glob/3.0.1: + dependencies: + path-type: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + /discontinuous-range/1.0.0: + dev: true + resolution: + integrity: sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= + /doctrine/1.5.0: + dependencies: + esutils: 2.0.3 + isarray: 1.0.0 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + /doctrine/2.1.0: + dependencies: + esutils: 2.0.3 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + /doctrine/3.0.0: + dependencies: + esutils: 2.0.3 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + /dom-serializer/0.1.1: + dependencies: + domelementtype: 1.3.1 + entities: 1.1.2 + dev: true + resolution: + integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + /domelementtype/1.3.1: + dev: true + resolution: + integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + /domhandler/2.4.2: + dependencies: + domelementtype: 1.3.1 + dev: true + resolution: + integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + /domutils/1.5.1: + dependencies: + dom-serializer: 0.1.1 + domelementtype: 1.3.1 + dev: true + resolution: + integrity: sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + /domutils/1.7.0: + dependencies: + dom-serializer: 0.1.1 + domelementtype: 1.3.1 + dev: true + resolution: + integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + /dot-prop/5.2.0: + dependencies: + is-obj: 2.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + /duplexer3/0.1.4: + dev: true + resolution: + integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + /emittery/0.7.1: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== + /emoji-regex/7.0.3: + dev: true + resolution: + integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + /emoji-regex/8.0.0: + dev: true + resolution: + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + /emoji-regex/9.0.0: + dev: true + resolution: + integrity: sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== + /encoding/0.1.13: + dependencies: + iconv-lite: 0.6.2 + dev: true + resolution: + integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + /end-of-stream/1.4.4: + dependencies: + once: 1.4.0 + dev: true + resolution: + integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + /enquirer/2.3.6: + dependencies: + ansi-colors: 4.1.1 + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + /entities/1.1.2: + dev: true + resolution: + integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + /enzyme-adapter-react-16/1.15.2_df2dc313d8031f8c2dbd009d86ca7fc7: + dependencies: + enzyme: 3.11.0 + enzyme-adapter-utils: 1.13.0_react@16.13.1 + enzyme-shallow-equal: 1.0.1 + has: 1.0.3 + object.assign: 4.1.0 + object.values: 1.1.1 + prop-types: 15.7.2 + react: 16.13.1 + react-dom: 16.13.1_react@16.13.1 + react-is: 16.13.1 + react-test-renderer: 16.13.1_react@16.13.1 + semver: 5.7.1 + dev: true + peerDependencies: + enzyme: ^3.0.0 + react: ^16.0.0-0 + react-dom: ^16.0.0-0 + resolution: + integrity: sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q== + /enzyme-adapter-utils/1.13.0_react@16.13.1: + dependencies: + airbnb-prop-types: 2.16.0_react@16.13.1 + function.prototype.name: 1.1.2 + object.assign: 4.1.0 + object.fromentries: 2.0.2 + prop-types: 15.7.2 + react: 16.13.1 + semver: 5.7.1 + dev: true + peerDependencies: + react: 0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0 + resolution: + integrity: sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ== + /enzyme-shallow-equal/1.0.1: + dependencies: + has: 1.0.3 + object-is: 1.1.2 + dev: true + resolution: + integrity: sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ== + /enzyme/3.11.0: + dependencies: + array.prototype.flat: 1.2.3 + cheerio: 1.0.0-rc.3 + enzyme-shallow-equal: 1.0.1 + function.prototype.name: 1.1.2 + has: 1.0.3 + html-element-map: 1.2.0 + is-boolean-object: 1.0.1 + is-callable: 1.2.0 + is-number-object: 1.0.4 + is-regex: 1.1.0 + is-string: 1.0.5 + is-subset: 0.1.1 + lodash.escape: 4.0.1 + lodash.isequal: 4.5.0 + object-inspect: 1.8.0 + object-is: 1.1.2 + object.assign: 4.1.0 + object.entries: 1.1.2 + object.values: 1.1.1 + raf: 3.4.1 + rst-selector-parser: 2.2.3 + string.prototype.trim: 1.2.1 + dev: true + resolution: + integrity: sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== + /equal-length/1.0.1: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IcoRLUirJLTh5//A5TOdMf38J0w= + /error-ex/1.3.2: + dependencies: + is-arrayish: 0.2.1 + dev: true + resolution: + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + /es-abstract/1.17.6: + dependencies: + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.1 + is-callable: 1.2.0 + is-regex: 1.1.0 + object-inspect: 1.8.0 + object-keys: 1.1.1 + object.assign: 4.1.0 + string.prototype.trimend: 1.0.1 + string.prototype.trimstart: 1.0.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== + /es-to-primitive/1.2.1: + dependencies: + is-callable: 1.2.0 + is-date-object: 1.0.2 + is-symbol: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + /es6-error/4.1.1: + dev: true + resolution: + integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + /escape-goat/2.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + /escape-string-regexp/1.0.5: + dev: true + engines: + node: '>=0.8.0' + resolution: + integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + /escape-string-regexp/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + /escape-string-regexp/4.0.0: + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + /eslint-config-airbnb-base/14.2.0_2d0a3b79766400155c8e1793948754aa: + dependencies: + confusing-browser-globals: 1.0.9 + eslint: 7.6.0 + eslint-plugin-import: 2.22.0_eslint@7.6.0 + object.assign: 4.1.0 + object.entries: 1.1.2 + dev: true + engines: + node: '>= 6' + peerDependencies: + eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 + eslint-plugin-import: ^2.21.2 + resolution: + integrity: sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== + /eslint-config-airbnb-typescript/8.0.2_de36c6f68d63a4142de06a31bab9d790: + dependencies: + '@typescript-eslint/eslint-plugin': 3.7.1_98f5354ad0bbc327ab4925c12674a6b1 + '@typescript-eslint/parser': 3.7.1_eslint@7.6.0+typescript@3.9.7 + eslint-config-airbnb: 18.2.0_432d618d92377026e2722175bfa4d845 + eslint-config-airbnb-base: 14.2.0_2d0a3b79766400155c8e1793948754aa + dev: true + peerDependencies: + '@typescript-eslint/eslint-plugin': ^3.1.0 + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-jsx-a11y: '*' + eslint-plugin-react: '*' + eslint-plugin-react-hooks: '*' + typescript: '*' + resolution: + integrity: sha512-TCOftyCoIogJzzLGSg0Qlxd27qvf+1a3MHyN/PqynTqINS4iFy+SlXy/CrAN+6xkleGMSrvmPbm3pyFEku2+IQ== + /eslint-config-airbnb/18.2.0_432d618d92377026e2722175bfa4d845: + dependencies: + eslint: 7.6.0 + eslint-config-airbnb-base: 14.2.0_2d0a3b79766400155c8e1793948754aa + eslint-plugin-import: 2.22.0_eslint@7.6.0 + eslint-plugin-jsx-a11y: 6.3.1_eslint@7.6.0 + eslint-plugin-react: 7.20.5_eslint@7.6.0 + eslint-plugin-react-hooks: 4.0.8_eslint@7.6.0 + object.assign: 4.1.0 + object.entries: 1.1.2 + dev: true + engines: + node: '>= 6' + peerDependencies: + eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 + eslint-plugin-import: ^2.21.2 + eslint-plugin-jsx-a11y: ^6.3.0 + eslint-plugin-react: ^7.20.0 + eslint-plugin-react-hooks: ^4 || ^3 || ^2.3.0 || ^1.7.0 + resolution: + integrity: sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg== + /eslint-import-resolver-node/0.3.4: + dependencies: + debug: 2.6.9 + resolve: 1.17.0 + dev: true + resolution: + integrity: sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + /eslint-module-utils/2.6.0: + dependencies: + debug: 2.6.9 + pkg-dir: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + /eslint-plugin-import/2.22.0_eslint@7.6.0: + dependencies: + array-includes: 3.1.1 + array.prototype.flat: 1.2.3 + contains-path: 0.1.0 + debug: 2.6.9 + doctrine: 1.5.0 + eslint: 7.6.0 + eslint-import-resolver-node: 0.3.4 + eslint-module-utils: 2.6.0 + has: 1.0.3 + minimatch: 3.0.4 + object.values: 1.1.1 + read-pkg-up: 2.0.0 + resolve: 1.17.0 + tsconfig-paths: 3.9.0 + dev: true + engines: + node: '>=4' + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 + resolution: + integrity: sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== + /eslint-plugin-jsx-a11y/6.3.1_eslint@7.6.0: + dependencies: + '@babel/runtime': 7.11.0 + aria-query: 4.2.2 + array-includes: 3.1.1 + ast-types-flow: 0.0.7 + axe-core: 3.5.5 + axobject-query: 2.2.0 + damerau-levenshtein: 1.0.6 + emoji-regex: 9.0.0 + eslint: 7.6.0 + has: 1.0.3 + jsx-ast-utils: 2.4.1 + language-tags: 1.0.5 + dev: true + engines: + node: '>=4.0' + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + resolution: + integrity: sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== + /eslint-plugin-react-hooks/4.0.8_eslint@7.6.0: + dependencies: + eslint: 7.6.0 + dev: true + engines: + node: '>=10' + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + resolution: + integrity: sha512-6SSb5AiMCPd8FDJrzah+Z4F44P2CdOaK026cXFV+o/xSRzfOiV1FNFeLl2z6xm3yqWOQEZ5OfVgiec90qV2xrQ== + /eslint-plugin-react/7.20.5_eslint@7.6.0: + dependencies: + array-includes: 3.1.1 + array.prototype.flatmap: 1.2.3 + doctrine: 2.1.0 + eslint: 7.6.0 + has: 1.0.3 + jsx-ast-utils: 2.4.1 + object.entries: 1.1.2 + object.fromentries: 2.0.2 + object.values: 1.1.1 + prop-types: 15.7.2 + resolve: 1.17.0 + string.prototype.matchall: 4.0.2 + dev: true + engines: + node: '>=4' + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 + resolution: + integrity: sha512-ajbJfHuFnpVNJjhyrfq+pH1C0gLc2y94OiCbAXT5O0J0YCKaFEHDV8+3+mDOr+w8WguRX+vSs1bM2BDG0VLvCw== + /eslint-scope/5.1.0: + dependencies: + esrecurse: 4.2.1 + estraverse: 4.3.0 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + /eslint-utils/2.1.0: + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + /eslint-visitor-keys/1.3.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + /eslint/7.6.0: + dependencies: + '@babel/code-frame': 7.10.4 + ajv: 6.12.3 + chalk: 4.1.0 + cross-spawn: 7.0.3 + debug: 4.1.1 + doctrine: 3.0.0 + enquirer: 2.3.6 + eslint-scope: 5.1.0 + eslint-utils: 2.1.0 + eslint-visitor-keys: 1.3.0 + espree: 7.2.0 + esquery: 1.3.1 + esutils: 2.0.3 + file-entry-cache: 5.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.1 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.2.1 + imurmurhash: 0.1.4 + is-glob: 4.0.1 + js-yaml: 3.14.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash: 4.17.19 + minimatch: 3.0.4 + natural-compare: 1.4.0 + optionator: 0.9.1 + progress: 2.0.3 + regexpp: 3.1.0 + semver: 7.3.2 + strip-ansi: 6.0.0 + strip-json-comments: 3.1.1 + table: 5.4.6 + text-table: 0.2.0 + v8-compile-cache: 2.1.1 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + hasBin: true + resolution: + integrity: sha512-QlAManNtqr7sozWm5TF4wIH9gmUm2hE3vNRUvyoYAa4y1l5/jxD/PQStEjBMQtCqZmSep8UxrcecI60hOpe61w== + /esm/3.2.25: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== + /espree/7.2.0: + dependencies: + acorn: 7.3.1 + acorn-jsx: 5.2.0_acorn@7.3.1 + eslint-visitor-keys: 1.3.0 + dev: true + engines: + node: ^10.12.0 || >=12.0.0 + resolution: + integrity: sha512-H+cQ3+3JYRMEIOl87e7QdHX70ocly5iW4+dttuR8iYSPr/hXKFb+7dBsZ7+u1adC4VrnPlTkv0+OwuPnDop19g== + /esprima/4.0.1: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + /esquery/1.3.1: + dependencies: + estraverse: 5.1.0 + dev: true + engines: + node: '>=0.10' + resolution: + integrity: sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + /esrecurse/4.2.1: + dependencies: + estraverse: 4.3.0 + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + /estraverse/4.3.0: + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + /estraverse/5.1.0: + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + /estree-walker/1.0.1: + dev: true + resolution: + integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + /esutils/2.0.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + /fast-deep-equal/3.1.3: + dev: true + resolution: + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + /fast-diff/1.2.0: + dev: true + resolution: + integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + /fast-glob/3.2.4: + dependencies: + '@nodelib/fs.stat': 2.0.3 + '@nodelib/fs.walk': 1.2.4 + glob-parent: 5.1.1 + merge2: 1.4.1 + micromatch: 4.0.2 + picomatch: 2.2.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + /fast-json-stable-stringify/2.1.0: + dev: true + resolution: + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + /fast-levenshtein/2.0.6: + dev: true + resolution: + integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + /fastq/1.8.0: + dependencies: + reusify: 1.0.4 + dev: true + resolution: + integrity: sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + /figures/3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + /file-entry-cache/5.0.1: + dependencies: + flat-cache: 2.0.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + /fill-range/7.0.1: + dependencies: + to-regex-range: 5.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + /find-cache-dir/3.3.1: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + /find-up/2.1.0: + dependencies: + locate-path: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + /find-up/3.0.0: + dependencies: + locate-path: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + /find-up/4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + /flat-cache/2.0.1: + dependencies: + flatted: 2.0.2 + rimraf: 2.6.3 + write: 1.0.3 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + /flatted/2.0.2: + dev: true + resolution: + integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + /follow-redirects/1.5.10: + dependencies: + debug: 3.1.0 + dev: false + engines: + node: '>=4.0' + resolution: + integrity: sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + /foreground-child/2.0.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.3 + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + /fromentries/1.2.1: + dev: true + resolution: + integrity: sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw== + /fs-extra/8.1.0: + dependencies: + graceful-fs: 4.2.4 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + engines: + node: '>=6 <7 || >=8' + resolution: + integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + /fs.realpath/1.0.0: + dev: true + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /fsevents/2.1.3: + dev: true + engines: + node: ^8.16.0 || ^10.6.0 || >=11.0.0 + optional: true + os: + - darwin + resolution: + integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + /function-bind/1.1.1: + dev: true + resolution: + integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + /function.prototype.name/1.1.2: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + functions-have-names: 1.2.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== + /functional-red-black-tree/1.0.1: + dev: true + resolution: + integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + /functions-have-names/1.2.1: + dev: true + resolution: + integrity: sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== + /gensync/1.0.0-beta.1: + dev: true + engines: + node: '>=6.9.0' + resolution: + integrity: sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + /get-caller-file/2.0.5: + dev: true + engines: + node: 6.* || 8.* || >= 10.* + resolution: + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + /get-package-type/0.1.0: + dev: true + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + /get-stream/4.1.0: + dependencies: + pump: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + /get-stream/5.1.0: + dependencies: + pump: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + /gettext-parser/1.1.0: + dependencies: + encoding: 0.1.13 + dev: true + resolution: + integrity: sha1-LFpmONiTk0ubVQN9CtgstwBLJnk= + /glob-parent/5.1.1: + dependencies: + is-glob: 4.0.1 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + /glob/7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + resolution: + integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + /global-dirs/2.0.1: + dependencies: + ini: 1.3.5 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + /globals/11.12.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + /globals/12.4.0: + dependencies: + type-fest: 0.8.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + /globby/10.0.2: + dependencies: + '@types/glob': 7.1.3 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.4 + glob: 7.1.6 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + /globby/11.0.1: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.4 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + /got/9.6.0: + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.4 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + /graceful-fs/4.2.4: + dev: true + resolution: + integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + /handlebars/4.7.6: + dependencies: + minimist: 1.2.5 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + dev: true + engines: + node: '>=0.4.7' + hasBin: true + optionalDependencies: + uglify-js: 3.10.0 + resolution: + integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== + /has-color/0.1.7: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= + /has-flag/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + /has-flag/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + /has-symbols/1.0.1: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + /has-yarn/2.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + /has/1.0.3: + dependencies: + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4.0' + resolution: + integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + /hasha/5.2.0: + dependencies: + is-stream: 2.0.0 + type-fest: 0.8.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw== + /highlight.js/10.1.2: + dev: true + resolution: + integrity: sha512-Q39v/Mn5mfBlMff9r+zzA+gWxRsCRKwEMvYTiisLr/XUiFI/4puWt0Ojdko3R3JCNWGdOWaA5g/Yxqa23kC5AA== + /hosted-git-info/2.8.8: + dev: true + resolution: + integrity: sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + /html-element-map/1.2.0: + dependencies: + array-filter: 1.0.0 + dev: true + resolution: + integrity: sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw== + /html-escaper/2.0.2: + dev: true + resolution: + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + /htmlparser2/3.10.1: + dependencies: + domelementtype: 1.3.1 + domhandler: 2.4.2 + domutils: 1.7.0 + entities: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + resolution: + integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + /http-cache-semantics/4.1.0: + dev: true + resolution: + integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + /iconv-lite/0.6.2: + dependencies: + safer-buffer: 2.1.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + /ignore-by-default/2.0.0: + dev: true + engines: + node: '>=10 <11 || >=12 <13 || >=14' + resolution: + integrity: sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA== + /ignore/4.0.6: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + /ignore/5.1.8: + dev: true + engines: + node: '>= 4' + resolution: + integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + /import-fresh/3.2.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + /import-lazy/2.1.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + /import-local/3.0.2: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + engines: + node: '>=8' + hasBin: true + resolution: + integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + /imurmurhash/0.1.4: + dev: true + engines: + node: '>=0.8.19' + resolution: + integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= + /indent-string/3.2.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + /indent-string/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + dev: true + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /ini/1.3.5: + dev: true + resolution: + integrity: sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + /internal-slot/1.0.2: + dependencies: + es-abstract: 1.17.6 + has: 1.0.3 + side-channel: 1.0.2 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + /interpret/1.4.0: + dev: true + engines: + node: '>= 0.10' + resolution: + integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + /irregular-plurals/3.2.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-YqTdPLfwP7YFN0SsD3QUVCkm9ZG2VzOXv3DOrw5G5mkMbVwptTwVcFv7/C0vOpBmgTxAeTG19XpUs1E522LW9Q== + /is-arrayish/0.2.1: + dev: true + resolution: + integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + /is-binary-path/2.1.0: + dependencies: + binary-extensions: 2.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + /is-boolean-object/1.0.1: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== + /is-callable/1.2.0: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== + /is-ci/2.0.0: + dependencies: + ci-info: 2.0.0 + dev: true + hasBin: true + resolution: + integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + /is-date-object/1.0.2: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + /is-error/2.2.2: + dev: true + resolution: + integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== + /is-extglob/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + /is-fullwidth-code-point/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + /is-fullwidth-code-point/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + /is-glob/4.0.1: + dependencies: + is-extglob: 2.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + /is-installed-globally/0.3.2: + dependencies: + global-dirs: 2.0.1 + is-path-inside: 3.0.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + /is-interactive/1.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + /is-module/1.0.0: + dev: true + resolution: + integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + /is-npm/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + /is-number-object/1.0.4: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + /is-number/7.0.0: + dev: true + engines: + node: '>=0.12.0' + resolution: + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + /is-obj/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + /is-path-cwd/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + /is-path-inside/3.0.2: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + /is-plain-object/4.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-5Aw8LLVsDlZsETVMhoMXzqsXwQqr/0vlnBYzIXJbYo2F4yYlhLHs+Ez7Bod7IIQKWkJbJfxrWD7pA1Dw1TKrwA== + /is-promise/4.0.0: + dev: true + resolution: + integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + /is-reference/1.2.1: + dependencies: + '@types/estree': 0.0.45 + dev: true + resolution: + integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + /is-regex/1.1.0: + dependencies: + has-symbols: 1.0.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== + /is-stream/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + /is-string/1.0.5: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + /is-subset/0.1.1: + dev: true + resolution: + integrity: sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= + /is-symbol/1.0.3: + dependencies: + has-symbols: 1.0.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + /is-typedarray/1.0.0: + dev: true + resolution: + integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + /is-windows/1.0.2: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + /is-yarn-global/0.3.0: + dev: true + resolution: + integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + /isarray/1.0.0: + dev: true + resolution: + integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + /isexe/2.0.0: + dev: true + resolution: + integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + /istanbul-lib-coverage/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + /istanbul-lib-hook/3.0.0: + dependencies: + append-transform: 2.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + /istanbul-lib-instrument/4.0.3: + dependencies: + '@babel/core': 7.11.0 + '@istanbuljs/schema': 0.1.2 + istanbul-lib-coverage: 3.0.0 + semver: 6.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + /istanbul-lib-processinfo/2.0.2: + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.3 + istanbul-lib-coverage: 3.0.0 + make-dir: 3.1.0 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 3.4.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + /istanbul-lib-report/3.0.0: + dependencies: + istanbul-lib-coverage: 3.0.0 + make-dir: 3.1.0 + supports-color: 7.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + /istanbul-lib-source-maps/4.0.0: + dependencies: + debug: 4.1.1 + istanbul-lib-coverage: 3.0.0 + source-map: 0.6.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + /istanbul-reports/3.0.2: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + /jed/1.1.1: + dev: true + resolution: + integrity: sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ= + /jest-worker/26.2.1: + dependencies: + '@types/node': 14.0.27 + merge-stream: 2.0.0 + supports-color: 7.1.0 + dev: true + engines: + node: '>= 10.14.2' + resolution: + integrity: sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A== + /js-string-escape/1.0.1: + dev: true + engines: + node: '>= 0.8' + resolution: + integrity: sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= + /js-tokens/4.0.0: + dev: true + resolution: + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + /js-yaml/3.14.0: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + /jsesc/2.5.2: + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + /json-buffer/3.0.0: + dev: true + resolution: + integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + /json-parse-better-errors/1.0.2: + dev: true + resolution: + integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + /json-schema-traverse/0.4.1: + dev: true + resolution: + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + /json-stable-stringify-without-jsonify/1.0.1: + dev: true + resolution: + integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + /json5/1.0.1: + dependencies: + minimist: 1.2.5 + dev: true + hasBin: true + resolution: + integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + /json5/2.1.3: + dependencies: + minimist: 1.2.5 + dev: true + engines: + node: '>=6' + hasBin: true + resolution: + integrity: sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + /jsonfile/4.0.0: + dev: true + optionalDependencies: + graceful-fs: 4.2.4 + resolution: + integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + /jsx-ast-utils/2.4.1: + dependencies: + array-includes: 3.1.1 + object.assign: 4.1.0 + dev: true + engines: + node: '>=4.0' + resolution: + integrity: sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== + /keyv/3.1.0: + dependencies: + json-buffer: 3.0.0 + dev: true + resolution: + integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + /language-subtag-registry/0.3.20: + dev: true + resolution: + integrity: sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg== + /language-tags/1.0.5: + dependencies: + language-subtag-registry: 0.3.20 + dev: true + resolution: + integrity: sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + /latest-version/5.1.0: + dependencies: + package-json: 6.5.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + /levn/0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + /lines-and-columns/1.1.6: + dev: true + resolution: + integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + /load-json-file/2.0.0: + dependencies: + graceful-fs: 4.2.4 + parse-json: 2.2.0 + pify: 2.3.0 + strip-bom: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + /load-json-file/5.3.0: + dependencies: + graceful-fs: 4.2.4 + parse-json: 4.0.0 + pify: 4.0.1 + strip-bom: 3.0.0 + type-fest: 0.3.1 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + /locate-path/2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + /locate-path/3.0.0: + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + /locate-path/5.0.0: + dependencies: + p-locate: 4.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + /lodash.escape/4.0.1: + dev: true + resolution: + integrity: sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= + /lodash.flattendeep/4.4.0: + dev: true + resolution: + integrity: sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + /lodash.isequal/4.5.0: + dev: true + resolution: + integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA= + /lodash/4.17.19: + dev: true + resolution: + integrity: sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + /log-symbols/3.0.0: + dependencies: + chalk: 2.4.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + /loose-envify/1.4.0: + dependencies: + js-tokens: 4.0.0 + dev: true + hasBin: true + resolution: + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + /lowercase-keys/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + /lowercase-keys/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + /lunr/2.3.8: + dev: true + resolution: + integrity: sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg== + /magic-string/0.25.7: + dependencies: + sourcemap-codec: 1.4.8 + dev: true + resolution: + integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + /make-dir/3.1.0: + dependencies: + semver: 6.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + /map-age-cleaner/0.1.3: + dependencies: + p-defer: 1.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + /marked/1.0.0: + dev: true + engines: + node: '>= 8.16.2' + hasBin: true + resolution: + integrity: sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng== + /matcher/3.0.0: + dependencies: + escape-string-regexp: 4.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + /md5-hex/3.0.1: + dependencies: + blueimp-md5: 2.17.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== + /mem/6.1.0: + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 3.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-RlbnLQgRHk5lwqTtpEkBTQ2ll/CG/iB+J4Hy2Wh97PjgZgXgWJWrFF+XXujh3UUVLvR4OOTgZzcWMMwnehlEUg== + /merge-stream/2.0.0: + dev: true + resolution: + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + /merge2/1.4.1: + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + /micromatch/4.0.2: + dependencies: + braces: 3.0.2 + picomatch: 2.2.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + /mimic-fn/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + /mimic-fn/3.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + /mimic-response/1.0.1: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + /minimatch/3.0.4: + dependencies: + brace-expansion: 1.1.11 + dev: true + resolution: + integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + /minimist/1.2.5: + dev: true + resolution: + integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + /mkdirp/0.5.5: + dependencies: + minimist: 1.2.5 + dev: true + hasBin: true + resolution: + integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + /moment/2.27.0: + resolution: + integrity: sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== + /moo/0.5.1: + dev: true + resolution: + integrity: sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== + /ms/2.0.0: + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /ms/2.1.2: + dev: true + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /mute-stream/0.0.8: + dev: true + resolution: + integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + /natural-compare/1.4.0: + dev: true + resolution: + integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + /nearley/2.19.5: + dependencies: + commander: 2.20.3 + moo: 0.5.1 + railroad-diagrams: 1.0.0 + randexp: 0.4.6 + semver: 5.7.1 + dev: true + hasBin: true + resolution: + integrity: sha512-qoh1ZXXl0Kpn40tFhmgvffUAlbpRMcjLUagNVnT1JmliUIsB4tFabmCNhD97+tkf9FZ/SLhhYzNow0V3GitzDg== + /neo-async/2.6.2: + dev: true + resolution: + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + /node-preload/0.2.1: + dependencies: + process-on-spawn: 1.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + /nomnom/1.8.1: + dependencies: + chalk: 0.4.0 + underscore: 1.6.0 + deprecated: Package no longer supported. Contact support@npmjs.com for more info. + dev: true + resolution: + integrity: sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= + /normalize-package-data/2.5.0: + dependencies: + hosted-git-info: 2.8.8 + resolve: 1.17.0 + semver: 5.7.1 + validate-npm-package-license: 3.0.4 + dev: true + resolution: + integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + /normalize-path/3.0.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + /normalize-url/4.5.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + /nth-check/1.0.2: + dependencies: + boolbase: 1.0.0 + dev: true + resolution: + integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + /nyc/15.1.0: + dependencies: + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.2 + caching-transform: 4.0.0 + convert-source-map: 1.7.0 + decamelize: 1.2.0 + find-cache-dir: 3.3.1 + find-up: 4.1.0 + foreground-child: 2.0.0 + get-package-type: 0.1.0 + glob: 7.1.6 + istanbul-lib-coverage: 3.0.0 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-processinfo: 2.0.2 + istanbul-lib-report: 3.0.0 + istanbul-lib-source-maps: 4.0.0 + istanbul-reports: 3.0.2 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.0.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 + signal-exit: 3.0.3 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 + dev: true + engines: + node: '>=8.9' + hasBin: true + resolution: + integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + /object-assign/4.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + /object-inspect/1.8.0: + dev: true + resolution: + integrity: sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + /object-is/1.1.2: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== + /object-keys/1.1.1: + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + /object.assign/4.1.0: + dependencies: + define-properties: 1.1.3 + function-bind: 1.1.1 + has-symbols: 1.0.1 + object-keys: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + /object.entries/1.1.2: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + /object.fromentries/2.0.2: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + function-bind: 1.1.1 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + /object.values/1.1.1: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + function-bind: 1.1.1 + has: 1.0.3 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: true + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /onetime/5.1.0: + dependencies: + mimic-fn: 2.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + /optionator/0.9.1: + dependencies: + deep-is: 0.1.3 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + /ora/4.0.5: + dependencies: + chalk: 3.0.0 + cli-cursor: 3.1.0 + cli-spinners: 2.4.0 + is-interactive: 1.0.0 + log-symbols: 3.0.0 + mute-stream: 0.0.8 + strip-ansi: 6.0.0 + wcwidth: 1.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-jCDgm9DqvRcNIAEv2wZPrh7E5PcQiDUnbnWbAfu4NGAE2ZNqPFbDixmWldy1YG2QfLeQhuiu6/h5VRrk6cG50w== + /p-cancelable/1.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + /p-defer/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + /p-limit/1.3.0: + dependencies: + p-try: 1.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + /p-limit/2.3.0: + dependencies: + p-try: 2.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + /p-locate/2.0.0: + dependencies: + p-limit: 1.3.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + /p-locate/3.0.0: + dependencies: + p-limit: 2.3.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + /p-locate/4.1.0: + dependencies: + p-limit: 2.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + /p-map/3.0.0: + dependencies: + aggregate-error: 3.0.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + /p-map/4.0.0: + dependencies: + aggregate-error: 3.0.1 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + /p-try/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + /p-try/2.2.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + /package-hash/4.0.0: + dependencies: + graceful-fs: 4.2.4 + hasha: 5.2.0 + lodash.flattendeep: 4.4.0 + release-zalgo: 1.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + /package-json/6.5.0: + dependencies: + got: 9.6.0 + registry-auth-token: 4.2.0 + registry-url: 5.1.0 + semver: 6.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + /parent-module/1.0.1: + dependencies: + callsites: 3.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + /parse-json/2.2.0: + dependencies: + error-ex: 1.3.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + /parse-json/4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + /parse-json/5.0.1: + dependencies: + '@babel/code-frame': 7.10.4 + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + lines-and-columns: 1.1.6 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ== + /parse-ms/2.1.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + /parse5/3.0.3: + dependencies: + '@types/node': 14.0.27 + dev: true + resolution: + integrity: sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== + /path-exists/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + /path-exists/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + /path-is-absolute/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /path-key/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + /path-parse/1.0.6: + dev: true + resolution: + integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + /path-type/2.0.0: + dependencies: + pify: 2.3.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + /path-type/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + /performance-now/2.1.0: + dev: true + resolution: + integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + /picomatch/2.2.2: + dev: true + engines: + node: '>=8.6' + resolution: + integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + /pify/2.3.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + /pify/4.0.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + /pkg-conf/3.1.0: + dependencies: + find-up: 3.0.0 + load-json-file: 5.3.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== + /pkg-dir/2.0.0: + dependencies: + find-up: 2.1.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + /pkg-dir/4.2.0: + dependencies: + find-up: 4.1.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + /plur/4.0.0: + dependencies: + irregular-plurals: 3.2.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg== + /po2json/0.4.5: + dependencies: + gettext-parser: 1.1.0 + nomnom: 1.8.1 + dev: true + engines: + node: '>= 0.8.0' + hasBin: true + resolution: + integrity: sha1-R7spUtoy1Yob4vJWpZjuvAt0URg= + /prelude-ls/1.2.1: + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + /prepend-http/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + /prettier/2.0.5: + engines: + node: '>=10.13.0' + hasBin: true + resolution: + integrity: sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== + /pretty-ms/7.0.0: + dependencies: + parse-ms: 2.1.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-J3aPWiC5e9ZeZFuSeBraGxSkGMOvulSWsxDByOcbD1Pr75YL3LSNIKIb52WXbCLE1sS5s4inBBbryjF4Y05Ceg== + /process-on-spawn/1.0.0: + dependencies: + fromentries: 1.2.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + /progress/2.0.3: + dev: true + engines: + node: '>=0.4.0' + resolution: + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + /prop-types-exact/1.2.0: + dependencies: + has: 1.0.3 + object.assign: 4.1.0 + reflect.ownkeys: 0.2.0 + dev: true + resolution: + integrity: sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== + /prop-types/15.7.2: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + resolution: + integrity: sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + /pump/3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + resolution: + integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + /punycode/2.1.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + /pupa/2.0.1: + dependencies: + escape-goat: 2.1.1 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== + /raf/3.4.1: + dependencies: + performance-now: 2.1.0 + dev: true + resolution: + integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + /railroad-diagrams/1.0.0: + dev: true + resolution: + integrity: sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= + /randexp/0.4.6: + dependencies: + discontinuous-range: 1.0.0 + ret: 0.1.15 + dev: true + engines: + node: '>=0.12' + resolution: + integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== + /randombytes/2.1.0: + dependencies: + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + /rc/1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.5 + minimist: 1.2.5 + strip-json-comments: 2.0.1 + dev: true + hasBin: true + resolution: + integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + /react-dom/16.13.1_react@16.13.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + prop-types: 15.7.2 + react: 16.13.1 + scheduler: 0.19.1 + dev: true + peerDependencies: + react: ^16.13.1 + resolution: + integrity: sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== + /react-is/16.13.1: + dev: true + resolution: + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + /react-test-renderer/16.13.1_react@16.13.1: + dependencies: + object-assign: 4.1.1 + prop-types: 15.7.2 + react: 16.13.1 + react-is: 16.13.1 + scheduler: 0.19.1 + dev: true + peerDependencies: + react: ^16.13.1 + resolution: + integrity: sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ== + /react/16.13.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + prop-types: 15.7.2 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== + /read-pkg-up/2.0.0: + dependencies: + find-up: 2.1.0 + read-pkg: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + /read-pkg/2.0.0: + dependencies: + load-json-file: 2.0.0 + normalize-package-data: 2.5.0 + path-type: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + /read-pkg/5.2.0: + dependencies: + '@types/normalize-package-data': 2.4.0 + normalize-package-data: 2.5.0 + parse-json: 5.0.1 + type-fest: 0.6.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + /readable-stream/3.6.0: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + engines: + node: '>= 6' + resolution: + integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + /readdirp/3.4.0: + dependencies: + picomatch: 2.2.2 + dev: true + engines: + node: '>=8.10.0' + resolution: + integrity: sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + /rechoir/0.6.2: + dependencies: + resolve: 1.17.0 + dev: true + engines: + node: '>= 0.10' + resolution: + integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + /reflect.ownkeys/0.2.0: + dev: true + resolution: + integrity: sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= + /regenerator-runtime/0.13.7: + dev: true + resolution: + integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + /regexp.prototype.flags/1.3.0: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + /regexpp/3.1.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + /registry-auth-token/4.2.0: + dependencies: + rc: 1.2.8 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== + /registry-url/5.1.0: + dependencies: + rc: 1.2.8 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + /release-zalgo/1.0.0: + dependencies: + es6-error: 4.1.1 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + /require-directory/2.1.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + /require-main-filename/2.0.0: + dev: true + resolution: + integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + /resolve-cwd/3.0.0: + dependencies: + resolve-from: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + /resolve-from/4.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + /resolve-from/5.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + /resolve/1.17.0: + dependencies: + path-parse: 1.0.6 + dev: true + resolution: + integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + /responselike/1.0.2: + dependencies: + lowercase-keys: 1.0.1 + dev: true + resolution: + integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + /restore-cursor/3.1.0: + dependencies: + onetime: 5.1.0 + signal-exit: 3.0.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + /ret/0.1.15: + dev: true + engines: + node: '>=0.12' + resolution: + integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + /reusify/1.0.4: + dev: true + engines: + iojs: '>=1.0.0' + node: '>=0.10.0' + resolution: + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + /rimraf/2.6.3: + dependencies: + glob: 7.1.6 + dev: true + hasBin: true + resolution: + integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + /rimraf/3.0.2: + dependencies: + glob: 7.1.6 + dev: true + hasBin: true + resolution: + integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + /rollup-plugin-sourcemaps/0.6.2_1bb4f16ce5b550396581a296af208cfa: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.23.0 + '@types/node': 14.0.27 + rollup: 2.23.0 + source-map-resolve: 0.6.0 + dev: true + engines: + node: '>=10.0.0' + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + resolution: + integrity: sha512-9AwTKg3yRykwzemfLt71ySe0LvrAci+bpsOL1LaTYFk5BX4HF6X7DQfpHa74ANfSja3hyjiQkXCR8goSOnW//Q== + /rollup-plugin-sourcemaps/0.6.2_rollup@2.23.0: + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@2.23.0 + rollup: 2.23.0 + source-map-resolve: 0.6.0 + dev: true + engines: + node: '>=10.0.0' + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + resolution: + integrity: sha512-9AwTKg3yRykwzemfLt71ySe0LvrAci+bpsOL1LaTYFk5BX4HF6X7DQfpHa74ANfSja3hyjiQkXCR8goSOnW//Q== + /rollup-plugin-terser/6.1.0_rollup@2.23.0: + dependencies: + '@babel/code-frame': 7.10.4 + jest-worker: 26.2.1 + rollup: 2.23.0 + serialize-javascript: 3.1.0 + terser: 4.8.0 + dev: true + peerDependencies: + rollup: ^2.0.0 + resolution: + integrity: sha512-4fB3M9nuoWxrwm39habpd4hvrbrde2W2GG4zEGPQg1YITNkM3Tqur5jSuXlWNzbv/2aMLJ+dZJaySc3GCD8oDw== + /rollup/2.23.0: + dev: true + engines: + node: '>=10.0.0' + hasBin: true + optionalDependencies: + fsevents: 2.1.3 + resolution: + integrity: sha512-vLNmZFUGVwrnqNAJ/BvuLk1MtWzu4IuoqsH9UWK5AIdO3rt8/CSiJNvPvCIvfzrbNsqKbNzPAG1V2O4eTe2XZg== + /rst-selector-parser/2.2.3: + dependencies: + lodash.flattendeep: 4.4.0 + nearley: 2.19.5 + dev: true + resolution: + integrity: sha1-gbIw6i/MYGbInjRy3nlChdmwPZE= + /run-parallel/1.1.9: + dev: true + resolution: + integrity: sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + /safe-buffer/5.1.2: + dev: true + resolution: + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + /safe-buffer/5.2.1: + dev: true + resolution: + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + /safer-buffer/2.1.2: + dev: true + resolution: + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + /scheduler/0.19.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: true + resolution: + integrity: sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== + /semver-diff/3.1.1: + dependencies: + semver: 6.3.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + /semver/5.7.1: + dev: true + hasBin: true + resolution: + integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + /semver/6.3.0: + dev: true + hasBin: true + resolution: + integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + /semver/7.3.2: + dev: true + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + /serialize-error/2.1.0: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= + /serialize-javascript/3.1.0: + dependencies: + randombytes: 2.1.0 + dev: true + resolution: + integrity: sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== + /set-blocking/2.0.0: + dev: true + resolution: + integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + /shebang-command/2.0.0: + dependencies: + shebang-regex: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + /shebang-regex/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + /shelljs/0.8.4: + dependencies: + glob: 7.1.6 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + /side-channel/1.0.2: + dependencies: + es-abstract: 1.17.6 + object-inspect: 1.8.0 + dev: true + resolution: + integrity: sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== + /signal-exit/3.0.3: + dev: true + resolution: + integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + /slash/3.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + /slice-ansi/2.1.0: + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + /slice-ansi/3.0.0: + dependencies: + ansi-styles: 4.2.1 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + /source-map-resolve/0.6.0: + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.0 + dev: true + resolution: + integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + /source-map-support/0.5.19: + dependencies: + buffer-from: 1.1.1 + source-map: 0.6.1 + resolution: + integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + /source-map/0.5.7: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + /source-map/0.6.1: + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + /sourcemap-codec/1.4.8: + dev: true + resolution: + integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + /spawn-wrap/2.0.0: + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.3 + which: 2.0.2 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + /spdx-correct/3.1.1: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.5 + dev: true + resolution: + integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + /spdx-exceptions/2.3.0: + dev: true + resolution: + integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + /spdx-expression-parse/3.0.1: + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.5 + dev: true + resolution: + integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + /spdx-license-ids/3.0.5: + dev: true + resolution: + integrity: sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + /sprintf-js/1.0.3: + dev: true + resolution: + integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + /stack-utils/2.0.2: + dependencies: + escape-string-regexp: 2.0.0 + dev: true + engines: + node: '>=10' + resolution: + integrity: sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + /string-width/3.1.0: + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + /string-width/4.2.0: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + /string.prototype.matchall/4.0.2: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + has-symbols: 1.0.1 + internal-slot: 1.0.2 + regexp.prototype.flags: 1.3.0 + side-channel: 1.0.2 + dev: true + resolution: + integrity: sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + /string.prototype.trim/1.2.1: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + function-bind: 1.1.1 + dev: true + engines: + node: '>= 0.4' + resolution: + integrity: sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== + /string.prototype.trimend/1.0.1: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + dev: true + resolution: + integrity: sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== + /string.prototype.trimstart/1.0.1: + dependencies: + define-properties: 1.1.3 + es-abstract: 1.17.6 + dev: true + resolution: + integrity: sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== + /string_decoder/1.3.0: + dependencies: + safe-buffer: 5.2.1 + dev: true + resolution: + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + /strip-ansi/0.1.1: + dev: true + engines: + node: '>=0.8.0' + hasBin: true + resolution: + integrity: sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= + /strip-ansi/4.0.0: + dependencies: + ansi-regex: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= + /strip-ansi/5.2.0: + dependencies: + ansi-regex: 4.1.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + /strip-ansi/6.0.0: + dependencies: + ansi-regex: 5.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + /strip-bom/3.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + /strip-bom/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + /strip-json-comments/2.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo= + /strip-json-comments/3.1.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + /structured-clone/0.2.2: + dev: true + resolution: + integrity: sha1-rJK2vjGVimQ9sw8TNavGobAt/cI= + /supertap/1.0.0: + dependencies: + arrify: 1.0.1 + indent-string: 3.2.0 + js-yaml: 3.14.0 + serialize-error: 2.1.0 + strip-ansi: 4.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-HZJ3geIMPgVwKk2VsmO5YHqnnJYl6bV5A9JW2uzqV43WmpgliNEYbuvukfor7URpaqpxuw3CfZ3ONdVbZjCgIA== + /supports-color/5.5.0: + dependencies: + has-flag: 3.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + /supports-color/7.1.0: + dependencies: + has-flag: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + /table/5.4.6: + dependencies: + ajv: 6.12.3 + lodash: 4.17.19 + slice-ansi: 2.1.0 + string-width: 3.1.0 + dev: true + engines: + node: '>=6.0.0' + resolution: + integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + /temp-dir/2.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + /term-size/2.2.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + /terser/4.8.0: + dependencies: + commander: 2.20.3 + source-map: 0.6.1 + source-map-support: 0.5.19 + dev: true + engines: + node: '>=6.0.0' + hasBin: true + resolution: + integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + /test-exclude/6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.2 + glob: 7.1.6 + minimatch: 3.0.4 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + /text-table/0.2.0: + dev: true + resolution: + integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + /time-zone/1.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= + /to-fast-properties/2.0.0: + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + /to-readable-stream/1.0.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + /to-regex-range/5.0.1: + dependencies: + is-number: 7.0.0 + dev: true + engines: + node: '>=8.0' + resolution: + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + /trim-off-newlines/1.0.1: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-n5up2e+odkw4dpi8v+sshI8RrbM= + /tsconfig-paths/3.9.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.1 + minimist: 1.2.5 + strip-bom: 3.0.0 + dev: true + resolution: + integrity: sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + /tslib/1.13.0: + dev: true + resolution: + integrity: sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + /tslib/2.0.0: + dev: false + resolution: + integrity: sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== + /tsutils/3.17.1_typescript@3.9.7: + dependencies: + tslib: 1.13.0 + typescript: 3.9.7 + dev: true + engines: + node: '>= 6' + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + resolution: + integrity: sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + /type-check/0.4.0: + dependencies: + prelude-ls: 1.2.1 + dev: true + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + /type-fest/0.3.1: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + /type-fest/0.6.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + /type-fest/0.8.1: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + /typedarray-to-buffer/3.1.5: + dependencies: + is-typedarray: 1.0.0 + dev: true + resolution: + integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + /typedoc-default-themes/0.10.2: + dependencies: + lunr: 2.3.8 + dev: true + engines: + node: '>= 8' + resolution: + integrity: sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg== + /typedoc/0.17.8_typescript@3.9.7: + dependencies: + fs-extra: 8.1.0 + handlebars: 4.7.6 + highlight.js: 10.1.2 + lodash: 4.17.19 + lunr: 2.3.8 + marked: 1.0.0 + minimatch: 3.0.4 + progress: 2.0.3 + shelljs: 0.8.4 + typedoc-default-themes: 0.10.2 + typescript: 3.9.7 + dev: true + engines: + node: '>= 8.0.0' + hasBin: true + peerDependencies: + typescript: '>=3.8.3' + resolution: + integrity: sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w== + /typescript/3.9.7: + dev: true + engines: + node: '>=4.2.0' + hasBin: true + resolution: + integrity: sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + /uglify-js/3.10.0: + dev: true + engines: + node: '>=0.8.0' + hasBin: true + optional: true + resolution: + integrity: sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== + /underscore/1.6.0: + dev: true + resolution: + integrity: sha1-izixDKze9jM3uLJOT/htRa6lKag= + /unique-string/2.0.0: + dependencies: + crypto-random-string: 2.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + /universalify/0.1.2: + dev: true + engines: + node: '>= 4.0.0' + resolution: + integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + /update-notifier/4.1.0: + dependencies: + boxen: 4.2.0 + chalk: 3.0.0 + configstore: 5.0.1 + has-yarn: 2.1.0 + import-lazy: 2.1.0 + is-ci: 2.0.0 + is-installed-globally: 0.3.2 + is-npm: 4.0.0 + is-yarn-global: 0.3.0 + latest-version: 5.1.0 + pupa: 2.0.1 + semver-diff: 3.1.1 + xdg-basedir: 4.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== + /uri-js/4.2.2: + dependencies: + punycode: 2.1.1 + dev: true + resolution: + integrity: sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + /url-parse-lax/3.0.0: + dependencies: + prepend-http: 2.0.0 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + /util-deprecate/1.0.2: + dev: true + resolution: + integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /uuid/3.4.0: + dev: true + hasBin: true + resolution: + integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + /v8-compile-cache/2.1.1: + dev: true + resolution: + integrity: sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + /validate-npm-package-license/3.0.4: + dependencies: + spdx-correct: 3.1.1 + spdx-expression-parse: 3.0.1 + dev: true + resolution: + integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + /wcwidth/1.0.1: + dependencies: + defaults: 1.0.3 + dev: true + resolution: + integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + /well-known-symbols/2.0.0: + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== + /which-module/2.0.0: + dev: true + resolution: + integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + /which/2.0.2: + dependencies: + isexe: 2.0.0 + dev: true + engines: + node: '>= 8' + hasBin: true + resolution: + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + /widest-line/3.1.0: + dependencies: + string-width: 4.2.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + /word-wrap/1.2.3: + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + /wordwrap/1.0.0: + dev: true + resolution: + integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + /wrap-ansi/6.2.0: + dependencies: + ansi-styles: 4.2.1 + string-width: 4.2.0 + strip-ansi: 6.0.0 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + /wrappy/1.0.2: + dev: true + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /write-file-atomic/3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.3 + typedarray-to-buffer: 3.1.5 + dev: true + resolution: + integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + /write/1.0.3: + dependencies: + mkdirp: 0.5.5 + dev: true + engines: + node: '>=4' + resolution: + integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + /xdg-basedir/4.0.0: + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + /y18n/4.0.0: + dev: true + resolution: + integrity: sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + /yargs-parser/18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + engines: + node: '>=6' + resolution: + integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + /yargs/15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.0 + which-module: 2.0.0 + y18n: 4.0.0 + yargs-parser: 18.1.3 + dev: true + engines: + node: '>=8' + resolution: + integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 000000000..18ec407ef --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +packages: + - 'packages/*' diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 147d7b1e0..000000000 --- a/src/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - This file is part of TALER - (C) 2019 GNUnet e.V. - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see - */ - -/** - * Module entry point for the wallet when used as a node module. - */ - -export { Wallet } from "./wallet"; -export { installAndroidWalletListener } from "./android"; diff --git a/src/webex/pages/add-auditor.tsx b/src/webex/pages/add-auditor.tsx deleted file mode 100644 index c28d15cad..000000000 --- a/src/webex/pages/add-auditor.tsx +++ /dev/null @@ -1,135 +0,0 @@ -/* - This file is part of TALER - (C) 2017 Inria - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see - */ - -/** - * View and edit auditors. - * - * @author Florian Dold - */ - -import { CurrencyRecord } from "../../types/dbTypes"; -import { getCurrencies, updateCurrency } from "../wxApi"; -import React, { useState } from "react"; - -interface ConfirmAuditorProps { - url: string; - currency: string; - auditorPub: string; - expirationStamp: number; -} - -function ConfirmAuditor(props: ConfirmAuditorProps): JSX.Element { - const [addDone, setAddDone] = useState(false); - - const add = async (): Promise => { - const currencies = await getCurrencies(); - let currency: CurrencyRecord | undefined; - - for (const c of currencies) { - if (c.name === props.currency) { - currency = c; - } - } - - if (!currency) { - currency = { - name: props.currency, - auditors: [], - fractionalDigits: 2, - exchanges: [], - }; - } - - const newAuditor = { - auditorPub: props.auditorPub, - baseUrl: props.url, - expirationStamp: props.expirationStamp, - }; - - let auditorFound = false; - for (const idx in currency.auditors) { - const a = currency.auditors[idx]; - if (a.baseUrl === props.url) { - auditorFound = true; - // Update auditor if already found by URL. - currency.auditors[idx] = newAuditor; - } - } - - if (!auditorFound) { - currency.auditors.push(newAuditor); - } - - await updateCurrency(currency); - - setAddDone(true); - }; - - const back = (): void => { - window.history.back(); - }; - - return ( -
-

- Do you want to let {props.auditorPub} audit the - currency "{props.currency}"? -

- {addDone ? ( -
- Auditor was added! You can also{" "} - view and edit{" "} - auditors. -
- ) : ( -
- - -
- )} -
- ); -} - -export function makeAddAuditorPage(): JSX.Element { - const walletPageUrl = new URL(document.location.href); - const url = walletPageUrl.searchParams.get("url"); - if (!url) { - throw Error("missign parameter (url)"); - } - const currency = walletPageUrl.searchParams.get("currency"); - if (!currency) { - throw Error("missing parameter (currency)"); - } - const auditorPub = walletPageUrl.searchParams.get("auditorPub"); - if (!auditorPub) { - throw Error("missing parameter (auditorPub)"); - } - const auditorStampStr = walletPageUrl.searchParams.get("expirationStamp"); - if (!auditorStampStr) { - throw Error("missing parameter (auditorStampStr)"); - } - const expirationStamp = Number.parseInt(auditorStampStr); - const args = { url, currency, auditorPub, expirationStamp }; - return ; -} diff --git a/src/webex/pages/auditors.tsx b/src/webex/pages/auditors.tsx deleted file mode 100644 index ac93afd31..000000000 --- a/src/webex/pages/auditors.tsx +++ /dev/null @@ -1,161 +0,0 @@ -/* - This file is part of TALER - (C) 2017 Inria - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see - */ - -/** - * View and edit auditors. - * - * @author Florian Dold - */ - -import { - AuditorRecord, - CurrencyRecord, - ExchangeForCurrencyRecord, -} from "../../types/dbTypes"; - -import { getCurrencies, updateCurrency } from "../wxApi"; - -import * as React from "react"; - -interface CurrencyListState { - currencies?: CurrencyRecord[]; -} - -class CurrencyList extends React.Component<{}, CurrencyListState> { - constructor(props: {}) { - super(props); - const port = chrome.runtime.connect(); - port.onMessage.addListener((msg: any) => { - if (msg.notify) { - console.log("got notified"); - this.update(); - } - }); - this.update(); - this.state = {} as any; - } - - async update(): Promise { - const currencies = await getCurrencies(); - console.log("currencies: ", currencies); - this.setState({ currencies }); - } - - async confirmRemoveAuditor( - c: CurrencyRecord, - a: AuditorRecord, - ): Promise { - if ( - window.confirm( - `Do you really want to remove auditor ${a.baseUrl} for currency ${c.name}?`, - ) - ) { - c.auditors = c.auditors.filter((x) => x.auditorPub !== a.auditorPub); - await updateCurrency(c); - } - } - - async confirmRemoveExchange( - c: CurrencyRecord, - e: ExchangeForCurrencyRecord, - ): Promise { - if ( - window.confirm( - `Do you really want to remove exchange ${e.baseUrl} for currency ${c.name}?`, - ) - ) { - c.exchanges = c.exchanges.filter((x) => x.baseUrl !== e.baseUrl); - await updateCurrency(c); - } - } - - renderAuditors(c: CurrencyRecord): any { - if (c.auditors.length === 0) { - return

No trusted auditors for this currency.

; - } - return ( -
-

Trusted Auditors:

-
    - {c.auditors.map((a) => ( -
  • - {a.baseUrl}{" "} - -
      -
    • valid until {new Date(a.expirationStamp).toString()}
    • -
    • public key {a.auditorPub}
    • -
    -
  • - ))} -
-
- ); - } - - renderExchanges(c: CurrencyRecord): any { - if (c.exchanges.length === 0) { - return

No trusted exchanges for this currency.

; - } - return ( -
-

Trusted Exchanges:

-
    - {c.exchanges.map((e) => ( -
  • - {e.baseUrl}{" "} - -
  • - ))} -
-
- ); - } - - render(): JSX.Element { - const currencies = this.state.currencies; - if (!currencies) { - return ...; - } - return ( -
- {currencies.map((c) => ( -
-

Currency {c.name}

-

Displayed with {c.fractionalDigits} fractional digits.

-

Auditors

-
{this.renderAuditors(c)}
-

Exchanges

-
{this.renderExchanges(c)}
-
- ))} -
- ); - } -} - -export function makeAuditorsPage(): JSX.Element { - return ; -} diff --git a/src/webex/pages/benchmark.tsx b/src/webex/pages/benchmark.tsx deleted file mode 100644 index eb7193e0c..000000000 --- a/src/webex/pages/benchmark.tsx +++ /dev/null @@ -1,104 +0,0 @@ -/* - This file is part of TALER - (C) 2015 GNUnet e.V. - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see - */ - -/** - * Benchmarks for the wallet. - * - * @author Florian Dold - */ - -import * as i18n from "../i18n"; - -import { BenchmarkResult } from "../../types/walletTypes"; - -import * as wxApi from "../wxApi"; - -import * as React from "react"; - -interface BenchmarkRunnerState { - repetitions: number; - result?: BenchmarkResult; - running: boolean; -} - -function BenchmarkDisplay(props: BenchmarkRunnerState): JSX.Element { - const result = props.result; - if (!result) { - if (props.running) { - return
Waiting for results ...
; - } else { - return
; - } - } - return ( - <> -

Results for {result.repetitions} repetitions

- - - - - - - {Object.keys(result.time) - .sort() - .map((k) => ( - - - - - ))} - -
{i18n.str`Operation`}{i18n.str`time (ms/op)`}
{k}{result.time[k] / result.repetitions}
- - ); -} - -class BenchmarkRunner extends React.Component { - constructor(props: any) { - super(props); - this.state = { - repetitions: 10, - running: false, - }; - } - - async run(): Promise { - this.setState({ result: undefined, running: true }); - const result = await wxApi.benchmarkCrypto(this.state.repetitions); - this.setState({ result, running: false }); - } - - render(): JSX.Element { - return ( -
- - - this.setState({ repetitions: Number.parseInt(evt.target.value) }) - } - />{" "} - - -
- ); - } -} - -export function makeBenchmarkPage(): JSX.Element { - return ; -} diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 2295d4987..000000000 --- a/yarn.lock +++ /dev/null @@ -1,4290 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ava/typescript@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@ava/typescript/-/typescript-1.1.1.tgz#3dcaba3aced8026fdb584d927d809752854dc6e6" - integrity sha512-KbLUAe2cWXK63WLK6LnOJonjwEDU/8MNXCOA1ooX/YFZgKRmeAD1kZu+2K0ks5fnOCEcckNQAooyBNGdZUmMQA== - dependencies: - escape-string-regexp "^2.0.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/core@^7.7.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" - integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.5" - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.10.5" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.5" - "@babel/types" "^7.10.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" - integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== - dependencies: - "@babel/types" "^7.10.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-member-expression-to-functions@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee" - integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== - dependencies: - "@babel/types" "^7.10.5" - -"@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-module-transforms@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz#120c271c0b3353673fcdfd8c053db3c544a260d6" - integrity sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-split-export-declaration@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" - integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/helpers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.10.4", "@babel/parser@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" - integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== - -"@babel/runtime-corejs3@^7.10.2": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.5.tgz#a57fe6c13045ca33768a2aa527ead795146febe1" - integrity sha512-RMafpmrNB5E/bwdSphLr8a8++9TosnyJp98RZzI6VOx2R2CCMpsXXXRvmI700O9oEKpXdZat6oEK68/F0zjd4A== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.10.2": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" - integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" - integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/parser" "^7.10.5" - "@babel/types" "^7.10.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.10.4", "@babel/types@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" - integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@concordance/react@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@concordance/react/-/react-2.0.0.tgz#aef913f27474c53731f4fd79cc2f54897de90fde" - integrity sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA== - dependencies: - arrify "^1.0.1" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== - -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== - dependencies: - "@nodelib/fs.stat" "2.0.3" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== - dependencies: - "@nodelib/fs.scandir" "2.1.3" - fastq "^1.6.0" - -"@rollup/plugin-commonjs@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-14.0.0.tgz#4285f9ec2db686a31129e5a2b415c94aa1f836f0" - integrity sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - commondir "^1.0.1" - estree-walker "^1.0.1" - glob "^7.1.2" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" - -"@rollup/plugin-json@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - -"@rollup/plugin-node-resolve@^8.4.0": - version "8.4.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz#261d79a680e9dc3d86761c14462f24126ba83575" - integrity sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deep-freeze "^0.0.1" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.17.0" - -"@rollup/plugin-replace@^2.3.3": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.3.tgz#cd6bae39444de119f5d905322b91ebd4078562e7" - integrity sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ== - dependencies: - "@rollup/pluginutils" "^3.0.8" - magic-string "^0.25.5" - -"@rollup/plugin-typescript@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-5.0.2.tgz#e879b73354851868b805bbd43f15c229123b8a71" - integrity sha512-CkS028Itwjqm1uLbFVfpJgtVtnNvZ+og/m6UlNRR5wOOnNTWPcVQzOu5xGdEX+WWJxdvWIqUq2uR/RBt2ZipWg== - dependencies: - "@rollup/pluginutils" "^3.0.1" - resolve "^1.14.1" - -"@rollup/pluginutils@^3.0.1", "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@types/cheerio@*": - version "0.22.21" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.21.tgz#5e37887de309ba11b2e19a6e14cad7874b31a8a3" - integrity sha512-aGI3DfswwqgKPiEOTaiHV2ZPC9KEhprpgEbJnv0fZl3SGX0cGgEva1126dGrMC6AJM6v/aihlUgJn9M5DbDZ/Q== - dependencies: - "@types/node" "*" - -"@types/chrome@^0.0.103": - version "0.0.103" - resolved "https://registry.yarnpkg.com/@types/chrome/-/chrome-0.0.103.tgz#604f3d94ab4465cc8cde302c4916f4955eb7e8b6" - integrity sha512-s8So1IG1fIu2dg2MRV3k6W5OjlVaJriNXIxIWDHi+Rdz5dLeuzPKcWzkVlcaVL4gONfn44JKC0RhW+P0UohLfg== - dependencies: - "@types/filesystem" "*" - "@types/har-format" "*" - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/enzyme-adapter-react-16@^1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.6.tgz#8aca7ae2fd6c7137d869b6616e696d21bb8b0cec" - integrity sha512-VonDkZ15jzqDWL8mPFIQnnLtjwebuL9YnDkqeCDYnB4IVgwUm0mwKkqhrxLL6mb05xm7qqa3IE95m8CZE9imCg== - dependencies: - "@types/enzyme" "*" - -"@types/enzyme@*", "@types/enzyme@^3.10.5": - version "3.10.5" - resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.5.tgz#fe7eeba3550369eed20e7fb565bfb74eec44f1f0" - integrity sha512-R+phe509UuUYy9Tk0YlSbipRpfVtIzb/9BHn5pTEtjJTF5LXvUjrIQcZvNyANNEyFrd2YGs196PniNT1fgvOQA== - dependencies: - "@types/cheerio" "*" - "@types/react" "*" - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/estree@*": - version "0.0.45" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" - integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/filesystem@*": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/filesystem/-/filesystem-0.0.29.tgz#ee3748eb5be140dcf980c3bd35f11aec5f7a3748" - integrity sha512-85/1KfRedmfPGsbK8YzeaQUyV1FQAvMPMTuWFQ5EkLd2w7szhNO96bk3Rh/SKmOfd9co2rCLf0Voy4o7ECBOvw== - dependencies: - "@types/filewriter" "*" - -"@types/filewriter@*": - version "0.0.28" - resolved "https://registry.yarnpkg.com/@types/filewriter/-/filewriter-0.0.28.tgz#c054e8af4d9dd75db4e63abc76f885168714d4b3" - integrity sha1-wFTor02d11205jq8dviFFocU1LM= - -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/har-format@*": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/har-format/-/har-format-1.2.4.tgz#3275842095abb60d14b47fa798cc9ff708dab6d4" - integrity sha512-iUxzm1meBm3stxUMzRqgOVHjj4Kgpgu5w9fm4X7kPRfSgVRzythsucEN7/jtOo8SQzm+HfcxWWzJS0mJDH/3DQ== - -"@types/json-schema@^7.0.3": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" - integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*", "@types/node@^14.0.23": - version "14.0.23" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.23.tgz#676fa0883450ed9da0bb24156213636290892806" - integrity sha512-Z4U8yDAl5TFkmYsZdFPdjeMa57NOvnaf1tljHzhouaPEp7LCj2JKkejpI1ODviIAQuW4CcQmxkQ77rnLsOOoKw== - -"@types/node@^11.12.0": - version "11.15.18" - resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.18.tgz#b92ad2f5ef31a2b8a432f15db68265013d9f43db" - integrity sha512-3p2M6moxwdDFyPia2ROI8CCkRa9ZzYjvCys2TOE1xgwYDQmY49Cj0cvkdBkzh/rY9gkvzgzYOeECYtB4f0/fDA== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/react-dom@^16.9.6": - version "16.9.8" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423" - integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^16.9.6": - version "16.9.43" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.43.tgz#c287f23f6189666ee3bebc2eb8d0f84bcb6cdb6b" - integrity sha512-PxshAFcnJqIWYpJbLPriClH53Z2WlJcVZE+NP2etUtWQs2s7yIMj3/LDKZT/5CHJ/F62iyjVCDu2H3jHEXIxSg== - dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.6.1.tgz#5ced8fd2087fbb83a76973dea4a0d39d9cb4a642" - integrity sha512-06lfjo76naNeOMDl+mWG9Fh/a0UHKLGhin+mGaIw72FUMbMGBkdi/FEJmgEDzh4eE73KIYzHWvOCYJ0ak7nrJQ== - dependencies: - "@typescript-eslint/experimental-utils" "3.6.1" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.6.1.tgz#b5a2738ebbceb3fa90c5b07d50bb1225403c4a54" - integrity sha512-oS+hihzQE5M84ewXrTlVx7eTgc52eu+sVmG7ayLfOhyZmJ8Unvf3osyFQNADHP26yoThFfbxcibbO0d2FjnYhg== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/types" "3.6.1" - "@typescript-eslint/typescript-estree" "3.6.1" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^3.1.0", "@typescript-eslint/parser@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.6.1.tgz#216e8adf4ee9c629f77c985476a2ea07fb80e1dc" - integrity sha512-SLihQU8RMe77YJ/jGTqOt0lMq7k3hlPVfp7v/cxMnXA9T0bQYoMDfTsNgHXpwSJM1Iq2aAJ8WqekxUwGv5F67Q== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "3.6.1" - "@typescript-eslint/types" "3.6.1" - "@typescript-eslint/typescript-estree" "3.6.1" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/types@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.6.1.tgz#87600fe79a1874235d3cc1cf5c7e1a12eea69eee" - integrity sha512-NPxd5yXG63gx57WDTW1rp0cF3XlNuuFFB5G+Kc48zZ+51ZnQn9yjDEsjTPQ+aWM+V+Z0I4kuTFKjKvgcT1F7xQ== - -"@typescript-eslint/typescript-estree@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.6.1.tgz#a5c91fcc5497cce7922ff86bc37d5e5891dcdefa" - integrity sha512-G4XRe/ZbCZkL1fy09DPN3U0mR6SayIv1zSeBNquRFRk7CnVLgkC2ZPj8llEMJg5Y8dJ3T76SvTGtceytniaztQ== - dependencies: - "@typescript-eslint/types" "3.6.1" - "@typescript-eslint/visitor-keys" "3.6.1" - debug "^4.1.1" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/visitor-keys@3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.6.1.tgz#5c57a7772f4dd623cfeacc219303e7d46f963b37" - integrity sha512-qC8Olwz5ZyMTZrh4Wl3K4U6tfms0R/mzU4/5W3XeUZptVraGVmbptJbn6h2Ey6Rb3hOs3zWoAUebZk8t47KGiQ== - dependencies: - eslint-visitor-keys "^1.1.0" - -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - -acorn-walk@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.2.0, acorn@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" - integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== - -aggregate-error@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" - integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -airbnb-prop-types@^2.15.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" - integrity sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg== - dependencies: - array.prototype.find "^2.1.1" - function.prototype.name "^1.1.2" - is-regex "^1.1.0" - object-is "^1.1.2" - object.assign "^4.1.0" - object.entries "^1.1.2" - prop-types "^15.7.2" - prop-types-exact "^1.2.0" - react-is "^16.13.1" - -ajv@^6.10.0, ajv@^6.10.2: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-transform@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" - integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== - dependencies: - default-require-extensions "^3.0.0" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - is-string "^1.0.5" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.find@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.1.1.tgz#3baca26108ca7affb08db06bf0be6cb3115a969c" - integrity sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.4" - -array.prototype.flat@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -array.prototype.flatmap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" - integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - -arrgv@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arrgv/-/arrgv-1.0.2.tgz#025ed55a6a433cad9b604f8112fc4292715a6ec0" - integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -arrify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - -ast-types-flow@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -ava@^3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/ava/-/ava-3.10.1.tgz#a4e68b1a2bb248fa0d96529d23dd83f57082e944" - integrity sha512-+w86ZHyFHIGCABi7NUrn/WJMyC+fDj0BSIlFNVS45WDKAD5vxbIiDWeclctxOOc2KDPfQD7tFOURSBz0FBLD0A== - dependencies: - "@concordance/react" "^2.0.0" - acorn "^7.3.1" - acorn-walk "^7.2.0" - ansi-styles "^4.2.1" - arrgv "^1.0.2" - arrify "^2.0.1" - callsites "^3.1.0" - chalk "^4.1.0" - chokidar "^3.4.0" - chunkd "^2.0.1" - ci-info "^2.0.0" - ci-parallel-vars "^1.0.1" - clean-yaml-object "^0.1.0" - cli-cursor "^3.1.0" - cli-truncate "^2.1.0" - code-excerpt "^3.0.0" - common-path-prefix "^3.0.0" - concordance "^5.0.0" - convert-source-map "^1.7.0" - currently-unhandled "^0.4.1" - debug "^4.1.1" - del "^5.1.0" - emittery "^0.7.0" - equal-length "^1.0.0" - figures "^3.2.0" - globby "^11.0.1" - ignore-by-default "^2.0.0" - import-local "^3.0.2" - indent-string "^4.0.0" - is-error "^2.2.2" - is-plain-object "^3.0.1" - is-promise "^4.0.0" - lodash "^4.17.15" - matcher "^3.0.0" - md5-hex "^3.0.1" - mem "^6.1.0" - ms "^2.1.2" - ora "^4.0.4" - p-map "^4.0.0" - picomatch "^2.2.2" - pkg-conf "^3.1.0" - plur "^4.0.0" - pretty-ms "^7.0.0" - read-pkg "^5.2.0" - resolve-cwd "^3.0.0" - slash "^3.0.0" - source-map-support "^0.5.19" - stack-utils "^2.0.2" - strip-ansi "^6.0.0" - supertap "^1.0.0" - temp-dir "^2.0.0" - trim-off-newlines "^1.0.1" - update-notifier "^4.1.0" - write-file-atomic "^3.0.3" - yargs "^15.4.0" - -axe-core@^3.5.4: - version "3.5.5" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" - integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== - -axios@^0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - -axobject-query@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -big-integer@^1.6.48: - version "1.6.48" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== - -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - -blueimp-md5@^2.10.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.16.0.tgz#9018bb805e4ee05512e0e8cbdb9305eeecbdc87c" - integrity sha512-j4nzWIqEFpLSbdhUApHRGDwfXbV8ALhqOn+FY5L6XBdKPAXU9BpGgFSbDsgqogfqPPR9R2WooseWCsfhfEC6uQ== - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -caching-transform@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" - integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== - dependencies: - hasha "^5.0.0" - make-dir "^3.0.0" - package-hash "^4.0.0" - write-file-atomic "^3.0.0" - -callsites@^3.0.0, callsites@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -cheerio@^1.0.0-rc.3: - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" - integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.1" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - -chokidar@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" - integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - -chunkd@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/chunkd/-/chunkd-2.0.1.tgz#49cd1d7b06992dc4f7fccd962fe2a101ee7da920" - integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -ci-parallel-vars@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz#e87ff0625ccf9d286985b29b4ada8485ca9ffbc2" - integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" - integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= - -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" - integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w== - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -code-excerpt@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-3.0.0.tgz#fcfb6748c03dba8431c19f5474747fad3f250f10" - integrity sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw== - dependencies: - convert-to-spaces "^1.0.1" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -commander@^2.19.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concordance@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.0.tgz#6d4552f76c78301dd65e748c26af2cf131f9dd49" - integrity sha512-stOCz9ffg0+rytwTaL2njUOIyMfANwfwmqc9Dr4vTUS/x/KkVFlWx9Zlzu6tHYtjKxxaCF/cEAZgPDac+n35sg== - dependencies: - date-time "^3.1.0" - esutils "^2.0.3" - fast-diff "^1.2.0" - js-string-escape "^1.0.1" - lodash "^4.17.15" - md5-hex "^3.0.1" - semver "^7.3.2" - well-known-symbols "^2.0.0" - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -confusing-browser-globals@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" - integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -convert-to-spaces@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz#7e3e48bbe6d997b1417ddca2868204b4d3d85715" - integrity sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU= - -core-js-pure@^3.0.0: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" - integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== - -cross-spawn@^7.0.0, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -csstype@^2.2.0: - version "2.6.11" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.11.tgz#452f4d024149ecf260a852b025e36562a253ffc5" - integrity sha512-l8YyEC9NBkSm783PFTvh0FmJy7s5pFKrDp49ZL7zBGX3fWkO+N4EEyan1qqp8cwPLDcD0OSdyY6hAMoxp34JFw== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -damerau-levenshtein@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" - integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== - -date-time@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" - integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== - dependencies: - time-zone "^1.0.0" - -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-freeze@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84" - integrity sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ= - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -default-require-extensions@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" - integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== - dependencies: - strip-bom "^4.0.0" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -del@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" - integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== - dependencies: - globby "^10.0.1" - graceful-fs "^4.2.2" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.1" - p-map "^3.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -discontinuous-range@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" - integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" - integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== - dependencies: - is-obj "^2.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -emittery@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" - integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.0.0.tgz#48a2309cc8a1d2e9d23bc6a67c39b63032e76ea4" - integrity sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== - -encoding@^0.1.11: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== - -enzyme-adapter-react-16@^1.15.2: - version "1.15.2" - resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.2.tgz#b16db2f0ea424d58a808f9df86ab6212895a4501" - integrity sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q== - dependencies: - enzyme-adapter-utils "^1.13.0" - enzyme-shallow-equal "^1.0.1" - has "^1.0.3" - object.assign "^4.1.0" - object.values "^1.1.1" - prop-types "^15.7.2" - react-is "^16.12.0" - react-test-renderer "^16.0.0-0" - semver "^5.7.0" - -enzyme-adapter-utils@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.13.0.tgz#01c885dde2114b4690bf741f8dc94cee3060eb78" - integrity sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ== - dependencies: - airbnb-prop-types "^2.15.0" - function.prototype.name "^1.1.2" - object.assign "^4.1.0" - object.fromentries "^2.0.2" - prop-types "^15.7.2" - semver "^5.7.1" - -enzyme-shallow-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.1.tgz#7afe03db3801c9b76de8440694096412a8d9d49e" - integrity sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ== - dependencies: - has "^1.0.3" - object-is "^1.0.2" - -enzyme@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28" - integrity sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw== - dependencies: - array.prototype.flat "^1.2.3" - cheerio "^1.0.0-rc.3" - enzyme-shallow-equal "^1.0.1" - function.prototype.name "^1.1.2" - has "^1.0.3" - html-element-map "^1.2.0" - is-boolean-object "^1.0.1" - is-callable "^1.1.5" - is-number-object "^1.0.4" - is-regex "^1.0.5" - is-string "^1.0.5" - is-subset "^0.1.1" - lodash.escape "^4.0.1" - lodash.isequal "^4.5.0" - object-inspect "^1.7.0" - object-is "^1.0.2" - object.assign "^4.1.0" - object.entries "^1.1.1" - object.values "^1.1.1" - raf "^3.4.1" - rst-selector-parser "^2.2.3" - string.prototype.trim "^1.2.1" - -equal-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c" - integrity sha1-IcoRLUirJLTh5//A5TOdMf38J0w= - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.4, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-airbnb-base@^14.1.0, eslint-config-airbnb-base@^14.2.0: - version "14.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" - integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== - dependencies: - confusing-browser-globals "^1.0.9" - object.assign "^4.1.0" - object.entries "^1.1.2" - -eslint-config-airbnb-typescript@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-8.0.2.tgz#465b17b0b1facdcca4fe23a5426bc27ab7b2b2f2" - integrity sha512-TCOftyCoIogJzzLGSg0Qlxd27qvf+1a3MHyN/PqynTqINS4iFy+SlXy/CrAN+6xkleGMSrvmPbm3pyFEku2+IQ== - dependencies: - "@typescript-eslint/parser" "^3.1.0" - eslint-config-airbnb "^18.1.0" - eslint-config-airbnb-base "^14.1.0" - -eslint-config-airbnb@^18.1.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.0.tgz#8a82168713effce8fc08e10896a63f1235499dcd" - integrity sha512-Fz4JIUKkrhO0du2cg5opdyPKQXOI2MvF8KUvN2710nJMT6jaRUpRE2swrJftAjVGL7T1otLM5ieo5RqS1v9Udg== - dependencies: - eslint-config-airbnb-base "^14.2.0" - object.assign "^4.1.0" - object.entries "^1.1.2" - -eslint-import-resolver-node@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== - dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" - -eslint-plugin-import@^2.22.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" - integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== - dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.3" - eslint-module-utils "^2.6.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-jsx-a11y@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660" - integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== - dependencies: - "@babel/runtime" "^7.10.2" - aria-query "^4.2.2" - array-includes "^3.1.1" - ast-types-flow "^0.0.7" - axe-core "^3.5.4" - axobject-query "^2.1.2" - damerau-levenshtein "^1.0.6" - emoji-regex "^9.0.0" - has "^1.0.3" - jsx-ast-utils "^2.4.1" - language-tags "^1.0.5" - -eslint-plugin-react-hooks@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.0.8.tgz#a9b1e3d57475ccd18276882eff3d6cba00da7a56" - integrity sha512-6SSb5AiMCPd8FDJrzah+Z4F44P2CdOaK026cXFV+o/xSRzfOiV1FNFeLl2z6xm3yqWOQEZ5OfVgiec90qV2xrQ== - -eslint-plugin-react@^7.20.3: - version "7.20.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz#0590525e7eb83890ce71f73c2cf836284ad8c2f1" - integrity sha512-txbo090buDeyV0ugF3YMWrzLIUqpYTsWSDZV9xLSmExE1P/Kmgg9++PD931r+KEWS66O1c9R4srLVVHmeHpoAg== - dependencies: - array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.4.1" - object.entries "^1.1.2" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.17.0" - string.prototype.matchall "^4.0.2" - -eslint-scope@^5.0.0, eslint-scope@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@^7.4.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.4.0.tgz#4e35a2697e6c1972f9d6ef2b690ad319f80f206f" - integrity sha512-gU+lxhlPHu45H3JkEGgYhWhkR9wLHHEXC9FbWFnTlEkbKyZKWgWRLgf61E8zWmBuI6g5xKBph9ltg3NtZMVF8g== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.0" - eslint-utils "^2.0.0" - eslint-visitor-keys "^1.2.0" - espree "^7.1.0" - esquery "^1.2.0" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash "^4.17.14" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.1.0.tgz#a9c7f18a752056735bf1ba14cb1b70adc3a5ce1c" - integrity sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw== - dependencies: - acorn "^7.2.0" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.2.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" - integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -esutils@^2.0.2, esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.0.3, fast-glob@^3.1.1: - version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== - dependencies: - reusify "^1.0.4" - -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - -fromentries@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.2.1.tgz#64c31665630479bc993cd800d53387920dc61b4d" - integrity sha512-Xu2Qh8yqYuDhQGOhD5iJGninErSfI9A3FrriD3tjUgV5VbJFeH8vfgZ9HnC6jWN80QDVNQK5vmxRAmEAp7Mevw== - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function.prototype.name@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" - integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - functions-have-names "^1.2.0" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -functions-have-names@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" - integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - -gettext-parser@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.1.0.tgz#2c5a6638d893934b9b55037d0ad82cb7004b2679" - integrity sha1-LFpmONiTk0ubVQN9CtgstwBLJnk= - dependencies: - encoding "^0.1.11" - -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" - integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== - dependencies: - ini "^1.3.5" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -globby@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -handlebars@^4.7.6: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hasha@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.0.tgz#33094d1f69c40a4a6ac7be53d5fe3ff95a269e0c" - integrity sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw== - dependencies: - is-stream "^2.0.0" - type-fest "^0.8.0" - -highlight.js@^10.0.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.1.1.tgz#691a2148a8d922bf12e52a294566a0d993b94c57" - integrity sha512-b4L09127uVa+9vkMgPpdUQP78ickGbHEQTWeBrQFTJZ4/n2aihWOGS0ZoUqAwjVmfjhq/C76HRzkqwZhK4sBbg== - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -html-element-map@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/html-element-map/-/html-element-map-1.2.0.tgz#dfbb09efe882806af63d990cf6db37993f099f22" - integrity sha512-0uXq8HsuG1v2TmQ8QkIhzbrqeskE4kn52Q18QJ9iAA/SnHoEKXWiUxHQtclRsCFWEUD2So34X+0+pZZu862nnw== - dependencies: - array-filter "^1.0.0" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -idb-bridge@^0.0.15: - version "0.0.15" - resolved "https://registry.yarnpkg.com/idb-bridge/-/idb-bridge-0.0.15.tgz#3fddc91b9aab775fae273d02b272205c6090d270" - integrity sha512-xuZM/i4vCm/NkqyrKNJDEuBaZK7M2kyj+1F4hDGqtEJZSmQMSV3v9A6Ie3fR12VXDKIbMr7uV22eWjIKwSosOA== - -ignore-by-default@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-2.0.0.tgz#537092018540640459569fe7c8c7a408af581146" - integrity sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1, ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -internal-slot@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" - integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== - dependencies: - es-abstract "^1.17.0-next.1" - has "^1.0.3" - side-channel "^1.0.2" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -irregular-plurals@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.2.0.tgz#b19c490a0723798db51b235d7e39add44dab0822" - integrity sha512-YqTdPLfwP7YFN0SsD3QUVCkm9ZG2VzOXv3DOrw5G5mkMbVwptTwVcFv7/C0vOpBmgTxAeTG19XpUs1E522LW9Q== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" - integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== - -is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-error@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" - integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== - -is-plain-object@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" - integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== - -is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - -is-reference@^1.1.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-regex@^1.0.5, is-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" - integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== - dependencies: - has-symbols "^1.0.1" - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -isarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-hook@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" - integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== - dependencies: - append-transform "^2.0.0" - -istanbul-lib-instrument@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-processinfo@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" - integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== - dependencies: - archy "^1.0.0" - cross-spawn "^7.0.0" - istanbul-lib-coverage "^3.0.0-alpha.1" - make-dir "^3.0.0" - p-map "^3.0.0" - rimraf "^3.0.0" - uuid "^3.3.3" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jed@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/jed/-/jed-1.1.1.tgz#7a549bbd9ffe1585b0cd0a191e203055bee574b4" - integrity sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ= - -jest-worker@^26.0.0: - version "26.1.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.1.0.tgz#65d5641af74e08ccd561c240e7db61284f82f33d" - integrity sha512-Z9P5pZ6UC+kakMbNJn+tA2RdVdNX5WH1x+5UCBZ9MxIK24pjYtFt96fK+UwBTrjLYm232g1xz0L3eTh51OW+yQ== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.10.0, js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsx-ast-utils@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" - integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== - dependencies: - array-includes "^3.1.1" - object.assign "^4.1.0" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -language-subtag-registry@~0.3.2: - version "0.3.20" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz#a00a37121894f224f763268e431c55556b0c0755" - integrity sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg== - -language-tags@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= - dependencies: - language-subtag-registry "~0.3.2" - -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -load-json-file@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.escape@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" - integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= - -lodash@^4.15.0, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== - -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lunr@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.8.tgz#a8b89c31f30b5a044b97d2d28e2da191b6ba2072" - integrity sha512-oxMeX/Y35PNFuZoHp+jUj5OSEmLCaIH4KTFJh7a93cHBoFmpw2IoPs22VIz7vyO2YUnx2Tn9dzIwO2P/4quIRg== - -magic-string@^0.25.2, magic-string@^0.25.5: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -map-age-cleaner@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -marked@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/marked/-/marked-1.0.0.tgz#d35784245a04871e5988a491e28867362e941693" - integrity sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng== - -matcher@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" - integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== - dependencies: - escape-string-regexp "^4.0.0" - -md5-hex@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" - integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== - dependencies: - blueimp-md5 "^2.10.0" - -mem@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-6.1.0.tgz#846eca0bd4708a8f04b9c3f3cd769e194ae63c5c" - integrity sha512-RlbnLQgRHk5lwqTtpEkBTQ2ll/CG/iB+J4Hy2Wh97PjgZgXgWJWrFF+XXujh3UUVLvR4OOTgZzcWMMwnehlEUg== - dependencies: - map-age-cleaner "^0.1.3" - mimic-fn "^3.0.0" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.0.0.tgz#76044cfa8818bbf6999c5c9acadf2d3649b14b4b" - integrity sha512-PiVO95TKvhiwgSwg1IdLYlCTdul38yZxZMIcnDSFIBUm4BNZha2qpQ4GpJ++15bHoKDtrW2D69lMfFwdFYtNZQ== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -minimatch@^3.0.0, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -moment@^2.27.0: - version "2.27.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.27.0.tgz#8bff4e3e26a236220dfe3e36de756b6ebaa0105d" - integrity sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ== - -moo@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" - integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1, ms@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -nearley@^2.7.10: - version "2.19.5" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.5.tgz#6be78e4942eeb9a043b17c563413111d4ad849b7" - integrity sha512-qoh1ZXXl0Kpn40tFhmgvffUAlbpRMcjLUagNVnT1JmliUIsB4tFabmCNhD97+tkf9FZ/SLhhYzNow0V3GitzDg== - dependencies: - commander "^2.19.0" - moo "^0.5.0" - railroad-diagrams "^1.0.0" - randexp "0.4.6" - semver "^5.4.1" - -neo-async@^2.6.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -node-preload@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" - integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== - dependencies: - process-on-spawn "^1.0.0" - -nomnom@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" - integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= - dependencies: - chalk "~0.4.0" - underscore "~1.6.0" - -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nyc@^15.1.0: - version "15.1.0" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" - integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== - dependencies: - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - caching-transform "^4.0.0" - convert-source-map "^1.7.0" - decamelize "^1.2.0" - find-cache-dir "^3.2.0" - find-up "^4.1.0" - foreground-child "^2.0.0" - get-package-type "^0.1.0" - glob "^7.1.6" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-hook "^3.0.0" - istanbul-lib-instrument "^4.0.0" - istanbul-lib-processinfo "^2.0.2" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - make-dir "^3.0.0" - node-preload "^0.2.1" - p-map "^3.0.0" - process-on-spawn "^1.0.0" - resolve-from "^5.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - spawn-wrap "^2.0.0" - test-exclude "^6.0.0" - yargs "^15.0.2" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-inspect@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== - -object-is@^1.0.2, object-is@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" - integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.entries@^1.1.1, object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - has "^1.0.3" - -object.fromentries@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" - integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.4.tgz#e8da697cc5b6a47266655bf68e0fb588d29a545d" - integrity sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww== - dependencies: - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-hash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" - integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== - dependencies: - graceful-fs "^4.1.15" - hasha "^5.0.0" - lodash.flattendeep "^4.4.0" - release-zalgo "^1.0.0" - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - lines-and-columns "^1.1.6" - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== - dependencies: - "@types/node" "*" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pkg-conf@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" - integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== - dependencies: - find-up "^3.0.0" - load-json-file "^5.2.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -plur@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" - integrity sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg== - dependencies: - irregular-plurals "^3.2.0" - -po2json@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/po2json/-/po2json-0.4.5.tgz#47bb2952da32d58a1be2f256a598eebc0b745118" - integrity sha1-R7spUtoy1Yob4vJWpZjuvAt0URg= - dependencies: - gettext-parser "1.1.0" - nomnom "1.8.1" - -pogen@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/pogen/-/pogen-0.0.5.tgz#c46c31536adff776a50cb289f781cb69cd18ef5e" - integrity sha512-aUJBklMB5CkuZtt4M6ztLr/2vvujkURFQ6ViKgYz68HNaJp1hiiy2UHsd6DicX271w1Jc0KMP+C204Utb6ax+A== - dependencies: - "@types/node" "^11.12.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -prettier@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" - integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== - -pretty-ms@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.0.tgz#45781273110caf35f55cab21a8a9bd403a233dc0" - integrity sha512-J3aPWiC5e9ZeZFuSeBraGxSkGMOvulSWsxDByOcbD1Pr75YL3LSNIKIb52WXbCLE1sS5s4inBBbryjF4Y05Ceg== - dependencies: - parse-ms "^2.1.0" - -process-on-spawn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" - integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== - dependencies: - fromentries "^1.2.0" - -progress@^2.0.0, progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -prop-types-exact@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/prop-types-exact/-/prop-types-exact-1.2.0.tgz#825d6be46094663848237e3925a98c6e944e9869" - integrity sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA== - dependencies: - has "^1.0.3" - object.assign "^4.1.0" - reflect.ownkeys "^0.2.0" - -prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pupa@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" - integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== - dependencies: - escape-goat "^2.0.0" - -qrcode-generator@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/qrcode-generator/-/qrcode-generator-1.4.4.tgz#63f771224854759329a99048806a53ed278740e7" - integrity sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw== - -raf@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - -railroad-diagrams@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" - integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= - -randexp@0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" - integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== - dependencies: - discontinuous-range "1.0.0" - ret "~0.1.10" - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dom@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" - integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.8.1, react-is@^16.8.6: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-test-renderer@^16.0.0-0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.1.tgz#de25ea358d9012606de51e012d9742e7f0deabc1" - integrity sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ== - dependencies: - object-assign "^4.1.1" - prop-types "^15.6.2" - react-is "^16.8.6" - scheduler "^0.19.1" - -react@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" - integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@^3.1.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -reflect.ownkeys@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" - integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= - -regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== - -regexp.prototype.flags@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -regexpp@^3.0.0, regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" - integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= - dependencies: - es6-error "^4.0.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.13.1, resolve@^1.14.1, resolve@^1.17.0, resolve@^1.3.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-sourcemaps@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.2.tgz#1eed5a3e07b833dc14c4cdb1e63b300d340f4a74" - integrity sha512-9AwTKg3yRykwzemfLt71ySe0LvrAci+bpsOL1LaTYFk5BX4HF6X7DQfpHa74ANfSja3hyjiQkXCR8goSOnW//Q== - dependencies: - "@rollup/pluginutils" "^3.0.9" - source-map-resolve "^0.6.0" - -rollup-plugin-terser@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-6.1.0.tgz#071866585aea104bfbb9dd1019ac523e63c81e45" - integrity sha512-4fB3M9nuoWxrwm39habpd4hvrbrde2W2GG4zEGPQg1YITNkM3Tqur5jSuXlWNzbv/2aMLJ+dZJaySc3GCD8oDw== - dependencies: - "@babel/code-frame" "^7.8.3" - jest-worker "^26.0.0" - serialize-javascript "^3.0.0" - terser "^4.7.0" - -rollup@^2.21.0: - version "2.21.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.21.0.tgz#d2e114533812043d5c9b7b0a83f1b2a242e4e1d6" - integrity sha512-BEGgy+wSzux7Ycq58pRiWEOBZaXRXTuvzl1gsm7gqmsAHxkWf9nyA5V2LN9fGSHhhDQd0/C13iRzSh4bbIpWZQ== - optionalDependencies: - fsevents "~2.1.2" - -rst-selector-parser@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" - integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE= - dependencies: - lodash.flattendeep "^4.4.0" - nearley "^2.7.10" - -run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== - -safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.7.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1, semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -serialize-error@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" - integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= - -serialize-javascript@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shelljs@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" - integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== - dependencies: - es-abstract "^1.17.0-next.1" - object-inspect "^1.7.0" - -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - -source-map-support@^0.5.19, source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spawn-wrap@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" - integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== - dependencies: - foreground-child "^2.0.0" - is-windows "^1.0.2" - make-dir "^3.0.0" - rimraf "^3.0.0" - signal-exit "^3.0.2" - which "^2.0.1" - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-utils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" - integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== - dependencies: - escape-string-regexp "^2.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.matchall@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" - integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.2" - -string.prototype.trim@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" - integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-json-comments@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -structured-clone@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/structured-clone/-/structured-clone-0.2.2.tgz#ac92b6be31958a643db30f1335abc6a1b02dfdc2" - integrity sha1-rJK2vjGVimQ9sw8TNavGobAt/cI= - -supertap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supertap/-/supertap-1.0.0.tgz#bd9751c7fafd68c68cf8222a29892206a119fa9e" - integrity sha512-HZJ3geIMPgVwKk2VsmO5YHqnnJYl6bV5A9JW2uzqV43WmpgliNEYbuvukfor7URpaqpxuw3CfZ3ONdVbZjCgIA== - dependencies: - arrify "^1.0.1" - indent-string "^3.2.0" - js-yaml "^3.10.0" - serialize-error "^2.1.0" - strip-ansi "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== - -terser@^4.7.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" - integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -trim-off-newlines@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= - -tsconfig-paths@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tslib@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" - integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== - -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.0, type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedoc-default-themes@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.10.2.tgz#743380a80afe62c5ef92ca1bd4abe2ac596be4d2" - integrity sha512-zo09yRj+xwLFE3hyhJeVHWRSPuKEIAsFK5r2u47KL/HBKqpwdUSanoaz5L34IKiSATFrjG5ywmIu98hPVMfxZg== - dependencies: - lunr "^2.3.8" - -typedoc@^0.17.8: - version "0.17.8" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.17.8.tgz#96b67e9454aa7853bfc4dc9a55c8a07adfd5478e" - integrity sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w== - dependencies: - fs-extra "^8.1.0" - handlebars "^4.7.6" - highlight.js "^10.0.0" - lodash "^4.17.15" - lunr "^2.3.8" - marked "1.0.0" - minimatch "^3.0.0" - progress "^2.0.3" - shelljs "^0.8.4" - typedoc-default-themes "^0.10.2" - -typescript@^3.9.7: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== - -uglify-js@^3.1.4: - version "3.10.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" - integrity sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== - -underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" - integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -update-notifier@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" - integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -uuid@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -well-known-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" - integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^15.0.2, yargs@^15.4.0: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2"