Integrate chopsticks (#9965)

* fork locally feature

* use chopsticks provider

* update

* test locally

* update provider usage

* upgrade chospticks

* upgrade chopsticks

* fix lint

* remove extra code

* add setStorage back with alice

* update chopsticks

* update chopsticks

* updade chospticks version

* fix: chopsticks version

* fix: update and testing

* fix: remove isLocalFork from global var
This commit is contained in:
Qiwei Yang 2024-02-27 20:42:45 +08:00 committed by GitHub
parent fb534d079a
commit 8208fc5a4a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 448 additions and 15 deletions

View File

@ -16,6 +16,7 @@
"type": "module",
"version": "0.133.2-96-x",
"dependencies": {
"@acala-network/chopsticks-core": "^0.9.8",
"@polkadot/apps-config": "^0.133.2-96-x",
"@polkadot/apps-routing": "^0.133.2-96-x",
"@polkadot/dev": "^0.78.4",

View File

@ -2,8 +2,10 @@
"Accounts": "Accounts",
"Developer": "Developer",
"Files": "Files",
"Fork Locally": "Fork Locally",
"Governance": "Governance",
"Initializing connection": "Initializing connection",
"Local fork powered by ": "Local fork powered by ",
"Network": "Network",
"Relay chain": "Relay chain",
"Settings": "Settings",

View File

@ -277,6 +277,7 @@
"Forget": "",
"Forget this account": "",
"Forget this address": "",
"Fork Locally": "",
"Forks": "",
"Free balance": "",
"From JSON": "",
@ -338,6 +339,7 @@
"Lifetime (# of blocks)": "",
"Light theme": "",
"Loading": "",
"Local fork powered by ": "",
"Locked funds (e.g. for staking) are counted.": "",
"Locked1x": "",
"Locked2x": "",

View File

@ -215,6 +215,7 @@
"Forget this asset": "忘记这个资产",
"Forget this code hash": "忘记这个代码哈希",
"Forget this contract": "忘记该合约",
"Fork Locally": "本地分叉",
"Forks": "(Forks)分叉",
"Full Legal Name": "法定全称",
"Future versions of the web-only interface will drop support for non-external accounts, much like the IPFS version.": "未来版本的纯 web 界面将不再支持非外部帐户,这与 IPFS 版本非常相似。",

View File

@ -12,8 +12,8 @@ import Signer from '@polkadot/react-signer';
import Content from './Content/index.js';
import Menu from './Menu/index.js';
import BottomOverlay from './overlays/Bottom.js';
import ConnectingOverlay from './overlays/Connecting.js';
import DotAppsOverlay from './overlays/DotApps.js';
import WarmUp from './WarmUp.js';
export const PORTAL_ID = 'portals';
@ -39,7 +39,7 @@ function Apps ({ className = '' }: Props): React.ReactElement<Props> {
<Content />
</Signer>
<ConnectingOverlay />
<DotAppsOverlay />
<BottomOverlay />
<div id={PORTAL_ID} />
</AccountSidebar>
</StyledDiv>

View File

@ -120,7 +120,11 @@ function loadAffinities (groups: Group[]): Record<string, string> {
function isSwitchDisabled (hasUrlChanged: boolean, apiUrl: string, isUrlValid: boolean): boolean {
if (!hasUrlChanged) {
return true;
if (store.get('isLocalFork')) {
return false;
} else {
return true;
}
} else if (apiUrl.startsWith('light://')) {
return false;
} else if (isUrlValid) {
@ -130,6 +134,22 @@ function isSwitchDisabled (hasUrlChanged: boolean, apiUrl: string, isUrlValid: b
return true;
}
function isLocalForkDisabled (hasUrlChanged: boolean, apiUrl: string, isUrlValid: boolean): boolean {
if (!hasUrlChanged) {
if (store.get('isLocalFork')) {
return true;
} else {
return false;
}
} else if (apiUrl.startsWith('light://')) {
return true;
} else if (isUrlValid) {
return false;
}
return true;
}
function Endpoints ({ className = '', offset, onClose }: Props): React.ReactElement<Props> {
const { t } = useTranslation();
const linkOptions = createWsEndpoints(t);
@ -223,12 +243,32 @@ function Endpoints ({ className = '', offset, onClose }: Props): React.ReactElem
const _onApply = useCallback(
(): void => {
store.set('isLocalFork', false);
settings.set({ ...(settings.get()), apiUrl });
window.location.assign(`${window.location.origin}${window.location.pathname}?rpc=${encodeURIComponent(apiUrl)}${window.location.hash}`);
// window.location.reload();
if (!hasUrlChanged) {
window.location.reload();
}
onClose();
},
[apiUrl, onClose]
[apiUrl, onClose, hasUrlChanged]
);
const _onLocalFork = useCallback(
(): void => {
store.set('isLocalFork', true);
settings.set({ ...(settings.get()), apiUrl });
window.location.assign(`${window.location.origin}${window.location.pathname}?rpc=${encodeURIComponent(apiUrl)}${window.location.hash}`);
if (!hasUrlChanged) {
window.location.reload();
}
onClose();
},
[apiUrl, onClose, hasUrlChanged]
);
const _saveApiEndpoint = useCallback(
@ -249,6 +289,11 @@ function Endpoints ({ className = '', offset, onClose }: Props): React.ReactElem
[hasUrlChanged, apiUrl, isUrlValid]
);
const canLocalFork = useMemo(
() => isLocalForkDisabled(hasUrlChanged, apiUrl, isUrlValid),
[hasUrlChanged, apiUrl, isUrlValid]
);
return (
<StyledSidebar
button={
@ -263,6 +308,15 @@ function Endpoints ({ className = '', offset, onClose }: Props): React.ReactElem
offset={offset}
onClose={onClose}
position='left'
secondaryButton={
<Button
icon='code-fork'
isDisabled={canLocalFork}
label={t('Fork Locally')}
onClick={_onLocalFork}
tooltip='fork-locally-btn'
/>
}
sidebarRef={sidebarRef}
>
{groups.map((group, index): React.ReactNode => (

View File

@ -60,8 +60,8 @@ const StyledDiv = styled.div`
z-index: 500;
&.isBottom {
bottom: 0.75rem;
top: auto;
position: static;
z-index: 0;
}
&.isFull {

View File

@ -0,0 +1,40 @@
// Copyright 2017-2024 @polkadot/apps authors & contributors
// SPDX-License-Identifier: Apache-2.0
import React from 'react';
import { styled } from '@polkadot/react-components';
import DotApps from './DotApps.js';
import LocalFork from './LocalFork.js';
interface Props {
className?: string;
}
function Bottom ({ className }: Props): React.ReactElement<Props> | null {
return (
<StyledDiv className={className}>
<LocalFork />
<DotApps />
</StyledDiv>
);
}
const StyledDiv = styled.div`
position: fixed;
bottom: 0.75rem;
right: 0.75rem;
left: 0.75rem;
top: auto;
padding: 1rem;
z-index: 500;
display: flex;
flex-direction: column;
row-gap: 0.75rem;;
div.isInfo:before {
content: none;
}
`;
export default React.memo(Bottom);

View File

@ -0,0 +1,44 @@
// Copyright 2017-2024 @polkadot/apps authors & contributors
// SPDX-License-Identifier: Apache-2.0
import React from 'react';
import store from 'store';
import { useTranslation } from '../translate.js';
import BaseOverlay from './Base.js';
interface Props {
className?: string;
}
function LocalFork ({ className }: Props): React.ReactElement<Props> | null {
const { t } = useTranslation();
if (store.get('isLocalFork')) {
return (
<BaseOverlay
className={className}
icon='link'
isBottom
isFull
type='info'
>
<div>
{t('Local fork powered by ')}
<a
href='https://github.com/AcalaNetwork/chopsticks'
rel='noreferrer'
target='_blank'
>
Chopsticks
</a>
.
</div>
</BaseOverlay>
);
}
return null;
}
export default React.memo(LocalFork);

View File

@ -7,6 +7,7 @@ import type { ChainProperties, ChainType } from '@polkadot/types/interfaces';
import type { KeyringStore } from '@polkadot/ui-keyring/types';
import type { ApiProps, ApiState } from './types.js';
import { ChopsticksProvider, setStorage } from '@acala-network/chopsticks-core';
import * as Sc from '@substrate/connect';
import React, { useEffect, useMemo, useState } from 'react';
import store from 'store';
@ -232,11 +233,23 @@ async function getLightProvider (chain: string): Promise<ScProvider> {
async function createApi (apiUrl: string, signer: ApiSigner, onError: (error: unknown) => void): Promise<Record<string, Record<string, string>>> {
const types = getDevTypes();
const isLight = apiUrl.startsWith('light://');
let provider;
try {
const provider = isLight
? await getLightProvider(apiUrl.replace('light://', ''))
: new WsProvider(apiUrl);
if (isLight) {
provider = await getLightProvider(apiUrl.replace('light://', ''));
} else if (store.get('isLocalFork')) {
provider = await ChopsticksProvider.fromEndpoint(apiUrl);
await setStorage(provider.chain, {
System: {
Account: [
[['5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY'], { data: { free: 1000 * 1e12 }, providers: 1 }]
]
}
});
} else {
provider = new WsProvider(apiUrl);
}
statics.api = new ApiPromise({
provider,
@ -257,7 +270,7 @@ async function createApi (apiUrl: string, signer: ApiSigner, onError: (error: un
return types;
}
export function ApiCtxRoot ({ apiUrl, children, isElectron, store }: Props): React.ReactElement<Props> | null {
export function ApiCtxRoot ({ apiUrl, children, isElectron, store: keyringStore }: Props): React.ReactElement<Props> | null {
const { queuePayload, queueSetTxStatus } = useQueue();
const [state, setState] = useState<ApiState>(EMPTY_STATE);
const [isApiConnected, setIsApiConnected] = useState(false);
@ -303,15 +316,20 @@ export function ApiCtxRoot ({ apiUrl, children, isElectron, store }: Props): Rea
const urlIsEthereum = !!location.href.includes('keyring-type=ethereum');
loadOnReady(statics.api, apiEndpoint, injectedPromise, store, types, urlIsEthereum)
loadOnReady(statics.api, apiEndpoint, injectedPromise, keyringStore, types, urlIsEthereum)
.then(setState)
.catch(onError);
});
if (store.get('isLocalFork')) {
statics.api.connect()
.catch(onError);
}
setIsApiInitialized(true);
})
.catch(onError);
}, [apiEndpoint, apiUrl, queuePayload, queueSetTxStatus, store]);
}, [apiEndpoint, apiUrl, queuePayload, queueSetTxStatus, keyringStore]);
if (!value.isApiInitialized) {
return null;

View File

@ -8,6 +8,7 @@ import { styled } from './styled.js';
interface Props {
button?: React.ReactNode;
secondaryButton?: React.ReactNode;
children: React.ReactNode;
className?: string;
dataTestId?: string;
@ -17,7 +18,7 @@ interface Props {
sidebarRef: React.RefObject<HTMLDivElement>;
}
function Sidebar ({ button, children, className = '', dataTestId = '', onClose, position, sidebarRef }: Props): React.ReactElement<Props> {
function Sidebar ({ button, children, className = '', dataTestId = '', onClose, position, secondaryButton, sidebarRef }: Props): React.ReactElement<Props> {
return (
<StyledDiv
className={`${className} ui--Sidebar ${position}Position`}
@ -26,6 +27,7 @@ function Sidebar ({ button, children, className = '', dataTestId = '', onClose,
>
<Button.Group className='ui--Sidebar-buttons'>
{button}
{secondaryButton}
<Button
dataTestId='close-sidebar-button'
icon='times'

271
yarn.lock
View File

@ -19,6 +19,39 @@ __metadata:
languageName: node
linkType: hard
"@acala-network/chopsticks-core@npm:^0.9.8":
version: 0.9.8
resolution: "@acala-network/chopsticks-core@npm:0.9.8"
dependencies:
"@acala-network/chopsticks-executor": "npm:0.9.8"
"@polkadot/rpc-provider": "npm:^10.11.2"
"@polkadot/types": "npm:^10.11.2"
"@polkadot/types-codec": "npm:^10.11.2"
"@polkadot/types-known": "npm:^10.11.2"
"@polkadot/util": "npm:^12.6.2"
"@polkadot/util-crypto": "npm:^12.6.2"
comlink: "npm:^4.4.1"
eventemitter3: "npm:^5.0.1"
lodash: "npm:^4.17.21"
lru-cache: "npm:^10.1.0"
pino: "npm:^8.17.2"
pino-pretty: "npm:^10.3.1"
rxjs: "npm:^7.8.1"
zod: "npm:^3.22.4"
checksum: 10/a65385f5e3bfb67675e16d7ff51d3d3694daffd6c171e6e7b5b1e1834f63df56d754a628c0d2da26c79afd712d29e6e5c4e1b7850c16c73a90acac1f1b13f313
languageName: node
linkType: hard
"@acala-network/chopsticks-executor@npm:0.9.8":
version: 0.9.8
resolution: "@acala-network/chopsticks-executor@npm:0.9.8"
dependencies:
"@polkadot/util": "npm:^12.6.2"
"@polkadot/wasm-util": "npm:^7.3.2"
checksum: 10/dd267fdf49fab79b2a55f43fd279ab0cb1795ff41ef63d61081c667d7dd788882636cee0ea72f50e18f9b13ba5aaeaf76f02a611f73c6719fc8ac524c278fcb2
languageName: node
linkType: hard
"@acala-network/type-definitions@npm:5.1.2":
version: 5.1.2
resolution: "@acala-network/type-definitions@npm:5.1.2"
@ -1915,6 +1948,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@polkadot/apps@workspace:packages/apps"
dependencies:
"@acala-network/chopsticks-core": "npm:^0.9.8"
"@polkadot/apps-config": "npm:^0.133.2-96-x"
"@polkadot/apps-routing": "npm:^0.133.2-96-x"
"@polkadot/dev": "npm:^0.78.4"
@ -4377,6 +4411,15 @@ __metadata:
languageName: node
linkType: hard
"abort-controller@npm:^3.0.0":
version: 3.0.0
resolution: "abort-controller@npm:3.0.0"
dependencies:
event-target-shim: "npm:^5.0.0"
checksum: 10/ed84af329f1828327798229578b4fe03a4dd2596ba304083ebd2252666bdc1d7647d66d0b18704477e1f8aa315f055944aa6e859afebd341f12d0a53c37b4b40
languageName: node
linkType: hard
"abortcontroller-polyfill@npm:^1.7.5":
version: 1.7.5
resolution: "abortcontroller-polyfill@npm:1.7.5"
@ -5080,6 +5123,13 @@ __metadata:
languageName: node
linkType: hard
"atomic-sleep@npm:^1.0.0":
version: 1.0.0
resolution: "atomic-sleep@npm:1.0.0"
checksum: 10/3ab6d2cf46b31394b4607e935ec5c1c3c4f60f3e30f0913d35ea74b51b3585e84f590d09e58067f11762eec71c87d25314ce859030983dc0e4397eed21daa12e
languageName: node
linkType: hard
"attr-accept@npm:^2.2.2":
version: 2.2.2
resolution: "attr-accept@npm:2.2.2"
@ -6249,6 +6299,13 @@ __metadata:
languageName: node
linkType: hard
"colorette@npm:^2.0.7":
version: 2.0.20
resolution: "colorette@npm:2.0.20"
checksum: 10/0b8de48bfa5d10afc160b8eaa2b9938f34a892530b2f7d7897e0458d9535a066e3998b49da9d21161c78225b272df19ae3a64d6df28b4c9734c0e55bbd02406f
languageName: node
linkType: hard
"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6":
version: 1.0.8
resolution: "combined-stream@npm:1.0.8"
@ -6258,6 +6315,13 @@ __metadata:
languageName: node
linkType: hard
"comlink@npm:^4.4.1":
version: 4.4.1
resolution: "comlink@npm:4.4.1"
checksum: 10/3d953e987874bf0d60c02a3dd96e9f661141e58709eaab82097369c585382935651ce61f004e7bb1a5eb868ca8d8734d1cec885965ae53c56567d91b9539f2d0
languageName: node
linkType: hard
"comma-separated-tokens@npm:^2.0.0":
version: 2.0.2
resolution: "comma-separated-tokens@npm:2.0.2"
@ -6824,6 +6888,13 @@ __metadata:
languageName: node
linkType: hard
"dateformat@npm:^4.6.3":
version: 4.6.3
resolution: "dateformat@npm:4.6.3"
checksum: 10/5c149c91bf9ce2142c89f84eee4c585f0cb1f6faf2536b1af89873f862666a28529d1ccafc44750aa01384da2197c4f76f4e149a3cc0c1cb2c46f5cc45f2bcb5
languageName: node
linkType: hard
"debug@npm:2.6.9, debug@npm:^2.2.0":
version: 2.6.9
resolution: "debug@npm:2.6.9"
@ -8679,6 +8750,13 @@ __metadata:
languageName: node
linkType: hard
"event-target-shim@npm:^5.0.0":
version: 5.0.1
resolution: "event-target-shim@npm:5.0.1"
checksum: 10/49ff46c3a7facbad3decb31f597063e761785d7fdb3920d4989d7b08c97a61c2f51183e2f3a03130c9088df88d4b489b1b79ab632219901f184f85158508f4c8
languageName: node
linkType: hard
"eventemitter3@npm:4.0.4":
version: 4.0.4
resolution: "eventemitter3@npm:4.0.4"
@ -8873,6 +8951,13 @@ __metadata:
languageName: node
linkType: hard
"fast-copy@npm:^3.0.0":
version: 3.0.1
resolution: "fast-copy@npm:3.0.1"
checksum: 10/2f655f1e84440f990cddf7895f0acce38b2eb090a27dc0f97f1654cd6f2e38f67d9603471856c2af13e0bfbdf04c2c0b8d446fee1dd1f6f485992e4cc4693c7a
languageName: node
linkType: hard
"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3":
version: 3.1.3
resolution: "fast-deep-equal@npm:3.1.3"
@ -8914,6 +8999,20 @@ __metadata:
languageName: node
linkType: hard
"fast-redact@npm:^3.1.1":
version: 3.3.0
resolution: "fast-redact@npm:3.3.0"
checksum: 10/a69c5cb52396eafc4f466f46864406cbd4a6ead6782caf74750ce817794829048baaa933ad98543e744dd54ffb4cddff71f3e75e465a86e3d887894e281ec154
languageName: node
linkType: hard
"fast-safe-stringify@npm:^2.1.1":
version: 2.1.1
resolution: "fast-safe-stringify@npm:2.1.1"
checksum: 10/dc1f063c2c6ac9533aee14d406441f86783a8984b2ca09b19c2fe281f9ff59d315298bc7bc22fd1f83d26fe19ef2f20e2ddb68e96b15040292e555c5ced0c1e4
languageName: node
linkType: hard
"fast-sha256@npm:^1.3.0":
version: 1.3.0
resolution: "fast-sha256@npm:1.3.0"
@ -10212,6 +10311,13 @@ __metadata:
languageName: node
linkType: hard
"help-me@npm:^5.0.0":
version: 5.0.0
resolution: "help-me@npm:5.0.0"
checksum: 10/5f99bd91dae93d02867175c3856c561d7e3a24f16999b08f5fc79689044b938d7ed58457f4d8c8744c01403e6e0470b7896baa344d112b2355842fd935a75d69
languageName: node
linkType: hard
"highlight.js@npm:^9.3.0":
version: 9.18.5
resolution: "highlight.js@npm:9.18.5"
@ -11564,6 +11670,13 @@ __metadata:
languageName: node
linkType: hard
"joycon@npm:^3.1.1":
version: 3.1.1
resolution: "joycon@npm:3.1.1"
checksum: 10/4b36e3479144ec196425f46b3618f8a96ce7e1b658f091a309cd4906215f5b7a402d7df331a3e0a09681381a658d0c5f039cb3cf6907e0a1e17ed847f5d37775
languageName: node
linkType: hard
"jquery@npm:x.*":
version: 3.5.1
resolution: "jquery@npm:3.5.1"
@ -12105,6 +12218,13 @@ __metadata:
languageName: node
linkType: hard
"lru-cache@npm:^10.1.0":
version: 10.2.0
resolution: "lru-cache@npm:10.2.0"
checksum: 10/502ec42c3309c0eae1ce41afca471f831c278566d45a5273a0c51102dee31e0e250a62fa9029c3370988df33a14188a38e682c16143b794de78668de3643e302
languageName: node
linkType: hard
"lru-cache@npm:^6.0.0":
version: 6.0.0
resolution: "lru-cache@npm:6.0.0"
@ -13602,6 +13722,13 @@ __metadata:
languageName: node
linkType: hard
"on-exit-leak-free@npm:^2.1.0":
version: 2.1.2
resolution: "on-exit-leak-free@npm:2.1.2"
checksum: 10/f7b4b7200026a08f6e4a17ba6d72e6c5cbb41789ed9cf7deaf9d9e322872c7dc5a7898549a894651ee0ee9ae635d34a678115bf8acdfba8ebd2ba2af688b563c
languageName: node
linkType: hard
"on-finished@npm:~2.3.0":
version: 2.3.0
resolution: "on-finished@npm:2.3.0"
@ -14075,6 +14202,68 @@ __metadata:
languageName: node
linkType: hard
"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:v1.1.0":
version: 1.1.0
resolution: "pino-abstract-transport@npm:1.1.0"
dependencies:
readable-stream: "npm:^4.0.0"
split2: "npm:^4.0.0"
checksum: 10/39b4496c9e4289e8d44a1d01adfa8dfeebb374e14b7a6451a4f3713561aeb9e181c64ff0272921667abcb95aceb312ab2761b82e253db23a456ab3dd35a42675
languageName: node
linkType: hard
"pino-pretty@npm:^10.3.1":
version: 10.3.1
resolution: "pino-pretty@npm:10.3.1"
dependencies:
colorette: "npm:^2.0.7"
dateformat: "npm:^4.6.3"
fast-copy: "npm:^3.0.0"
fast-safe-stringify: "npm:^2.1.1"
help-me: "npm:^5.0.0"
joycon: "npm:^3.1.1"
minimist: "npm:^1.2.6"
on-exit-leak-free: "npm:^2.1.0"
pino-abstract-transport: "npm:^1.0.0"
pump: "npm:^3.0.0"
readable-stream: "npm:^4.0.0"
secure-json-parse: "npm:^2.4.0"
sonic-boom: "npm:^3.0.0"
strip-json-comments: "npm:^3.1.1"
bin:
pino-pretty: bin.js
checksum: 10/4284f125f7e8a5a10e856c8fd591ba34c30c0a0071a0b265a9eda43c3e447ba11d40b06cc67108675586358a5d1213a6ac3a92f6abd2896abfbab9a5b4c17072
languageName: node
linkType: hard
"pino-std-serializers@npm:^6.0.0":
version: 6.2.2
resolution: "pino-std-serializers@npm:6.2.2"
checksum: 10/a00cdff4e1fbc206da9bed047e6dc400b065f43e8b4cef1635b0192feab0e8f932cdeb0faaa38a5d93d2e777ba4cda939c2ed4c1a70f6839ff25f9aef97c27ff
languageName: node
linkType: hard
"pino@npm:^8.17.2":
version: 8.19.0
resolution: "pino@npm:8.19.0"
dependencies:
atomic-sleep: "npm:^1.0.0"
fast-redact: "npm:^3.1.1"
on-exit-leak-free: "npm:^2.1.0"
pino-abstract-transport: "npm:v1.1.0"
pino-std-serializers: "npm:^6.0.0"
process-warning: "npm:^3.0.0"
quick-format-unescaped: "npm:^4.0.3"
real-require: "npm:^0.2.0"
safe-stable-stringify: "npm:^2.3.1"
sonic-boom: "npm:^3.7.0"
thread-stream: "npm:^2.0.0"
bin:
pino: bin.js
checksum: 10/c98e8bedb7c9eca5c0e75c2dd910a58b0e470da282c5a4787873a591666cc7cce33561d9ba6d6a20cf6bc4bc8d15b7db84cf6156f262081a5c6b8de134285789
languageName: node
linkType: hard
"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0":
version: 4.2.0
resolution: "pkg-dir@npm:4.2.0"
@ -14423,6 +14612,13 @@ __metadata:
languageName: node
linkType: hard
"process-warning@npm:^3.0.0":
version: 3.0.0
resolution: "process-warning@npm:3.0.0"
checksum: 10/2d82fa641e50a5789eaf0f2b33453760996e373d4591aac576a22d696186ab7e240a0592db86c264d4f28a46c2abbe9b94689752017db7dadc90f169f12b0924
languageName: node
linkType: hard
"process@npm:^0.11.10":
version: 0.11.10
resolution: "process@npm:0.11.10"
@ -14648,6 +14844,13 @@ __metadata:
languageName: node
linkType: hard
"quick-format-unescaped@npm:^4.0.3":
version: 4.0.4
resolution: "quick-format-unescaped@npm:4.0.4"
checksum: 10/591eca457509a99368b623db05248c1193aa3cedafc9a077d7acab09495db1231017ba3ad1b5386e5633271edd0a03b312d8640a59ee585b8516a42e15438aa7
languageName: node
linkType: hard
"quick-lru@npm:^4.0.1":
version: 4.0.1
resolution: "quick-lru@npm:4.0.1"
@ -15024,6 +15227,19 @@ __metadata:
languageName: node
linkType: hard
"readable-stream@npm:^4.0.0":
version: 4.5.2
resolution: "readable-stream@npm:4.5.2"
dependencies:
abort-controller: "npm:^3.0.0"
buffer: "npm:^6.0.3"
events: "npm:^3.3.0"
process: "npm:^0.11.10"
string_decoder: "npm:^1.3.0"
checksum: 10/01b128a559c5fd76a898495f858cf0a8839f135e6a69e3409f986e88460134791657eb46a2ff16826f331682a3c4d0c5a75cef5e52ef259711021ba52b1c2e82
languageName: node
linkType: hard
"readdir-glob@npm:^1.1.2":
version: 1.1.3
resolution: "readdir-glob@npm:1.1.3"
@ -15042,6 +15258,13 @@ __metadata:
languageName: node
linkType: hard
"real-require@npm:^0.2.0":
version: 0.2.0
resolution: "real-require@npm:0.2.0"
checksum: 10/ddf44ee76301c774e9c9f2826da8a3c5c9f8fc87310f4a364e803ef003aa1a43c378b4323051ced212097fff1af459070f4499338b36a7469df1d4f7e8c0ba4c
languageName: node
linkType: hard
"recast@npm:^0.11.17":
version: 0.11.23
resolution: "recast@npm:0.11.23"
@ -15670,6 +15893,13 @@ __metadata:
languageName: node
linkType: hard
"safe-stable-stringify@npm:^2.3.1":
version: 2.4.3
resolution: "safe-stable-stringify@npm:2.4.3"
checksum: 10/a6c192bbefe47770a11072b51b500ed29be7b1c15095371c1ee1dc13e45ce48ee3c80330214c56764d006c485b88bd0b24940d868948170dddc16eed312582d8
languageName: node
linkType: hard
"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0":
version: 2.1.2
resolution: "safer-buffer@npm:2.1.2"
@ -15788,6 +16018,13 @@ __metadata:
languageName: node
linkType: hard
"secure-json-parse@npm:^2.4.0":
version: 2.7.0
resolution: "secure-json-parse@npm:2.7.0"
checksum: 10/974386587060b6fc5b1ac06481b2f9dbbb0d63c860cc73dc7533f27835fdb67b0ef08762dbfef25625c15bc0a0c366899e00076cb0d556af06b71e22f1dede4c
languageName: node
linkType: hard
"select-hose@npm:^2.0.0":
version: 2.0.0
resolution: "select-hose@npm:2.0.0"
@ -16196,6 +16433,15 @@ __metadata:
languageName: node
linkType: hard
"sonic-boom@npm:^3.0.0, sonic-boom@npm:^3.7.0":
version: 3.8.0
resolution: "sonic-boom@npm:3.8.0"
dependencies:
atomic-sleep: "npm:^1.0.0"
checksum: 10/470a82cb1af3ab99fcd3003bbecb2ce79a6b243d0f6012c59e5f567f71cbe039c8cd810752748b5820ee20d72c8da81aa298e510eec9e41a4ca05c7f419825ff
languageName: node
linkType: hard
"sort-keys@npm:^4.0.0":
version: 4.2.0
resolution: "sort-keys@npm:4.2.0"
@ -16385,6 +16631,13 @@ __metadata:
languageName: node
linkType: hard
"split2@npm:^4.0.0":
version: 4.2.0
resolution: "split2@npm:4.2.0"
checksum: 10/09bbefc11bcf03f044584c9764cd31a252d8e52cea29130950b26161287c11f519807c5e54bd9e5804c713b79c02cefe6a98f4688630993386be353e03f534ab
languageName: node
linkType: hard
"sprintf-js@npm:^1.1.2":
version: 1.1.2
resolution: "sprintf-js@npm:1.1.2"
@ -16657,7 +16910,7 @@ __metadata:
languageName: node
linkType: hard
"string_decoder@npm:^1.1.1":
"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0":
version: 1.3.0
resolution: "string_decoder@npm:1.3.0"
dependencies:
@ -17106,6 +17359,15 @@ __metadata:
languageName: node
linkType: hard
"thread-stream@npm:^2.0.0":
version: 2.4.1
resolution: "thread-stream@npm:2.4.1"
dependencies:
real-require: "npm:^0.2.0"
checksum: 10/baac5bf555912f216a2494bf3f66377733a843306cddd233b1c5ad63084307266f61af35d6122e3936c657836d5db4a14da34300cd25930e013943b807a29c9b
languageName: node
linkType: hard
"through2@npm:^2.0.1, through2@npm:~2.0.3":
version: 2.0.5
resolution: "through2@npm:2.0.5"
@ -19066,6 +19328,13 @@ __metadata:
languageName: node
linkType: hard
"zod@npm:^3.22.4":
version: 3.22.4
resolution: "zod@npm:3.22.4"
checksum: 10/73622ca36a916f785cf528fe612a884b3e0f183dbe6b33365a7d0fc92abdbedf7804c5e2bd8df0a278e1472106d46674281397a3dd800fa9031dc3429758c6ac
languageName: node
linkType: hard
"zwitch@npm:^2.0.0":
version: 2.0.2
resolution: "zwitch@npm:2.0.2"