From 0128235f467b7e4eeb9fb070e902398ecc0d4b00 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 15 Sep 2026 12:59:56 +0000 Subject: [PATCH 1/2] Implement Liquid address asset balance helper Co-authored-by: Micfinch <142565130+Micfinch@users.noreply.github.com> --- README-liquid.md | 30 ++++++++++++++- examples/html/liquid/addresses.html | 5 +++ examples/nodejs/liquid/addresses.ts | 5 +++ src/app/liquid/addresses.ts | 54 +++++++++++++++++++++++++-- src/interfaces/index.ts | 3 +- src/interfaces/liquid/addresses.ts | 38 +++++++++++++++++++ src/interfaces/liquid/transactions.ts | 1 + 7 files changed, 129 insertions(+), 7 deletions(-) create mode 100644 src/interfaces/liquid/addresses.ts diff --git a/README-liquid.md b/README-liquid.md index 4b7f72a..6049ca6 100644 --- a/README-liquid.md +++ b/README-liquid.md @@ -14,6 +14,7 @@ Interface to access Liquid APIs. - [Get Address Txs Chain](#get-address-txs-chain) - [Get Address Txs Mempool](#get-address-txs-mempool) - [Get Address Txs Utxo](#get-address-txs-utxo) + - [Get Address Asset Balances](#get-address-asset-balances) - Assets - [Get Asset](#get-asset) - [Get Assets](#get-assets) @@ -158,12 +159,37 @@ Get the list of unspent transaction outputs associated with the `address/scripth [ [NodeJS Example](examples/nodejs/liquid/addresses.ts) ] [ [HTML Example](examples/html/liquid/addresses.html) ] [ [Top](#features) ] ```js -const { addresses } = mempoolJS(); +const { + liquid: { addresses }, +} = mempoolJS(); -const addressTxsUtxo = await addresses.getAddressTxsUtxo('15e10745f15593a...'); +const address = 'Go65t19hP2FuhBMYtgbdMDgdmEzNwh1i48'; + +const addressTxsUtxo = await addresses.getAddressTxsUtxo({ address }); console.log(addressTxsUtxo); ``` +### **Get Address Asset Balances** + +Returns Liquid asset balances for an address by grouping its unspent outputs by asset id. + +**Parameters:** + +- {string} address + +[ [NodeJS Example](examples/nodejs/liquid/addresses.ts) ] [ [HTML Example](examples/html/liquid/addresses.html) ] [ [Top](#features) ] + +```js +const { + liquid: { addresses }, +} = mempoolJS(); + +const address = 'Go65t19hP2FuhBMYtgbdMDgdmEzNwh1i48'; + +const addressAssetBalances = await addresses.getAddressAssetBalances({ address }); +console.log(addressAssetBalances); +``` + ### **Get Asset** Returns information about a Liquid asset. diff --git a/examples/html/liquid/addresses.html b/examples/html/liquid/addresses.html index 2ca2b75..4c38a22 100644 --- a/examples/html/liquid/addresses.html +++ b/examples/html/liquid/addresses.html @@ -28,6 +28,11 @@ const addressTxsUtxo = await addresses.getAddressTxsUtxo({ address }); console.log(addressTxsUtxo); + + const addressAssetBalances = await addresses.getAddressAssetBalances({ + address, + }); + console.log(addressAssetBalances); } catch (error) { console.log(error); } diff --git a/examples/nodejs/liquid/addresses.ts b/examples/nodejs/liquid/addresses.ts index 6da344a..83f47f6 100644 --- a/examples/nodejs/liquid/addresses.ts +++ b/examples/nodejs/liquid/addresses.ts @@ -22,6 +22,11 @@ const init = async () => { const addressTxsUtxo = await addresses.getAddressTxsUtxo({ address }); console.log(addressTxsUtxo); + + const addressAssetBalances = await addresses.getAddressAssetBalances({ + address, + }); + console.log(addressAssetBalances); } catch (error) { console.log(error); } diff --git a/src/app/liquid/addresses.ts b/src/app/liquid/addresses.ts index 30a60a9..3847175 100644 --- a/src/app/liquid/addresses.ts +++ b/src/app/liquid/addresses.ts @@ -2,11 +2,12 @@ import { AxiosInstance } from 'axios'; import { Address, AddressTxsUtxo, - AddressInstance, -} from '../../interfaces/bitcoin/addresses'; -import { Tx } from '../../interfaces/bitcoin/transactions'; + AddressLiquidInstance, + AddressAssetBalance, +} from '../../interfaces/liquid/addresses'; +import { Tx } from '../../interfaces/liquid/transactions'; -export const useAddresses = (api: AxiosInstance): AddressInstance => { +export const useAddresses = (api: AxiosInstance): AddressLiquidInstance => { const getAddress = async (params: { address: string }) => { const { data } = await api.get
(`/address/${params.address}`); return data; @@ -42,11 +43,56 @@ export const useAddresses = (api: AxiosInstance): AddressInstance => { return data; }; + const getAddressAssetBalances = async (params: { address: string }) => { + const utxos = await getAddressTxsUtxo(params); + + if (utxos.length === 0) { + return []; + } + + const transactions = await Promise.all( + [...new Set(utxos.map(({ txid }) => txid))].map(async (txid) => { + const { data } = await api.get(`/tx/${txid}`); + return [txid, data] as const; + }) + ); + + const transactionMap = new Map(transactions); + const balances = new Map(); + + utxos.forEach((utxo) => { + const tx = transactionMap.get(utxo.txid); + const txOutput = tx?.vout[utxo.vout]; + const asset_id = utxo.asset || txOutput?.asset; + + if (!asset_id) { + throw new Error(`Asset id not found for Liquid UTXO ${utxo.txid}:${utxo.vout}`); + } + + const currentBalance = balances.get(asset_id); + + if (currentBalance) { + currentBalance.value += utxo.value; + currentBalance.utxo_count += 1; + return; + } + + balances.set(asset_id, { + asset_id, + value: utxo.value, + utxo_count: 1, + }); + }); + + return Array.from(balances.values()).sort((a, b) => b.value - a.value); + }; + return { getAddress, getAddressTxs, getAddressTxsChain, getAddressTxsMempool, getAddressTxsUtxo, + getAddressAssetBalances, }; }; diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts index b85de4c..32ebce6 100644 --- a/src/interfaces/index.ts +++ b/src/interfaces/index.ts @@ -8,6 +8,7 @@ import { TxInstance } from './bitcoin/transactions'; import { WsInstance } from './bitcoin/websockets'; import { AssetsInstance } from './liquid/assets'; +import { AddressLiquidInstance } from './liquid/addresses'; import { BlockLiquidInstance } from './liquid/blocks'; import { TxLiquidInstance } from './liquid/transactions'; import { WsLiquidInstance } from './liquid/websockets'; @@ -32,7 +33,7 @@ export interface MempoolReturn { }; liquid: { assets: AssetsInstance; - addresses: AddressInstance; + addresses: AddressLiquidInstance; blocks: BlockLiquidInstance; fees: FeeInstance; mempool: MempoolInstance; diff --git a/src/interfaces/liquid/addresses.ts b/src/interfaces/liquid/addresses.ts new file mode 100644 index 0000000..2007136 --- /dev/null +++ b/src/interfaces/liquid/addresses.ts @@ -0,0 +1,38 @@ +import { Tx, TxStatus } from './transactions'; + +export interface Address { + address: string; + chain_stats: StatsInfo; + mempool_stats: StatsInfo; +} + +export interface StatsInfo { + funded_txo_count: number; + funded_txo_sum: number; + spent_txo_count: number; + spent_txo_sum: number; + tx_count: number; +} + +export interface AddressTxsUtxo { + txid: string; + vout: number; + status: TxStatus; + value: number; + asset?: string; +} + +export interface AddressAssetBalance { + asset_id: string; + value: number; + utxo_count: number; +} + +export interface AddressLiquidInstance { + getAddress: (params: { address: string }) => Promise
; + getAddressTxs: (params: { address: string, after_txid?: string }) => Promise; + getAddressTxsChain: (params: { address: string }) => Promise; + getAddressTxsMempool: (params: { address: string }) => Promise; + getAddressTxsUtxo: (params: { address: string }) => Promise; + getAddressAssetBalances: (params: { address: string }) => Promise; +} diff --git a/src/interfaces/liquid/transactions.ts b/src/interfaces/liquid/transactions.ts index 5a91595..275a057 100644 --- a/src/interfaces/liquid/transactions.ts +++ b/src/interfaces/liquid/transactions.ts @@ -23,6 +23,7 @@ export interface Vout { scriptpubkey_asm: string; scriptpubkey_type: string; scriptpubkey_address: string; + asset: string; value: number; } From a90b508c679bce1aa5f6184b28d984ef5f645121 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 15 Sep 2026 13:00:28 +0000 Subject: [PATCH 2/2] Fix ES5-compatible Liquid balance aggregation Co-authored-by: Micfinch <142565130+Micfinch@users.noreply.github.com> --- src/app/liquid/addresses.ts | 9 +- yarn.lock | 257 ++++++++++++++++++++++-------------- 2 files changed, 164 insertions(+), 102 deletions(-) diff --git a/src/app/liquid/addresses.ts b/src/app/liquid/addresses.ts index 3847175..999197d 100644 --- a/src/app/liquid/addresses.ts +++ b/src/app/liquid/addresses.ts @@ -50,8 +50,15 @@ export const useAddresses = (api: AxiosInstance): AddressLiquidInstance => { return []; } + const uniqueTxids = utxos.reduce((txids, { txid }) => { + if (txids.indexOf(txid) === -1) { + txids.push(txid); + } + return txids; + }, [] as string[]); + const transactions = await Promise.all( - [...new Set(utxos.map(({ txid }) => txid))].map(async (txid) => { + uniqueTxids.map(async (txid) => { const { data } = await api.get(`/tx/${txid}`); return [txid, data] as const; }) diff --git a/yarn.lock b/yarn.lock index 49c23d6..24dfab3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,10 +24,10 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz" integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== -"@babel/core@^7.2.2": - version "7.26.2" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.2.tgz" - integrity sha512-1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.2.2": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.26.0" @@ -262,7 +262,7 @@ "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.4": version "2.0.4" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz" integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== @@ -330,7 +330,7 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" -"@typescript-eslint/parser@^4.14.2": +"@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.14.2": version "4.14.2" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.14.2.tgz" integrity sha512-ipqSP6EuUsMu3E10EZIApOJgWSpcNXeKZaFeNKQyzqxnQl8eQCbV+TSNsl+s2GViX2d18m1rq3CWgnpOxDPgHg== @@ -375,14 +375,6 @@ "@typescript-eslint/types" "4.14.2" eslint-visitor-keys "^2.0.0" -JSONStream@^1.0.3, JSONStream@^1.3.2: - version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - abbrev@1: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" @@ -421,7 +413,7 @@ acorn@^5.1.0: resolved "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz" integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== -acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -684,7 +676,6 @@ browser-pack-flat@^3.0.9: resolved "https://registry.npmjs.org/browser-pack-flat/-/browser-pack-flat-3.4.2.tgz" integrity sha512-TrUo6n2fGSOCYFAKkt/EkgenytAuuCI88fmXFA60aNFVHvz3CZEBTXYSvvXVpU6xpjM8lj/6vkC6Exn8KPjtPw== dependencies: - JSONStream "^1.3.2" combine-source-map "^0.8.0" convert-source-map "^1.5.1" count-lines "^0.1.2" @@ -692,6 +683,7 @@ browser-pack-flat@^3.0.9: estree-is-member-expression "^1.0.0" estree-is-require "^1.0.0" esutils "^2.0.2" + JSONStream "^1.3.2" path-parse "^1.0.5" scope-analyzer "^2.0.0" stream-combiner "^0.2.2" @@ -705,9 +697,9 @@ browser-pack@^6.0.1, browser-pack@^6.0.2: resolved "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz" integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== dependencies: - JSONStream "^1.0.3" combine-source-map "~0.8.0" defined "^1.0.0" + JSONStream "^1.0.3" safe-buffer "^5.1.1" through2 "^2.0.0" umd "^3.0.0" @@ -799,7 +791,6 @@ browserify@^17.0.0: resolved "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz" integrity sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w== dependencies: - JSONStream "^1.0.3" assert "^1.4.0" browser-pack "^6.0.1" browser-resolve "^2.0.0" @@ -821,6 +812,7 @@ browserify@^17.0.0: https-browserify "^1.0.0" inherits "~2.0.1" insert-module-globals "^7.2.1" + JSONStream "^1.0.3" labeled-stream-splicer "^2.0.0" mkdirp-classic "^0.5.2" module-deps "^6.2.3" @@ -848,7 +840,7 @@ browserify@^17.0.0: vm-browserify "^1.0.0" xtend "^4.0.0" -browserslist@^4.24.0: +browserslist@^4.24.0, "browserslist@>= 4.21.0": version "4.24.2" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz" integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== @@ -1141,7 +1133,7 @@ crypto-browserify@^3.0.0: randombytes "^2.0.0" randomfill "^1.0.3" -d@1, d@^1.0.1: +d@^1.0.1, d@1: version "1.0.1" resolved "https://registry.npmjs.org/d/-/d-1.0.1.tgz" integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== @@ -1166,7 +1158,14 @@ debug@^2.6.8: dependencies: ms "2.0.0" -debug@^3.2.6, debug@^3.2.7: +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -1279,6 +1278,11 @@ domain-browser@^1.2.0: resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + duplexer2@^0.1.2, duplexer2@^0.1.4, duplexer2@~0.1.0, duplexer2@~0.1.2: version "0.1.4" resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" @@ -1286,11 +1290,6 @@ duplexer2@^0.1.2, duplexer2@^0.1.4, duplexer2@~0.1.0, duplexer2@~0.1.2: dependencies: readable-stream "^2.0.2" -duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - duplexify@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.1.tgz" @@ -1411,14 +1410,6 @@ es6-set@^0.1.5, es6-set@~0.1.5: es6-symbol "3.1.1" event-emitter "~0.3.5" -es6-symbol@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" - integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= - dependencies: - d "1" - es5-ext "~0.10.14" - es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.1: version "3.1.3" resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" @@ -1427,6 +1418,14 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.1: d "^1.0.1" ext "^1.1.2" +es6-symbol@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-weak-map@^2.0.1: version "2.0.3" resolved "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" @@ -1494,7 +1493,7 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.19.0: +eslint@*, "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", eslint@^7.19.0: version "7.19.0" resolved "https://registry.npmjs.org/eslint/-/eslint-7.19.0.tgz" integrity sha512-CGlMgJY56JZ9ZSYhJuhow61lMPPjUzWmChFya71Z/jilVos7mR/jPgaEfVGgMBY5DshbKdG8Ezb8FDCHcoMEMg== @@ -1601,7 +1600,12 @@ estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0: +estraverse@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +estraverse@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== @@ -1776,11 +1780,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" @@ -1969,7 +1968,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4, inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1991,11 +1990,11 @@ insert-module-globals@^7.2.1: resolved "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz" integrity sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg== dependencies: - JSONStream "^1.0.3" acorn-node "^1.5.2" combine-source-map "^0.8.0" concat-stream "^1.6.1" is-buffer "^1.1.0" + JSONStream "^1.0.3" path-is-absolute "^1.0.1" process "~0.11.0" through2 "^2.0.0" @@ -2193,6 +2192,14 @@ jsonparse@^1.2.0: resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= +JSONStream@^1.0.3, JSONStream@^1.3.2: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + labeled-stream-splicer@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz" @@ -2353,7 +2360,6 @@ module-deps@^6.2.3: resolved "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz" integrity sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA== dependencies: - JSONStream "^1.0.3" browser-resolve "^2.0.0" cached-path-relative "^1.0.2" concat-stream "~1.6.0" @@ -2361,6 +2367,7 @@ module-deps@^6.2.3: detective "^5.2.0" duplexer2 "^0.1.2" inherits "^2.0.1" + JSONStream "^1.0.3" parents "^1.0.0" readable-stream "^2.0.2" resolve "^1.4.0" @@ -2369,6 +2376,11 @@ module-deps@^6.2.3: through2 "^2.0.0" xtend "^4.0.0" +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -2379,11 +2391,6 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - multi-stage-sourcemap@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz" @@ -2656,11 +2663,6 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - punycode@^1.3.2: version "1.4.1" resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" @@ -2671,6 +2673,11 @@ punycode@^2.1.0: resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" @@ -2703,15 +2710,6 @@ read-only-stream@^2.0.0: dependencies: readable-stream "^2.0.2" -"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.5.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" @@ -2725,6 +2723,42 @@ readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.2.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.0.2: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.1.1: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.5.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@^3.6.2: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" @@ -2734,6 +2768,15 @@ readable-stream@^3.6.2: string_decoder "^1.1.1" util-deprecate "^1.0.1" +"readable-stream@2 || 3": + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -2925,7 +2968,7 @@ source-map@^0.1.34: dependencies: amdefine ">=0.0.4" -source-map@^0.5.6, source-map@~0.5.3: +source-map@^0.5.6: version "0.5.7" resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -2935,6 +2978,11 @@ source-map@^0.6.0, source-map@~0.6.1: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@~0.5.3: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + sourcemap-codec@^1.4.1: version "1.4.8" resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" @@ -2953,14 +3001,6 @@ stream-browserify@^3.0.0: inherits "~2.0.4" readable-stream "^3.5.0" -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - stream-combiner@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz" @@ -2969,6 +3009,14 @@ stream-combiner@^0.2.2: duplexer "~0.1.1" through "~2.3.4" +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + stream-http@^3.0.0: version "3.1.1" resolved "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz" @@ -2992,6 +3040,20 @@ stream-splicer@^2.0.0: inherits "^2.0.1" readable-stream "^2.0.2" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + string-width@^4.2.0: version "4.2.0" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" @@ -3017,20 +3079,6 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" @@ -3116,6 +3164,11 @@ text-table@^0.2.0: resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +through@^2.3.7, "through@>=2.2.7 <3", through@~2.3.4: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + through2@^2.0.0, through2@^2.0.3, through2@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" @@ -3132,11 +3185,6 @@ through2@^3.0.1: inherits "^2.0.4" readable-stream "2 || 3" -"through@>=2.2.7 <3", through@^2.3.7, through@~2.3.4: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - timers-browserify@^1.0.1: version "1.4.2" resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz" @@ -3222,7 +3270,7 @@ tty-browserify@0.0.1: resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz" integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== -type-check@^0.4.0, type-check@~0.4.0: +type-check@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== @@ -3236,6 +3284,13 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-fest@^0.8.1: version "0.8.1" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" @@ -3261,7 +3316,7 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^4.1.3: +typescript@^4.1.3, typescript@>=2.7, "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": version "4.1.3" resolved "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz" integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== @@ -3361,13 +3416,6 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util@0.10.3: - version "0.10.3" - resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - util@~0.12.0: version "0.12.3" resolved "https://registry.npmjs.org/util/-/util-0.12.3.tgz" @@ -3380,6 +3428,13 @@ util@~0.12.0: safe-buffer "^5.1.2" which-typed-array "^1.1.2" +util@0.10.3: + version "0.10.3" + resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + v8-compile-cache@^2.0.3: version "2.2.0" resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz" @@ -3449,7 +3504,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: yallist@^3.0.2: version "3.1.1" resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2FDAmS9NsK8GpDMLrCHPksFT7h3w6TOoUNn2pb7RoXx4g== + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0"