From 210646e5da9d10cee182100d923be52350fde358 Mon Sep 17 00:00:00 2001 From: George Date: Mon, 3 Jul 2023 13:13:15 -0700 Subject: [PATCH] Merge upstream `master` branch into Soroban. (#636) * Add fully-qualified `Operation` type to XDR type definitions. (#591) * Bump all dependencies to their latest versions. (#608) * Adds Operation.isValidAmount jsdoc (#609) * Removes the dependency on `crc` by calculating checksum in strkey (#621) * Prepare `v9.0.0` for promotion and release. (#625) * Fix jsdoc generation and always publish GHA. (#626) --------- Co-authored-by: Paul Bellamy Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Silence <35656692+silence48@users.noreply.github.com> --- .github/workflows/gh_pages.yml | 2 + .github/workflows/npm_publish.yml | 2 +- .github/workflows/tests.yml | 39 ++-- ...pdate-completed-sprint-on-issue-closed.yml | 25 +++ CHANGELOG.md | 48 ++++ package.json | 12 +- src/account.js | 3 +- src/asset.js | 20 +- src/keypair.js | 6 +- src/liquidity_pool_asset.js | 6 +- src/liquidity_pool_id.js | 3 +- src/memo.js | 15 +- src/muxed_account.js | 4 +- src/operation.js | 31 ++- src/operations/allow_trust.js | 5 +- src/operations/bump_sequence.js | 3 +- src/operations/change_trust.js | 3 +- src/operations/create_claimable_balance.js | 4 +- src/operations/create_passive_sell_offer.js | 3 +- src/operations/liquidity_pool_deposit.js | 5 +- src/operations/manage_buy_offer.js | 5 +- src/operations/manage_data.js | 7 +- src/operations/manage_sell_offer.js | 5 +- src/operations/revoke_sponsorship.js | 13 +- src/operations/set_options.js | 9 +- src/strkey.js | 61 ++++- src/transaction.js | 4 +- src/transaction_builder.js | 18 +- src/util/decode_encode_muxed_account.js | 4 +- src/util/util.js | 10 + test/support/io-helpers.js | 4 +- test/unit/asset_test.js | 14 ++ test/unit/browser_test.js | 7 - test/unit/memo_test.js | 1 - test/unit/operation_test.js | 5 +- yarn.lock | 208 +++++++----------- 36 files changed, 339 insertions(+), 275 deletions(-) create mode 100644 .github/workflows/update-completed-sprint-on-issue-closed.yml create mode 100644 src/util/util.js delete mode 100644 test/unit/browser_test.js diff --git a/.github/workflows/gh_pages.yml b/.github/workflows/gh_pages.yml index 8fa522535..ac70cc2f6 100644 --- a/.github/workflows/gh_pages.yml +++ b/.github/workflows/gh_pages.yml @@ -31,6 +31,8 @@ jobs: path: jsdoc - name: Generate JS docs + # because parsing errors still result in renderable docs + continue-on-error: true run: yarn docs - name: Publish JS docs diff --git a/.github/workflows/npm_publish.yml b/.github/workflows/npm_publish.yml index 67c426b19..3bfe32eaa 100644 --- a/.github/workflows/npm_publish.yml +++ b/.github/workflows/npm_publish.yml @@ -19,7 +19,7 @@ jobs: registry-url: 'https://registry.npmjs.org' - name: Install Depencencies - run: yarn + run: yarn install - name: Test & Build run: yarn preversion diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c3199baac..ff72eb7c5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -11,32 +11,35 @@ jobs: strategy: fail-fast: false - max-parallel: 2 + max-parallel: 4 matrix: node-version: [14, 16, 18] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} - - name: Install Dependencies - run: yarn install --network-concurrency 1 - - name: Build All - run: yarn build:prod + # Workaround for some `yarn` nonsense, see: + # https://github.com/yarnpkg/yarn/issues/6312#issuecomment-429685210 + - name: Install Dependencies + run: yarn install --network-concurrency 1 - - name: Run Node Tests - run: yarn test:node + - name: Build All + run: yarn build:prod - - name: Run Browser Tests - run: yarn build:browser:prod && yarn test:browser + - name: Run Node Tests + run: yarn test:node - - name: Run Prettier Checks - run: yarn fmt && (git diff-index --quiet HEAD; git diff) + - name: Run Browser Tests + run: yarn test:browser - - name: Run Linter - run: yarn lint + - name: Run Prettier Checks + run: yarn fmt && (git diff-index --quiet HEAD; git diff) + + - name: Run Linter + run: yarn lint diff --git a/.github/workflows/update-completed-sprint-on-issue-closed.yml b/.github/workflows/update-completed-sprint-on-issue-closed.yml new file mode 100644 index 000000000..8ca1cf26e --- /dev/null +++ b/.github/workflows/update-completed-sprint-on-issue-closed.yml @@ -0,0 +1,25 @@ +name: Update CompletedSprint on Issue Closed + +on: + issues: + types: [closed] + pull_request: + types: [closed] + +jobs: + update-completed-sprint: + runs-on: ubuntu-latest + steps: + - name: Generate token + id: generate_token + uses: tibdex/github-app-token@v1 + with: + app_id: ${{ secrets.GH_PROJECT_MANAGEMENT_APP_ID }} + private_key: ${{ secrets.GH_PROJECT_MANAGEMENT_APP_PEM }} + - name: Update CompletedSprint on Issue Closed + id: update_completedsprint_on_issue_closed + uses: stellar/actions/update-completed-sprint-on-issue-closed@main + with: + project_name: "Platform Scrum" + field_name: "CompletedSprint" + project_token: ${{ steps.generate_token.outputs.token }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 10cb3801e..6cda7462a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,54 @@ ## Unreleased +## [v9.0.0](https://github.com/stellar/js-stellar-base/compare/v8.2.2..v9.0.0) + +This is a large update and the following changelog incorporates ALL changes across the `beta.N` versions of this upgrade. + +This version is marked by a major version bump because of the significant upgrades to underlying dependencies. While there should be no noticeable API changes from a downstream perspective, there may be breaking changes in the way that this library is bundled. + +The browser bundle size has decreased **significantly**: + + * `stellar-base.min.js` is **340 KiB**, down from **1.2 MiB** previously. + * the new, unminified `stellar-base.js` is **895 KiB**. + +### Breaking Changes + +- The build system has been completely overhauled to support Webpack 5 ([#584](https://github.com/stellar/js-stellar-base/pull/584), [#585](https://github.com/stellar/js-stellar-base/pull/585)). + +Though we have tried to maintain compatibility with older JavaScript implementations, this still means you may need to update your build pipeline to transpile to certain targets. + +### Fixes + +- Fixes a bug when sorting mixed-case assets for liquidity pools ([#606](https://github.com/stellar/js-stellar-base/pull/606)). +- Documentation is fixed and should generate correctly on https://stellar.github.io/js-stellar-base/ ([#609](https://github.com/stellar/js-stellar-base/pull/609)). + +### Updates + +- XDR has been updated to its latest version (both `curr` and `next` versions, [#587](https://github.com/stellar/js-stellar-base/pull/587)). +- Drop the `lodash` dependency entirely ([#624](https://github.com/stellar/js-stellar-base/issues/624)). +- Drop the `crc` dependency and inline it to lower bundle size ([#621](https://github.com/stellar/js-stellar-base/pull/621)). +- Upgrade all dependencies to their latest versions ([#608](https://github.com/stellar/js-stellar-base/pull/608)). + + +## [v9.0.0-beta.3](https://github.com/stellar/js-stellar-base/compare/v9.0.0-beta.1..v9.0.0-beta.2) + +### Fix + +- Fixes a bug when sorting mixed-case assets for liquidity pools ([#606](https://github.com/stellar/js-stellar-base/pull/606)). + +### Update +- Upgrade all dependencies to their latest versions ([#608](https://github.com/stellar/js-stellar-base/pull/608)). +- Drop the `crc` dependency and inline it to lower bundle size ([#621](https://github.com/stellar/js-stellar-base/pull/621)). + + +## [v9.0.0-beta.2](https://github.com/stellar/js-stellar-base/compare/v9.0.0-beta.1..v9.0.0-beta.2) + +### Update + +- Upgrades the `js-xdr` dependency (major performance improvements, see [`js-xdr@v2.0.0`](https://github.com/stellar/js-xdr/releases/tag/v2.0.0)) and other dependencies to their latest versions ([#592](https://github.com/stellar/js-stellar-base/pull/592)). + + ## [v9.0.0-beta.1](https://github.com/stellar/js-stellar-base/compare/v9.0.0-beta.0..v9.0.0-beta.1) ### Fix diff --git a/package.json b/package.json index 4b68cbb1e..ad3ee8006 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "10.0.0-soroban.1", "description": "Low-level support library for the Stellar network.", "main": "./lib/index.js", + "browser": "./dist/stellar-base.min.js", "types": "./types/index.d.ts", "scripts": { "build": "yarn build:node && yarn build:browser", @@ -22,6 +23,9 @@ "clean": "rm -rf lib/ dist/ coverage/ .nyc_output/", "_nyc": "nyc --nycrc-path ./config/.nycrc" }, + "browser": { + "sodium-native": false + }, "mocha": { "require": [ "@babel/register", @@ -52,9 +56,6 @@ "yarn lint" ] }, - "browser": { - "sodium-native": false - }, "repository": { "type": "git", "url": "https://github.com/stellar/js-stellar-base.git" @@ -114,8 +115,8 @@ "terser-webpack-plugin": "^5.3.8", "ts-node": "^10.9.1", "typescript": "^5.0.3", - "webpack": "^5.82.0", - "webpack-cli": "^5.1.0" + "webpack": "^5.82.1", + "webpack-cli": "^5.1.1" }, "dependencies": { "base32.js": "^0.1.0", @@ -124,7 +125,6 @@ "crc": "^4.3.2", "crypto-browserify": "^3.12.0", "js-xdr": "^3.0.0", - "lodash": "^4.17.21", "sha.js": "^2.3.6", "tweetnacl": "^1.0.3" }, diff --git a/src/account.js b/src/account.js index 5e20d27fe..825634539 100644 --- a/src/account.js +++ b/src/account.js @@ -1,4 +1,3 @@ -import isString from 'lodash/isString'; import BigNumber from 'bignumber.js'; import { StrKey } from './strkey'; @@ -29,7 +28,7 @@ export class Account { if (!StrKey.isValidEd25519PublicKey(accountId)) { throw new Error('accountId is invalid'); } - if (!isString(sequence)) { + if (!(typeof sequence === 'string')) { throw new Error('sequence must be of type string'); } diff --git a/src/asset.js b/src/asset.js index 2ec694860..3fcbdf640 100644 --- a/src/asset.js +++ b/src/asset.js @@ -1,6 +1,4 @@ -import clone from 'lodash/clone'; -import padEnd from 'lodash/padEnd'; -import trimEnd from 'lodash/trimEnd'; +import { trimEnd } from './util/util'; import xdr from './xdr'; import { Keypair } from './keypair'; import { StrKey } from './strkey'; @@ -119,7 +117,7 @@ export class Asset { // pad code with null bytes if necessary const padLength = this.code.length <= 4 ? 4 : 12; - const paddedCode = padEnd(this.code, padLength, '\0'); + const paddedCode = this.code.padEnd(padLength, '\0'); // eslint-disable-next-line new-cap const assetType = new xdrType({ @@ -134,14 +132,20 @@ export class Asset { * @returns {string} Asset code */ getCode() { - return clone(this.code); + if (this.code === undefined) { + return undefined; + } + return String(this.code); } /** * @returns {string} Asset issuer */ getIssuer() { - return clone(this.issuer); + if (this.issuer === undefined) { + return undefined; + } + return String(this.issuer); } /** @@ -257,9 +261,7 @@ export class Asset { * -1 if `a < b`, 0 if `a == b`, and 1 if `a > b` * * @warning No type-checks are done on the parameters - * - * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare */ function asciiCompare(a, b) { - return a.localeCompare(b, 'en', { caseFirst: 'upper' }); + return Buffer.compare(Buffer.from(a, 'ascii'), Buffer.from(b, 'ascii')); } diff --git a/src/keypair.js b/src/keypair.js index 7d3de0cd0..c2cc6b8f6 100644 --- a/src/keypair.js +++ b/src/keypair.js @@ -1,8 +1,6 @@ /* eslint no-bitwise: ["error", {"allow": ["^"]}] */ import nacl from 'tweetnacl'; -import isUndefined from 'lodash/isUndefined'; -import isString from 'lodash/isString'; import { sign, verify, generate } from './signing'; import { StrKey } from './strkey'; @@ -139,8 +137,8 @@ export class Keypair { * @return {xdr.MuxedAccount} */ xdrMuxedAccount(id) { - if (!isUndefined(id)) { - if (!isString(id)) { + if (typeof id !== 'undefined') { + if (typeof id !== 'string') { throw new TypeError(`expected string for ID, got ${typeof id}`); } diff --git a/src/liquidity_pool_asset.js b/src/liquidity_pool_asset.js index 152260fa3..38c3adddc 100644 --- a/src/liquidity_pool_asset.js +++ b/src/liquidity_pool_asset.js @@ -1,4 +1,3 @@ -import clone from 'lodash/clone'; import xdr from './xdr'; import { Asset } from './asset'; import { @@ -83,11 +82,12 @@ export class LiquidityPoolAsset { * @returns {LiquidityPoolParameters} Liquidity pool parameters. */ getLiquidityPoolParameters() { - return clone({ + return { + ...this, assetA: this.assetA, assetB: this.assetB, fee: this.fee - }); + }; } /** diff --git a/src/liquidity_pool_id.js b/src/liquidity_pool_id.js index a82ae6901..e1e40402d 100644 --- a/src/liquidity_pool_id.js +++ b/src/liquidity_pool_id.js @@ -1,4 +1,3 @@ -import clone from 'lodash/clone'; import xdr from './xdr'; /** @@ -53,7 +52,7 @@ export class LiquidityPoolId { * @returns {string} Liquidity pool ID. */ getLiquidityPoolId() { - return clone(this.liquidityPoolId); + return String(this.liquidityPoolId); } /** diff --git a/src/memo.js b/src/memo.js index 8b2cc11c8..c2781d12f 100644 --- a/src/memo.js +++ b/src/memo.js @@ -1,6 +1,3 @@ -import isUndefined from 'lodash/isUndefined'; -import isString from 'lodash/isString'; -import clone from 'lodash/clone'; import { UnsignedHyper } from 'js-xdr'; import BigNumber from 'bignumber.js'; import xdr from './xdr'; @@ -52,7 +49,7 @@ export class Memo { case MemoReturn: Memo._validateHashValue(value); // We want MemoHash and MemoReturn to have Buffer as a value - if (isString(value)) { + if (typeof value === 'string') { this._value = Buffer.from(value, 'hex'); } break; @@ -65,7 +62,7 @@ export class Memo { * Contains memo type: `MemoNone`, `MemoID`, `MemoText`, `MemoHash` or `MemoReturn` */ get type() { - return clone(this._type); + return this._type; } set type(type) { @@ -85,7 +82,7 @@ export class Memo { return null; case MemoID: case MemoText: - return clone(this._value); + return this._value; case MemoHash: case MemoReturn: return Buffer.from(this._value); @@ -101,7 +98,7 @@ export class Memo { static _validateIdValue(value) { const error = new Error(`Expects a int64 as a string. Got ${value}`); - if (!isString(value)) { + if (typeof value !== 'string') { throw error; } @@ -134,12 +131,12 @@ export class Memo { `Expects a 32 byte hash value or hex encoded string. Got ${value}` ); - if (value === null || isUndefined(value)) { + if (value === null || typeof value === 'undefined') { throw error; } let valueBuffer; - if (isString(value)) { + if (typeof value === 'string') { if (!/^[0-9A-Fa-f]{64}$/g.test(value)) { throw error; } diff --git a/src/muxed_account.js b/src/muxed_account.js index 0c44e7773..edb2fd91b 100644 --- a/src/muxed_account.js +++ b/src/muxed_account.js @@ -1,5 +1,3 @@ -import isString from 'lodash/isString'; - import xdr from './xdr'; import { Account } from './account'; import { StrKey } from './strkey'; @@ -99,7 +97,7 @@ export class MuxedAccount { } setId(id) { - if (!isString(id)) { + if (typeof id !== 'string') { throw new Error('id should be a string representing a number (uint64)'); } diff --git a/src/operation.js b/src/operation.js index d9b561952..0712f66f8 100644 --- a/src/operation.js +++ b/src/operation.js @@ -2,11 +2,7 @@ import { Hyper } from 'js-xdr'; import BigNumber from 'bignumber.js'; -import trimEnd from 'lodash/trimEnd'; -import isUndefined from 'lodash/isUndefined'; -import isString from 'lodash/isString'; -import isNumber from 'lodash/isNumber'; -import isFinite from 'lodash/isFinite'; +import { trimEnd } from './util/util'; import { best_r } from './util/continued_fraction'; import { Asset } from './asset'; import { LiquidityPoolAsset } from './liquidity_pool_asset'; @@ -401,8 +397,23 @@ export class Operation { return result; } + /** + * Validates that a given amount is possible for a Stellar asset. + * + * Specifically, this means that the amount is well, a valid number, but also + * that it is within the int64 range and has no more than 7 decimal levels of + * precision. + * + * Note that while smart contracts allow larger amounts, this is oriented + * towards validating the standard Stellar operations. + * + * @param {string} value the amount to validate + * @param {boolean} allowZero optionally, whether or not zero is valid (default: no) + * + * @returns {boolean} + */ static isValidAmount(value, allowZero = false) { - if (!isString(value)) { + if (typeof value !== 'string') { return false; } @@ -447,16 +458,18 @@ export class Operation { * @returns {undefined|Number} */ static _checkUnsignedIntValue(name, value, isValidFunction = null) { - if (isUndefined(value)) { + if (typeof value === 'undefined') { return undefined; } - if (isString(value)) { + if (typeof value === 'string') { value = parseFloat(value); } switch (true) { - case !isNumber(value) || !isFinite(value) || value % 1 !== 0: + case typeof value !== 'number' || + !Number.isFinite(value) || + value % 1 !== 0: throw new Error(`${name} value is invalid`); case value < 0: throw new Error(`${name} value must be unsigned`); diff --git a/src/operations/allow_trust.js b/src/operations/allow_trust.js index 301a546e3..c3c719360 100644 --- a/src/operations/allow_trust.js +++ b/src/operations/allow_trust.js @@ -1,4 +1,3 @@ -import padEnd from 'lodash/padEnd'; import xdr from '../xdr'; import { Keypair } from '../keypair'; import { StrKey } from '../strkey'; @@ -27,10 +26,10 @@ export function allowTrust(opts) { const attributes = {}; attributes.trustor = Keypair.fromPublicKey(opts.trustor).xdrAccountId(); if (opts.assetCode.length <= 4) { - const code = padEnd(opts.assetCode, 4, '\0'); + const code = opts.assetCode.padEnd(4, '\0'); attributes.asset = xdr.AssetCode.assetTypeCreditAlphanum4(code); } else if (opts.assetCode.length <= 12) { - const code = padEnd(opts.assetCode, 12, '\0'); + const code = opts.assetCode.padEnd(12, '\0'); attributes.asset = xdr.AssetCode.assetTypeCreditAlphanum12(code); } else { throw new Error('Asset code must be 12 characters at max.'); diff --git a/src/operations/bump_sequence.js b/src/operations/bump_sequence.js index 40992ad8b..a14884360 100644 --- a/src/operations/bump_sequence.js +++ b/src/operations/bump_sequence.js @@ -1,6 +1,5 @@ import { Hyper } from 'js-xdr'; import BigNumber from 'bignumber.js'; -import isString from 'lodash/isString'; import xdr from '../xdr'; /** @@ -15,7 +14,7 @@ import xdr from '../xdr'; export function bumpSequence(opts) { const attributes = {}; - if (!isString(opts.bumpTo)) { + if (typeof opts.bumpTo !== 'string') { throw new Error('bumpTo must be a string'); } diff --git a/src/operations/change_trust.js b/src/operations/change_trust.js index d6e4a8112..656418501 100644 --- a/src/operations/change_trust.js +++ b/src/operations/change_trust.js @@ -1,4 +1,3 @@ -import isUndefined from 'lodash/isUndefined'; import { Hyper } from 'js-xdr'; import BigNumber from 'bignumber.js'; import xdr from '../xdr'; @@ -30,7 +29,7 @@ export function changeTrust(opts) { throw new TypeError('asset must be Asset or LiquidityPoolAsset'); } - if (!isUndefined(opts.limit) && !this.isValidAmount(opts.limit, true)) { + if (opts.limit !== undefined && !this.isValidAmount(opts.limit, true)) { throw new TypeError(this.constructAmountRequirementsError('limit')); } diff --git a/src/operations/create_claimable_balance.js b/src/operations/create_claimable_balance.js index 706472a66..f8ad9e573 100644 --- a/src/operations/create_claimable_balance.js +++ b/src/operations/create_claimable_balance.js @@ -53,7 +53,9 @@ export function createClaimableBalance(opts) { const attributes = {}; attributes.asset = opts.asset.toXDRObject(); attributes.amount = this._toXDRAmount(opts.amount); - attributes.claimants = opts.claimants.map((c) => c.toXDRObject()); + attributes.claimants = Object.values(opts.claimants).map((c) => + c.toXDRObject() + ); const createClaimableBalanceOp = new xdr.CreateClaimableBalanceOp(attributes); diff --git a/src/operations/create_passive_sell_offer.js b/src/operations/create_passive_sell_offer.js index 8467d74ae..e9a1c3c66 100644 --- a/src/operations/create_passive_sell_offer.js +++ b/src/operations/create_passive_sell_offer.js @@ -1,4 +1,3 @@ -import isUndefined from 'lodash/isUndefined'; import xdr from '../xdr'; /** @@ -27,7 +26,7 @@ export function createPassiveSellOffer(opts) { throw new TypeError(this.constructAmountRequirementsError('amount')); } attributes.amount = this._toXDRAmount(opts.amount); - if (isUndefined(opts.price)) { + if (opts.price === undefined) { throw new TypeError('price argument is required'); } attributes.price = this._toXDRPrice(opts.price); diff --git a/src/operations/liquidity_pool_deposit.js b/src/operations/liquidity_pool_deposit.js index 60ae998a9..6bdbce904 100644 --- a/src/operations/liquidity_pool_deposit.js +++ b/src/operations/liquidity_pool_deposit.js @@ -1,4 +1,3 @@ -import isUndefined from 'lodash/isUndefined'; import xdr from '../xdr'; /** @@ -41,12 +40,12 @@ export function liquidityPoolDeposit(opts = {}) { } attributes.maxAmountB = this._toXDRAmount(maxAmountB); - if (isUndefined(minPrice)) { + if (minPrice === undefined) { throw new TypeError('minPrice argument is required'); } attributes.minPrice = this._toXDRPrice(minPrice); - if (isUndefined(maxPrice)) { + if (maxPrice === undefined) { throw new TypeError('maxPrice argument is required'); } attributes.maxPrice = this._toXDRPrice(maxPrice); diff --git a/src/operations/manage_buy_offer.js b/src/operations/manage_buy_offer.js index b76b9559e..83d5ac967 100644 --- a/src/operations/manage_buy_offer.js +++ b/src/operations/manage_buy_offer.js @@ -1,4 +1,3 @@ -import isUndefined from 'lodash/isUndefined'; import { Hyper } from 'js-xdr'; import xdr from '../xdr'; /** @@ -26,12 +25,12 @@ export function manageBuyOffer(opts) { throw new TypeError(this.constructAmountRequirementsError('buyAmount')); } attributes.buyAmount = this._toXDRAmount(opts.buyAmount); - if (isUndefined(opts.price)) { + if (opts.price === undefined) { throw new TypeError('price argument is required'); } attributes.price = this._toXDRPrice(opts.price); - if (!isUndefined(opts.offerId)) { + if (opts.offerId !== undefined) { opts.offerId = opts.offerId.toString(); } else { opts.offerId = '0'; diff --git a/src/operations/manage_data.js b/src/operations/manage_data.js index 0746fcc88..faff247fa 100644 --- a/src/operations/manage_data.js +++ b/src/operations/manage_data.js @@ -1,4 +1,3 @@ -import isString from 'lodash/isString'; import xdr from '../xdr'; /** @@ -14,20 +13,20 @@ import xdr from '../xdr'; export function manageData(opts) { const attributes = {}; - if (!(isString(opts.name) && opts.name.length <= 64)) { + if (!(typeof opts.name === 'string' && opts.name.length <= 64)) { throw new Error('name must be a string, up to 64 characters'); } attributes.dataName = opts.name; if ( - !isString(opts.value) && + typeof opts.value !== 'string' && !Buffer.isBuffer(opts.value) && opts.value !== null ) { throw new Error('value must be a string, Buffer or null'); } - if (isString(opts.value)) { + if (typeof opts.value === 'string') { attributes.dataValue = Buffer.from(opts.value); } else { attributes.dataValue = opts.value; diff --git a/src/operations/manage_sell_offer.js b/src/operations/manage_sell_offer.js index 092668059..f22cce7ea 100644 --- a/src/operations/manage_sell_offer.js +++ b/src/operations/manage_sell_offer.js @@ -1,4 +1,3 @@ -import isUndefined from 'lodash/isUndefined'; import { Hyper } from 'js-xdr'; import xdr from '../xdr'; /** @@ -26,12 +25,12 @@ export function manageSellOffer(opts) { throw new TypeError(this.constructAmountRequirementsError('amount')); } attributes.amount = this._toXDRAmount(opts.amount); - if (isUndefined(opts.price)) { + if (opts.price === undefined) { throw new TypeError('price argument is required'); } attributes.price = this._toXDRPrice(opts.price); - if (!isUndefined(opts.offerId)) { + if (opts.offerId !== undefined) { opts.offerId = opts.offerId.toString(); } else { opts.offerId = '0'; diff --git a/src/operations/revoke_sponsorship.js b/src/operations/revoke_sponsorship.js index 943a9d88e..73e374c1c 100644 --- a/src/operations/revoke_sponsorship.js +++ b/src/operations/revoke_sponsorship.js @@ -1,4 +1,3 @@ -import isString from 'lodash/isString'; import xdr from '../xdr'; import { StrKey } from '../strkey'; import { Keypair } from '../keypair'; @@ -110,7 +109,7 @@ export function revokeOfferSponsorship(opts = {}) { if (!StrKey.isValidEd25519PublicKey(opts.seller)) { throw new Error('seller is invalid'); } - if (!isString(opts.offerId)) { + if (typeof opts.offerId !== 'string') { throw new Error('offerId is invalid'); } @@ -150,7 +149,7 @@ export function revokeDataSponsorship(opts = {}) { if (!StrKey.isValidEd25519PublicKey(opts.account)) { throw new Error('account is invalid'); } - if (!isString(opts.name) || opts.name.length > 64) { + if (typeof opts.name !== 'string' || opts.name.length > 64) { throw new Error('name must be a string, up to 64 characters'); } @@ -185,7 +184,7 @@ export function revokeDataSponsorship(opts = {}) { * */ export function revokeClaimableBalanceSponsorship(opts = {}) { - if (!isString(opts.balanceId)) { + if (typeof opts.balanceId !== 'string') { throw new Error('balanceId is invalid'); } @@ -219,7 +218,7 @@ export function revokeClaimableBalanceSponsorship(opts = {}) { * */ export function revokeLiquidityPoolSponsorship(opts = {}) { - if (!isString(opts.liquidityPoolId)) { + if (typeof opts.liquidityPoolId !== 'string') { throw new Error('liquidityPoolId is invalid'); } @@ -275,7 +274,7 @@ export function revokeSignerSponsorship(opts = {}) { key = new xdr.SignerKey.signerKeyTypeEd25519(rawKey); } else if (opts.signer.preAuthTx) { let buffer; - if (isString(opts.signer.preAuthTx)) { + if (typeof opts.signer.preAuthTx === 'string') { buffer = Buffer.from(opts.signer.preAuthTx, 'hex'); } else { buffer = opts.signer.preAuthTx; @@ -288,7 +287,7 @@ export function revokeSignerSponsorship(opts = {}) { key = new xdr.SignerKey.signerKeyTypePreAuthTx(buffer); } else if (opts.signer.sha256Hash) { let buffer; - if (isString(opts.signer.sha256Hash)) { + if (typeof opts.signer.sha256Hash === 'string') { buffer = Buffer.from(opts.signer.sha256Hash, 'hex'); } else { buffer = opts.signer.sha256Hash; diff --git a/src/operations/set_options.js b/src/operations/set_options.js index beedf8eec..9044a8e52 100644 --- a/src/operations/set_options.js +++ b/src/operations/set_options.js @@ -1,8 +1,5 @@ /* eslint-disable no-param-reassign */ -import isUndefined from 'lodash/isUndefined'; -import isString from 'lodash/isString'; - import xdr from '../xdr'; import { Keypair } from '../keypair'; import { StrKey } from '../strkey'; @@ -87,7 +84,7 @@ export function setOptions(opts) { weightCheckFunction ); - if (!isUndefined(opts.homeDomain) && !isString(opts.homeDomain)) { + if (opts.homeDomain !== undefined && typeof opts.homeDomain !== 'string') { throw new TypeError('homeDomain argument must be of type String'); } attributes.homeDomain = opts.homeDomain; @@ -116,7 +113,7 @@ export function setOptions(opts) { } if (opts.signer.preAuthTx) { - if (isString(opts.signer.preAuthTx)) { + if (typeof opts.signer.preAuthTx === 'string') { opts.signer.preAuthTx = Buffer.from(opts.signer.preAuthTx, 'hex'); } @@ -135,7 +132,7 @@ export function setOptions(opts) { } if (opts.signer.sha256Hash) { - if (isString(opts.signer.sha256Hash)) { + if (typeof opts.signer.sha256Hash === 'string') { opts.signer.sha256Hash = Buffer.from(opts.signer.sha256Hash, 'hex'); } diff --git a/src/strkey.js b/src/strkey.js index abf3ade2d..b40157aa9 100644 --- a/src/strkey.js +++ b/src/strkey.js @@ -1,10 +1,6 @@ -/* eslint no-bitwise: ["error", {"allow": ["<<"]}] */ +/* eslint no-bitwise: ["error", {"allow": ["<<", ">>", "^", "&", "&="]}] */ import base32 from 'base32.js'; -import crc from 'crc'; -import isUndefined from 'lodash/isUndefined'; -import isNull from 'lodash/isNull'; -import isString from 'lodash/isString'; import { verifyChecksum } from './util/checksum'; const versionBytes = { @@ -228,7 +224,7 @@ export class StrKey { * and (c) output length. */ function isValid(versionByteName, encoded) { - if (!isString(encoded)) { + if (typeof encoded !== 'string') { return false; } @@ -292,7 +288,7 @@ function isValid(versionByteName, encoded) { } export function decodeCheck(versionByteName, encoded) { - if (!isString(encoded)) { + if (typeof encoded !== 'string') { throw new TypeError('encoded argument must be of type String'); } @@ -308,7 +304,7 @@ export function decodeCheck(versionByteName, encoded) { const expectedVersion = versionBytes[versionByteName]; - if (isUndefined(expectedVersion)) { + if (expectedVersion === undefined) { throw new Error( `${versionByteName} is not a valid version byte name. ` + `Expected one of ${Object.keys(versionBytes).join(', ')}` @@ -331,13 +327,13 @@ export function decodeCheck(versionByteName, encoded) { } export function encodeCheck(versionByteName, data) { - if (isNull(data) || isUndefined(data)) { + if (data === null || data === undefined) { throw new Error('cannot encode null data'); } const versionByte = versionBytes[versionByteName]; - if (isUndefined(versionByte)) { + if (versionByte === undefined) { throw new Error( `${versionByteName} is not a valid version byte name. ` + `Expected one of ${Object.keys(versionBytes).join(', ')}` @@ -355,7 +351,48 @@ export function encodeCheck(versionByteName, data) { // Computes the CRC16-XModem checksum of `payload` in little-endian order function calculateChecksum(payload) { - const checksum = Buffer.alloc(2); - checksum.writeUInt16LE(crc.crc16xmodem(payload), 0); + const crcTable = [ + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, + 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, + 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, + 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, + 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, + 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, + 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, + 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, + 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, + 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, + 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, + 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, + 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, + 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, + 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, + 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, + 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, + 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, + 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, + 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, + 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, + 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, + 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, + 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, + 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, + 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 + ]; + + let crc16 = 0x0; + + for (let i = 0; i < payload.length; i += 1) { + const byte = payload[i]; + const lookupIndex = (crc16 >> 8) ^ byte; + crc16 = (crc16 << 8) ^ crcTable[lookupIndex]; + crc16 &= 0xffff; + } + const checksum = new Uint8Array(2); + checksum[0] = crc16 & 0xff; + checksum[1] = (crc16 >> 8) & 0xff; return checksum; } diff --git a/src/transaction.js b/src/transaction.js index 76acc2972..9d1fb8a4c 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -1,5 +1,3 @@ -import map from 'lodash/map'; - import xdr from './xdr'; import { hash } from './hashing'; @@ -126,7 +124,7 @@ export class Transaction extends TransactionBase { } const operations = tx.operations() || []; - this._operations = map(operations, (op) => Operation.fromXDRObject(op)); + this._operations = operations.map((op) => Operation.fromXDRObject(op)); } /** diff --git a/src/transaction_builder.js b/src/transaction_builder.js index c923dd45f..591d230c0 100644 --- a/src/transaction_builder.js +++ b/src/transaction_builder.js @@ -1,9 +1,5 @@ import { UnsignedHyper } from 'js-xdr'; import BigNumber from 'bignumber.js'; -import clone from 'lodash/clone'; -import isUndefined from 'lodash/isUndefined'; -import isString from 'lodash/isString'; -import isArray from 'lodash/isArray'; import xdr from './xdr'; import { Transaction } from './transaction'; @@ -123,7 +119,7 @@ export class TransactionBuilder { throw new Error('must specify source account for the transaction'); } - if (isUndefined(opts.fee)) { + if (opts.fee === undefined) { throw new Error('must specify fee for the transaction (in stroops)'); } @@ -131,12 +127,12 @@ export class TransactionBuilder { this.operations = []; this.baseFee = opts.fee; - this.timebounds = clone(opts.timebounds) || null; - this.ledgerbounds = clone(opts.ledgerbounds) || null; + this.timebounds = opts.timebounds ? { ...opts.timebounds } : null; + this.ledgerbounds = opts.ledgerbounds ? { ...opts.ledgerbounds } : null; this.minAccountSequence = opts.minAccountSequence || null; this.minAccountSequenceAge = opts.minAccountSequenceAge || null; this.minAccountSequenceLedgerGap = opts.minAccountSequenceLedgerGap || null; - this.extraSigners = clone(opts.extraSigners) || null; + this.extraSigners = opts.extraSigners ? [...opts.extraSigners] : null; this.memo = opts.memo || Memo.none(); this.networkPassphrase = opts.networkPassphrase || null; this.sorobanData = unmarshalSorobanData(opts.sorobanData); @@ -413,7 +409,7 @@ export class TransactionBuilder { * @returns {TransactionBuilder} */ setExtraSigners(extraSigners) { - if (!isArray(extraSigners)) { + if (!Array.isArray(extraSigners)) { throw new Error('extra_signers must be an array of strings.'); } @@ -427,7 +423,7 @@ export class TransactionBuilder { throw new Error('extra_signers cannot be longer than 2 elements.'); } - this.extraSigners = clone(extraSigners); + this.extraSigners = [...extraSigners]; return this; } @@ -650,7 +646,7 @@ export class TransactionBuilder { } let feeSourceAccount; - if (isString(feeSource)) { + if (typeof feeSource === 'string') { feeSourceAccount = decodeAddressToMuxedAccount(feeSource); } else { feeSourceAccount = feeSource.xdrMuxedAccount(); diff --git a/src/util/decode_encode_muxed_account.js b/src/util/decode_encode_muxed_account.js index b761860e0..927fcf293 100644 --- a/src/util/decode_encode_muxed_account.js +++ b/src/util/decode_encode_muxed_account.js @@ -1,5 +1,3 @@ -import isString from 'lodash/isString'; - import xdr from '../xdr'; import { StrKey } from '../strkey'; @@ -58,7 +56,7 @@ export function encodeMuxedAccount(address, id) { if (!StrKey.isValidEd25519PublicKey(address)) { throw new Error('address should be a Stellar account ID (G...)'); } - if (!isString(id)) { + if (typeof id !== 'string') { throw new Error('id should be a string representing a number (uint64)'); } diff --git a/src/util/util.js b/src/util/util.js new file mode 100644 index 000000000..b8cd0b1f5 --- /dev/null +++ b/src/util/util.js @@ -0,0 +1,10 @@ +export const trimEnd = (input, char) => { + const isNumber = typeof input === 'number'; + let str = String(input); + + while (str.endsWith(char)) { + str = str.slice(0, -1); + } + + return isNumber ? Number(str) : str; +}; diff --git a/test/support/io-helpers.js b/test/support/io-helpers.js index 674a897e2..e349565b4 100644 --- a/test/support/io-helpers.js +++ b/test/support/io-helpers.js @@ -1,7 +1,5 @@ -import times from 'lodash/times'; - function bufferToArray(buffer, length, offset = 0) { - return times(length, (n) => buffer[offset + n]); + return Array.from({ length }, (_, n) => buffer[offset + n]); } function cursorToArray(io) { diff --git a/test/unit/asset_test.js b/test/unit/asset_test.js index e03a7b765..61191009b 100644 --- a/test/unit/asset_test.js +++ b/test/unit/asset_test.js @@ -364,5 +364,19 @@ describe('Asset', function () { expect(StellarBase.Asset.compare(assetIssuerB, assetIssuerA)).to.eq(1); expect(StellarBase.Asset.compare(assetIssuerB, assetIssuerB)).to.eq(0); }); + + it('test if codes with upper-case letters are sorted before lower-case letters', function () { + // All upper-case letters should come before any lower-case ones + const assetA = new StellarBase.Asset( + 'B', + 'GA7NLOF4EHWMJF6DBXXV2H6AYI7IHYWNFZR6R52BYBLY7TE5Q74AIDRA' + ); + const assetB = new StellarBase.Asset( + 'a', + 'GA7NLOF4EHWMJF6DBXXV2H6AYI7IHYWNFZR6R52BYBLY7TE5Q74AIDRA' + ); + + expect(StellarBase.Asset.compare(assetA, assetB)).to.eq(-1); + }); }); }); diff --git a/test/unit/browser_test.js b/test/unit/browser_test.js deleted file mode 100644 index 426573f4a..000000000 --- a/test/unit/browser_test.js +++ /dev/null @@ -1,7 +0,0 @@ -describe('Browser version tests', function () { - it('lodash is not exported globally', function () { - if (typeof window !== 'undefined') { - expect(typeof _ === 'undefined').to.be.true; - } - }); -}); diff --git a/test/unit/memo_test.js b/test/unit/memo_test.js index ed3432005..60cde0e04 100644 --- a/test/unit/memo_test.js +++ b/test/unit/memo_test.js @@ -8,7 +8,6 @@ describe('Memo.none()', function () { it('converts to/from xdr object', function () { let memo = StellarBase.Memo.none().toXDRObject(); expect(memo.value()).to.be.undefined; - let baseMemo = StellarBase.Memo.fromXDRObject(memo); expect(baseMemo.type).to.be.equal(StellarBase.MemoNone); expect(baseMemo.value).to.be.null; diff --git a/test/unit/operation_test.js b/test/unit/operation_test.js index 736638595..db8e30288 100644 --- a/test/unit/operation_test.js +++ b/test/unit/operation_test.js @@ -1,5 +1,4 @@ import BigNumber from 'bignumber.js'; -import isString from 'lodash/isString'; import { encodeMuxedAccountToAddress, @@ -675,7 +674,7 @@ describe('Operation', function () { var opts = {}; var hash = StellarBase.hash('Tx hash').toString('hex'); - expect(isString(hash)).to.be.true; + expect(typeof hash === 'string').to.be.true; opts.signer = { preAuthTx: hash, @@ -718,7 +717,7 @@ describe('Operation', function () { var opts = {}; var hash = StellarBase.hash('Hash Preimage').toString('hex'); - expect(isString(hash)).to.be.true; + expect(typeof hash === 'string').to.be.true; opts.signer = { sha256Hash: hash, diff --git a/yarn.lock b/yarn.lock index 2f00073ff..1cac27b0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@ampproject/remapping@^2.2.0": version "2.2.1" resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" @@ -1189,12 +1194,9 @@ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" - integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.4.tgz#856a142864530d4059dda415659b48d37db2d556" + integrity sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw== "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" @@ -1426,21 +1428,16 @@ resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== -"@types/node@*", "@types/node@>=10.0.0": - version "20.3.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.1.tgz#e8a83f1aa8b649377bb1fb5d7bac5cb90e784dfe" - integrity sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg== - -"@types/node@^14.14.35": - version "14.18.51" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.51.tgz#cb90935b89c641201c3d07a595c3e22d1cfaa417" - integrity sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA== - -"@types/node@^20.3.2": +"@types/node@*", "@types/node@>=10.0.0", "@types/node@^20.3.2": version "20.3.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898" integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw== +"@types/node@^14.14.35": + version "14.18.52" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.52.tgz#214674cbff9f86fad4bf0c25f31ab9b9fa31110f" + integrity sha512-DGhiXKOHSFVVm+PJD+9Y0ObxXLeG6qwc0HoOn+ooQKeNNu+T2mEJCM5UBDUREKAggl9MHYjb5E71PAmx6MbzIg== + "@types/parsimmon@^1.10.1": version "1.10.6" resolved "https://registry.yarnpkg.com/@types/parsimmon/-/parsimmon-1.10.6.tgz#8fcf95990514d2a7624aa5f630c13bf2427f9cdd" @@ -1464,14 +1461,14 @@ "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^5.55.0": - version "5.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.0.tgz#2f4bea6a3718bed2ba52905358d0f45cd3620d31" - integrity sha512-78B+anHLF1TI8Jn/cD0Q00TBYdMgjdOn980JfAVa9yw5sop8nyTfVOQAv6LWywkOGLclDBtv5z3oxN4w7jxyNg== + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3" + integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.60.0" - "@typescript-eslint/type-utils" "5.60.0" - "@typescript-eslint/utils" "5.60.0" + "@typescript-eslint/scope-manager" "5.60.1" + "@typescript-eslint/type-utils" "5.60.1" + "@typescript-eslint/utils" "5.60.1" debug "^4.3.4" grapheme-splitter "^1.0.4" ignore "^5.2.0" @@ -1479,17 +1476,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.55.0": - version "5.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.0.tgz#08f4daf5fc6548784513524f4f2f359cebb4068a" - integrity sha512-jBONcBsDJ9UoTWrARkRRCgDz6wUggmH5RpQVlt7BimSwaTkTjwypGzKORXbR4/2Hqjk9hgwlon2rVQAjWNpkyQ== - dependencies: - "@typescript-eslint/scope-manager" "5.60.0" - "@typescript-eslint/types" "5.60.0" - "@typescript-eslint/typescript-estree" "5.60.0" - debug "^4.3.4" - -"@typescript-eslint/parser@^5.60.1": +"@typescript-eslint/parser@^5.55.0", "@typescript-eslint/parser@^5.60.1": version "5.60.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3" integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q== @@ -1499,14 +1486,6 @@ "@typescript-eslint/typescript-estree" "5.60.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.60.0": - version "5.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.0.tgz#ae511967b4bd84f1d5e179bb2c82857334941c1c" - integrity sha512-hakuzcxPwXi2ihf9WQu1BbRj1e/Pd8ZZwVTG9kfbxAMZstKz8/9OoexIwnmLzShtsdap5U/CoQGRCWlSuPbYxQ== - dependencies: - "@typescript-eslint/types" "5.60.0" - "@typescript-eslint/visitor-keys" "5.60.0" - "@typescript-eslint/scope-manager@5.60.1": version "5.60.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb" @@ -1515,40 +1494,22 @@ "@typescript-eslint/types" "5.60.1" "@typescript-eslint/visitor-keys" "5.60.1" -"@typescript-eslint/type-utils@5.60.0": - version "5.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.0.tgz#69b09087eb12d7513d5b07747e7d47f5533aa228" - integrity sha512-X7NsRQddORMYRFH7FWo6sA9Y/zbJ8s1x1RIAtnlj6YprbToTiQnM6vxcMu7iYhdunmoC0rUWlca13D5DVHkK2g== +"@typescript-eslint/type-utils@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4" + integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A== dependencies: - "@typescript-eslint/typescript-estree" "5.60.0" - "@typescript-eslint/utils" "5.60.0" + "@typescript-eslint/typescript-estree" "5.60.1" + "@typescript-eslint/utils" "5.60.1" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.60.0", "@typescript-eslint/types@^5.56.0": - version "5.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.0.tgz#3179962b28b4790de70e2344465ec97582ce2558" - integrity sha512-ascOuoCpNZBccFVNJRSC6rPq4EmJ2NkuoKnd6LDNyAQmdDnziAtxbCGWCbefG1CNzmDvd05zO36AmB7H8RzKPA== - -"@typescript-eslint/types@5.60.1": +"@typescript-eslint/types@5.60.1", "@typescript-eslint/types@^5.56.0": version "5.60.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561" integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg== -"@typescript-eslint/typescript-estree@5.60.0", "@typescript-eslint/typescript-estree@^5.55.0": - version "5.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.0.tgz#4ddf1a81d32a850de66642d9b3ad1e3254fb1600" - integrity sha512-R43thAuwarC99SnvrBmh26tc7F6sPa2B3evkXp/8q954kYL6Ro56AwASYWtEEi+4j09GbiNAHqYwNNZuNlARGQ== - dependencies: - "@typescript-eslint/types" "5.60.0" - "@typescript-eslint/visitor-keys" "5.60.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/typescript-estree@5.60.1": +"@typescript-eslint/typescript-estree@5.60.1", "@typescript-eslint/typescript-estree@^5.55.0": version "5.60.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834" integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw== @@ -1561,28 +1522,20 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.60.0", "@typescript-eslint/utils@^5.55.0": - version "5.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.0.tgz#4667c5aece82f9d4f24a667602f0f300864b554c" - integrity sha512-ba51uMqDtfLQ5+xHtwlO84vkdjrqNzOnqrnwbMHMRY8Tqeme8C2Q8Fc7LajfGR+e3/4LoYiWXUM6BpIIbHJ4hQ== +"@typescript-eslint/utils@5.60.1", "@typescript-eslint/utils@^5.55.0": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80" + integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.60.0" - "@typescript-eslint/types" "5.60.0" - "@typescript-eslint/typescript-estree" "5.60.0" + "@typescript-eslint/scope-manager" "5.60.1" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/typescript-estree" "5.60.1" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.60.0": - version "5.60.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.0.tgz#b48b29da3f5f31dd1656281727004589d2722a66" - integrity sha512-wm9Uz71SbCyhUKgcaPRauBdTegUyY/ZWl8gLwD/i/ybJqscrrdVSFImpvUz16BLPChIeKBK5Fa9s6KDQjsjyWw== - dependencies: - "@typescript-eslint/types" "5.60.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.60.1": version "5.60.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434" @@ -2340,9 +2293,9 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001503: - version "1.0.30001506" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001506.tgz#35bd814b310a487970c585430e9e80ee23faf14b" - integrity sha512-6XNEcpygZMCKaufIcgpQNZNf00GEqc7VQON+9Rd0K1bMYo8xhMZRAo5zpbnbMNizi4YNgIDAFrdykWsvY3H4Hw== + version "1.0.30001509" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14" + integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA== caseless@~0.12.0: version "0.12.0" @@ -2941,9 +2894,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.431: - version "1.4.438" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.438.tgz#425f0d51862d36f90817d6dfb7fa2a53ff6a0a73" - integrity sha512-x94U0FhphEsHsOloCvlsujHCvoir0ZQ73ZAs/QN4PLx98uNvyEU79F75rq1db75Bx/atvuh7KPeuxelh+xfYJw== + version "1.4.445" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.445.tgz#058d2c5f3a2981ab1a37440f5a5e42d15672aa6d" + integrity sha512-++DB+9VK8SBJwC+X1zlMfJ1tMA3F0ipi39GdEp+x3cV2TyBihqAgad8cNMWtLDEkbH39nlDQP7PfGrDr3Dr7HA== elliptic@^6.5.3: version "6.5.4" @@ -2986,9 +2939,9 @@ engine.io-parser@~5.1.0: integrity sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w== engine.io@~6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.0.tgz#02b9d9941c0d3ab2d46628e98ac3331dd533dff0" - integrity sha512-UlfoK1iD62Hkedw2TmuHdhDsZCGaAyp+LZ/AvnImjYBeWagA3qIEETum90d6shMeFZiDuGT66zVCdx1wKYKGGg== + version "6.5.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.1.tgz#59725f8593ccc891abb47f1efcdc52a089525a56" + integrity sha512-mGqhI+D7YxS9KJMppR6Iuo37Ed3abhU8NdfgSvJSDUafQutrN+sPTncJYTyM9+tkhSmWodKtVYGPPHyXJEwEQA== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -3020,9 +2973,9 @@ entities@~2.1.0: integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== envinfo@^7.7.3: - version "7.9.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.9.0.tgz#47594a13081be0d9be6e513534e8c58dbb26c7a1" - integrity sha512-RODB4txU+xImYDemN5DqaKC0CHk05XSVkOX4pq0hK26Qx+1LChkuOyUDlGEjYb3ACr0n9qBhFjg37hQuJvpkRQ== + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== es-abstract@^1.19.0, es-abstract@^1.20.4: version "1.21.2" @@ -4689,9 +4642,9 @@ linkify-it@^3.0.1: uc.micro "^1.0.1" lint-staged@^13.2.2: - version "13.2.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.2.tgz#5e711d3139c234f73402177be2f8dd312e6508ca" - integrity sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA== + version "13.2.3" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" + integrity sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg== dependencies: chalk "5.2.0" cli-truncate "^3.1.0" @@ -5331,16 +5284,16 @@ opt-cli@1.5.1: spawn-command "0.0.2-1" optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" 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" os-browserify@^0.3.0: version "0.3.0" @@ -5699,9 +5652,9 @@ readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.4.0, readable util-deprecate "^1.0.1" readable-stream@^4.0.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.0.tgz#55ce132d60a988c460d75c631e9ccf6a7229b468" - integrity sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg== + version "4.4.1" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.1.tgz#fa0f0878c3bc0c12b6a82e4e58c5dc160e1faaa2" + integrity sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg== dependencies: abort-controller "^3.0.0" buffer "^6.0.3" @@ -5968,9 +5921,9 @@ schema-utils@^4.0.0: ajv-keywords "^5.1.0" "semver@2 >=2.2.1 || 3.x || 4 || 5 || 7", semver@^7.3.4, semver@^7.3.7: - version "7.5.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" - integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -6128,9 +6081,9 @@ socket.io-parser@~4.2.4: debug "~4.3.1" socket.io@^4.4.1: - version "4.7.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.0.tgz#ae21460d5aef23b152d38de64d7c1798cd2d23fc" - integrity sha512-eOpu7oCNiPGBHn9Falg0cAGivp6TpDI3Yt596fbsf+vln8kRLFWxXKrecFrybn/xNYVn9HcdJNAkYToCmTjsyg== + version "4.7.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.1.tgz#9009f31bf7be25478895145e92fbc972ad1db900" + integrity sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw== dependencies: accepts "~1.3.4" base64id "~2.0.0" @@ -6467,9 +6420,9 @@ terser-webpack-plugin@^5.3.7, terser-webpack-plugin@^5.3.8: terser "^5.16.8" terser@^5.16.8: - version "5.18.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.1.tgz#6d8642508ae9fb7b48768e48f16d675c89a78460" - integrity sha512-j1n0Ao919h/Ai5r43VAnfV/7azUYW43GPxK7qSATzrsERfW7+y2QW9Cp9ufnRF5CQUWbnLSo7UJokSWCqg4tsQ== + version "5.18.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" + integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -6569,9 +6522,9 @@ tslib@^1.8.0, tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.1.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" - integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== tslint@5.14.0: version "5.14.0" @@ -6690,9 +6643,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^5.0.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.3.tgz#8d84219244a6b40b6fb2b33cc1c062f715b9e826" - integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== ua-parser-js@^0.7.30: version "0.7.35" @@ -6858,7 +6811,7 @@ watchpack@^2.4.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -webpack-cli@^5.1.0: +webpack-cli@^5.1.1: version "5.1.4" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== @@ -6897,10 +6850,10 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.82.0: - version "5.88.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.0.tgz#a07aa2f8e7a64a8f1cec0c6c2e180e3cb34440c8" - integrity sha512-O3jDhG5e44qIBSi/P6KpcCcH7HD+nYIHVBhdWFxcLOcIGN8zGo5nqF3BjyNCxIh4p1vFdNnreZv2h2KkoAw3lw== +webpack@^5.82.1: + version "5.88.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8" + integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.0" @@ -6981,11 +6934,6 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== -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== - workerpool@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"